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

Transceiver Kode Morse

Komponen dan persediaan

Arduino UNO
× 2
LED (generik)
× 2
Resistor foto
× 1
Buzzer
× 1

Tentang proyek ini

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

Saat mendiskusikan semua ini, kami mencapai titik di mana kami ingin mendefinisikan bahasa kami sendiri untuk komunikasi Visual, dan di sana kami merancang Kode Morse!

Jelas bahwa mempelajari kode Morse akan menjadi tugas yang membosankan bagi kita masing-masing, dan karenanya kita membutuhkan sebuah mesin. Jadi, kami memutuskan untuk menulis program kecil yang dapat mengkodekan string yang diberikan ke kode Morse yang setara dan dekoder lain yang dapat mengembalikan string untuk aliran kode Morse yang diberikan.

Untuk menemukan kode Morse untuk sebuah karakter, saya merujuk tabel berikut –

Untuk menerjemahkan kode Morse ke karakter setara, dapat diatur ke dalam pohon biner seperti di bawah ini. Dengan setiap 'titik' bergerak ke subpohon kiri dan 'garis' bergerak ke subpohon kanan.

Ini memungkinkan saya untuk dengan cepat mengkodekan string ke dalam kode Morse masing-masing dan sebaliknya.

Saya menulis sebuah program dalam C# sebagai PoC

Keluaran

Halo Dunia.... . .-.. .-.. ---  .-- --- .-. .-.. -.. 

Namun, Karena komunikasi harus terjadi antara dua pihak, saya ingin mengirimkan kode Morse yang disandikan ini ke perangkat lain dan menerjemahkannya di sana.

Saya menggunakan dua papan Arduino untuk membuat pemancar dan penerima.

Di papan pemancar, saya menghubungkan dioda Laser dari Keyes. Mudah tersedia dan perangkat murah. Untuk jarak saya bekerja, input 3v sudah lebih dari cukup, namun dengan 5v, saya bisa melihat laser mencapai setidaknya 200m.

Pemancar saya terhubung ke komputer dengan antarmuka Serial (melalui USB). Dibaca untuk data apa pun pada port Serial, karakter demi karakter. Temukan kode Morse yang setara untuk karakter tersebut dan buat aliran cahaya 'titik' dan 'garis putus-putus'.

Saya membuat pulsa 50ms, di mana setiap 'titik' adalah berkas cahaya 50ms dan 'garis' menjadi berkas cahaya 150ms. Setiap 'titik' dan 'tanda hubung' dipisahkan oleh keheningan 50 md. Setiap karakter diikuti dengan keheningan 100 md.

Kode Pemancar

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,       // spasi, !, ", #, $, %, &, '     . -.--", ".-..-.", NULL, NULL, NULL, NULL, ".----.",        // ( ) * + , - . /       "-.--.", "-.--.-", NULL, ".-.-.", "--..--", "-....-", ".-.-.-", "-.. -.",        // 0 1 2 3 4 5 6 7        "-----", ".----", "..---", "...--", "... .-", ".....", "-....", "--...",       // 8 9 :; <=> ?       "---..", "--- -.", "---...", "-.-.-.", NULL, "-...-", NULL, "..--..",        // @ ABCDEFG       ".- -.-.", ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",        // HIJKLMNO        "....", "..", ".---", "-.-", ".-..", "--", "-.", "---",        / / PQRSTUVW        ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--" ,        // XYZ [ \ ] ^ _        "-..-", "-.--", "-- ..", NULL, NULL, NULL, NULL, "..--.-",        // ' abcdefg       NULL, ".-", "-...", "-.-.", "-.. ", ".", "..-.", "--.",        // hijklmno        "...", "..", ".---", "-.-", ".- ..", "--", "-.", "---",        // pqrstuvw       ".--.", "--.-", ".-.", "...", " -", "..-", "...-", ".--",        // xyz { | } ~ DEL        "-..-", "-.--", "--..", NULL, NULL, NULL, NULL, NULL,        };int dotLength =50;int dashLength =dotLength*3;void setup () {  // letakkan kode penyiapan Anda di sini, untuk dijalankan sekali: 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(Kode Morse[i] !=0)  {    if(Kode Morse[i] =='.'){      dot(); } else if (Kode morse[i] =='-'){      tanda hubung(); }    i++; }}titik kosong(){  digitalWrite(13, TINGGI); penundaan (panjang titik); digitalWrite(13, RENDAH); delay(dotLength);}void dash(){  digitalWrite(13, HIGH); penundaan (panjang dasbor); digitalWrite(13, RENDAH); delay(dotLength);}  

Di papan Arduino Penerima, saya menghubungkan LDR , Buzzer Piezo dan LED . LED dan Buzzer berlebihan, hanya saja mereka memberikan umpan balik Audio dan Video dan rasanya menyenangkan melihat semuanya berfungsi

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

