Índice:

Escritor de código Morse do Arduino: 7 etapas (com imagens)
Escritor de código Morse do Arduino: 7 etapas (com imagens)
Anonim
Image
Image
Gravador de código Arduino Morse
Gravador de código Arduino Morse

Fiz um robô que pode converter qualquer texto em código Morse e depois escrevê-lo !! É feito de papelão e Lego e para a parte eletrônica usei o Arduino e apenas dois motores.

Suprimentos

Placa Arduino Uno Motor de passo Micro servo SG90ULN2003 módulo de driver de motor de passo Módulo de alimentação Módulo de alimentação 4 × Jumper fios6 × Fio duplo fêmea para macho 9V1A Cabo adaptadorUSB Papelão 2 × Cavilhas de madeira 2 × Molas Papel branco PalhaLegoSuper cola Pistola de cola quente Faixa elástica (para fazer um porta-canetas) Cortador de tesoura

Etapa 1: Construindo a Base

Construindo a Base
Construindo a Base
Construindo a Base
Construindo a Base
Construindo a Base
Construindo a Base

Comece construindo a base. O meu tem 4 pinos de largura e 20 pinos de comprimento, depois de construir uma camada com esses comprimentos, eu construí uma borda larga de um pino em volta dela, deixando uma lacuna de um lado para deixar espaço para o motor de passo, então eu adicionei pedaços de ladrilho para a parte do meio onde ficará a tira de papel. O uso de Lego tornou-o muito resistente e fácil de modificar. Para fazer o rolo de papel, cortei tiras de papel A4 de 1,2cm de largura (escolhi essa largura porque é a mesma da roda Lego que usei, você pode aumentar ou diminuir o seu dependendo da roda) e colei as pontas para formar uma tira muito longa, depois enrolei na roda.

Etapa 2: a peça servo

A peça servo
A peça servo
A peça servo
A peça servo
A peça servo
A peça servo

Para esta etapa, você precisa:

  • duas cavilhas de madeira com 4 cm de comprimento
  • duas molas de 2 cm de comprimento
  • uma palha cortada em dois pedaços de 2 cm de comprimento cada
  • um pedaço de papelão de 12 cm por 4 cm
  • dois pedaços de papelão de 4 cm por 1,5 cm
  • um pedaço de papelão de 4 cm por 2 cm

Primeiro, cole os tarugos em uma das peças de 4 por 1,5, depois insira as molas e os canudos nos tarugos e, em seguida, cole o outro pedaço de papelão do outro lado para segurar tudo no lugar.

Em segundo lugar, cole o pedaço de 4 cm por 2 cm no topo dos canudos.

Terceiro, vire a peça inteira e cole um pequeno pino atrás dela, não no meio, mas ligeiramente à esquerda. (Esqueci de adicionar o pequeno pino na primeira foto)

Finalmente, corte um buraco no pedaço grande de papelão do tamanho da frente do servo motor e cole o motor, em seguida, cole a peça que acabamos de fazer com os pinos na peça grande para que quando o servo se mover, empurre o pequeno pino para baixo que, por sua vez, empurra as molas para baixo também.

Acabei cortando cerca de 3cm da parte inferior da peça de 12cm por 4cm e colando nela mais duas peças de 4cm por 1,5cm, cobrindo então com um pedaço de papelão de 5,5cm por 4cm. E para segurar o marcador fiz um pequeno Fiz um laço de elástico e colei em um pequeno pedaço de papelão, depois colei no pedaço de 4 cm por 2 cm que vai descer quando o servo começar. Essas adições impediram que o marcador se movesse de um lado para o outro quando as molas voltassem a subir.

Etapa 3: Adicionando o servo motor e o rolo de papel à base

Adicionando o servo motor e o rolo de papel à base
Adicionando o servo motor e o rolo de papel à base
Adicionando o servo motor e o rolo de papel à base
Adicionando o servo motor e o rolo de papel à base

Eu adicionei mais dois tijolos em um lado da base para apoiar a peça servo e colei no lugar. Então eu adicionei a roda na extremidade da base.

Etapa 4: Construindo a Estrutura do Motor de Passo

Construindo a Estrutura do Motor de Passo
Construindo a Estrutura do Motor de Passo
Construindo a Estrutura do Motor de Passo
Construindo a Estrutura do Motor de Passo
Construindo a Estrutura do Motor de Passo
Construindo a Estrutura do Motor de Passo

