Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Buat Transceiver Kode Morse dengan Arduino UNO – Proyek Komunikasi Praktis

Komponen dan Perlengkapan

Buat Transceiver Kode Morse dengan Arduino UNO – Proyek Komunikasi Praktis
Arduino UNO
×2
Buat Transceiver Kode Morse dengan Arduino UNO – Proyek Komunikasi Praktis
LED (generik)
×2
Buat Transceiver Kode Morse dengan Arduino UNO – Proyek Komunikasi Praktis
Photo resistor
×1
Buat Transceiver Kode Morse dengan Arduino UNO – Proyek Komunikasi Praktis
Buzzer
×1

Tentang Proyek Ini

Buat Transceiver Kode Morse dengan Arduino UNO – Proyek Komunikasi Praktis

Saya mengajar kelas hari ini tentang Sistem Komunikasi dan ingin siswa saya belajar dengan memvisualisasikan dan mengalami langsung. Kami melakukan beberapa eksperimen untuk memulai dari Zaman Batu dan memahami kebutuhan akan komunikasi dan apa yang dimaksud dengan Bahasa dan Tata Bahasa, apa itu komunikasi yang andal, sinyal, pesan, dll.

Saat membahas semua hal ini, kami sampai pada titik di mana kami ingin mendefinisikan bahasa kita sendiri untuk komunikasi Visual, dan di sana kami menciptakan Kode Morse!

Jelas bahwa mempelajari Kode Morse akan menjadi tugas yang melelahkan bagi masing-masing dari kita, dan oleh karena itu kami memerlukan mesin. Jadi, kami memutuskan untuk menulis program kecil yang dapat mengkode string yang diberikan ke Kode Morse yang setara dan decoder lain yang dapat memberikan string kembali untuk aliran Kode Morse yang diberikan.

Untuk menemukan Kode Morse untuk karakter, saya merujuk tabel berikut –

Buat Transceiver Kode Morse dengan Arduino UNO – Proyek Komunikasi Praktis

Untuk menerjemahkan Kode Morse ke karakter yang setara, dapat diorganisir menjadi pohon biner seperti di bawah ini. Dengan setiap 'titik' bergerak ke sub pohon kiri dan 'garis' bergerak ke sub pohon kanan.

Buat Transceiver Kode Morse dengan Arduino UNO – Proyek Komunikasi Praktis

Ini memungkinkan saya untuk dengan cepat mengkode string ke Kode Morse yang sesuai dan sebaliknya.

Saya menulis program dalam C# sebagai PoC

Buat Transceiver Kode Morse dengan Arduino UNO – Proyek Komunikasi Praktis
Buat Transceiver Kode Morse dengan Arduino UNO – Proyek Komunikasi Praktis

Output

Hello World .... . .-.. .-.. --- .-- --- .-. .-.. -.. 

Namun, karena komunikasi harus terjadi antara dua pihak, saya ingin mentransmisikan Kode Morse yang dikodekan ini ke perangkat lain dan mendekodekannya di sana.

Saya menggunakan dua papan Arduino untuk membangun pengirim dan penerima.

Pada papan pengirim, saya menghubungkan Diod Laser dari Keyes. Perangkat yang mudah didapat dan murah. Untuk jarak yang saya kerjakan, input 3v lebih dari cukup, namun dengan 5v, saya dapat melihat laser mencapai setidaknya 200m.

Buat Transceiver Kode Morse dengan Arduino UNO – Proyek Komunikasi Praktis

Pengirim saya terhubung ke komputer dengan Antarmuka Serial (melalui USB). Ini membaca data apa pun pada Port Serial, karakter demi karakter. Temukan Kode Morse yang setara untuk karakter dan buat aliran cahaya 'titik' dan 'garis'.

Saya membuat pulsa 50ms, di mana setiap 'titik' adalah sinar cahaya 50ms dan 'garis' adalah sinar cahaya 150ms. Setiap 'titik' dan 'garis' dipisahkan oleh diam 50ms. Setiap karakter diikuti oleh diam 100ms lainnya.

Kode Pengirim

