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

Wirlesseレーザーデータ伝送(LIFI)(100b /秒)

コンポーネントと消耗品

>
Arduino Nano R3
× 2
無はんだブレッドボードフルサイズ
× 2
英数字LCD、16 x 2
× 2
ジャンパー線(汎用)
× 30
KeyPad 4x3
× 1
9Vバッテリー(汎用)
× 2
9Vバッテリークリップ
× 2
レーザーダイオード、2ピン
× 1
開発キットアクセサリ、太陽電池
× 1
ロータリーポテンショメータ(汎用)
× 2
抵抗10kオーム
× 3

必要なツールとマシン

>
はんだごて(汎用)
はんだワイヤー、鉛フリー

アプリとオンラインサービス

>
Arduino IDE

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

<図> <図>

このプロジェクトは、エミッターとレシーバーの2つの部分で構成されており、キーパッドとLCDを使用してレーザーを介してテキストを送信するために使用できます

コード

  • LI-FI送信機コードV2.0
  • LI-FIレシーバーコードV2.0
LI-FI送信機コードV2.0 C / C ++
LI-FI送信機コードV2.0
 / * LI-FI送信機コードV2.0作成者HOUALEFAHMEDRAMZI開始日:2020年9月29日最終更新日:2020年10月14日* /#defineLaserPin 2#include  const int rs =12、en =11、d4 =6、d5 =5、d6 =4、d7 =3; LiquidCrystal lcd(rs、en、d4、d5、d6、d7); intcomingchar; int KeyPad_R [ ] ={A2、A1、9、7}; // KeyPad rowsint KeyPad_C [] ={8、10、A3}; // KeyPad Columnsint KeyReturn =0; // 1〜12intABCからのキーパッド関数の出力; // 1つのbuttonint行を使用して3文字をコーディングするために使用される変数; //キーパッドfunctionint列で使用される変数; //キーパッドfunctionintで使用される変数StCursor =0; //カーソルコントロールの変数intNdCursor =0; //カーソルコントロールの変数intoutcomingmatrix [32] [5]; // DATA Bufferint m =0; //すべての32 * 5 emty bufferint A [] ={1、1、1、1、0}、B [] =を送信しないように、出力マトリックスの長さを知るために使用される変数{0、0、0、1、0}、C [] ={0、0、0、1、1}、D [] ={0、0、1、0、0}、E [] ={0 、0、1、0、1}、F [] ={0、0、1、1、0}、G [] ={0、0、1、1、1}、H [] ={0、1 、0、0、0}; int I [] ={0、1、0、0、1}、J [] ={0、1、0、1、0}、K [] ={0、1、 0、1、1}、L [] ={0、1、1、0、0}、M [] ={0、1、1、0、1}、N [] ={0、1、1、 1、0}、O [] ={0、1、1、1、1}、P [] ={1、0、0、0、0}; int Q [] ={1、0、0、0 、1}、R [] ={1、0、0、1、0}、S [] ={1、0、0、1、1}、T [] ={1、0、1、0、0 }、U [] ={1、0、1、0、1}、V [] ={1、0、1、1、0}、W [] ={1、0、1、1、1}、 X [] ={1、1、0、0、0}; int Y [] ={1、1、0、0、1}、Z [] ={1、1、0、1、0}、スペース[] ={1、1、1、1、1}; //すべてのコード化された文字を格納するための小さなデータベースvoidsetup(){lcd.begin(16、2); pinMode(LaserPin、OUTPUT); Serial.begin(9600); for(int i; i <4; i ++){pinMode(KeyPad_R [i]、OUTPUT); } for(int j; j <3; j ++){pinMode(KeyPad_C [j]、INPUT); } lcd.print( "HOUALEF RAMZI"); delay(5000); lcd.clear(); lcd.setCursor(0,0);} void conv(int alpha [5]、char Char){//データベースからの出力バッファを埋めるfor(int i =0; i <5; i ++){outcomingmatrix [ m] [i] =alpha [i]; } lcd.print(Char);} void start_bit(){//スタートビットdigitalWrite(LaserPin、HIGH); delay(9); digitalWrite(LaserPin、LOW);} void KeyPad(){// 1から12まで押されたボタンの数を出力しますfor(int i =0; i <4; i ++){digitalWrite(KeyPad_R [i]、HIGH); for(int j =0; j <3; j ++){if(digitalRead(KeyPad_C [j])==1){Row =i;列=j; digitalWrite(KeyPad_R [i]、LOW); if(Row ==0){switch(Column){case 0:KeyReturn =1;壊す;ケース1:KeyReturn =2;壊す;ケース2:KeyReturn =3;壊す; }} if(Row ==1){switch(Column){case 0:KeyReturn =4;壊す;ケース1:KeyReturn =5;壊す;ケース2:KeyReturn =6;壊す; }} if(Row ==2){switch(Column){case 0:KeyReturn =7;壊す;ケース1:KeyReturn =8;壊す;ケース2:KeyReturn =9;壊す; }} if(Row ==3){switch(Column){case 0:KeyReturn =10;壊す;ケース1:KeyReturn =11;壊す;ケース2:KeyReturn =12;壊す; }}}}} Serial.println(KeyReturn);} void KeyToAscii(int KeyN、int FirtAsciiValue){//キーパッドからASCII値にデータを変換して、上記のCONV関数を使用して両方のシリアルを使用する方法モニターとキーパッドif(KeyReturn ==KeyN){incomingchar =FirtAsciiValue + ABC; ABC ++; if(ABC ==3){ABC =0; }}} void CursorControler(){lcd.setCursor(StCursor、NdCursor); if(KeyReturn ==10){//確認ボタンの11が原因で文字を確認するdelay(100); StCursor ++; m ++; } if(StCursor ==16){//最初の行がいっぱいになったときに改行を書き込むStCursor =0; NdCursor =1; }} void loop(){KeyPad(); delay(150); CursorControler(); KeyToAscii(1、65); KeyToAscii(2、68); KeyToAscii(3、71); KeyToAscii(4、74); KeyToAscii(5、77); KeyToAscii(6、80); KeyToAscii(7、83); KeyToAscii(8、86); KeyToAscii(9、89); KeyToAscii(11、32); switch(incomingchar){ケース65:conv(A、 'A');壊す;ケース66:conv(B、 'B');壊す;ケース67:conv(C、 'C');壊す;ケース68:conv(D、 'D');壊す;ケース69:conv(E、 'E');壊す;ケース70:conv(F、 'F');壊す;ケース71:conv(G、 'G');壊す;ケース72:conv(H、 'H');壊す;ケース73:conv(I、 'I');壊す;ケース74:conv(J、 'J');壊す;ケース75:conv(K、 'K');壊す;ケース76:conv(L、 'L');壊す;ケース77:conv(M、 'M');壊す;ケース78:conv(N、 'N');壊す;ケース79:conv(O、 'O');壊す;ケース80:conv(P、 'P');壊す;ケース81:conv(Q、 'Q');壊す;ケース82:conv(R、 'R');壊す;ケース83:conv(S、 'S');壊す;ケース84:conv(T、 'T');壊す;ケース85:conv(U、 'U');壊す;ケース86:conv(V、 'V');壊す;ケース87:conv(W、 'W');壊す;ケース88:conv(X、 'X');壊す;ケース89:conv(Y、 'Y');壊す;ケース90:conv(Z、 'Z');壊す;ケース32:conv(SPACE、 '');壊す;ケース33:conv(SPACE、 '');壊す; } //シリアルモニターのスペースを使用するには、ケース91をケース32に変更する必要がありますif(KeyReturn ==12){// 12が送信ボタンであるためデータを送信するdelay(100); for(int j =0; j  
