レーザーモジュールを使用したモールス信号通信(両方)
コンポーネントと消耗品
> |
| × | 2 | |||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
|
このプロジェクトについて
モールス信号
モールス信号とは、英数字の記号(アルファベットと数字)をドットとダッシュに変換することを意味します。各シンボルには、ドットとダッシュの異なる配置があり、それらを一意にします。モールス信号は、秘密データまたはコード化されたデータを送信するために使用されます。このプロジェクトでは、モールス信号通信の送信機と受信機のセクションを作成しました。さまざまなモールス信号通信プロジェクトからのこのプロジェクトの独自性は、受信側セクションのアルゴリズムが他のどのアルゴリズムよりも本当に単純であるということです。
<図>
ステップ1:送信機セクション
送信機セクションは、レーザーを介して入力データを送信するために使用されます。
<図> <図> <図>
必要なハードウェア:-
- Arduino Uno
- LASER tTransmitter
- ブレッドボード
- ジャンパー線
接続:-
LASERのプラスピンをArduinoのデジタル入力の13番目のピンに接続します(コードでプログラムされているとおり)。 LASERのGNDをArduinoのGNDに接続します。
プログラム:-
コードのアルゴリズムは次のとおりです。-
- 1。送信する必要のあるデータは入力として保持され、charの配列によって格納されます。
- 2。送信する必要のあるLEDピンが定義されています。
- 3。モールス信号の速度が設定されています。
- 4。ドットとダッシュが定義されています。
- 5。入力された文字はスイッチケースでチェックされ、対応するレーザーのHIGHとLOWが送信されます。
ステップ2:レシーバーセクション
送信機によって送信されたコード化されたデータは受信されて処理され、その後シリアルモニターに表示されます。
<図> <図> <図> <図>
必要なハードウェア:-
- 1。 Arduino Uno
- 2。 LDR
- 3。抵抗器-10Kオーム
- 4。ブレッドボード
- 5。ジャンパー線
接続:-
LDRの一方の端を5VのArduino電源に接続します。 LDRのもう一方の端を10Kオームの抵抗とアナログ入力A0に接続します。抵抗のもう一方の端をArduinoのGNDに接続します。
プログラム:-
受信機セクションで使用されるアルゴリズムは、インターネットで利用可能な他のどのアルゴリズムよりも最も簡単なアルゴリズムです。このアルゴリズムは観察に満ちています。
- 1。 LDRにレーザーが落ちていない場合、LDRの値は1000未満になります。レーザーがLDRで光っていても、値が1000を超えている場合は、余分なものから保護するためにLDRをカバーする必要があります。それに入る光。ここでは、LDRは黒いチャート紙で作られたドームで覆われています。
- 2。 LASERがLDRに該当すると、値が1000を超え、ループに入ります。
- 3。次に、値を量子化します。つまり、値が1000を超える場合は、「1」として割り当てます。それ以外の場合は、「0」として割り当てます。
- 4。ループ内で、「1」と「0」の数を計算します。カウンター「a」と「f」を設定します。 「1」の数を数えて「a」に格納し、同様に「0」の数を数えて「f」に格納します。
- 5。次に、それぞれ「a」と「f」の特定の値を確認します。各文字には、「a」と「f」の異なるセットがあります。一致する値が表示されます。
制限:-
コードに添付されているプログラムは、特定の文字を印刷するために使用されます。組み合わせを使用してコードをさらに拡張し、すべての文字セットを表示できます。コードの主な目的は、アルゴリズムと動作を理解できるようにすることです。
コード
- CODE-1-レーザーエミッターを制御するための
- コード-2-受信者側用
CODE-1-レーザーエミッターを制御するための Arduino
int led13 =13; //出力13のLEDを点滅させます/ *モールス信号の速度を設定します比率コード要素は次のとおりです。ダッシュの長さ=ドットの長さx3要素間の一時停止=ドットの長さ* / int dotLen =200; //モールス信号の長さ 'dot' int dashLen =dotLen * 3; //モールス信号の長さ 'dash' int elemPause =dotLen; //文字の要素間の一時停止の長さSpaces =dotLen * 3; //文字間のスペースの長さintwordPause =dotLen * 7; // words間の一時停止の長さvoidsetup(){//デジタルピンをLEDライトの出力として初期化します。 pinMode(led13、OUTPUT); } //モールス信号で出力する文字/単語のループを作成します(コードの先頭にある文字列で定義されます)void loop(){//文字列をループし、最後まで一度に1文字ずつ取得しますに到達(int i =0; iコード-2-受信者側 Arduino
int SensorPin =0; // ldrint SensorValue =0の入力ピンを選択します。 // Sensorint a、fからの値を格納する変数。 // flagsvoid setup(){Serial.begin(9600); //通信用のシリアルポートを設定します} void loop(){sensorValue =analogRead(sensorPin); //センサーから値を読み取ります//Serial.println(sensorValue); if(sensorValue> 1000)//ドットとダッシュの数を計算します{for(int i =0; i <=13; i ++){sensorValue =analogRead(sensorPin); if(sensorValue> 1000){a ++; //文字delay(200);のドットとダッシュの数を計算します。 } else {f ++; //ドットとダッシュのスペース数を計算しますdelay(200); }}} // Serial.print( "a =" + a); // Serial.println( "f =" + f); // Serial.println(); / * *ドット、ダッシュ、およびスペース* / 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); }
カスタムパーツとエンクロージャー
回路図
製造プロセス