const char* MorseTable[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // space, !, ", #, $, %, &, ' NULL, "-.-.--", ".-..-.", NULL, NULL, NULL, NULL, ".----.", // ( ) * + , - . / "-.--.", "-.--.-", NULL, ".-.-.", "--..--", "-....-", ".-.-.-", "-..-.", // 0 1 2 3 4 5 6 7 "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", // 8 9 : ; < = > ? "---..", "----.", "---...", "-.-.-.", NULL, "-...-", NULL, "..--..", // @ A B C D E F G ".--.-.", ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", // H I J K L M N O "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", // P Q R S T U V W ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", // X Y Z [ \ ] ^ _ "-..-", "-.--", "--..", NULL, NULL, NULL, NULL, "..--.-", // ' a b c d e f g NULL, ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", // h i j k l m n o "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", // p q r s t u v w ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", // x y z { | } ~ DEL "-..-", "-.--", "--..", NULL, NULL, NULL, NULL, NULL, }; int dotLength = 50; int dashLength = dotLength*3; void setup() { // put your setup code here, to run once: pinMode(13, OUTPUT); Serial.begin(9600); } void loop() { char ch; if(Serial.available()){ ch = Serial.read(); flashDashDot(MorseTable[ch]); delay(dotLength*2); } } void flashDashDot(const char * morseCode) { int i = 0; while(morseCode[i] != 0) { if(morseCode[i] == '.'){ dot(); } else if (morseCode[i] == '-'){ dash(); } i++; } } void dot() { digitalWrite(13, HIGH); delay(dotLength); digitalWrite(13, LOW); delay(dotLength); } void dash() { digitalWrite(13, HIGH); delay(dashLength); digitalWrite(13, LOW); delay(dotLength); } 

Pada papan Arduino Penerima, saya menghubungkan LDR, Buzzer Piezo dan LED. LED dan Buzzer redundan, hanya memberikan umpan balik Audio dan Video dan terasa menyenangkan melihat hal-hal bekerja 😉

Buat Transceiver Kode Morse dengan Arduino UNO – Proyek Komunikasi Praktis

Penerima saya juga terhubung ke komputer untuk membaca string karakter yang dihasilkan.

Pada perangkat, dalam loop, saya membaca cahaya apa pun yang mengenai LDR yang terhubung ke Port Analog 4. Saya melindunginya dari cahaya sekeliling dengan melipatnya dengan tabung panjang. Ketika cahaya dari Diod Laser saya mengenai LDR ini, nilai yang dihasilkan naik dan saya menyalakan speaker dan led. Ketika turun, saya mematikan speaker dan led.

Saya menghitung panjang sinar cahaya untuk menentukan apakah itu 'titik' atau 'garis'. Dengan menghitung semua penundaan, ini sekitar ~400 siklus untuk pulsa pada prosesor Atmel 16MHz saya.

Kode Penerima

//Morse Code Binary Tree // Left child at 2n+1 // Right child at 2n+2 // <.|-> // .E -T // .I -A .N -M // const char MorseTree[] = {'\0','E', 'T', 'I', 'A', 'N', 'M', 'S', 'U', 'R', 'W', 'D', 'K', 'G', 'O', 'H', 'V', 'F', 'U', 'L', 'A', 'P', 'J', 'B', 'X', 'C', 'Y', 'Z', 'Q', '\0','\0','5', '4', '\0','3', '\0','\0','\0','2', '\0', '\0','+', '\0','\0','\0','\0','1', '6', '=', '/', '\0','\0','\0','(', '\0','7', '\0','\0','\0','8', '\0','9', '0', '\0', '\0','\0','\0','\0','\0','\0','\0','\0', '\0','\0','\0','?', '_', '\0','\0','\0', '\0','"', '\0','\0','.', '\0','\0','\0', '\0','@', '\0','\0','\0','\0','\0','\0', '-', '\0','\0','\0','\0','\0','\0','\0', '\0',';', '!', '\0',')', '\0','\0','\0', '\0','\0',',', '\0','\0','\0','\0',':', '\0','\0','\0','\0','\0','\0','\0' }; int val = 0; // A Variable to Store the Light Value from the LDR int ctrHigh = 0; int ctrLow = 0; int codePtr = 0; int dotLen = 400; void setup() { Serial.begin(9600);// Start a Serial Connection Serial.print(codePtr); } void loop() { val = analogRead(4); if (val >= 10) { ctrHigh++; ctrLow = 0; digitalWrite(13, HIGH); tone(9, 1000); } else { ctrLow++; if ((ctrHigh >= dotLen) && (ctrHigh < dotLen*2)) { Serial.print("."); codePtr = (2*codePtr) + 1; } else if (ctrHigh >= dotLen * 2) { Serial.print("-"); codePtr = (2*codePtr) + 2; } else { if(ctrLow == dotLen*2){ Serial.print(MorseTree[codePtr]); codePtr = 0; } } ctrHigh = 0; digitalWrite(13, LOW); noTone(9); } } 
Output at Receiver ....H.E.-..L.-..L---O.--W---O.-.R.-..L-..D-.-.--! 

Kode

PengirimArduino
Kode Pengirim
const char* MorseTable[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // space, !, ", #, $, %, &, ' NULL, "-.-.--", ".-..-.", NULL, NULL, NULL, NULL, ".----.", // ( ) * + , - . / "-.--.", "-.--.-", NULL, ".-.-.", "--..--", "-....-", ".-.-.-", "-..-.", // 0 1 2 3 4 5 6 7 "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", // 8 9 : ; < = > ? "---..", "----.", "---...", "-.-.-.", NULL, "-...-", NULL, "..--..", // @ A B C D E F G ".--.-.", ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", // H I J K L M N O "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", // P Q R S T U V W ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", // X Y Z [ \ ] ^ _ "-..-", "-.--", "--..", NULL, NULL, NULL, NULL, "..--.-", // ' a b c d e f g NULL, ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", // h i j k l m n o "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", // p q r s t u v w ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", // x y z { | } ~ DEL "-..-", "-.--", "--..", NULL, NULL, NULL, NULL, NULL, }; int dotLength = 50; int dashLength = dotLength*3; void setup() { // put your setup code here, to run once: pinMode(13, OUTPUT); Serial.begin(9600); } void loop() { char ch; if(Serial.available()){ ch = Serial.read(); flashDashDot(MorseTable[ch]); delay(dotLength*2); } } void flashDashDot(const char * morseCode) { int i = 0; while(morseCode[i] != 0) { if(morseCode[i] == '.'){ dot(); } else if (morseCode[i] == '-'){ dash(); } i++; } } void dot() { digitalWrite(13, HIGH); delay(dotLength); digitalWrite(13, LOW); delay(dotLength); } void dash() { digitalWrite(13, HIGH); delay(dashLength); digitalWrite(13, LOW); delay(dotLength); } 
PenerimaArduino
Kode Penerima
//Morse Code Binary Tree // Left child at 2n+1 // Right child at 2n+2 // <.|-> // .E -T // .I -A .N -M // const char MorseTree[] = {'\0','E', 'T', 'I', 'A', 'N', 'M', 'S', 'U', 'R', 'W', 'D', 'K', 'G', 'O', 'H', 'V', 'F', 'U', 'L', 'A', 'P', 'J', 'B', 'X', 'C', 'Y', 'Z', 'Q', '\0','\0','5', '4', '\0','3', '\0','\0','\0','2', '\0', '\0','+', '\0','\0','\0','\0','1', '6', '=', '/', '\0','\0','\0','(', '\0','7', '\0','\0','\0','8', '\0','9', '0', '\0', '\0','\0','\0','\0','\0','\0','\0','\0', '\0','\0','\0','?', '_', '\0','\0','\0', '\0','"', '\0','\0','.', '\0','\0','\0', '\0','@', '\0','\0','\0','\0','\0','\0', '-', '\0','\0','\0','\0','\0','\0','\0', '\0',';', '!', '\0',')', '\0','\0','\0', '\0','\0',',', '\0','\0','\0','\0',':', '\0','\0','\0','\0','\0','\0','\0' }; int val = 0; // A Variable to Store the Light Value from the LDR int ctrHigh = 0; int ctrLow = 0; int codePtr = 0; int dotLen = 400; void setup() { Serial.begin(9600);// Start a Serial Connection Serial.print(codePtr); } void loop() { val = analogRead(4); if (val >= 10) { ctrHigh++; ctrLow = 0; digitalWrite(13, HIGH); tone(9, 1000); } else { ctrLow++; if ((ctrHigh >= dotLen) && (ctrHigh < dotLen*2)) { Serial.print("."); codePtr = (2*codePtr) + 1; } else if (ctrHigh >= dotLen * 2) { Serial.print("-"); codePtr = (2*codePtr) + 2; } else { if(ctrLow == dotLen*2){ Serial.print(MorseTree[codePtr]); codePtr = 0; } } ctrHigh = 0; digitalWrite(13, LOW); noTone(9); } } 

Skematik

Sirkuit Penerima Kode Morsemorsereceiver_1JpG6jZ6yv.fzzSirkuit Pengirim Kode Morsemorsetransmitter_sOKvrIbOv3.fzz

Proses manufaktur

  1. Pindai Kode Batang: Teknologi, Desain, dan Tren Masa Depan
  2. Komentar C++: Praktik Terbaik untuk Kode yang Mudah Dibaca dan Dipelihara
  3. Menguasai Tingkat Kesalahan Kode ADC: Apa yang Perlu Anda Ketahui
  4. Kode Morse dan Ekstor Ganda: Lanskap Saat Ini Ancaman Malware Canggih
  5. Membangun DTMF Decoder Hanya Menggunakan Arduino – Tidak Perlu IC Tambahan
  6. SERENA: Sistem Alarm Kustom Arduino Mega 2560 dengan Layar Sentuh TFT LCD
  7. Memilih Antara Data Matrix dan QR Code: Mana yang Terbaik untuk Bisnis Anda
  8. Kode G CNC Dijelaskan: Panduan Esensial untuk Programmer CNC
  9. Referensi Lengkap Kode G Fanuc – Semua Perintah Dijelaskan
  10. Panduan Lengkap Kode-G CNC untuk Kontrol Fanuc