Esta etapa foi um pouco desafiadora, porque o motor não foi feito para se encaixar perfeitamente com Lego. No entanto, consegui fazer isso usando os dois orifícios no motor para prendê-lo no lugar. Em seguida, colei uma roda de Lego na ponta do motor e a coloquei bem ao lado da base do lado que deixei aberto na etapa 1.

Etapa 5: toques finais

Toques finais
Toques finais
Toques finais
Toques finais
Toques finais
Toques finais
Toques finais
Toques finais

Acrescentei duas peças de arco para cobrir a roda e fixar o papel no lugar. E adicionei duas peças de arco menores, uma para segurar os fios do motor de passo e outra para segurar o papel. Por último, mudei a roda do motor de passo para uma ligeiramente maior que movia o papel melhor do que a roda antiga.

Etapa 6: Eletrônica

Eletrônicos
Eletrônicos
Eletrônicos
Eletrônicos

Finalmente, você deve conectar os motores ao Arduino e fazer o upload do código.

Começaremos com o servo motor, conectaremos o fio marrom (o fio terra) ao pino GND, então o fio vermelho (o fio de alimentação) ao pino 5V, e o fio laranja (o fio de sinal) ao Dig # 5 alfinete. Em seguida, o motor de passo, conecte 1N1 ao Dig # 11, 1N2 ao Dig # 10, 1N3 ao Dig # 9, 1N4 ao Dig # 8, o 5V ao lado positivo da placa de ensaio e o pino de aterramento ao lado negativo do placa de ensaio. E não se esqueça de conectar o módulo da fonte de alimentação à placa de ensaio, certificando-se de que seus lados positivo e negativo se alinhem corretamente aos lados correspondentes da placa de ensaio. Se você se esquecer de fazer isso, você reverterá o poder do seu projeto, e você não quer fazer isso.

Para o código, escrevi quatro métodos, um para escrever um ponto, um para escrever um travessão e dois para deixar espaço entre cada letra e cada palavra. Dessa forma, posso apenas chamar esses métodos quando precisar deles, em vez de escrevê-los novamente para cada letra. Em seguida, escrevi um loop for que passa por cada letra do texto e o escrevi. Dentro dele, escrevi uma declaração if para cada letra, mas você pode escrever em uma declaração switch, se preferir. Claro, você pode adicionar ao código para permitir que o programa leia os números. Quando toda a fiação estiver pronta, apenas copie e cole o código em seu IDE. Não se esqueça de instalar as bibliotecas de stepper, servo e string. Depois disso, você está pronto para ir.

Como funciona

Quando o Arduino inicia o programa olha a primeira letra do texto., E dependendo de qual é, ele chama as funções que o escrevem em código Morse. Por exemplo, quando a função de ponto é chamada, o servo motor é definido para 160, que move a caneta para baixo, e depois é definido de volta para 90, o que permite que as molas voltem movendo a caneta com elas. E se a função traço for chamada, o servo move a caneta para baixo, então o motor de passo gira a roda que puxa o papel fazendo a caneta escrever um traço. E se uma das funções espaciais é chamada, o motor de passo gira mas com a caneta para cima puxa o papel fazendo um espaço entre as letras ou palavras. Quando terminar, vai para a próxima letra e repete o mesmo processo. Espero que você goste;)

O código

#incluir