LI-FIレシーバーコードV2.0 C / C ++
LI-FIレシーバーコードV2.0
 / * LI-FIレシーバーコードV2.0作成者HOUALEFAHMEDRAMZI開始日:2020年9月29日最終更新日:2020年10月14日* /#include  #define SolarCell A0 //ソーラーセルの入力ピンを定義するにはStCursor =0; // lcdを制御するにはCursorintA [] ={1、1、1、1、0}、B [] ={0、0、0、1、0}、C [] ={0、0、0、 1、1}、D [] ={0、0、1、0、0}、E [] ={0、0、1、0、1}、F [] ={0、0、1、1、 0}、G [] ={0、0、1、1、1}、H [] ={0、1、0、0、0}; int I [] ={0、1、0、0、1 }、J [] ={0、1、0、1、0}、K [] ={0、1、0、1、1}、L [] ={0、1、1、0、0}、 M [] ={0、1、1、0、1}、N [] ={0、1、1、1、0}、O [] ={0、1、1、1、1}、P [ ] ={1、0、0、0、0}; int Q [] ={1、0、0、0、1}、R [] ={1、0、0、1、0}、S [] ={1、0、0、1、1}、T [] ={1、0、1、0、0}、U [] ={1、0、1、0、1}、V [] ={ 1、0、1、1、0}、W [] ={1、0、1、1、1}、X [] ={1、1、0、0、0}; int Y [] ={1 、1、0、0、1}、Z [] ={1、1、0、1、0}、SPACE [] ={1、1、1、1、1}; const int rs =12、en =11、d4 =5、d5 =4、d6 =3、d7 =2; int Cell_Input; //ソーラーセルイントしきい値の入力; intinfo [5]; //受信したDATALiquidCrystallcd(rs、en、d4、d5、d6、d7); void setup(){pinMode(A0、INPUT); Serial.begin(9600); lcd.begin(16、2); lcd.setCursor(0、0);しきい値=analogRead(SolarCell)+ 10; lcd.print( "受信準備完了"); delay(5000); lcd.clear();} void BufferClear(){//(int i =0; i <5; i ++){info [i] =0;のバッファをクリアします}} void check_condition(int receive_bits [5]、int Binaryalpha [5]、char Lcdalpha){//受信したビットをデータベースと比較するif(received_bits [0] ==Binaryalpha [0] &&receive_bits [1] ==Binaryalpha [1] &&receive_bits [2] ==Binaryalpha [2] &&receive_bits [3] ==Binaryalpha [3] &&receive_bits [4] ==Binaryalpha [4]){lcd.print(Lcdalpha); CursorControler(); }} void CursorControler(){//カーソルを制御するにはStCursor ++; if(StCursor ==16)lcd.setCursor(0、1);} void loop(){Cell_Input =analogRead(SolarCell); if(Cell_Input> Threshold){//スタートビット検出delay(10); //(int i =0; i <5; i ++)のタイミング{//データを保存if(analogRead(SolarCell)> Threshold){info [i] =1; } else {info [i] =0; } delay(10); } check_condition(info、A、 'A'); check_condition(info、B、 'B'); check_condition(info、C、 'C'); check_condition(info、D、 'D'); check_condition(info、E、 'E'); check_condition(info、F、 'F'); check_condition(info、G、 'G'); check_condition(info、H、 'H'); check_condition(info、I、 'I'); check_condition(info、J、 'J'); check_condition(info、K、 'K'); check_condition(info、L、 'L'); check_condition(info、M、 'M'); check_condition(info、N、 'N'); check_condition(info、O、 'O'); check_condition(info、P、 'P'); check_condition(info、Q、 'Q'); check_condition(info、R、 'R'); check_condition(info、S、 'S'); check_condition(info、T、 'T'); check_condition(info、U、 'U'); check_condition(info、V、 'V'); check_condition(info、W、 'W'); check_condition(info、X、 'X'); check_condition(info、Y、 'Y'); check_condition(info、Z、 'Z'); check_condition(info、SPACE、 ''); BufferClear(); }} 

回路図

データを受信するには、フォトセルをレーザーと向かい合わせに配置する必要があります
LCD:
VSS --->グラウンド
VDD ---> Arduino 5V
K --->地面
A ---> Arduino 5V
RW --->グラウンド
V0 / VEE --->ポテンショメータのVout
RS ---> Arduinoデジタルピン12
EN ---> Arduinoデジタルピン11
D4 ---> Arduinoデジタルピン5
D5 ---> Arduinoデジタルピン4
D6 ---> Arduinoデジタルピン3
D7 ---> Arduinoデジタルピン2

太陽電池:
SCのマイナスリードはアースに接続されています
SCのプラスのリード線はArduinoアナログピンA0に接続されています ユーザーは、押す必要のある各文字を入力した後、キーパッドとLCDを使用して送信するものを選択する必要があります確認ボタンを押し、最終的に送信ボタンを押します。
LCD:
VSS --->グラウンド
VDD ---> Arduino 5V
K --->地面
A ---> Arduino 5V
RW --->グラウンド
V0 / VEE --->ポテンショメータのVout
RS ---> Arduinoデジタルピン12
EN ---> Arduinoデジタルピン11
D4 ---> Arduinoデジタルピン6
D5 ---> Arduinoデジタルピン5
D6 ---> Arduinoデジタルピン4
D7 ---> Arduinoデジタルピン3
キーパッド:
A ---> ArduinoアナログピンA2 //すべてのアナログピンはデジタルピンとして使用されます
B ---> ArduinoアナログピンA1
C ---> Arduinoデジタルピン9
D ---> Arduinoデジタルピン7
1 ---> Arduinoデジタルピン8
2 ---> Arduinoデジタルピン10
3 ---> ArduinoアナログピンA3
プルダウン抵抗:
抵抗の最初の端はデジタルピン8に接続され、2番目の端はグランドに接続されています
抵抗の最初の端はデジタルピン10に接続され、2番目の端はグランドに接続されています
抵抗の最初の端はアナログピンA3に接続され、2番目の端はグランドに接続されています

レーザーダイオード:
LDの陰極は地面に接続されています
LDのアノードはArduinoデジタルピン2に接続されています

製造プロセス

  1. アルミニウムレーザーマーキングガイド
  2. レーザーマーキングガイド
  3. ファイバーレーザーマーキングとは何ですか?
  4. レーザーポインター
  5. 半導体レーザー
  6. 固体レーザー
  7. DVDプレーヤー
  8. レーザー誘導ミサイル
  9. 新しい電気光学レーザーは毎秒300億パルスを放出します
  10. 新しい最速の光ファイバーは1ペタビット/秒を送信します
  11. UFO攻撃!