Índice:

Módulo de direção a laser DIY para Arduino: 14 etapas (com imagens)
Módulo de direção a laser DIY para Arduino: 14 etapas (com imagens)

Vídeo: Módulo de direção a laser DIY para Arduino: 14 etapas (com imagens)

Vídeo: Módulo de direção a laser DIY para Arduino: 14 etapas (com imagens)
Vídeo: Acidente de trabalho em máquina 2024, Julho
Anonim
Image
Image

Neste Instructable, demonstrarei a construção de um módulo de direção de feixe de laser de eixo duplo e espelho único usando peças impressas em 3D e componentes baratos do eBay.

Este projeto tem semelhanças com o Arduino Laser Show com Full XY Control e o Arduino Laser Show com Real Galvos, mas acredito que seja o primeiro a usar um design impresso em 3D com solenóides baratos. Estou colocando todos os arquivos de design sob a GPLv3 para que o design possa ser aprimorado e melhorado.

Embora no momento eu tenha apenas montado o módulo e escrito alguns códigos de teste muito básicos, minha esperança é que um dia eu possa levá-lo para o próximo nível, incorporando o código de gráficos vetoriais do meu anterior Instructable, Super Fast Analog Voltages do Arduino.

Etapa 1: reúna as peças impressas não 3D

O conjunto do laser consiste nas seguintes peças:

  • 4 micro solenóides
  • Espelho de 1/2 polegada
  • Quatro parafusos M3

Os solenóides específicos que usei foram comprados no eBay por US $ 1,45 cada. O espelho redondo foi encontrado no corredor de artesanato do HobbyLobby - um pacote de 25 me custou menos de US $ 3 dólares. Você também pode encontrar espelhos no eBay.

Você também precisará de um apontador laser barato, novamente, do eBay. Um laser violeta junto com uma folha de vinil que brilha no escuro é uma excelente combinação para este projeto!

Um par de mãos que ajudam não é necessário, mas será muito útil para segurar e posicionar o apontador laser. Um grande clipe de fichário pode ser usado para manter pressionado o botão liga / desliga.

Você precisará de um Arduino (usei um Arduino Nano) e de uma forma de conduzir os solenóides. Como VajkF afirmou nos comentários, você poderia usar pontes H pré-fabricadas, como as baseadas no L298 ou no L9110. Eles estão disponíveis no eBay por alguns dólares e também podem ser usados para impulsionar motores e projetos de robótica.

Como eu não tinha uma ponte H, construí meu próprio driver a partir de componentes discretos:

  • Quatro transistores bipolares NPN (usei um MPS3704)
  • Quatro resistores (usei um resistor de 1,2 k ohm)
  • Quatro diodos (usei um 1N4004)
  • Uma bateria de 9 V e um conector de bateria

Os componentes eletrônicos são do meu laboratório, então não tenho um custo exato para eles, mas a menos que você já tenha as peças ou possa limpá-las, provavelmente é mais econômico usar uma ponte H pré-construída. No entanto, fornecerei os esquemas para construir o seu próprio.

Etapa 2: impressão 3D do módulo de direção do espelho

Impressão 3D do Módulo de direção do espelho
Impressão 3D do Módulo de direção do espelho
Impressão 3D do Módulo de direção do espelho
Impressão 3D do Módulo de direção do espelho

O módulo de direção do laser consiste em duas partes impressas em 3D: uma base para montagem de quatro solenóides e uma plataforma articulada para o espelho.

Anexei os dois arquivos STL para você imprimir em 3D, bem como os arquivos FreeCAD, caso você precise modificar o design. Todo o conteúdo está sob a GPLv3, então você é livre para fazer e compartilhar suas melhorias!

Etapa 3: monte o módulo do laser

Monte o Módulo Laser
Monte o Módulo Laser
Monte o Módulo Laser
Monte o Módulo Laser
Monte o Módulo Laser
Monte o Módulo Laser
  • Use cola quente para fixar os quatro solenóides na peça inferior.
  • Use cola quente para fixar o espelho no centro da parte superior.
  • Insira os pistões de metal nos solenóides e, em seguida, posicione a peça superior nos postes (mas não aparafuse). Gire a peça superior ligeiramente e, usando uma pequena chave de fenda, levante cada pistão até a posição. A borda do disco deve deslizar na ranhura do pistão. Tenha cuidado, pois as dobradiças impressas em 3D são muito frágeis. Com paciência e possivelmente algumas tentativas fracassadas, você deve ser capaz de posicionar todos os quatro pistões sem torcer ou colocar pressão nas dobradiças.
  • Assim que todos os pistões estiverem posicionados, insira parcialmente os parafusos M3, mas antes de apertá-los, empurre cada pistão suavemente para baixo e certifique-se de que o espelho se incline livremente. Se ele não se mover livremente ou prender, pode ser necessário remover a placa superior, erguer um ou mais solenóides soltos e recolocá-los em um leve ângulo para fora (colocar espaçadores entre ele e a coluna central pode ajudar com isso).

Etapa 4: imprimir o colar do ponteiro laser

Imprima o colar do ponteiro laser
Imprima o colar do ponteiro laser
Imprima o colar do ponteiro laser
Imprima o colar do ponteiro laser

O colar do apontador laser se encaixa na cabeça do apontador laser. Em seguida, você pode usar um conjunto de mãos auxiliares para segurar o colar e permitir que posicione o laser precisamente em sua bancada.

Etapa 5: montar o circuito de direção

Monte o circuito de direção
Monte o circuito de direção

O circuito de acionamento é mostrado no esquema. Conforme declarado anteriormente, minha versão é construída a partir de componentes discretos, mas você também pode usar uma ponte H prontamente disponível. Se você optar por construir o seu próprio, precisará construir quatro cópias desse circuito, uma para cada um dos quatro solenóides.

Cada circuito se conectará a um pino do Arduino, dois para controlar o solenóide esquerdo e direito e dois para os solenóides para cima e para baixo. Eles precisarão ser conectados a pinos com capacidade PWM, como:

  • Pino 9: Solenóide para cima
  • Pino 3: Solenóide para baixo
  • Pino 11: Solenóide Esquerdo
  • Pino 10: Solenóide Direito

Uma única bateria de 9 V pode ser usada para acionar todos os quatro circuitos do driver de solenóide ou você pode usar uma fonte de alimentação de bancada. O Arduino funcionará sem energia USB e não deve ser conectado ao lado positivo da bateria de 9V. No entanto, o lado negativo da bateria é usado como referência de aterramento e deve ser conectado ao pino GND no Arduino, bem como aos pinos do emissor nos transistores.

Etapa 6: faça upload do código de amostra

Faça upload do código de amostra
Faça upload do código de amostra

O código de amostra foi atualizado com os seguintes recursos:

  • Ajusta a frequência PWM de forma que o mecanismo fique quase silencioso em baixas velocidades. O zumbido no Teste de Movimento 1 acabou!
  • Adiciona como tensão equações baseadas no artigo de Schimpf para "linearizar" a resposta não linear dos solenóides.

Também incluí uma implementação de um Atrator Lorenz com base no código deste blog.

A fidelidade dos resultados deixa a desejar, mas ainda estou trabalhando nisso!:)

As etapas subsequentes ilustram algumas das técnicas usadas no código.

Etapa 7: Abaixando o Volume

No meu Teste de movimento 1, você pode ouvir um zumbido alto, em particular durante o movimento para cima e para baixo. Acontece que isso foi causado pelo fato de a frequência de corte PWM padrão do Arduino estar dentro da faixa audível. A rápida ativação e desativação da tensão da bobina faria com que vibrassem naquela frequência, transformando-os em minúsculos alto-falantes.

Para resolver esse problema, aumentei a frequência PWM no código:

#define PWM_FREQ_31372Hz 0x01 // Define a frequência PWM para 31372.55 Hz # define PWM_FREQ_3921Hz 0x02 // Define a frequência PWM para 3921,16 Hz #define PWM_FREQ_980Hz 0x03 // Define a frequência PWM_FREQ_3921Hz 0x02 // Define a frequência PWM para 3921,16 Hz #define PWM_FREQ_980Hz 0x03 // Define a frequência PWM_FREQ_3921Hz 0x02 // Define a frequência PWM para 3921,16 Hz #define PWM_FREQ_980Hz 0x03 // Define a frequência PWM_FREQ_3921Hz 0x02 // Define a frequência PWM para 3921.16 Hz #define PWM_FREQ_980Hz 0x03 // Define a frequência PWM_FREQ_3921Hz 0x02 // Define a frequência PWM para 3921,16 Hz #define PWM_FREQ_980Hz 0x03 // Define a frequência PWM_FREQ_3921Hz 0x02 & 0b11111000) | frequência; // Definir frequência do temporizador1 (pinos 9 e 10) TCCR2B = (TCCR2B e 0b11111000) | frequência; // Defina a frequência do cronômetro2 (pinos 3 e 11)}