#include #include #include const int stepsPerRevolution = 150; // Esta é a variável para o motor de passo String frase = "* hello"; // Altere esta variável para escrever palavras diferentes, mas apenas em letras minúsculas e inicie sua palavra com "*" Stepper myStepper (stepsPerRevolution, 8, 10, 9, 11); Servo myServo; // Este é o método que faz o robô escrever um ponto void dot () {Serial.println ("ponto start"); myServo.write (160); atraso (1000); myServo.write (90); atraso (1000); myStepper.step (stepsPerRevolution); atraso (1000); Serial.println ("ponto concluído"); } // Este é o método que faz com que o robô escreva um travessão void dash () {Serial.println ("dash start"); myServo.write (160); atraso (1000); myStepper.step (stepsPerRevolution); atraso (1000); myServo.write (90); atraso (1000); myStepper.step (stepsPerRevolution); atraso (1000); Serial.println ("traço concluído"); } // Este é o método que faz com que o robô deixe um espaço entre cada letra void space () {Serial.println ("space start"); myServo.write (90); atraso (1000); myStepper.step (200); atraso (1000); Serial.println ("espaço concluído"); } // Este é o método que faz com que o robô deixe um espaço maior entre cada palavra void bigSpace () {myServo.write (90); myStepper.step (250); atraso (1000); } void setup () {// coloque seu código de configuração aqui, para ser executado uma vez: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); primeiro int = frase.indexOf ('*'); // este loop for passa por cada letra da string e, em seguida, chama os métodos corretos para escrevê-la para (int i = 0; i <frase.length (); i ++) {if (frase.charAt (primeiro + i) == 'a') {Serial.print (".-"); ponto(); traço(); espaço(); } else if (frase.charAt (primeiro + i) == 'b') {Serial.print ("-…"); traço(); ponto(); ponto(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 'c') {Serial.print ("-.-."); traço(); ponto(); traço(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 'd') {Serial.print ("-.."); traço(); ponto(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 'e') {Serial.print ("."); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 'f') {Serial.print ("..-."); ponto(); ponto(); traço(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 'g') {Serial.print ("-."); traço(); traço(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 'h') {Serial.print ("…."); ponto(); ponto(); ponto(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 'i') {Serial.print (".."); ponto(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 'j') {Serial.print (".---"); ponto(); traço(); traço(); traço(); espaço(); } else if (frase.charAt (primeiro + i) == 'k') {Serial.print ("-.-"); traço(); ponto(); traço(); espaço(); } else if (frase.charAt (primeiro + i) == 'l') {Serial.print (".-.."); ponto(); traço(); ponto(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 'm') {Serial.print ("-"); traço(); traço(); espaço(); } else if (frase.charAt (primeiro + i) == 'n') {Serial.print ("-."); traço(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 'o') {Serial.print ("---"); traço(); traço(); traço(); espaço(); } else if (frase.charAt (primeiro + i) == 'p') {Serial.print (".--."); ponto(); traço(); traço(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 'q') {Serial.print ("--.-"); traço(); traço(); ponto(); traço(); espaço(); } else if (frase.charAt (primeiro + i) == 'r') {Serial.print (".-."); ponto(); traço(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 's') {Serial.print ("…"); ponto(); ponto(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == 't') {Serial.print ("-"); traço(); espaço(); } else if (frase.charAt (primeiro + i) == 'u') {Serial.print ("..-"); ponto(); ponto(); traço(); espaço(); } else if (frase.charAt (primeiro + i) == 'v') {Serial.print ("… -"); ponto(); ponto(); ponto(); traço(); espaço(); } else if (frase.charAt (primeiro + i) == 'w') {Serial.print (".--"); ponto(); traço(); traço(); espaço(); } else if (frase.charAt (primeiro + i) == 'x') {Serial.print ("-..-"); traço(); ponto(); ponto(); traço(); espaço(); } else if (frase.charAt (primeiro + i) == 'y') {Serial.print ("-.--"); traço(); ponto(); traço(); traço(); espaço(); } else if (frase.charAt (primeiro + i) == 'z') {Serial.print ("-.."); traço(); traço(); ponto(); ponto(); espaço(); } else if (frase.charAt (primeiro + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Não escreva nada aqui}

Etapa 7: Solução de problemas

A roda não está se movendo

Pode haver muito atrito entre a roda e o papel, tente elevar um pouco a roda ou trocá-la.

A roda puxa o papel, mas continua girando sem puxar o papel

Certifique-se de colar a roda no centro do motor de passo

Os pontos e travessões estão conectados

Verifique se as funções ponto, travessão e espaço estão escritas corretamente, elas devem ser assim:

// Este é o método que faz o robô escrever um dotvoid dot () {Serial.println ("dot start"); myServo.write (160); atraso (1000); myServo.write (90); atraso (1000); myStepper.step (stepsPerRevolution); atraso (1000); Serial.println ("ponto concluído"); }

// Este é o método que faz o robô escrever um travessão

void dash () {Serial.println ("dash start"); myServo.write (160); atraso (1000); myStepper.step (stepsPerRevolution); atraso (1000); myServo.write (90); atraso (1000); myStepper.step (stepsPerRevolution); atraso (1000); Serial.println ("traço concluído"); }

// Este é o método que faz o robô deixar um espaço entre cada letra

void space () {Serial.println ("space start"); myServo.write (90); atraso (1000); myStepper.step (200); atraso (1000); Serial.println ("espaço concluído"); }

Recomendado: