Construa um Transmissor de Código Morse com Arduino – Guia DIY Fácil
Componentes e Materiais
| Componente | Qtd | Observações |
|---|---|---|
| Arduino UNO | 1 | |
| Chave tátil 12 mm (SparkFun) | 2 | Usei botões de 2 pinos |
| LED (genérico) | 1 | |
| Buzzer | 1 | |
| Resistor 330 Ω | 4 | |
| Protoboard (genérica) | 1 | |
| Jumpers (genéricos) | 10 | Para conexões Arduino-protoboard |
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Descrição da Ideia
Todos nos comunicamos através de nossos sentidos naturais (fala, gestos...). A parte emocionante começa quando se quer compartilhar informação secreta. Como fazer? A resposta está em transmitir a informação de forma que terceiros não entendam sem a chave. Para isso usei Código Morse, mas outros métodos também funcionam.
O que é Código Morse?
Código Morse é uma forma de comunicação que representa letras originais por combinações de pontos (.) e traços (–). Ex.: A → .– | B → –...
Mais informações: https://wrvmuseum.org/morsecodehistory.htm
Por que Escolhi Código Morse?
Recentemente vi um filme em que um agente passava informações clicando um botão e, no receptor, outros decodificavam. Pensei em reproduzir isso com Arduino e componentes básicos.
Como o Projeto Funciona?
Após montar o circuito na protoboard e carregar o sketch, abra o Monitor Serial. Você verá algo como:
Siga as instruções e estará pronto. Em caso de dúvidas, assista ao vídeo de demonstração.
Código
Código Fonte do Código Morse
C/C++
Pronto para carregar o sketch. Abra a Arduino IDE: Arquivo → Abrir → MorseCode.ino e clique em Carregar.
/* Demonstração de Comunicação em CÓDIGO MORSE usado para enviar informações secretamente
usando combinações de pontos . e traços - Thanks to open source community By Jalal Mansoori */
#define SIZE 26
const int ledPin = 8;
const int speakerPin = 12;
const int dotButton = 2;
const int dashButton = 7;
String morseCode = "";
String text = "";
int characterAscii = 0;
int startPos = 0, endPos = 0;
int startPos1 = 0, endPos1 = 0;
String characterCode = "";
int dashButtonState = 0;
int dotButtonState = 0;
// Array de Código Morse para letras A-Z
String letters[SIZE] = {
// A a I
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",
// J a R
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
// S a Z
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."
};
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(dotButton, INPUT);
pinMode(dashButton, INPUT);
Serial.begin(9600);
Serial.println("*************************************************************");
Serial.println(" Demonstração de Código Morse ");
Serial.println("************************************************************* ");
Serial.println("\nInstruções");
Serial.println("1. Primeiro escreva seu código Morse");
Serial.println("2. Quando terminar, digite 1 na caixa acima e pressione Enter ou clique Enviar");
Serial.println("3. Para espaço entre letras digite 2 e Enter");
Serial.println("4. Para espaço entre palavras digite 3 e Enter");
Serial.println("5. Pronto! A tradução será mostrada");
Serial.println("\n\nDigite seu Código Morse Aqui ");
}
void loop() {
while (Serial.available() > 0) {
int ascii = Serial.read();
switch (ascii) {
case 49: // '1'
Serial.print("\n");
morseCode.concat('#'); // Marca fim
Serial.print("\nSua Tradução Morse: ");
endPos1 = morseCode.indexOf('#');
while (endPos1 < morseCode.length()) {
extractLetters(morseCode.substring(startPos1, endPos1));
startPos1 = endPos1 + 1;
if (startPos1 == morseCode.length()) break;
endPos1 = morseCode.indexOf('#', startPos1);
}
startPos1 = 0; endPos1 = 0; text = ""; morseCode = "";
Serial.println("\n\nDigite seu Código Morse Aqui ");
break;
case 50: // '2' - espaço entre letras
morseCode.concat("@");
Serial.print("@");
delay(200);
break;
case 51: // '3' - espaço entre palavras
morseCode.concat("#");
Serial.print("#");
delay(200);
break;
}
}
process();
}
void turnONLedSpeaker() {
digitalWrite(ledPin, HIGH);
tone(speakerPin, 4699, 300); // frequência, duração ms
}
void process() {
dotButtonState = digitalRead(dotButton);
dashButtonState = digitalRead(dashButton);
if (dashButtonState == HIGH) {
turnONLedSpeaker();
morseCode.concat("-");
Serial.print("-");
delay(200);
} else if (dotButtonState == HIGH) {
turnONLedSpeaker();
morseCode.concat(".");
Serial.print(".");
delay(200);
} else {
digitalWrite(ledPin, LOW);
}
}
char convertIntoText(String characterCode) {
characterAscii = 65; // 'A'
for (int index = 0; index < SIZE; index++) {
if (characterCode == letters[index]) return characterAscii;
characterAscii++;
}
return '?';
}
void extractLetters(String words) {
words.concat('@');
endPos = words.indexOf('@');
while (endPos < words.length()) {
characterCode = words.substring(startPos, endPos);
text.concat(convertIntoText(characterCode));
startPos = endPos + 1;
characterCode = "";
if (startPos == words.length()) break;
endPos = words.indexOf('@', startPos);
}
Serial.print(text);
Serial.print(" ");
startPos = 0; endPos = 0; text = "";
}
Esquemáticos
Instruções para pinos digitais do Arduino à protoboard:
- Pino D2 → uma perna do botão 1 (ponto)
- Pino D7 → uma perna do botão 2 (traço)
- Pino D8 → ânodo do LED via resistor
- Pino D12 → terminal positivo do buzzer via resistor
Demais conexões veja a imagem do esquema.
Processo de manufatura
- Controle de Brilho de LED com PWM via Botão no Arduino Mega
- Construa um Decodificador DTMF Usando Apenas um Arduino – Sem CIs Externos
- Construa um Dispositivo de Levitação Ultrassônica com Arduino – Guia Passo a Passo
- Comunicação em Código Morse com Módulo Laser – Projeto Arduino de Dois Lados
- Construa um Pote Inteligente IoT com ESP8266, Arduino e Sensor Ultrassônico – Monitoramento em Tempo Real
- Construa um Homem de Ferro com Arduino: Componentes, Sensores e Guia Passo a Passo
- Find Me: Localizador Inteligente de Objetos com Arduino e Bluetooth
- Medir a Massa da Terra com Arduino: Guia DIY Passo a Passo
- Controlador de Umidificador DIY com Arduino e Relé – Configuração Segura de Alta Tensão
- Medição de Distância em Tempo Real com Sonar Arduino e Visualização no Processing