工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

モールス信号トランシーバー

コンポーネントと消耗品

>
Arduino UNO
× 2
LED(汎用)
× 2
フォトレジスター
× 1
ブザー
× 1

このプロジェクトについて

<図>

私は今日、通信システムのクラスを教えていて、生徒たちに視覚化して体験することで学んでもらいたいと思っていました。石器時代から始めて、コミュニケーションの必要性と、それが言語と文法によって何を意味するのか、信頼できるコミュニケーション、信号、メッセージなどとは何かを理解するために、いくつかの実験を行いました。

これらすべてについて話し合っているうちに、ビジュアルコミュニケーション用に独自の言語を定義したいと思うようになり、そこでモールス信号を考案しました!

モールス信号を学ぶことは私たち一人一人にとって退屈な仕事になることは明らかであり、それゆえ私たちは機械を必要としていました。そこで、特定の文字列を同等のモールス信号にエンコードできる小さなプログラムと、特定のモールス信号ストリームに文字列を返すことができる別のデコーダーを作成することにしました。

キャラクターのモールス信号を見つけるために、次の表を参照しました–

<図>

モールス信号を同等の文字に変換するには、次のようにバイナリツリーに編成できます。各「ドット」は左のサブツリーに移動し、「ダッシュ」は右のサブツリーに移動します。

<図>

これにより、文字列をそれぞれのモールス信号にすばやくエンコードしたり、その逆を行ったりすることができました。

PoCとしてC#でプログラムを作成しました

<図> <図>

出力

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

ただし、通信は2者間で行われる必要があるため、このエンコードされたモールス信号を別のデバイスに送信して、そこでデコードしたいと思いました。

2つのArduinoボードを使用して送信機と受信機を構築しました。

送信機ボードにレーザーダイオードを接続しました キーズから。簡単に入手でき、安価なデバイス。私が作業している距離では、3v入力で十分でしたが、5vでは、レーザーが少なくとも200mに到達していることがわかります。

<図>

私の送信機はシリアルインターフェース(USB経由)でコンピューターに接続されています。シリアルポート上のすべてのデータを1文字ずつ読み取ります。キャラクターに相当するモールス信号を見つけて、「ドット」と「ダッシュ」の光の流れを生成します。

私は50msのパルスを作成しました。ここで、各「ドット」は50msの光ビームであり、「ダッシュ」は150msの光ビームです。各「ドット」と「ダッシュ」は、50ミリ秒の無音で区切られています。各キャラクターの後には、さらに100ミリ秒の無音が続きます。

送信機コード

  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、//スペース、!、 "、#、$、%、&、 '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 (){//セットアップコードをここに配置して、1回実行します: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);}  

Receiver Arduinoボードに、 LDR を接続しました 、ピエゾブザー および LED 。 LEDとブザーは冗長であり、オーディオとビデオのフィードバックを提供し、物事が機能するのを見るのは素晴らしい気分です😉

<図>

受信機もコンピューターに接続され、結果の文字列文字を読み取ります。

デバイスでは、ループで、アナログポート4に接続されているLDRに当たる光を読み取りました。長いチューブでカプセル化することにより、周囲の光から光を遮断しました。レーザーダイオードからの光がこのLDRに当たると、結果の値が高くなり、スピーカーをオンにして電源を入れます。音量が下がったら、スピーカーをオフにして電源を切ります。

光ビームの長さを計算して、それが「ドット」か「ダッシュ」かを判断しています。すべての遅延を考慮すると、16MHzAtmelプロセッサのパルスで最大400サイクルになりました。

受信者コード

  //モールス信号の二分木//左の子は2n + 1 //右の子は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 '、' 0 '4' '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'}; int val =0; // LDRからのライト値を格納する変数intctrHigh =0; int ctrLow =0; int codePtr =0; int dotLen =400; void setup(){Serial.begin(9600); //シリアル接続を開始シリアル.print(codePtr);} void loop(){val =analogRead(4); if(val> =10){ctrHigh ++; ctrLow =0; digitalWrite(13、HIGH);トーン(9、1000); } else {ctrLow ++; if((ctrHigh> =dotLen)&&(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); }}  
 レシーバーでの出力.... HE- .. L .- .. L --- O .-- W --- O .-。R.- .. L-.. D-。 -.--! 

コード

  • 送信機
  • 受信者
送信機 Arduino
送信機コード
 constchar * 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、//スペース、!、 "、#、$、%、&、 '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 (){//セットアップコードをここに配置して1回実行します: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);} 
レシーバー Arduino
受信者コード
 //モールス信号バイナリツリー// 2n +1の左の子// 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; // LDRからのライト値を格納する変数intctrHigh =0; int ctrLow =0; int codePtr =0; int dotLen =400; void setup(){Serial.begin(9600); //シリアル接続シリアルを開始します.print(codePtr);} void loop(){val =analogRead(4); if(val> =10){ctrHigh ++; ctrLow =0; digitalWrite(13、HIGH);トーン(9、1000); } else {ctrLow ++; if((ctrHigh> =dotLen)&&(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); }} 

回路図

モールス信号受信回路 morsereceiver_1JpG6jZ6yv.fzzMorseコード送信機回路 morsetransmitter_sOKvrIbOv3.fzz

製造プロセス

  1. バーコードスキャナ
  2. C++ コメント
  3. ADCコードのエラー率を理解する
  4. モールス信号と二重恐喝:今日のマルウェアの状態
  5. Arduinoのみを使用するDTMFデコーダー
  6. Arduino警報システム:SERENA
  7. レーザーモジュールを使用したモールス信号通信(両方)
  8. データマトリックスコードとQRコード
  9. CNC G コードの紹介
  10. ファナック G コード リスト
  11. 完全な G コード リスト