Piu piu! Como construir uma torre de laser com um arduino

Você está entediado? Pode muito bem construir uma torre de laser. Você sabe - aquele que vai Piu Piu

, dispara um feixe vermelho em lotes de diferentes direções, e talvez até mesmo jogar em uma máquina de fumaça? Yep, um deles.

O Que Você Precisa

  • Arduino
  • 2 servos
  • módulo de laser, tal como um a partir deste kit de sensor
  • vibrador piezo ou outro dispositivo de saída pequeno
  • laços de fio de metal e para a fixação de cabos
  • Longa feminina-gt; cabos de salto do sexo masculino, além de cabos de salto regulares

Video: Давайте строить и играть размеры LEGO # 6: Портал 2 ж / Fgteev мама

Opcionalmente, uma máquina de fumaça é necessário - o laser é muito baixa potência, para que você não será capaz de ver o feixe sem fumaça mesmo em um quarto escuro.

componentes

Plano de construir

A ideia de base da torre é de colocar o módulo de laser na parte superior de um servo para proporcionar rotation- horizontal então montar esta embalagem para outro servo colocado a um ângulo de 90 graus para proporcionar o movimento vertical. Temos um piezo para fornecer o Piu Piu efeitos sonoros, e eu estou jogando em uma máquina de fumaça para uma boa medida.

servo Testing

Dependendo do seu servo, os fios podem ser coloridos de forma diferente, mas em geral:

Video: ✔ Como Fazer Uma Torre de Bruxa no Minecraft - [Feliz Halloween]

  • O vermelho é o fio positivo, e em ambos os meus servos era o centro de três - para ser conectado a + 5V.
  • Marrom ou preto é o negativo, para ser conectado a GND no Arduino.
  • Branca ou cor de laranja é o fio de sinal, para ser ligado a um pino capaz de PWM digital de I / O (9 e 10 na demonstração abaixo).

Uma vez que você fio acima de seus dois servos, carregar o seguinte código de exemplo. Eu já nomeado um servo “Hori” para controlar o movimento horizontal, e o outro “vert”. Cada um deve executar uma gama completa de varredura movimento (cerca de 60 graus, no meu caso).

#incluir vert servo,Hori- // criar servo objecto para controlar um servo// um máximo de oito objectos servo pode ser criado int pos = 0- // variável para armazenar a posição do servovazio configuração(){Hori.anexar(9)-verde.anexar(10)- // atribui o servo no pino 9,10 para os objectos servoverde.Escreva(0)-Hori.Escreva(0)-}vazio laço(){para(pos = 0- pos lt; 180- pos += 10) // vai de 0 a 180 graus { // em passos de 10 graus verde.Escreva(pos)-Hori.Escreva(pos)- // dizer servo para ir para a posição em `pos` variável demora(100)- // espera 100 ms para o servo para alcançar a posição }para(pos = 180- posgt; =1- pos-=10) // volta de 180 graus para 0 graus{verde.Escreva(pos)- // dizer servo para ir para a posição em `pos` variávelHori.Escreva(pos)-demora(100)- // espera 100 ms para o servo para alcançar a posição}}

Tudo bom? Passando então.

Testando a Laser e Piu Piu Som

O módulo de laser é como um LED, mas tem um resistor embutido no módulo para que possamos conectá-lo diretamente a um I / O digital - muito simples. Se você estiver usando o mesmo módulo laser como me, o “-" vai para GND, a S vai para o pino 12. Modificar o código de exemplo acima para fazer o pino 12 uma saída:

int laser = 12-pinMode(laser,SAÍDA)-

Em seguida, o pino de piscar e desligar cada loop usando padrão digitalWrite () método.

Vamos apenas usar PWM para conduzir o buzzer piezo em um nível de som confortável - você pode experimentar com o uso da biblioteca tom se você queria, mas um ruído simples é tudo que eu preciso. Conecte o fio preto à terra eo fio vermelho no pino 11. Definir o seu cigarra no pino relevante, definido para o modo de saída, e ativar usando analogWrite (cigarra, 100) (Ou qualquer número que deseja um máximo de 254) - e analogWrite (besouro, 0) desligar.