Pada perangkat, dalam satu lingkaran, saya membaca untuk setiap cahaya yang mengenai LDR yang terhubung ke port Analog 4. Saya melindunginya dari cahaya sekitar dengan membungkusnya dengan tabung panjang. Ketika cahaya dari dioda Laser saya mengenai LDR ini, nilai yang dihasilkan menjadi tinggi dan saya menyalakan speaker dan led. Saat mati, saya mematikan speaker dan mematikannya.

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

Kode Penerima

//Pohon Biner Kode Morse//  Anak kiri di 2n+1// Anak kanan di 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',                    , '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'                      };int val =0; // Variabel untuk Menyimpan Nilai Cahaya dari LDRint ctrHigh =0;int ctrLow =0;int codePtr =0;int dotLen =400;void setup(){  Serial.begin(9600);// Memulai Koneksi Serial  Serial .print(codePtr);}void loop(){  val =analogRead(4); if (val>=10)  {    ctrHigh++; ctrRendah =0; digitalWrite(13, TINGGI); nada (9, 1000); } else {    ctrLow++; if ((ctrHigh>=dotLen) &&(ctrHigh =dotLen * 2) {      Serial.print("-"); kodePtr =(2*kodePtr) + 2; } else {      if(ctrLow ==dotLen*2){        Serial.print(MorseTree[codePtr]); kodePtr =0; }    }    ctrTinggi =0; digitalWrite(13, RENDAH); tidakNada(9); }} 
Output di Penerima ....HE-..L.-..L---O.--W---O.-.R.-..L-..D-. -.--! 

Kode

  • Pemancar
  • Penerima
PemancarArduino
Kode Pemancar
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, // spasi, !, ", #, $, %, &, ' NULL, "-.- .--", ".-..-.", NULL, NULL, NULL, NULL, ".----.", // ( ) * + , - . / "-.--.", " -.--.-", NULL, ".-.-.", "--..--", "-....-", ".-.-.-", "-..- .", // 0 1 2 3 4 5 6 7 "-----", ".----", "..---", "...--", ".... -", ".....", "-....", "--...", // 8 9 :; <=> ? "---..", "---- .", "---...", "-.-.-.", NULL, "-...-", NULL, "..--..", // @ ABCDEFG ".-- .-.", ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", // HIJKLMNO "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", // PQRSTUVW ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", // XYZ [ \ ] ^ _ "-..-", "-.--", "--..", NULL, NULL, NULL, NULL, "..--.-", // ' abcdefg NULL, ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", // hijklmn o "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", / / pqrstuvw ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--" , // xyz { | } ~ DEL "-..-", "-.--", "--..", NULL, NULL, NULL, NULL, NULL, };int dotLength =50;int dashLength =dotLength*3;void setup () { // letakkan kode setup Anda di sini, untuk dijalankan sekali: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(Kode Morse[i] !=0) { if(Kode Morse[i] =='.'){ dot(); } else if (Kode morse[i] =='-'){ dash(); } saya++; }}titik kosong(){ digitalWrite(13, TINGGI); penundaan (panjang titik); digitalWrite(13, RENDAH); delay(dotLength);}void dash(){ digitalWrite(13, HIGH); penundaan (panjang dasbor); digitalWrite(13, RENDAH); delay(dotLength);}
PenerimaArduino
Kode Penerima
//Kode Morse Pohon Biner// Anak kiri pada 2n+1// Anak kanan pada 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 Variabel untuk Menyimpan Nilai Cahaya dari LDRint ctrHigh =0;int ctrLow =0;int codePtr =0;int dotLen =400;void setup(){ Serial.begin(9600);// Memulai Serial Connection Serial.print( kodePtr); }void loop(){ val =analogRead(4); if (val>=10) { ctrTinggi++; ctrRendah =0; digitalWrite(13, TINGGI); nada (9, 1000); } else { ctrLow++; if ((ctrTinggi>=dotLen) &&(ctrTinggi =dotLen * 2) { Serial.print("-"); kodePtr =(2*kodePtr) + 2; } else { if(ctrLow ==dotLen*2){ Serial.print(MorseTree[codePtr]); kodePtr =0; } } ctrTinggi =0; digitalWrite(13, RENDAH); tidakNada(9); }}

Skema

Sirkuit Penerima Kode Morse morsereceiver_1JpG6jZ6yv.fzzSirkuit Pemancar Kode Morse morsetransmitter_sOKvrIbOv3.fzz

Proses manufaktur

  1. Pemindai Kode Batang
  2. Komentar C++
  3. Memahami tingkat kesalahan kode ADC
  4. Kode Morse dan Pemerasan Ganda:Keadaan Malware Saat Ini
  5. Decoder DTMF Hanya Menggunakan Arduino
  6. Sistem Alarm Arduino:SERENA
  7. Kode Matriks Data vs. Kode QR
  8. Pengenalan Kode G CNC
  9. Daftar Kode Fanuc G
  10. Lengkapi Daftar Kode G