Transmisor de Código Morse con Arduino – Guía DIY Fácil
Componentes y materiales
- Arduino UNO – 1 ud.
- Pulsadores 12 mm (2 pines) – 2 uds.
- LED genérico – 1 ud.
- Zumbador – 1 ud.
- Resistencia 330 Ω – 4 uds.
- Protoboard genérica – 1 ud.
- Cables jumper – 10 uds.
Software y servicios online
- Arduino IDE
Sobre el proyecto
Descripción de la idea
Nos comunicamos mediante sentidos naturales. La parte emocionante empieza cuando quieres compartir información secreta. ¿Cómo hacerlo para que un tercero no la entienda sin la clave? La respuesta está en transmitir la información codificada. Para ello usé código Morse (también sirve otro método).
¿Qué es el código Morse?
Sistema de comunicación que representa letras mediante combinaciones de puntos (.) y rayas (–). Ej.: A → .-, B → -....
Más info: wrvmuseum.org/morsecodehistory.htm

Por qué elegí código Morse
Vi una película donde un agente transmitía información pulsando un botón y el receptor la decodificaba. Quise replicarlo con Arduino y componentes básicos.
Cómo funciona el proyecto
Muy simple: montas el circuito en protoboard, subes el sketch y abres el Monitor Serie. Verás instrucciones:

Sigue las instrucciones y listo. Si tienes dudas, mira el vídeo de demostración.
Código
Código fuente Morse (C/C++)
/* Morse Code Communication demo - 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;
String letters[SIZE] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."
};
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(dotButton, INPUT);
pinMode(dashButton, INPUT);
Serial.begin(9600);
Serial.println("*************************************************************");
Serial.println(" Demonstration of Morse Code ");
Serial.println("************************************************************* ");
Serial.println("\nInstructions");
Serial.println("1. First Write Your Morse code");
Serial.println("2. When done write 1 and press Enter/Send");
Serial.println("3. For space between letters write 2 and press Enter");
Serial.println("4. For space between words write 3 and press Enter");
Serial.println("5. Translation will be shown");
Serial.println("\n\nEnter Your Morse Code Here ");
}
void loop() {
while (Serial.available() > 0) {
int ascii = Serial.read();
switch (ascii) {
case 49: // '1'
Serial.print("\n");
morseCode.concat('#');
Serial.print("\nYour Morse code Translation : ");
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\nEnter Your Morse Code Here ");
break;
case 50: // '2' espacio entre letras
morseCode.concat("@"); Serial.print("@"); delay(200); break;
case 51: // '3' espacio entre palabras
morseCode.concat("#"); Serial.print("#"); delay(200); break;
}
}
process();
}
void turnONLedSpeaker() {
digitalWrite(ledPin, HIGH);
tone(speakerPin, 4699, 300);
}
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 i = 0; i < SIZE; i++) {
if (characterCode == letters[i]) 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
Instrucciones de pines digitales Arduino → protoboard:
- Pin D2 → pata pulsador 1 (punto)
- Pin D7 → pata pulsador 2 (raya)
- Pin D8 → ánodo LED a través de resistencia
- Pin D12 → ánodo zumbador a través de resistencia
Resto de conexiones en la imagen:
Proceso de manufactura
- Control de Brillo LED con PWM mediante Pulsador en Arduino Mega
- Construye un Decodificador DTMF Solo con Arduino – Sin CI Externos
- Construye un Dispositivo de Levitación Ultrasónica con Arduino – Guía Paso a Paso
- Comunicación Código Morse con Módulo Láser – Proyecto Arduino de Doble Lado
- Construye un tarro inteligente IoT con ESP8266, Arduino y sensor ultrasónico: Monitorización en tiempo real
- Construye un Iron Man animado con Arduino: componentes, sensores y guía paso a paso
- Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
- Mide la masa de la Tierra con Arduino: Guía paso a paso DIY
- Controlador de Humidificador DIY con Arduino y Relé: Configuración Segura de Alto Voltaje
- Medición de Distancia en Tiempo Real con Sonar Arduino y Visualización en Processing
- Contador Inteligente de Plazas de Aparcamiento: Seguimiento en Tiempo Real con Arduino, Processing y PHP