Construire un Émetteur Morse avec Arduino – Guide DIY Facile
Composants et fournitures
| Composant | Quantité | Notes |
|---|---|---|
| Arduino UNO | 1 | |
| Bouton poussoir 12 mm (SparkFun) | 2 | Boutons 2 broches utilisés |
| LED (générique) | 1 | |
| Buzzer | 1 | |
| Résistance 330 Ω | 4 | |
| Plaque d'essai (breadboard) | 1 | |
| Fils de connexion (jumper wires) | 10 | Pour connexions Arduino–breadboard |
Applications et services en ligne
- Arduino IDE
À propos de ce projet
Description de l'idée
Nous communiquons naturellement via nos sens (parole, gestes...). Mais comment transmettre une information secrète ? La réponse : encoder le message de façon à ce qu'un tiers ne le comprenne pas sans la clé. J'ai choisi le code Morse pour cela.
Qu'est-ce que le code Morse ?
Le code Morse représente chaque lettre par une combinaison de points (.) et de traits (–). Exemple : A → .– ; B → –...
Plus d'infos : Histoire du code Morse

Pourquoi le code Morse ?
Inspiré par un film où un agent transmettait des infos en appuyant sur un bouton. J'ai voulu reproduire ce principe avec Arduino et des composants de base.
Comment ça marche ?
Une fois le circuit monté et le sketch téléversé, ouvrez le Moniteur Série. Suivez les instructions affichées :

- Appuyez sur le bouton « point » ou « trait » pour saisir votre code Morse.
- Envoyez « 1 » pour traduire.
- « 2 » = espace entre lettres ; « 3 » = espace entre mots.
La traduction s'affiche dans le moniteur série. La LED et le buzzer donnent un retour visuel/sonore.
Code source
/* Morse Code Communication - by Jalal Mansoori - Domaine public */
#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, dotButtonState = 0;
String letters[SIZE] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."
};
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(dotButton, INPUT);
pinMode(dashButton, INPUT);
Serial.begin(9600);
Serial.println("*************************************************************");
Serial.println(" Demonstration de Code Morse ");
Serial.println("*************************************************************");
Serial.println("\nInstructions");
Serial.println("1. Ecrivez votre code Morse (points/traits)");
Serial.println("2. Tapez 1 + Entree pour traduire");
Serial.println("3. Tapez 2 + Entree pour espace entre lettres");
Serial.println("4. Tapez 3 + Entree pour espace entre mots");
Serial.println("5. La traduction s'affichera");
Serial.println("\n\nEntrez votre code Morse ici : ");
}
void loop() {
while (Serial.available() > 0) {
int ascii = Serial.read();
switch (ascii) {
case 49: // '1'
Serial.print("\n");
morseCode.concat('#');
Serial.print("\nVotre traduction : ");
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\nEntrez votre code Morse ici : ");
break;
case 50: // '2'
morseCode.concat("@"); Serial.print("@"); delay(200); break;
case 51: // '3'
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 = "";
}
Schéma de câblage
Instructions pour les pins numériques Arduino → breadboard :
- Pin D2 → une patte du bouton 1 (point)
- Pin D7 → une patte du bouton 2 (trait)
- Pin D8 → anode LED via résistance
- Pin D12 → borne + buzzer via résistance
- Les autres connexions : voir l'image du schéma ci-dessous.
Processus de fabrication
- Contrôler la Luminosité de LEDs par PWM avec un Bouton Poussoir sur Arduino Mega
- Construire un décodeur DTMF avec un Arduino seul – Aucun CI supplémentaire nécessaire
- Construire un dispositif de lévitation ultrasonique avec Arduino – Guide étape par étape
- Communication en Code Morse par Module Laser – Projet Arduino Double Face
- Bocal Intelligent IoT avec ESP8266, Arduino et Capteur Ultrasonique – Surveillance Temps Réel
- Construire un Iron Man animé avec Arduino : capteurs, sons et relais
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
- Mesurer la masse de la Terre avec Arduino : Guide DIY étape par étape
- Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée