Communication en Code Morse par Module Laser – Projet Arduino Double Face
Composants et fournitures
| Arduino UNO | ×2 |
| Plaque d'essai (breadboard) | ×2 |
| Module émetteur LASER (Autodesk) | ×1 |
| Photorésistance (LDR) | ×1 |
| Fils de connexion (jumper wires) | ×1 |
Applications et services en ligne
| Arduino IDE |
À propos de ce projet
Code Morse
Le code Morse convertit les symboles alphanumériques (lettres et chiffres) en suites de points et de traits. Chaque symbole a une combinaison unique. Il sert à transmettre des données secrètes ou codées. Ce projet réalise l'émetteur et le récepteur d'une communication Morse. Son originalité : l'algorithme du récepteur est bien plus simple que les approches classiques.
Étape 1 : Section Émetteur
L'émetteur envoie les données d'entrée via le LASER.
Matériel requis
- Arduino Uno
- Émetteur LASER
- Plaque d'essai
- Fils de connexion
Connexions
Broche positive du LASER → broche numérique 13 de l'Arduino (selon le code).
GND du LASER → GND de l'Arduino.
Programme
Algorithme :
- Données à transmettre stockées dans un tableau de caractères.
- Broche LED/LASER définie.
- Vitesse du code Morse réglée.
- Points et traits définis.
- Chaque caractère d'entrée est testé via
switch/caseet la séquence correspondante d'états HIGH/LOW du LASER est émise.
Étape 2 : Section Récepteur
Le récepteur capte le signal codé, le traite et l'affiche sur le Moniteur Série.
Matériel requis
- Arduino Uno
- LDR (photorésistance)
- Résistance 10 kΩ
- Plaque d'essai
- Fils de connexion
Connexions
Une patte du LDR → 5 V Arduino.
Autre patte du LDR → résistance 10 kΩ + entrée analogique A0.
Autre patte de la résistance → GND Arduino.
Programme
L'algorithme du récepteur est le plus simple qu'on trouve sur Internet, basé sur l'observation :
- Sans laser sur la LDR, la valeur lue < 1000. Si valeur > 1000 même sans laser, protégez la LDR de la lumière parasite (ici, dôme en papier noir).
- Quand le laser frappe la LDR, la valeur dépasse 1000 → entrée dans une boucle.
- Quantification : valeur > 1000 → « 1 », sinon « 0 ».
- Dans la boucle, comptez les « 1 » (compteur
a) et les « 0 » (compteurf). - Chaque caractère a un couple (
a,f) unique. La correspondance affichée donne le caractère.
Limitation
Le code joint ne gère que quelques caractères. Vous pouvez l'étendre avec des combinaisons pour couvrir tout l'alphabet. L'objectif principal est de faire comprendre l'algorithme et le fonctionnement.
Code
CODE-1 - POUR CONTRÔLER L'ÉMETTEUR LASERCODE-2 - POUR LE RÉCEPTEUR
CODE-1 - POUR CONTRÔLER L'ÉMETTEUR LASER Arduino
int led13 = 13;
int dotLen = 200; // durée d'un 'point'
int dashLen = dotLen * 3; // durée d'un 'trait' = 3 points
int elemPause = dotLen; // pause entre éléments d'un caractère
int Spaces = dotLen * 3; // espace entre caractères
int wordPause = dotLen * 7; // pause entre mots
void setup() {
pinMode(led13, OUTPUT);
}
void loop() {
for (int i = 0; i < sizeof(stringToMorseCode) - 1; i++) {
char tmpChar = stringToMorseCode[i];
tmpChar = toLowerCase(tmpChar);
GetChar(tmpChar);
}
LightsOff(8000); // longue pause avant de recommencer
}
void MorseDot() {
digitalWrite(led13, HIGH);
delay(dotLen);
}
void MorseDash() {
digitalWrite(led13, HIGH);
delay(dashLen);
}
void LightsOff(int delayTime) {
digitalWrite(led13, LOW);
delay(delayTime);
}
void GetChar(char tmpChar) {
switch (tmpChar) {
case 'a': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'b': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'c': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'd': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'e': MorseDot(); LightsOff(elemPause); break;
case 'f': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'g': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'h': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'i': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'j': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'k': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'l': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'm': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'n': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'o': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'p': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 'q': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'r': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 's': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
case 't': MorseDash(); LightsOff(elemPause); break;
case 'u': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'v': MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'w': MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'x': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'y': MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); break;
case 'z': MorseDash(); LightsOff(elemPause); MorseDash(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); MorseDot(); LightsOff(elemPause); break;
default: LightsOff(Spaces); // espace pour caractères non gérés
}
}
CODE-2 - POUR LE RÉCEPTEUR Arduino
int sensorPin = 0;
int sensorValue = 0;
int a, f;
void setup() {
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue > 1000) {
for (int i = 0; i <= 13; i++) {
sensorValue = analogRead(sensorPin);
if (sensorValue > 1000) {
a++;
delay(200);
} else {
f++;
delay(200);
}
}
}
if (a == 4 && f == 10) { Serial.print("a"); }
if (a == 6 && f == 8) { Serial.print("b"); }
if (a == 8 && f == 6) { Serial.print("c"); }
if (a == 1 && f == 13) { Serial.print("e"); }
if (a == 2 && f == 12) { Serial.print("i"); }
if (a == 10 && f == 4) { Serial.print("j"); }
if (a == 7 && f == 7) { Serial.print("g"); }
if (a == 9 && f == 5) { Serial.print("o"); }
if (a == 3 && f == 11) { Serial.print("s"); }
f = a = 0;
delay(200);
}
Pièces personnalisées et boîtiers
Schémas
Processus de fabrication
- Guide complet du marquage laser : types, avantages et applications
- Pointeur laser : conception, fabrication et aperçu de la sécurité
- Lasers à semi-conducteurs : Génération de lumière de précision pour la technologie moderne
- Scanneur de codes-barres : Technologie, conception et tendances futures
- Missiles Guidés Laser : Développement, Fabrication et Impact Stratégique
- Construction d'un projecteur laser interactif avec capteurs Zigbee et plateforme Gravio Edge
- Établir une Communication UART entre Raspberry Pi 4 et Cartes HiFive1
- Robot à commande gestuelle piloté par Raspberry Pi
- 4 avantages clés des solutions Low-Code pour la fabrication industrielle