Komunikasi Kode Morse dengan Modul Laser – Proyek Arduino Dua Sisi
Komponen dan Perlengkapan
Arduino UNO × 2
Papan roti (generic) × 2
Pemancar LASER × 1
Photo resistor (LDR) × 1
Kabel jumper (generic) × 1
Aplikasi dan Layanan Online
Arduino IDE
Tentang Proyek Ini
Kode Morse mengonversi simbol alfanumerik (huruf dan angka) menjadi titik dan garis. Setiap simbol memiliki pola unik, sehingga cocok digunakan untuk mengirim data rahasia atau terenkripsi. Proyek ini mencakup bagian pemancar dan penerima komunikasi Kode Morse. Keunikannya adalah algoritma penerima yang sangat sederhana dibanding proyek serupa lainnya.
Langkah 1: Bagian Pemancar
Bagian Pemancar digunakan untuk mengirim data input melalui LASER.
Perangkat Keras yang Diperlukan
Arduino Uno
Pemancar LASER
Papan roti
Kabel jumper
Koneksi
Hubungkan pin positif LASER ke pin digital 13 Arduino. Hubungkan GND LASER ke GND Arduino.
Program
Algoritma kode adalah sebagai berikut:
Data yang akan ditransmisikan disimpan sebagai input dalam array karakter.
Pin LED yang akan ditransmisikan didefinisikan.
Kecepatan Kode Morse diatur.
Titik dan garis didefinisikan.
Karakter input diperiksa melalui switch case, dan sinyal HIGH/LOW LASER yang sesuai ditransmisikan.
Langkah 2: Bagian Penerima
Data terkode yang dikirim oleh pemancar diterima dan diproses, kemudian ditampilkan di Serial Monitor.
Perangkat Keras yang Diperlukan
Arduino Uno
LDR
Resistor 10 K ohm
Papan roti
Kabel jumper
Koneksi
Hubungkan satu ujung LDR ke 5V Arduino. Hubungkan ujung lainnya ke resistor 10K ohm serta input analog A0. Hubungkan ujung resistor lainnya ke GND Arduino.
Program
Algoritma yang digunakan di bagian penerima adalah algoritma termudah dan didasarkan pada pengamatan:
Jika tidak ada LASER yang jatuh pada LDR, nilai LDR akan kurang dari 1000. Jika nilai melebihi 1000 meskipun LASER menyala, tutup LDR dari cahaya ekstra (misalnya dengan domo kertas hitam).
Ketika LASER jatuh pada LDR, nilai melebihi 1000 dan memasuki loop.
Kuantisasi nilai: jika lebih dari 1000, tetapkan sebagai '1', jika tidak sebagai '0'.
Di dalam loop, hitung jumlah '1' dan '0'. Atur counter 'a' dan 'f'. Simpan jumlah '1' di 'a' dan jumlah '0' di 'f'.
Periksa nilai spesifik 'a' dan 'f'. Setiap karakter memiliki pasangan 'a' dan 'f' yang berbeda. Nilai yang cocok akan ditampilkan.
Keterbatasan
Program yang disertakan digunakan untuk mencetak karakter tertentu. Anda dapat mengembangkan kode lebih lanjut dengan kombinasi untuk menampilkan semua karakter. Tujuan utama kode adalah memahami algoritma dan cara kerjanya.
Kode
KODE-1 – Mengontrol Pemancar LASER
KODE-2 – Ujung Penerima
KODE-1 – Mengontrol Pemancar LASER
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);
}
}
KODE-2 – Ujung Penerima
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);
}