Morsecode-communicatie met lasermodule – Tweezijdig Arduino-project
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino UNO | 2 |
| Breadboard | 2 |
| Autodesk LASER TRANSMITTER | 1 |
| Fotoweerstand (LDR) | 1 |
| Draadjes (jumper wires) | 1 set |
Apps en online diensten
| App |
|---|
| Arduino IDE |
Over dit project
Morsecode
Morsecode betekent het omzetten van alfanumerieke symbolen (letters en cijfers) in stippen en strepen. Elk symbool heeft een unieke combinatie van stippen en strepen. Morsecode wordt gebruikt om geheime of gecodeerde data te verzenden. In dit project heb ik de zender- en ontvangersectie van de Morsecode-communicatie gemaakt. De uniekheid van dit project ten opzichte van andere Morsecode-projecten is dat het algoritme van de ontvangersectie echt simpel is.
Stap 1: Zendersectie
De zendersectie stuurt de invoerdata via de LASER.
Benodigde hardware
- Arduino Uno
- LASER-transmitter
- Breadboard
- Draadjes
Aansluitingen
Sluit de positieve pin van de LASER aan op digitale pin 13 van de Arduino (zoals in de code geprogrammeerd). Sluit de GND van de LASER aan op de GND van de Arduino.
Programma
Het algoritme van de code:
- De te verzenden data wordt als invoer bewaard in een char-array.
- De LED-pin die moet knipperen wordt gedefinieerd.
- De snelheid van de Morsecode wordt ingesteld.
- Stippen en strepen worden gedefinieerd.
- Het ingevoerde karakter wordt gecontroleerd via switch-case en de bijbehorende HIGH/LOW van de LASER wordt verstuurd.
Stap 2: Ontvangersectie
De gecodeerde data die de zender uitzendt wordt ontvangen, verwerkt en op de Seriële Monitor getoond.
Benodigde hardware
- Arduino Uno
- LDR (fotoweerstand)
- Weerstand – 10k ohm
- Breadboard
- Draadjes
Aansluitingen
Sluit één einde van de LDR aan op 5V van de Arduino. Het andere einde van de LDR verbindt met de 10k ohm weerstand EN met analoge ingang A0. Het andere einde van de weerstand gaat naar GND van de Arduino.
Programma
Het algoritme in de ontvangersectie is het makkelijkste algoritme dat er is. Het is gebaseerd op observaties.
- Als er geen LASER op de LDR valt, is de waarde minder dan 1000. Als de waarde boven 1000 komt zelfs als de LASER niet brandt, moet je de LDR afschermen tegen extra licht. Hier is de LDR afgedekt met een koepel van zwart grafisch papier.
- Als de LASER op de LDR valt, gaat de waarde boven 1000, en dan gaat het in een lus.
- Nu de waarden kwantificeren: als de waarde boven 1000 gaat, geef het een '1', anders een '0'.
- In de lus tellen we het aantal '1's en '0's. Stel tellers 'a' en 'f' in. Tel het aantal '1's en bewaar in 'a', tel het aantal '0's en bewaar in 'f'.
- Controleer nu de specifieke waarden van 'a' en 'f'. Elk karakter heeft een andere set van 'a' en 'f'. De matchende waarde wordt getoond.
Beperking
De bijgevoegde code print specifieke karakters. Je kunt de code uitbreiden met combinaties om alle karakters weer te geven. Het hoofddoel van de code is om het algoritme en de werking te begrijpen.
Code
CODE-1 – VOOR HET BESTUREN VAN DE LASER EMITTER Arduino
int led13 = 13;
int dotLen = 200;
int dashLen = dotLen * 3;
int elemPause = dotLen;
int Spaces = dotLen * 3;
int wordPause = dotLen * 7;
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);
}
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); MorseDash(); 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);
}
}
CODE-2 – VOOR DE ONTVANGER 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);
}
Aangepaste onderdelen en behuizingen
Schema's
Productieproces
- Uitgebreide Gids voor Lasermarkering: Typen, Voordelen en Toepassingen
- Laser Pointer: Ontwerp, Productie en Veiligheidsoverzicht
- Semiconductor Lasers: Precieze Lichtgeneratie voor Moderne Technologie
- Streepjescodescanner: Technologie, Ontwerp en Toekomstige Trends
- Laser-gestuurde Raketten: Ontwikkeling, Productie en Strategische Impact
- Een interactieve laserprojector bouwen met Zigbee-sensoren en Gravio Edge-platform
- UART-communicatie tot stand brengen tussen Raspberry Pi 4 en HiFive1-boards
- Gebaren-gecontroleerde Robot Aangedreven door Raspberry Pi
- Een DTMF-decoder bouwen met alleen een Arduino – Geen extra IC's nodig
- Python 3 naar Arduino UNO: Eenvoudige Commando Besturing en LED Demo
- 4 Belangrijkste Voordelen van Low-code Oplossingen voor Industriële Productie