Piu piu! Como construir um laser torre 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? Sim, um deles.

O Que Você Precisa

  • Arduino
  • 2 servos
  • módulo de laser, tal como a partir de um este kit de sensor (Disclaimer:. Essa é a minha loja Você também pode aprender como construir sua própria loja on-line com a nossa mais recente guia livre)
  • vibrador piezo ou outro dispositivo de saída pequeno
  • arames de metal e cabos de fixação
  • Longa por mulheres> cabos de salto masculinos, além de cabos de salto regulares

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

componentes

Plano de construir

A ideia de base da torre é colocar o módulo de laser no topo de um servo para fornecer rotation- horizontal, em seguida, montar esse pacote para outro servo colocado em um ângulo de 90 graus para proporcionar 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 pode ser de cor diferente, mas em geral:

  • 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 de laranja é o fio de sinal, para ser ligado a um pino capaz de I / O digitais PWM (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 ampla gama de varredura de movimento (cerca de 60 graus, no meu caso).

#incluir Servo vert, Horizonte // criar o objeto servo para controlar um servo // um máximo de oito objetos servo pode ser createdint pos = 0 - // variável para armazenar a configuração servo positionvoid () {hori.attach (9) -vert. attach (10) - // atribui o servo no pino 9,10 para o servo objectsvert.write (0) -hori.write (0) -} vazio loop () {for (pos = 0- pos < 180- pos += 10) // goes from 0 degrees to 180 degrees{ // in steps of 10 degreesvert.write(pos)-hori.write(pos)-// tell servo to go to position in variable `pos`delay(100)- // waits 100ms for the servo to reach the position}for(pos = 180- pos>= 1- pos- = 10) // volta de 180 graus a 0 graus {vert.write (POS) - // dizer servo para ir para a posição em pos`hori.write variável `(pos) -delay (100) - // espera 100ms 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 é apenas como um LED, mas tem uma resistência incorporada no módulo para que possamos ligá-lo directamente 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:

a laser int = 12 pinMode (laser, OUTPUT) -

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

Nós vamos usar PWM para conduzir o piezo buzzer em um confortável som de nível - você pode experimentar com Usando o tom biblioteca se você queria, mas um simples ruído é tudo que 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 (buzzer, 100) (Ou qualquer número que deseja um máximo de 254) - e analogWrite (buzzer, 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 trabalhar - 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

Use um pouco de fio de modelagem rígida para fixar o módulo de laser para a lâmina do outro servo, assim:

wire-de-laser-módulo

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

anexá-turret até à 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 uma torre 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 explosões, e o tempo entre cada tiro individual.
  • Randomize a posição de início e 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.

Eu também acrescentou um separada fogo() método para estruturar o código um pouco melhor. Ajustar os intervalos de tudo aleatória() funções para acelerar ou desacelerar cada parametrização 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 Servo vert, Horizonte // criar o objeto servo para controlar um pos servoint = 0 - // variável para armazenar o servo positionint a laser = 12-int buzzer = configuração 11-void () {hori.attach (9) -vert.attach (10) - // atribui o servo no pino 9 da objectpinMode servo (laser, OUTPUT) -pinMode (buzzer, OUTPUT) -} void loop () {int timeBetweenBursts = random (200,1000) -int timeBetweenShots = random ( 50,200) -int vertStart = aleatórios (1.180) -int vertEnd = aleatórios (1.180) -int horiStart = aleatórios (1.180) -int horiEnd = aleatórios (1.180) numShots -INT = aleatório (5,20) -int vertChange = (vertEnd - vertStart) / numShots- // quanto para mover eixo vertical por cada shotint horiChange = (horiEnd - horiStart) / numShots-vert.write (vertStart) - // deixá-lo chegar à posição inicial em primeiro lugar, esperar um littlehori.write ( horiStart) -delay (100) -para (int tiro = 0- tiro

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 alterar para obter o efeito desejado. Talvez ele vai vir a calhar para um filme LEGO caseiro?

» » Piu piu! Como construir um laser torre com um arduino