How to Set Up an iDraw 2.0 Plotter and a Raspberry Pi for Headless Operation

Como configurar um plotter iDraw 2.0 e um Raspberry Pi para funcionamento autónomo

Este artigo foi contribuído por @Erez Zukerman

Gosto bastante de utilizar o meu plotter iDraw 2.0, mas prefiro fazê-lo funcionar lentamente - por isso, os meus desenhos podem demorar algum tempo. Durante bastante tempo, usei a configuração predefinida do Inkscape, mas tinha de manter o meu computador principal ligado e conectado ao plotter enquanto este trabalhava. Não era o ideal - por isso, decidi tentar perceber se conseguia configurar um sistema “sem cabeça” utilizando um Raspberry Pi.
Afinal, foi bastante mais fácil do que eu pensava e também foi divertido. Eis o que vamos fazer:
●Configurar o próprio Pi.
●Instalar o CNCjs e as respetivas dependências. É isto que vamos utilizar para controlar efetivamente o plotter, enviando GCode através da rede.
●Também vamos dedicar algum tempo a configurar tudo para que o CNCjs arranque automaticamente sempre que o Pi for iniciado, sem que tenha de iniciar sessão ou fazer seja o que for.
●Perceber como converter os nossos SVG em GCode (com controlo da velocidade da caneta).
Tenha em atenção que este tutorial pressupõe que se sente à vontade com a linha de comandos do Linux. Se estiver a seguir estas instruções meses ou anos depois da sua publicação original, poderá encontrar todo o tipo de erros pelo caminho - essa é a natureza da coisa. Na altura em que escrevi, o sistema descrito funcionava bem para mim.
Vamos começar!

Configurar o Pi

O ideal é poder dedicar um Pi apenas a este projeto, para que seja o seu “controlador do plotter”. Se não for possível, não há problema - continuará a funcionar, mas poderá ser menos conveniente com o tempo.
Outra boa razão para dedicar um Pi apenas a este projeto é poder configurá-lo de raiz com valores predefinidos adequados. Foi exatamente isso que fiz: peguei num cartão SD de 32 GB e usei a ferramenta oficial Raspberry Pi Imager para gravar nele o Raspberry Pi OS.
Uma das coisas que a ferramenta permite fazer, e que recomendo, é configurar alguns valores predefinidos logo à partida. Usei o instalador para configurar o seguinte:
●O meu nome de utilizador e palavra-passe
●Um nome de anfitrião local para o controlador do plotter (plotter.local, no meu caso)
●A minha chave SSH pública, para poder aceder à máquina por SSH de imediato
●O SSID/palavra-passe da minha WLAN, para que o Pi se ligasse à minha rede ao arrancar
Configurei tudo isto e depois deixei o Imager fazer o seu trabalho. Quando terminou, ejectei o cartão microSD e coloquei-o no Pi. Apenas para o primeiro arranque, liguei o Pi a um teclado e a um monitor - mas isto não era estritamente necessário. O nome de anfitrião plotter.local que escolhi demorou alguns momentos a ficar registado na minha rede, por isso usei o teclado e o monitor para obter o IP atual (executando ifconfig no terminal).
Liguei-me à máquina por SSH e estava na altura de avançar para o passo seguinte: instalar o CNCjs

Instalar o CNCjs

Como poderá deduzir pelo nome, o CNCjs é baseado em Node. Por isso, primeiro precisamos de instalar o Node.
●Ligue-se ao Pi por SSH
●Vamos instalar o NVM:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Saia do terminal e volte a ligar-se por SSH. Isto carrega o NVM.
●Agora vamos instalar o Node:
○nvm install node
●Ótimo! Está na altura de instalar o CNCjs:
○npm install -g cncjs
●Partindo do princípio de que tudo correu bem até aqui, vamos executar o CNCjs apenas uma vez. Isto criará o nosso ficheiro de configuração, ~/.cncrc:
○Na linha de comandos, no seu diretório pessoal, execute cncjs
○Saia dele com Ctrl+C
●É agora o orgulhoso proprietário de um ~/.cncrc novinho em folha. Parabéns! Vamos editá-lo, principalmente para podermos permitir o acesso remoto:
○vi .cncrc
{
    "allowRemoteAccess": true,
    "state": {
        "allowAnonymousUsageDataCollection": false,
        "checkForUpdates": true,
        "controller": {
            "exception": {
                "ignoreErrors": false
            }
        }
    },
    "secret": O SEU SEGREDO AQUI
}
A linha crucial a adicionar aqui é a primeira, allowRemoteAccess.
●Execute novamente o cncjs no Pi.
●Utilizando o navegador no seu computador principal, aceda a plotter.local:8000. Deverá abrir o CNCjs.