O código de exemplo completo modificado para varrer dois servo, ativar um laser, e reproduzir o som irritante, pode ser encontrada aqui.

Todos os componentes devem estar trabalhando - agora precisamos unir tudo isso.

Criando o Turret

Usando abraçadeiras, anexar um servo para o outro: ele realmente não importa qual, apenas certifique-se um vai se mover na horizontal e os outros vão mover a vertical. Você pode retirar a lâmina do rotor e re-sede durante os testes se o ângulo não é certo.

servos

Usar algum fio modelagem rígida para fixar o módulo de laser para a lâmina de outro servo, da seguinte forma:

fio-de-laser módulo

Finalmente, I anexa a coisa toda para uma perna de mesa com ainda mais cabo-dades e um pouco de madeira de sucata.

attach-turret-a-mesa

Programação do Turret

Eu não sei sobre você, mas a minha ideia de uma torre de laser vem de um número incontável de filmes de ficção científica e episódios de Star Trek. Invariavelmente alguém vai voar passado um revólver e pouco Piu Piu tiros virá voando em um padrão de varredura, sempre milésimos de segundo demasiado lento para que o nosso protagonista na verdade não começar a batida. Isso é o que eu estou tentando replicar, embora sinta-se livre para ajustar a rotina principal para se adequar a sua ideia de que uma torre deve fazer.

Aqui está o código pseudo acabei usando para o loop principal:

  • Randomize tempo entre rajadas, e tempo entre cada tiro individual.
  • Aleatória a posição de início e de fim para cada servo, vert e hori.
  • Randomize o número de disparos a serem tomadas.
  • Exercite-se o número de graus de mudança depois de cada tiro como a diferença entre as posições de início e fim dividido pelo número de tiros.
  • Mova os servos às posições iniciais, e esperar um pouco para eles para chegar lá (100ms)
  • Loop até que todos os tiros foram tomadas, cada vez movendo os servos um pouco como anteriormente calculated- mover e atirar, mover e atirar.
  • Repetir.

I também adicionado um separada fogo() método para estruturar o código um pouco melhor. Ajustar as gamas de todos aleatória() funções de acelerar ou retardar cada parameter- ou aumentar o número de tiros por um mais clube de dança vibração. Desloque-se para um vídeo do código em ação!

#incluir vert servo,Hori- // criar servo objecto para controlar um servoint pos = 0- // variável para armazenar a posição do servoint laser = 12-int cigarra = 11-vazio configuração(){Hori.anexar(9)-verde.anexar(10)- // atribui o servo no pino 9 para o objecto servopinMode(laser,SAÍDA)-pinMode(cigarra,SAÍDA)-}vazio laço(){int timeBetweenBursts = aleatória(200,1000)-int timeBetweenShots = aleatória(50,200)-int vertStart = aleatória(1,180)-int vertEnd = aleatória(1,180)-int horiStart = aleatória(1,180)-int horiEnd = aleatória(1,180)-int numShots = aleatória(5,20)-int vertChange = (vertEnd - vertStart) / numShots- // quanto para mover eixo vertical por cada tiroint horiChange = (horiEnd - horiStart) / numShots-verde.Escreva(vertStart)-// deixá-lo chegar à posição inicial em primeiro lugar, esperar um poucoHori.Escreva(horiStart)-demora(100)-para(int tiro = 0- tirolt;numShots- tiro++){verde.Escreva(vertStart)-Hori.Escreva(horiStart)-vertStart += vertChange-// incrementar o valor vert para a próxima vezhoriStart += horiChange-fogo()-demora(timeBetweenShots)- // adicionar um pouco de variedade para a velocidade de tiros}demora(timeBetweenBursts)-}vazio fogo(){digitalWrite(laser,ALTO)-analogWrite(cigarra,100)-demora(20)-// ajustar isso para alterar o comprimento da torre de tirodigitalWrite(laser,BAIXO)-analogWrite(cigarra, 0)-}

em Ação

Eu não acho que há um uso prático para este pequeno brinquedo, mas é uma enorme quantidade de diversão e há uma série de variáveis ​​que você pode ajustar para obter o efeito desejado. Talvez ele vai vir a calhar para um filme LEGO caseiro?


Artigos relacionados