Definir a frequência PWM do Arduino é um truque útil para acalmar solenóides ou motores. Experimente as diferentes opções de frequências para ver qual delas oferece os melhores resultados. Embora envolva um pouco de programação mais avançada, um bom recurso sobre como os temporizadores funcionam está aqui.

Etapa 8: Ajustando as tensões para reduzir a distorção

Ajustando as tensões para reduzir a distorção
Ajustando as tensões para reduzir a distorção

Meus testes iniciais de movimento mostraram que havia distorção significativa na resposta dos solenóides. No Teste de movimento 3 (figura à esquerda), o que era para ser uma espiral circular, em vez disso, tornou-se uma teia retangular com bordas irregulares.

Resolver esse problema exigiu um pouco de matemática, mas consegui localizar um artigo incrível na web que me ajudou a entender o problema bem o suficiente para resolvê-lo no software.

A seguir, você percorre o processo pelo qual passei para ajustar o sistema e melhorar a aparência dos traços resultantes!

Etapa 9: Aperfeiçoando o software, com matemática

Aperfeiçoando o software, com matemática
Aperfeiçoando o software, com matemática
Aperfeiçoando o software, com matemática
Aperfeiçoando o software, com matemática

O segredo para ajustar o sistema acabou sendo um excelente artigo chamado "Uma explicação detalhada da força solenóide", de Paul H. Schimpf, da Eastern Washington University (link). Em particular, a equação 17 me deu a força do solenóide em termos de vários termos.

Os seguintes termos foram fáceis de medir:

  • R - A resistência do meu solenóide
  • l - O comprimento do solenóide
  • x - O deslocamento do pistão no solenóide
  • V - A tensão através do solenóide

Eu também sabia que a força emitida pelo solenóide tinha que equilibrar a força das molas impressas em 3D no espelho de eixo duplo. A força de uma mola é governada pela lei de Hooke, que é declarada da seguinte forma:

F = -kx

Embora eu não soubesse o valor de k, pelo menos sabia que a força que obtive da equação 17 do artigo de Schimpf tinha que ser igual à força da lei de Hooke.

O valor de alfa (α) era complicado. Embora as equações 13 e 14 mostrassem como calcular esses valores a partir da área do solenóide (A), o número de voltas (N) e os valores de permeabilidade magnética (μ), eu não queria ter que separar um solenóide para contar o número de voltas, nem sabia de que material era feito o núcleo do meu solenóide.

Etapa 10: um testador de componentes barato salva o dia

Um testador de componentes barato salva o dia!
Um testador de componentes barato salva o dia!
Um testador de componentes barato salva o dia!
Um testador de componentes barato salva o dia!
Um testador de componentes barato salva o dia!
Um testador de componentes barato salva o dia!

No entanto, descobri que as equações 15 e 16 me deram o que eu precisava. Eu tinha um testador de componentes M328 barato que comprei no eBay por $ 10. Ele foi capaz de usá-lo para medir a indutância do meu solenóide e descobri que, ao empurrar a armadura em diferentes profundidades, obtive diferentes valores de indução.

Medir com a armadura totalmente inserida me deu o valor de L (0).

O comprimento do meu solenóide era de 14 mm, então medi a indutância com a armadura em cinco posições e isso me deu vários valores para L (x):

  • L (0,0) = 19,8 mH
  • L (3,5) = 17,7 mH
  • L (7,0) = 11,1 mH
  • L (10,5) = 9,3 mH
  • L (14) = 9,1 mH

Em seguida, usei uma planilha para plotar meus valores versus o valor das equações 15 e 16, para uma escolha particular de μr e, em seguida, variei minha escolha até encontrar uma boa correspondência. Isso aconteceu quando μr era 2,9, conforme mostrado no gráfico.

Etapa 11: Encontre a Constante de Mola K, Resolva o Problema

Image
Image
Análise dos problemas atuais e possíveis soluções
Análise dos problemas atuais e possíveis soluções

