{"id":26272,"date":"2025-08-25T18:11:23","date_gmt":"2025-08-25T21:11:23","guid":{"rendered":"https:\/\/maurinsoft.com.br\/wp\/?p=26272"},"modified":"2025-08-25T18:42:34","modified_gmt":"2025-08-25T21:42:34","slug":"trabalho-de-programacao-em-python","status":"publish","type":"post","link":"https:\/\/maurinsoft.com.br\/wp\/trabalho-de-programacao-em-python\/","title":{"rendered":"Trabalho de Programa\u00e7\u00e3o em Python"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"275\" height=\"183\" src=\"https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-11.png\" alt=\"\" class=\"wp-image-26273\" srcset=\"https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-11.png 275w, https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-11-18x12.png 18w\" sizes=\"auto, (max-width: 275px) 100vw, 275px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Objetivo do trabalho:<\/h2>\n\n\n\n<p>O objetivo deste trabalho \u00e9 criar um arquivo para impress\u00e3o 3D.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vis\u00e3o sobre o projeto e informa\u00e7\u00f5es sobre o ambiente<\/h2>\n\n\n\n<p>\ud83d\udfe6 O que \u00e9 CNC?<\/p>\n\n\n\n<p>\u2728 CNC significa <strong>Controle Num\u00e9rico Computadorizado<\/strong> (<em>Computer Numerical Control<\/em>).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00c9 a <strong>automa\u00e7\u00e3o de m\u00e1quinas<\/strong> (fresadoras, tornos, impressoras 3D, cortadoras a laser, etc.).<\/li>\n\n\n\n<li>No lugar de um operador manual girando manivelas, o <strong>computador controla os motores<\/strong>.<\/li>\n\n\n\n<li>O programa informa <strong>onde a ferramenta deve ir<\/strong>, <strong>a velocidade<\/strong> e <strong>o que fazer<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p>\u27a1\ufe0f Resultado: pe\u00e7as produzidas com <strong>mais precis\u00e3o, repetibilidade e velocidade<\/strong>.<\/p>\n\n\n\n<p><strong>Exemplos de m\u00e1quinas CNC:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fresadora CNC (corta metal ou madeira).<\/li>\n\n\n\n<li>Torno CNC (pe\u00e7as cil\u00edndricas).<\/li>\n\n\n\n<li>Impressora 3D (constr\u00f3i objetos em camadas).<\/li>\n\n\n\n<li>Router CNC (corte em madeira e acr\u00edlico).<\/li>\n\n\n\n<li>Laser CNC (grava\u00e7\u00e3o\/corte de chapas).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 O que \u00e9 G-code?<\/h2>\n\n\n\n<p>\u2728 O <strong>G-code<\/strong> \u00e9 a <strong>linguagem usada pelas m\u00e1quinas CNC<\/strong>.<\/p>\n\n\n\n<p>Cada linha \u00e9 uma <strong>instru\u00e7\u00e3o<\/strong> que a m\u00e1quina entende.<\/p>\n\n\n\n<p>\u00c9 formado por <strong>c\u00f3digos de duas letras<\/strong> (como <code>G1<\/code>, <code>M104<\/code>) seguidos de <strong>n\u00fameros<\/strong> (coordenadas, temperaturas, velocidades).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 Como nasce uma pe\u00e7a CNC<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>O engenheiro desenha em CAD (3D).<\/li>\n\n\n\n<li>O software CAM (fatiador, slicer, etc.) gera o <strong>G-code<\/strong>.<\/li>\n\n\n\n<li>O G-code \u00e9 enviado para a m\u00e1quina CNC.<\/li>\n\n\n\n<li>A m\u00e1quina executa linha a linha e cria a pe\u00e7a.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 Por que \u00e9 importante aprender?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>O CNC est\u00e1 presente em <strong>ind\u00fastria, medicina, aeron\u00e1utica, prototipagem e design<\/strong>.<\/li>\n\n\n\n<li>Entender G-code \u00e9 como entender a \u201cgram\u00e1tica\u201d das m\u00e1quinas.<\/li>\n\n\n\n<li>Mesmo que existam softwares autom\u00e1ticos, saber G-code permite:\n<ul class=\"wp-block-list\">\n<li><strong>Ajustar<\/strong> pe\u00e7as.<\/li>\n\n\n\n<li><strong>Corrigir<\/strong> erros.<\/li>\n\n\n\n<li><strong>Criar<\/strong> trajet\u00f3rias personalizadas.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Qual o GCode da Ender-3<\/h2>\n\n\n\n<p>O <strong>padr\u00e3o de G-code da Ender-3 \u00e9 o Marlin\/RepRap flavor<\/strong>, n\u00e3o FANUC, Mitsubishi ou Siemens. Eles s\u00e3o todos \u201cG-code\u201d, mas os <strong>dialetos<\/strong> s\u00e3o diferentes.<\/p>\n\n\n\n<p>\ud83d\udd39 <strong>Diferen\u00e7a principal<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A <strong>Ender-3<\/strong> segue o padr\u00e3o <strong>Marlin\/RepRap (open-source)<\/strong> \u2192 voltado para impressoras 3D, bem simplificado.<\/li>\n\n\n\n<li>J\u00e1 os <strong>CNC industriais<\/strong> (FANUC, Mitsubishi, Siemens) usam <strong>dialetos diferentes de ISO G-code<\/strong>, com foco em fresadoras, tornos e centros de usinagem, que possuem muitos recursos que uma impressora 3D n\u00e3o precisa (offsets, ciclos fixos, compensa\u00e7\u00f5es de ferramenta, etc).<\/li>\n<\/ul>\n\n\n\n<p>\ud83d\udccc Comparativo resumido:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Sistema<\/th><th>Padr\u00e3o\/Dialeto G-code<\/th><th>Usado em<\/th><\/tr><\/thead><tbody><tr><td><strong>Ender-3<\/strong><\/td><td><strong>Marlin\/RepRap<\/strong> (G0, G1, G28, M104&#8230;)<\/td><td>Impressoras 3D<\/td><\/tr><tr><td><strong>FANUC<\/strong><\/td><td>ISO G-code (muitos ciclos fixos, G71, G81, etc)<\/td><td>CNC industrial (torno\/fresa)<\/td><\/tr><tr><td><strong>Mitsubishi<\/strong><\/td><td>Pr\u00f3prio dialeto ISO compat\u00edvel, similar ao FANUC<\/td><td>CNC industrial<\/td><\/tr><tr><td><strong>Siemens<\/strong><\/td><td>Sinumerik (ISO G-code, mas com macros pr\u00f3prios e ciclos especiais)<\/td><td>CNC industrial<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Comandos GCode b\u00e1sico.<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 <strong>Configura\u00e7\u00e3o inicial<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>G21<\/code><\/strong> \u2192 Define as <strong>unidades em mil\u00edmetros<\/strong> (a Ender-3 trabalha sempre em mm).<\/li>\n\n\n\n<li><strong><code>G90<\/code><\/strong> \u2192 Define o <strong>modo absoluto de posicionamento<\/strong> (as coordenadas X\/Y\/Z s\u00e3o relativas ao 0,0 da mesa).<\/li>\n\n\n\n<li><strong><code>M82<\/code><\/strong> \u2192 Define a <strong>extrus\u00e3o em modo absoluto<\/strong> (valores de E sempre crescem).<\/li>\n\n\n\n<li><strong><code>G28<\/code><\/strong> \u2192 Faz o <strong>homing<\/strong> de todos os eixos (leva X, Y e Z at\u00e9 os switches de fim de curso).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 <strong>Aquecimento (opcional)<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>M104 S200<\/code><\/strong> \u2192 Seta a temperatura do <strong>bico em 200 \u00b0C<\/strong>, mas <strong>n\u00e3o espera<\/strong> aquecer.<\/li>\n\n\n\n<li><strong><code>M140 S60<\/code><\/strong> \u2192 Seta a temperatura da <strong>mesa em 60 \u00b0C<\/strong>, mas tamb\u00e9m <strong>n\u00e3o espera<\/strong>.<\/li>\n\n\n\n<li><strong><code>M109 S200<\/code><\/strong> \u2192 Define o bico em 200 \u00b0C <strong>e espera<\/strong> at\u00e9 atingir antes de continuar.<\/li>\n\n\n\n<li><strong><code>M190 S60<\/code><\/strong> \u2192 Define a mesa em 60 \u00b0C <strong>e espera<\/strong> at\u00e9 atingir.<\/li>\n<\/ul>\n\n\n\n<p><em>(Esses eu deixei comentados, caso queira imprimir de fato, n\u00e3o s\u00f3 movimentar.)<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 <strong>Movimenta\u00e7\u00e3o inicial<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>G1 Z0.20 F1200<\/code><\/strong> \u2192 Move o bico para a altura de <strong>0.20 mm<\/strong> acima da mesa, na velocidade de <strong>1200 mm\/min<\/strong>.<\/li>\n\n\n\n<li><strong><code>G1 X110 Y110 F6000<\/code><\/strong> \u2192 Leva o bico at\u00e9 o <strong>centro da mesa<\/strong> (coordenada X110 Y110), r\u00e1pido.<\/li>\n\n\n\n<li><strong><code>G1 X130 Y110 F3000<\/code><\/strong> \u2192 Move at\u00e9 a <strong>posi\u00e7\u00e3o inicial do c\u00edrculo<\/strong> (20 mm \u00e0 direita do centro).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 <strong>Configura\u00e7\u00e3o de extrus\u00e3o<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>M83<\/code><\/strong> \u2192 Define a <strong>extrus\u00e3o como relativa<\/strong> (cada valor de E representa apenas o incremento de filamento).<\/li>\n\n\n\n<li><strong><code>G92 E0<\/code><\/strong> \u2192 Zera o <strong>contador de extrus\u00e3o<\/strong> (dizendo ao firmware que estamos em E=0).<\/li>\n\n\n\n<li><strong><code>G1 F1200<\/code><\/strong> \u2192 Define a <strong>velocidade padr\u00e3o (feedrate)<\/strong> de 1200 mm\/min para os pr\u00f3ximos movimentos.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 <strong>Desenhando o c\u00edrculo<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>G2<\/code><\/strong> \u2192 Faz um movimento circular <strong>hor\u00e1rio<\/strong> (clockwise).<\/li>\n\n\n\n<li><strong><code>X... Y...<\/code><\/strong> \u2192 Define o <strong>ponto final do arco<\/strong>.<\/li>\n\n\n\n<li><strong><code>I... J...<\/code><\/strong> \u2192 Define o <strong>centro do arco<\/strong> em rela\u00e7\u00e3o ao ponto inicial.<\/li>\n\n\n\n<li><strong><code>E...<\/code><\/strong> \u2192 Quantidade de <strong>filamento extrudido<\/strong> durante o arco.<\/li>\n<\/ul>\n\n\n\n<p>No c\u00f3digo:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code>G2 X90 Y110 I-20 J0 E2.10<\/code><\/strong> \u2192 Desenha meia-volta (da direita pro lado esquerdo do c\u00edrculo), extrudindo 2.1 mm de filamento.<\/li>\n\n\n\n<li><strong><code>G2 X130 Y110 I20 J0 E2.10<\/code><\/strong> \u2192 Fecha a volta (do lado esquerdo de volta \u00e0 direita), extrudindo mais 2.1 mm.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 <strong>Finaliza\u00e7\u00e3o<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>G1 Z5 F3000<\/code><\/strong> \u2192 Levanta o bico 5 mm para n\u00e3o arranhar a pe\u00e7a.<\/li>\n\n\n\n<li><strong><code>M84<\/code><\/strong> \u2192 Desliga os motores (desenergiza os steppers).<\/li>\n<\/ul>\n\n\n\n<p>Exemplo de C\u00f3digo na Ender-3<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>; ===== C\u00edrculo Ender-3 (Marlin\/RepRap) =====\n; Raio: 20 mm | Centro: X110 Y110 | Camada: 0.20 mm | Largura: 0.40 mm\n; Filamento: 1.75 mm | Extrus\u00e3o total aprox: 4.20 mm\n\nG21                 ; mm\nG90                 ; coordenadas absolutas\nM82                 ; extrus\u00e3o absoluta por padr\u00e3o\nG28                 ; home X Y Z\n\n; (opcional) aquecer\n; M104 S200         ; bico 200\u00b0C\n; M140 S60          ; mesa 60\u00b0C\n; M109 S200         ; aguarda bico\n; M190 S60          ; aguarda mesa\n\nG1 Z0.20 F1200      ; altura de primeira camada (ajuste se quiser)\nG1 X110 Y110 F6000  ; vai ao centro da mesa\nG1 X130 Y110 F3000  ; vai ao ponto inicial do c\u00edrculo (raio 20 mm \u00e0 direita)\n\nM83                 ; extrus\u00e3o relativa\nG92 E0              ; zera extrusor\nG1 F1200            ; feed para impress\u00e3o\n\n; C\u00edrculo completo em duas meias-voltas (G2 = hor\u00e1rio)\n; Meia-volta 1: de (130,110) at\u00e9 (90,110) com centro em (110,110) =&gt; I=-20 J=0\nG2 X90  Y110 I-20 J0 E2.10\n\n; Meia-volta 2: de (90,110) at\u00e9 (130,110) com centro em (110,110) =&gt; I=+20 J=0\nG2 X130 Y110 I20  J0 E2.10\n\n; fim\nG1 Z5 F3000         ; levanta\nM84                 ; desativa motores\n; ============================================\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Visualizando o arquivo<\/h2>\n\n\n\n<p>O usu\u00e1rio pode verificar o arquivo, copiando o mesmo para o site:<\/p>\n\n\n\n<p><a href=\"https:\/\/ncviewer.com\">https:\/\/ncviewer.com<\/a><\/p>\n\n\n\n<p>Click em Novo arquivo, e copie o fonte <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1898\" height=\"983\" src=\"https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-12.png\" alt=\"\" class=\"wp-image-26278\" srcset=\"https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-12.png 1898w, https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-12-300x155.png 300w, https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-12-768x398.png 768w, https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-12-1536x796.png 1536w, https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-12-18x9.png 18w, https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-12-1320x684.png 1320w\" sizes=\"auto, (max-width: 1898px) 100vw, 1898px\" \/><\/figure>\n\n\n\n<p>Neste exemplo criamos apenas uma camada. Onde inclu\u00edmos e verificamos o desenho.<\/p>\n\n\n\n<p>Agora iremos mostrar como fica o gcode com multiplas camadas.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>; ===== Ender-3 | Cilindro oco (raio 10mm, altura 5mm, camada 0.20mm) =====\n; Centro: X110 Y110 | Bico: 0.4 | Parede \u2248 0.8 mm (2 voltas por camada)\n; Material sugerido: PLA (200\/60). Ajuste se necess\u00e1rio.\n\nG21                 ; mm\nG90                 ; posicoes absolutas em X\/Y\/Z\nM82                 ; extrusao absoluta por padrao\nG28                 ; homing\n\n; --- Aquecimento (descomente para imprimir de verdade) ---\n; M104 S200          ; bico 200\u00b0C (nao espera)\n; M140 S60           ; mesa 60\u00b0C (nao espera)\n; M109 S200          ; bico 200\u00b0C (espera)\n; M190 S60           ; mesa 60\u00b0C (espera)\n\nG0 Z0.20 F1200      ; primeira camada\nG0 X110 Y110 F6000  ; vai ao centro da mesa\nG0 X120 Y110 F6000  ; ponto inicial do circulo (raio 10 mm para a direita)\n\nM83                 ; extrusao relativa (E incrementa por trecho)\nG92 E0              ; zera extrusor\nG1 F1200            ; feed de impressao (~20 mm\/s)\n\n; Observacao: cada meia-volta extrude ~1.05 mm (estimado p\/ bico 0.4, camada 0.2)\n\n; ---------------------- Camada 1 (Z=0.20) ----------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z0.40 F1200\n\n; ---------------------- Camada 2 (Z=0.40) ----------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z0.60 F1200\n\n; ---------------------- Camada 3 (Z=0.60) ----------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z0.80 F1200\n\n; ---------------------- Camada 4 (Z=0.80) ----------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z1.00 F1200\n\n; ---------------------- Camada 5 (Z=1.00) ----------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z1.20 F1200\n\n; ---------------------- Camada 6 (Z=1.20) ----------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z1.40 F1200\n\n; ---------------------- Camada 7 (Z=1.40) ----------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z1.60 F1200\n\n; ---------------------- Camada 8 (Z=1.60) ----------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z1.80 F1200\n\n; ---------------------- Camada 9 (Z=1.80) ----------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z2.00 F1200\n\n; ---------------------- Camada 10 (Z=2.00) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z2.20 F1200\n\n; ---------------------- Camada 11 (Z=2.20) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z2.40 F1200\n\n; ---------------------- Camada 12 (Z=2.40) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z2.60 F1200\n\n; ---------------------- Camada 13 (Z=2.60) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z2.80 F1200\n\n; ---------------------- Camada 14 (Z=2.80) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z3.00 F1200\n\n; ---------------------- Camada 15 (Z=3.00) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z3.20 F1200\n\n; ---------------------- Camada 16 (Z=3.20) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z3.40 F1200\n\n; ---------------------- Camada 17 (Z=3.40) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z3.60 F1200\n\n; ---------------------- Camada 18 (Z=3.60) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z3.80 F1200\n\n; ---------------------- Camada 19 (Z=3.80) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z4.00 F1200\n\n; ---------------------- Camada 20 (Z=4.00) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z4.20 F1200\n\n; ---------------------- Camada 21 (Z=4.20) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z4.40 F1200\n\n; ---------------------- Camada 22 (Z=4.40) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z4.60 F1200\n\n; ---------------------- Camada 23 (Z=4.60) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z4.80 F1200\n\n; ---------------------- Camada 24 (Z=4.80) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\nG1 Z5.00 F1200\n\n; ---------------------- Camada 25 (Z=5.00) ---------------------\nG2 X100 Y110 I-10 J0 E1.05\nG2 X120 Y110 I10  J0 E1.05\n\n; --- Finalizacao ---\nG1 Z10 F3000        ; afasta o bico\n; M104 S0           ; desligar bico (descomente se aqueceu)\n; M140 S0           ; desligar mesa (descomente se aqueceu)\nM84                 ; motores off\n; =================================================================\n\nO arquivo pode ser baixado aqui.\n<\/code><\/pre>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-d73004fd-11bc-4ee2-933f-5b60d83c27e5\" href=\"https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/cilindro-1.zip\">cilindro<\/a><a href=\"https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/cilindro-1.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-d73004fd-11bc-4ee2-933f-5b60d83c27e5\">Baixar<\/a><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1887\" height=\"933\" src=\"https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-13.png\" alt=\"\" class=\"wp-image-26281\" srcset=\"https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-13.png 1887w, https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-13-300x148.png 300w, https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-13-768x380.png 768w, https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-13-1536x759.png 1536w, https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-13-18x9.png 18w, https:\/\/maurinsoft.com.br\/wp\/wp-content\/uploads\/2025\/08\/image-13-1320x653.png 1320w\" sizes=\"auto, (max-width: 1887px) 100vw, 1887px\" \/><\/figure>\n\n\n\n<p>Como fica o arquivo pronto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Base do Python<\/h2>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcd8 Como criar e gravar um arquivo com Python<\/h1>\n\n\n\n<p>Em Python, para <strong>criar um arquivo de texto<\/strong> usamos a fun\u00e7\u00e3o <code>open()<\/code>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>O primeiro par\u00e2metro \u00e9 o <strong>nome do arquivo<\/strong> (ex.: <code>\"cilindro.gcode\"<\/code>).<\/li>\n\n\n\n<li>O segundo par\u00e2metro \u00e9 o <strong>modo de abertura<\/strong>:\n<ul class=\"wp-block-list\">\n<li><code>\"w\"<\/code> \u2192 escrever (se j\u00e1 existir, sobrescreve).<\/li>\n\n\n\n<li><code>\"a\"<\/code> \u2192 acrescentar no final (append).<\/li>\n\n\n\n<li><code>\"r\"<\/code> \u2192 apenas leitura.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Depois usamos o m\u00e9todo <code>.write()<\/code> para gravar conte\u00fado no arquivo.<br>No final, usamos <code>.close()<\/code> (ou o <code>with<\/code> que fecha automaticamente).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Criar e gravar um arquivo de texto em Python\n\n# Abre (ou cria) o arquivo chamado \"cilindro.gcode\" no modo escrita (\"w\")\nwith open(\"cilindro.gcode\", \"w\", encoding=\"utf-8\") as arquivo:\n    # Grava apenas uma linha de texto no arquivo\n    arquivo.write(\"G21 ; usar milimetros\\n\")\n\nprint(\"Arquivo 'cilindro.gcode' criado com sucesso!\")\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd39 O que acontece aqui?<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>O Python cria um <strong>novo arquivo<\/strong> chamado <code>cilindro.gcode<\/code> na pasta onde o script est\u00e1 rodando.<\/li>\n\n\n\n<li>Escreve dentro dele a linha: <code>G21 ; usar milimetros<\/code><\/li>\n\n\n\n<li>Fecha o arquivo automaticamente (porque usamos <code>with<\/code>).<\/li>\n\n\n\n<li>Agora esse arquivo pode ser aberto em qualquer editor de texto.<\/li>\n<\/ol>\n\n\n\n<p>Criando o programa em python com 10 camadas.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># -*- coding: utf-8 -*-\n# Gera G-code para um cilindro (tubo) com 10 camadas \u2013 Ender-3 \/ Marlin\n# Sa\u00edda: cilindro_10camadas.gcode\n\nimport math\n\n# ===== Par\u00e2metros =====\nRAIO_MM       = 10.0         # raio do cilindro (mm)\nCAMADAS       = 10           # quantidade de camadas solicitada\nALTURA_CAM_MM = 0.20         # espessura da camada (mm) \u2192 10 camadas = 2,0 mm\nCENTRO_X      = 110.0        # centro aproximado da Ender-3\nCENTRO_Y      = 110.0\nLARG_LINHA    = 0.40         # ~bico 0.4\nVEL_IMPR      = 1200         # mm\/min (~20 mm\/s)\nVEL_VIAGEM    = 6000         # mm\/min\nSEGMENTOS     = 120          # segmentos para aproximar o c\u00edrculo\n\n# Extrus\u00e3o (E relativo) \u2013 modelo simples\nFILAMENTO_D   = 1.75\nAREA_FILA     = math.pi * (FILAMENTO_D\/2.0)**2  # mm\u00b2\n\ndef e_para_trecho(compr_mm: float) -&gt; float:\n    \"\"\"Converte o comprimento do trecho em mm do filamento a extrudar (E).\"\"\"\n    volume = LARG_LINHA * ALTURA_CAM_MM * compr_mm   # mm\u00b3\n    return volume \/ AREA_FILA                        # mm de filamento\n\ndef anel_g1(z: float, raio: float, nseg: int) -&gt; list&#91;str]:\n    \"\"\"Retorna linhas G-code (G1) aproximando um c\u00edrculo com 'nseg' segmentos.\"\"\"\n    linhas = &#91;]\n    # vai ao ponto inicial (\u00e2ngulo 0) sem extrudar\n    x0 = CENTRO_X + raio\n    y0 = CENTRO_Y\n    linhas.append(f\"G0 X{x0:.3f} Y{y0:.3f} Z{z:.3f} F{VEL_VIAGEM}\")\n\n    ang_step = 2 * math.pi \/ nseg\n    x_prev, y_prev = x0, y0\n    for i in range(1, nseg + 1):\n        ang = i * ang_step\n        x = CENTRO_X + raio * math.cos(ang)\n        y = CENTRO_Y + raio * math.sin(ang)\n        L = math.hypot(x - x_prev, y - y_prev)\n        e = e_para_trecho(L)\n        linhas.append(f\"G1 X{x:.3f} Y{y:.3f} E{e:.5f} F{VEL_IMPR}\")\n        x_prev, y_prev = x, y\n\n    return linhas\n\n# ===== Montagem do G-code =====\ng = &#91;]\ng.append(\"; ===== Ender-3 | Cilindro (tubo) \u2013 10 camadas =====\")\ng.append(f\"; Raio={RAIO_MM} mm | Camadas={CAMADAS} | h={ALTURA_CAM_MM} mm | centro=({CENTRO_X},{CENTRO_Y})\")\ng.append(\"G21            ; mm\")\ng.append(\"G90            ; posicoes absolutas\")\ng.append(\"M82            ; extrusao absoluta (padr\u00e3o)\")\ng.append(\"G28            ; homing\")\n# Aquecimento opcional \u2013 descomente se for imprimir de verdade\n#g.append(\"M104 S200      ; bico 200C (nao espera)\")\n#g.append(\"M140 S60       ; mesa 60C (nao espera)\")\n#g.append(\"M109 S200      ; bico 200C (espera)\")\n#g.append(\"M190 S60       ; mesa 60C (espera)\")\n\ng.append(\"G0 Z0.20 F1200 ; primeira camada\")\ng.append(f\"G0 X{CENTRO_X:.3f} Y{CENTRO_Y:.3f} F{VEL_VIAGEM}\")\ng.append(f\"G0 X{CENTRO_X+RAIO_MM:.3f} Y{CENTRO_Y:.3f} F{VEL_VIAGEM}\")\ng.append(\"M83            ; extrusao relativa\")\ng.append(\"G92 E0         ; zera extrusor\")\nz = ALTURA_CAM_MM\n\nfor camada in range(1, CAMADAS + 1):\n    g.append(f\"; --- Camada {camada}\/{CAMADAS} (Z={z:.2f}) ---\")\n    g.extend(anel_g1(z, RAIO_MM, SEGMENTOS))\n    if camada &lt; CAMADAS:\n        z += ALTURA_CAM_MM\n        g.append(f\"G0 Z{z:.3f} F{VEL_VIAGEM}\")\n\n# Finaliza\u00e7\u00e3o\ng.append(\"G0 Z10 F3000   ; afasta a pe\u00e7a\")\n#g.append(\"M104 S0        ; desliga bico (se aqueceu)\")\n#g.append(\"M140 S0        ; desliga mesa (se aqueceu)\")\ng.append(\"M84            ; motores off\")\ng.append(\"; ================================================\")\n\nwith open(\"cilindro_10camadas.gcode\", \"w\", encoding=\"utf-8\") as f:\n    f.write(\"\\n\".join(g))\n\nprint(\"OK: arquivo gerado 'cilindro_10camadas.gcode'\")\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd39 Conclus\u00e3o<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Pontos positivos do que foi apresentado<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Voc\u00ea aprendeu que o <strong>G-code \u00e9 apenas um arquivo texto<\/strong>, criado em qualquer editor ou at\u00e9 gerado automaticamente com Python.<\/li>\n\n\n\n<li>Vimos como montar um <strong>cilindro simples<\/strong> na Ender-3: cada camada \u00e9 um c\u00edrculo (ou anel) e, ao empilhar, formamos a pe\u00e7a 3D.<\/li>\n\n\n\n<li>O exerc\u00edcio mostrou que \u00e9 poss\u00edvel <strong>entender a l\u00f3gica por tr\u00e1s dos slicers<\/strong> (Cura, PrusaSlicer), ou seja, como os softwares de fatiamento transformam o modelo 3D em comandos de m\u00e1quina.<\/li>\n\n\n\n<li>A integra\u00e7\u00e3o com Python abriu espa\u00e7o para <strong>automatizar a cria\u00e7\u00e3o de trajet\u00f3rias<\/strong>, o que pode ser aplicado tanto no ensino quanto em projetos reais.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 O que pode ser melhorado no c\u00f3digo<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hoje usamos uma <strong>aproxima\u00e7\u00e3o simples<\/strong> da extrus\u00e3o. Podemos melhorar:\n<ul class=\"wp-block-list\">\n<li>Calibrando melhor a rela\u00e7\u00e3o entre comprimento da linha e extrus\u00e3o (considerando fluxo real da impressora).<\/li>\n\n\n\n<li>Adicionando <strong>duas ou mais paredes<\/strong> e <strong>infill (preenchimento interno)<\/strong> para criar cilindros s\u00f3lidos.<\/li>\n\n\n\n<li>Gerando <strong>movimentos de skirt\/brim<\/strong> (bordas externas) para melhorar a ader\u00eancia na mesa.<\/li>\n\n\n\n<li>Inserindo par\u00e2metros configur\u00e1veis como temperaturas, velocidades, e altura de camada em vari\u00e1veis globais.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Outra evolu\u00e7\u00e3o seria criar uma <strong>fun\u00e7\u00e3o para gerar qualquer geometria b\u00e1sica<\/strong> (quadrados, tri\u00e2ngulos, espirais) \u2014 \u00f3timo como exerc\u00edcio de programa\u00e7\u00e3o para alunos.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfed Como as empresas usam essa t\u00e9cnica em projetos avan\u00e7ados<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Na <strong>ind\u00fastria 4.0<\/strong>, G-code \u00e9 usado em <strong>usinagem CNC<\/strong> (torno, fresadora, router) para fabricar pe\u00e7as met\u00e1licas e pl\u00e1sticas com alt\u00edssima precis\u00e3o.<\/li>\n\n\n\n<li>Em <strong>empresas de impress\u00e3o 3D<\/strong>, o c\u00f3digo \u00e9 gerado automaticamente por <strong>slicers avan\u00e7ados<\/strong>, mas muitos engenheiros ainda ajustam o G-code manualmente para:\n<ul class=\"wp-block-list\">\n<li>Criar <strong>estruturas de suporte inteligentes<\/strong>.<\/li>\n\n\n\n<li>Controlar <strong>velocidades diferentes por regi\u00e3o da pe\u00e7a<\/strong>.<\/li>\n\n\n\n<li>Inserir <strong>pausas programadas<\/strong> (para troca de cor, inserir pe\u00e7as met\u00e1licas, sensores, etc).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Em projetos mais complexos, o G-code pode ser integrado com <strong>simula\u00e7\u00f5es digitais (digital twins)<\/strong>, verificando antes se a trajet\u00f3ria da ferramenta ser\u00e1 eficiente, segura e otimizada.<\/li>\n\n\n\n<li>Grandes empresas usam at\u00e9 <strong>G-code adaptativo<\/strong>: a m\u00e1quina l\u00ea sensores em tempo real (vibra\u00e7\u00e3o, temperatura, press\u00e3o) e <strong>ajusta o c\u00f3digo dinamicamente<\/strong>, algo que est\u00e1 evoluindo em dire\u00e7\u00e3o \u00e0 <strong>manufatura inteligente e aut\u00f4noma<\/strong>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\ud83d\udc49 Ou seja, o que fizemos aqui \u2014 gerar um cilindro simples em Python \u2014 \u00e9 uma <strong>porta de entrada<\/strong> para entender como m\u00e1quinas e softwares conversam.<br>O conceito de <strong>criar e manipular arquivos de texto<\/strong> est\u00e1 presente em praticamente toda a computa\u00e7\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Impress\u00e3o 3D e CNC \u2192 gera\u00e7\u00e3o de <strong>arquivos G-code<\/strong>.<\/li>\n\n\n\n<li>Programa\u00e7\u00e3o \u2192 arquivos usados por <strong>compiladores<\/strong> (c\u00f3digo-fonte em C, Java, Python).<\/li>\n\n\n\n<li>Escrit\u00f3rio \u2192 <strong>planilhas eletr\u00f4nicas (CSV, XLSX)<\/strong>, <strong>processadores de texto (DOCX, ODT, RTF)<\/strong> e apresenta\u00e7\u00f5es (PPTX) s\u00e3o, na ess\u00eancia, arquivos de texto ou estruturados.<\/li>\n\n\n\n<li>Web \u2192 <strong>arquivos HTML, CSS e JSON<\/strong>, que formam sites e APIs.<\/li>\n\n\n\n<li>Banco de dados \u2192 exporta\u00e7\u00e3o de informa\u00e7\u00f5es em <strong>CSV, SQL scripts<\/strong>.<\/li>\n\n\n\n<li>Ci\u00eancia de dados \u2192 gera\u00e7\u00e3o autom\u00e1tica de relat\u00f3rios, <strong>datasets em TXT\/CSV<\/strong> para an\u00e1lise.<\/li>\n\n\n\n<li>Automa\u00e7\u00e3o \u2192 scripts Python criam <strong>logs de sistemas<\/strong>, <strong>arquivos de configura\u00e7\u00e3o<\/strong> e at\u00e9 relat\u00f3rios prontos em PDF.<\/li>\n<\/ul>\n\n\n\n<p>Assim, usar Python para construir e manipular arquivos n\u00e3o se limita ao G-code: abre uma <strong>gama enorme de aplica\u00e7\u00f5es<\/strong>, como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Criar relat\u00f3rios autom\u00e1ticos de uma pesquisa.<\/li>\n\n\n\n<li>Gerar gr\u00e1ficos e salvar em arquivos para apresenta\u00e7\u00e3o.<\/li>\n\n\n\n<li>Simular experimentos e salvar resultados em planilhas.<\/li>\n\n\n\n<li>Desenvolver conversores (por exemplo, transformar dados em XML, JSON ou YAML).<\/li>\n\n\n\n<li>Automatizar tarefas repetitivas em empresas, economizando tempo e reduzindo erros.<\/li>\n<\/ul>\n\n\n\n<p>Esse mesmo racioc\u00ednio \u2014 simples, mas poderoso \u2014 \u00e9 o que sustenta desde projetos escolares at\u00e9 <strong>sistemas industriais complexos<\/strong>, permitindo que a programa\u00e7\u00e3o conecte ideias a resultados pr\u00e1ticos no mundo real.<\/p>\n\n\n\n<p>Este blog foi gerado com auxilio do CHATGPT 5.<\/p>\n\n\n\n<p>Ser\u00e1 utilizado em treinamento no curso t\u00e9cnico da Escola Estadual Diva Tarl\u00e1, em Ribeir\u00e3o Preto.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Objetivo do trabalho: O objetivo deste trabalho \u00e9 criar um arquivo para impress\u00e3o 3D. Vis\u00e3o sobre o projeto e informa\u00e7\u00f5es sobre o ambiente \ud83d\udfe6 O que \u00e9 CNC? \u2728 CNC significa Controle Num\u00e9rico Computadorizado (Computer Numerical Control). \u27a1\ufe0f Resultado: pe\u00e7as produzidas com mais precis\u00e3o, repetibilidade e velocidade. Exemplos de m\u00e1quinas CNC: \ud83d\udfe6 O que \u00e9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[596],"tags":[],"class_list":["post-26272","post","type-post","status-publish","format-standard","hentry","category-pds-e-metodologias-ageis"],"_links":{"self":[{"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/posts\/26272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/comments?post=26272"}],"version-history":[{"count":6,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/posts\/26272\/revisions"}],"predecessor-version":[{"id":26287,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/posts\/26272\/revisions\/26287"}],"wp:attachment":[{"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/media?parent=26272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/categories?post=26272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/tags?post=26272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}