Em seguida, é altura de ligar o plotter e ver se o CNCjs consegue comunicar com ele.
●Ligue o plotter iDraw 2.0 à porta USB do Pi.
●Ligue o plotter.
●No CNCjs, localize o widget Ligação (por predefinição, no canto superior esquerdo).
○Prima o botão Atualizar por baixo de Porta.
○Abra o menu pendente e escolha a porta.

●Clique em Abrir. Se tudo tiver funcionado, a consola Gcode deverá agora apresentar algum texto.

Vamos mover os motores!


●Utilizando o widget Eixos, prima + e - nos vários eixos para mover os motores. Também pode ativar o «jogging pelo teclado» e utilizar as teclas de seta para mover o plotter. Se colocar uma caneta e baixar o eixo Z, é como um Etch-a-Sketch dispendioso.


Uma nota: a posição 0 no eixo Y é o oposto do que poderia esperar: vai para a parte inferior da área de desenho. Voltaremos a isto mais tarde.

Fazer o CNCjs arrancar no arranque

Continuando, agora queremos voltar a este ponto ideal sempre que o Pi reiniciar, sem que tenha de fazer nada. Portanto:
●Regresse à sessão SSH no Pi e encerre o CNCjs premindo Ctrl-C.
●Certifique-se de que terminou realmente, atualizando o navegador (plotter.local:8000, partindo do princípio de que esse é o nome de anfitrião que configurou acima). Isto deverá agora falhar.
●No Pi, instale o pm2: npm install -g pm2
●Inicie o CNCjs com o pm2: pm2 start cncjs --name cncjs
●Certifique-se de que arrancou e funciona como esperado: aguarde alguns momentos, depois aceda a plotter.local:8000 e verifique se é carregado.
●Crie um script de arranque: pm2 startup. Será apresentado um comando que precisa de executar com sudo; faça-o.
●Guarde a lista de processos: pm2 save
●Reinicie o Pi para verificar se funcionou: sudo reboot
●Aguarde que volte a arrancar, talvez 3-5 minutos, e depois aceda a http://plotter.local:8000/ para ver se consegue voltar a aceder ao CNCjs. Se tiver feito tudo corretamente, deverá voltar a funcionar imediatamente.
Vitória! Estamos quase lá - o CNCjs está agora totalmente configurado. Mas, para desenhar algo, precisamos de lhe fornecer um ficheiro GCode - não processa SVGs nativamente.

Crie um processo para converter SVGs em Gcode

Para converter o nosso SVG para Gcode, vamos utilizar o Juicy-Gcode, um pequeno utilitário de linha de comandos.
Uma grande alteração aqui é que estamos a definir o zero relativamente ao canto inferior esquerdo do papel, e não ao canto superior direito! Esta alteração pode exigir algum tempo de habituação. Voltarei a lembrá-lo mais adiante.
●Na sua máquina principal, transfira o binário da versão do Juicy-Gcode para o seu sistema operativo: https://github.com/domoszlai/juicy-gcode/releases
●A configuração do Juicy-Gcode é guardada num ficheiro que eles chamam «ficheiro de configuração». É apenas um ficheiro YAML. Eis um bom ponto de partida; pode copiar/colar isto para flavor.yaml na sua máquina:
begin: |
  G21 ; Definir unidades para milímetros
  G17 ; Definir seleção do plano para XY
  G90 ; Definir posicionamento absoluto
  F600  ; Definir a velocidade para 600 mm/min -- é realmente lento, pode querer editar
  G00 Z0 ; caneta levantada
  G92 X0 Y0 ; considerar a posição atual como 0,0 -- este é o canto INFERIOR ESQUERDO
end: |
  G0Z0 ; caneta levantada
  G00 X0 Y0 Z0
toolon: |
  G0Z6 ; caneta pousada no papel
tooloff: |
  G0Z0 ; caneta levantada
  
Algumas coisas importantes a ter em conta sobre este ficheiro de configuração:
●Eu utilizo o plotter a 600 mm/min, o que é muito lento. Pode querer aumentar esta velocidade, dependendo das suas canetas e preferências.
●A outra linha digna de nota é a que começa por G92. Nesta linha, estamos a dizer ao plotter «onde quer que esteja agora, essa é a posição inicial». Por isso, para calibrar um desenho, esperamos que mova manualmente (e suavemente) a cabeça do plotter para o canto inferior esquerdo do papel.
É importante que o tamanho do papel esteja corretamente definido no SVG.
Para executar o Juicy-Gcode, o comando é semelhante a este:
juicy-gcode -f flavor.yaml image.svg -o image.gcode
É um pouco trabalhoso escrever tudo isto de cada vez, por isso criei este pequeno script para tornar as coisas um pouco mais práticas:
#!/bin/bash
# Utilização: ./run-juicy.sh input.svg [speed]
# Se a velocidade não for indicada, o valor predefinido é 600

# Verificar se foi fornecido pelo menos um argumento

if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
echo "Utilização: $0 <input-svg> [speed]"
echo " Se a velocidade não for indicada, o valor predefinido é 600"
exit 1
fi

inputfile="$1"

# Definir a velocidade predefinida como 600 se não for indicada
speed="${2:-600}"

# Criar o nome do ficheiro da variante
flavor_file="flavor-${speed}mm-speed.yaml"

# Gerar o nome do ficheiro de saída substituindo a extensão .svg por .gcode
outputfile="${inputfile%.*}.gcode"

# Executar o comando juicy-gcode

juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
Agora pode ter vários ficheiros de diferentes variantes, cada um com uma velocidade de execução diferente, e especificar facilmente a velocidade passando o número que corresponde ao nome do ficheiro da variante.
Agora que tem um ficheiro GCode, está na altura de o carregar e traçar!

Carregar o GCode e traçar

O CNCjs dá-nos duas formas de fornecer um ficheiro GCode: podemos carregá-lo através do navegador, clicando em "Carregar G-code", ou podemos configurar um diretório monitorizado (para que, sempre que um ficheiro GCode apareça nesse diretório, o traçador comece a funcionar).
A última opção parece interessante em teoria, mas não faz grande sentido: qualquer traçado requer algum trabalho de configuração manual. Temos de colocar o papel, instalar a caneta, etc. Por isso, para mim, faz muito mais sentido carregar manualmente o ficheiro através do navegador.
Quando fizer isso, reduza o zoom para ver a pré-visualização. 

Isto dá-nos algumas verificações importantes de coerência:
●Somos relembrados mais uma vez (…) de que o traçado começará no canto inferior esquerdo do papel.
●Podemos ver as medidas nos eixos X e Y. Vale a pena parar um momento para as ler e verificar se não excedem a sua área de traçado. Se excederem, há um problema com o seu SVG - não comece a traçá-lo, caso contrário os seus servomotores não ficarão nada satisfeitos.
Partindo do princípio de que a caneta está no canto inferior esquerdo do papel e de que as medidas fazem sentido, está na altura de traçar! Prima o botão Reproduzir e observe o seu traçador. Agora pode desligar o computador ou levá-lo para outra divisão enquanto o Pi e o traçador trabalham. Vitória!

Voltar ao blogue

Deixe um comentário

Tenha em atenção que os comentários têm de ser aprovados antes de serem publicados.