A única incógnita remanescente era K, a constante da mola. Eu medi isso aplicando 9 V a um dos solenóides em meu conjunto de eixo duplo e medindo a distância em que o espelho foi puxado para baixo. Com esses valores, consegui resolver as equações de K, que encontrei em torno de 10,41.

Agora eu tinha os valores necessários para calcular a tração do solenóide em várias posições ao longo do curso. Definindo F (x) igual à força da mola da lei de Hooke, posso resolver para a tensão V. necessária.

O gráfico mostra a tensão necessária para mover o solenóide para qualquer posição x desejada.

À direita, onde a tensão é zero e a posição é 3 mm, isso corresponde ao ponto de repouso neutro do solenóide quando as dobradiças impressas em 3D estão totalmente relaxadas. Mover para a esquerda no gráfico corresponde a puxar a armadura para o solenóide contra a atração das dobradiças impressas em 3D - isso inicialmente requer mais tensão, mas conforme a armadura se aprofunda no solenóide, a atração aumenta e a tensão de condução necessária diminui.

Essa relação é definitivamente não linear, mas com as equações do artigo de Schimpf, posso escrever meu código Arduino para gerar as tensões corretas para que a deflexão do feixe seja linear:

float positionToVoltage (float x) {

// Restaurando a força exercida pelas dobradiças (Lei de Hooke) no x desejado. const float spring_F = -spring_K * (x - spring_X0); // Tensão tal que a força de tração do solenóide corresponda à // força de restauração das dobradiças return sqrt (-2 * R * R * (- spring_F) * solenoid_len / (a * L_0 * exp (-a * x / solenoid_len))); }

Isso leva a uma espiral muito mais circular do que no meu teste de movimento original. Missão cumprida!

Etapa 12: Perguntas e respostas sobre o circuito do driver usando componentes discretos

Por que não consigo conectar o solenóide diretamente ao Arduino?

É uma questão de quanta corrente o Arduino pode fornecer sem sofrer danos. Isso é cerca de 40 mA por pino. Sabendo que o Arduino opera a 5 V, podemos usar a lei de Ohm para calcular a resistência mínima exigida da carga (neste caso, o solenóide). Dividindo 5 volts por 0,040 amperes, temos 125 ohms. Se a carga tiver uma resistência maior, podemos conectá-la diretamente ao Arduino, caso contrário, não. Um pequeno solenóide normalmente tem uma resistência de 50 ohms, portanto, não podemos acioná-lo diretamente do Arduino. Se o fizéssemos, puxaria 100mA, o que é claramente muito.

Por que você usa 9V para o solenóide, mas 5V para o Arduino?

O Arduino funciona a 5 V, mas isso é um pouco pouco para um solenóide. Usar um transistor nos permite escolher uma tensão para o solenóide que é independente dos 5 V usados para o Arduino.

Como posso saber se um transistor é adequado para este projeto?

Assim como o Arduino, o principal requisito é que a corrente que flui através do solenóide não exceda as classificações máximas do transistor (em particular, a corrente do coletor). Podemos calcular facilmente o pior cenário medindo a resistência do solenóide e, em seguida, dividindo a tensão de alimentação por isso. No caso de uma corrente de alimentação de 9 V para os solenóides e uma resistência do solenóide de 50 ohms, o pior cenário nos coloca em 180 mA. O MPS3704, por exemplo, é classificado para uma corrente máxima de coletor de 600 mA, o que nos dá uma margem de cerca de 3.

Como determino o valor mínimo da resistência a ser colocada entre a saída do Arduino e a base do transistor?

A saída do Arduino conectará a perna base dos transistores bipolares por meio de um resistor limitador de corrente. Como o Arduino opera a 5 V, podemos novamente usar a lei de Ohm para calcular a resistência necessária para limitar a corrente abaixo de 40 mA. Ou seja, divida 5 volts por 0,04 amperes para obter um valor de pelo menos 125 ohms. Valores de resistor mais altos irão diminuir a corrente, dando-nos uma margem de segurança ainda maior.

Existe um valor máximo para essa resistência que eu não devo exceder?

Acontece que sim. Um transistor tem o que é conhecido como ganho de corrente. Por exemplo, se o ganho for 100, significa que se colocarmos 1mA na base, até 100mA fluirá através da carga que o transistor está controlando. Se colocarmos 1,8 mA na base, até 180 mA fluirão pela carga. Como calculamos anteriormente que a 9 V, 180 mA flui através do solenóide, então uma corrente de base de 1,8 mA é o "ponto ideal", e menos e nosso solenóide não ligará completamente.

Sabemos que o Arduino produz 5 V e queremos 1,8 mA de corrente para fluir, então usamos a lei de Ohm (R = V / I) para calcular a resistência (R = V / I). 5 V dividido por 1,8 mA dá uma resistência de 2777 ohms. Portanto, dadas as suposições que fizemos, esperamos que a resistência esteja entre 125 e 2777 - escolher algo como 1000 ohms nos dá uma margem de segurança razoavelmente boa de qualquer maneira.

Etapa 13: Análise dos problemas atuais e possíveis soluções

Análise dos problemas atuais e possíveis soluções
Análise dos problemas atuais e possíveis soluções

O protótipo atual mostra potencial, mas vários problemas permanecem:

  1. O movimento ao longo dos eixos X e Y não parece ser perpendicular.
  2. Há um salto quando o espelho muda de direção.
  3. A resolução é bastante baixa e existem padrões de degraus de escada visíveis.
  4. Em velocidades de movimento mais altas, o caminho do laser é distorcido por vibrações e zumbidos.

Problema 1) pode ser causado pelo design das dobradiças flexíveis impressas em 3D que estão transmitindo movimento ao longo de um eixo para o eixo perpendicular.

