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 Operação Sem Monitor

Este artigo é uma contribuição de @Erez Zukerman

Gosto bastante de usar o meu plotter iDraw 2.0, mas gosto de o fazer devagar – por isso os meus desenhos podem demorar algum tempo. Usei a configuração padrão do Inkscape durante bastante tempo, mas tinha de manter o meu computador principal ligado e ligado ao plotter enquanto este estava a trabalhar. Isso não era ideal – por isso decidi ver se conseguia configurar um sistema “headless” usando um Raspberry Pi.
Acabou por ser bem mais fácil do que eu pensava, e divertido também. Eis o que vamos fazer:
●Configurar o próprio Pi.
●Instalar o CNCjs e as suas dependências. É isto que vamos usar para controlar realmente o plotter, enviando GCode pela ligação.
●Também vamos aproveitar para configurar as coisas para que o CNCjs inicie automaticamente sempre que o Pi arrancar, sem que tenha de iniciar sessão ou fazer qualquer coisa.
●Descobrir como converter os nossos SVGs para GCode (com controlo da velocidade da caneta).
Por favor, note que este tutorial assume que está confortável a usar a linha de comandos do Linux. Se estiver a seguir este guia meses ou anos depois da sua publicação inicial, pode encontrar todo o tipo de erros pelo caminho – essa é a natureza da coisa. No momento da escrita, o sistema descrito funcionou bem para mim.
Vamos começar!

Configure o Pi

É melhor se puder dedicar um Pi só para este projeto, para que seja o seu “controlador do plotter”. Se não for possível, não há problema – ainda funcionará, mas pode ser menos conveniente com o tempo.
Outra boa razão para dedicar um Pi só para este projeto é que pode configurá-lo do zero com predefinições que façam sentido. Foi exatamente isso que fiz: peguei num cartão SD de 32GB e usei a ferramenta oficial Raspberry Pi Imager para gravar o Raspberry Pi OS.
Uma coisa que a ferramenta permite fazer, e que eu recomendaria, é configurar alguns valores predefinidos logo à saída da caixa. 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 pública SSH, para poder aceder via SSH à máquina imediatamente
●O meu SSID/senha 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, ejetei o cartão microSD e coloquei-o no Pi. Apenas para a primeira inicialização, liguei o Pi a um teclado e ecrã – mas isso não era estritamente necessário. O nome de anfitrião plotter.local que escolhi demorou alguns momentos a registar-se na minha rede, por isso usei o teclado e o ecrã para obter o IP atual (executando ifconfig no terminal).
Fiz SSH na máquina, e era hora de avançar para o próximo passo: Instalar o CNCjs

Instalar CNCjs

Como pode imaginar pelo nome, o CNCjs é baseado em Node. Por isso, primeiro precisamos de instalar o Node.
●Faça SSH no Pi
●Vamos instalar o NVM:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Saia do terminal e depois volte a fazer ssh. Isto carrega o NVM.
●Agora vamos instalar o node:
○nvm install node
●Ótimo! Hora de instalar o CNCjs:
○npm install -g cncjs
●Assumindo que tudo correu bem até aqui, vamos executar o CNCjs apenas uma vez. Isto criará o nosso ficheiro de configuração, ~/.cncrc:
○A partir da linha de comando, no seu diretório pessoal, execute cncjs
○Ctrl+C para sair
●Agora é o orgulhoso proprietário de um novo ~/.cncrc, parabéns. Vamos editá-lo, principalmente para 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 o cncjs no Pi novamente.
●Usando o seu navegador na máquina principal, aceda a plotter.local:8000. Deve abrir o CNCjs.

A seguir, é hora 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 de Conexão (canto superior esquerdo por padrão).
○Pressione o botão Atualizar em Porta.
○Abra o menu pendente e escolha a porta.

●Clique em Abrir. Se tudo correu bem, o console Gcode deverá agora mostrar algum texto.

Vamos mover os motores!


●Usando o widget Eixos, pressione + e - nos vários eixos para mover os motores. Também pode ativar o “jogging com teclado numérico” e depois usar as setas do teclado para mover o plotter. Se colocar uma caneta e baixar o eixo Z, é como um Etch-a-Sketch caro.


Uma nota é que 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 automaticamente

Seguindo em frente, agora queremos voltar a este ponto ideal sempre que o Pi reiniciar, sem que tenha de fazer nada. Então:
●De volta à sessão SSH no Pi, termine o CNCjs pressionando Ctrl-C.
●Certifica-te que está mesmo parado ao atualizar o navegador (plotter.local:8000, assumindo que é o hostname que configuraste acima). Isto agora deve falhar.
●No Pi, instala o pm2: npm install -g pm2
●Inicia o CNCjs com pm2: pm2 start cncjs --name cncjs
●Certifica-te que realmente arrancou e funciona como esperas: espera alguns momentos, depois vai a plotter.local:8000 e verifica se carrega.
●Cria um script de arranque: pm2 startup. Isto vai mostrar um comando que precisas de executar com sudo, por isso faz isso.
●Guarda a lista de processos: pm2 save
●Reinicia o Pi para ver se funcionou: sudo reboot
●Espera que volte a arrancar, talvez 3-5 minutos, depois acede a http://plotter.local:8000/ para ver se consegues aceder ao CNCjs novamente. Se fizeste tudo bem, ele deve arrancar logo de novo.
Vitória! Estamos quase lá – o CNCjs está agora totalmente configurado. Mas para traçar algo, precisamos de lhe fornecer um ficheiro GCode – ele não suporta SVGs nativamente.

Cria um pipeline para converter SVGs em Gcode

Para converter o nosso SVG para Gcode, vamos usar o Juicy-Gcode, que é uma pequena utilidade de linha de comandos.
Uma grande mudança aqui é que estamos a zerar relativamente ao canto inferior esquerdo do teu papel, não ao canto superior direito! Esta mudança pode demorar um pouco a habituar-te. Vou lembrar-te disso mais tarde.
●Na tua máquina principal, descarrega o binário da versão do Juicy-Gcode para o teu sistema operativo: https://github.com/domoszlai/juicy-gcode/releases
●A configuração do Juicy-Gcode é guardada num ficheiro que eles chamam de “flavor file”. Isto é apenas um ficheiro yaml. Aqui está um bom ficheiro flavor inicial, podes copiar/colar isto no flavor.yaml na tua máquina:
begin: |
  G21 ; Define unidades para milímetros
  G17 ; Define seleção do plano para XY
  G90 ; Define posicionamento absoluto
  F600  ; Define a velocidade para 600 mm/min -- isto é realmente lento, podes querer editar
  G00 Z0 ; caneta levantada
  G92 X0 Y0 ; considera 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 notar sobre este ficheiro flavor:
●Eu faço o plotter funcionar a 600mm/min, o que é muito lento. Podes querer acelerar isto, dependendo das tuas canetas e preferências.
●A outra linha notável é aquela que começa com G92. Nesta linha, estamos a dizer ao plotter "onde quer que estejas agora, esse é o ponto de origem". Por isso, para calibrar um traçado, esperamos que movas manualmente (e suavemente) a cabeça do plotter para o canto inferior esquerdo do papel.
Quer que o tamanho do papel esteja corretamente definido no SVG, isto é importante.
Para executar o Juicy-Gcode, o comando é algo assim:
juicy-gcode -f flavor.yaml image.svg -o image.gcode
Isto é um pouco complicado de escrever todas as vezes, por isso fiz este pequeno script para tornar as coisas um pouco mais convenientes:
#!/bin/bash
# Uso: ./run-juicy.sh input.svg [velocidade]
# Se a velocidade não for fornecida, o padrão é 600

# Verifique se pelo menos um argumento foi fornecido

if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; então
echo "Uso: $0 <input-svg> [velocidade]"
echo " Se a velocidade não for fornecida, o padrão é 600"
exit 1
fi

inputfile="$1"

# Defina a velocidade padrão para 600 se não for fornecida
speed="${2:-600}"

# Construa o nome do ficheiro de sabor
flavor_file="flavor-${speed}mm-speed.yaml"

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

# Execute o comando juicy-gcode

juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
Agora pode ter vários ficheiros de sabores diferentes, cada um com uma velocidade de execução diferente, e especificar facilmente a velocidade passando o número que corresponde ao nome do ficheiro de sabor.
Agora que tem um ficheiro GCode, é hora de carregar e plotar!

Carregue o GCode e plote

O CNCjs oferece-nos duas formas de carregar um ficheiro GCode: Podemos carregá-lo através do navegador clicando em “Carregar G-code”, ou podemos configurar um diretório de vigilância (para que sempre que um ficheiro GCode apareça nele, o plotter comece a funcionar).
Isto soa bem na teoria, mas não faz muito sentido: Cada plot requer alguma configuração manual de qualquer forma. Temos de colocar o papel, instalar a caneta, etc. Por isso, para mim, faz muito mais sentido carregar o ficheiro manualmente através do navegador.
Depois de fazer isso, afaste o zoom para ver a pré-visualização. 

Isto dá-nos alguns controlos importantes de sanidade:
●Somos lembrados mais uma vez (…) que o plot começará no canto inferior esquerdo do nosso papel.
●Podemos ver as medidas nos eixos X e Y. Vale a pena dedicar um momento para ler isto e verificar se não ultrapassam a sua área de plotagem. Se ultrapassarem, há um problema com o seu SVG – não comece a plotar, ou os seus servos ficarão bastante insatisfeitos.
Assumindo que a sua caneta está no canto inferior esquerdo do seu papel e as medidas fazem sentido, é hora de plotar! Prima o botão Play e observe o seu plotter. Agora pode desligar o computador ou levá-lo para outra divisão enquanto o Pi e o plotter trabalham. Vitória!

Voltar para o blogue

Deixe um comentário

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