Problema 2) é devido à folga no acoplamento entre os pistões de acionamento e a plataforma do espelho, isso faz com que o espelho sacuda e salte nas transições entre os eixos X e Y. Este movimento repentino leva a uma lacuna em forma de X escurecida onde o ponto de laser está fazendo um movimento descontrolado mais rápido.

O problema 3) ocorre porque o Arduino PWM padrão tem apenas 255 níveis e muitos deles são desperdiçados devido ao formato da curva de tensão. Isso poderia ser melhorado significativamente com o uso do timer1, que tem 16 bits e seria capaz de 65536 valores únicos.

O problema 4) ocorre porque o espelho e a armadura deslizante do solenóide (pistões) constituem uma quantidade significativa de massa móvel.

Como os problemas 1) e 2) estão relacionados ao projeto mecânico, uma possibilidade pode ser remover os pistões metálicos e substituí-los por pequenos ímãs de terras raras que são fixados diretamente na placa de inclinação. Os solenóides seriam uma bobina aberta que atrairia ou repeliria os ímãs sem fazer contato físico. Isso levaria a um movimento mais suave e eliminaria a possibilidade de solavancos, enquanto reduzia a massa total.

Reduzir a massa é a solução primária para o problema 4), mas quaisquer problemas restantes podem ser direcionados diretamente no software, implementando um perfil de controle de movimento no software para acelerar e desacelerar o espelho de maneira controlada. Isso já é amplamente feito em firmware de impressora 3D e métodos semelhantes podem funcionar aqui também. Aqui estão alguns recursos relacionados ao controle de movimento que se aplica a impressoras 3D:

  • "Mathematics of Motion Control Profiles", Chuck Lewin (link)
  • "Explicação do movimento controlado de empurrão", (link)

Eu suspeito que adicionar um perfil de controle de movimento trapezoidal permitiria que o espelho fosse dirigido a velocidades muito mais altas sem artefatos de vibração ou zumbido.

Etapa 14: Trabalho Futuro e Possíveis Aplicações

Embora o desenvolvimento de soluções para esses problemas exija uma quantidade considerável de trabalho, tenho esperança de que este módulo de direção de feixe de código aberto possa se tornar uma alternativa acessível para projetos baseados em galvanômetro em aplicações como:

  • Um show de laser barato para DJs e VJs.
  • Um display vetorial eletromecânico para um jogo de arcade vintage como o Vectrex.
  • Uma impressora SLA 3D tipo resina DIY que, no espírito do movimento RepRap, pode imprimir seu próprio módulo de direção a laser.
  • Panorâmica digital ou estabilização ótica de imagem para câmeras.
Arduino Contest 2017
Arduino Contest 2017
Arduino Contest 2017
Arduino Contest 2017

Segundo prêmio no Arduino Contest 2017

Recomendado: