Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Wirlesse Laser Data Transmission (LIFI) (100b/seconde)

Componenten en benodigdheden

Arduino Nano R3
× 2
Soldeerloze breadboard op ware grootte
× 2
Alfanumeriek LCD-scherm, 16 x 2
× 2
Jumperdraden (algemeen)
× 30
Toetsenblok 4x3
× 1
9V-batterij (algemeen)
× 2
9V batterijclip
× 2
Laserdiode, 2 pinnen
× 1
Ontwikkelingskitaccessoire, zonnecel
× 1
Draaipotentiometer (algemeen)
× 2
Weerstand 10k ohm
× 3

Benodigde gereedschappen en machines

Soldeerbout (algemeen)
Soldeerdraad, loodvrij

Apps en online services

Arduino IDE

Over dit project

Dit project bestaat uit twee delen, de zender en de ontvanger, het kan worden gebruikt om teksten over laser te verzenden met behulp van een toetsenbord en een LCD

Code

  • LI-FI-zendercode V 2.0
  • LI-FI-ontvangercode V 2.0
LI-FI-zendercode V 2.0C/C++
LI-FI-zendercode V 2.0
/*LI-FI-zendercode V 2.0 Geschreven door HOUALEF AHMED RAMZI Gestart op 29-9-2020 Laatste update op 14-10-2020*/#define LaserPin 2#include const int rs =12, en =11, d4 =6, d5 =5, d6 =4, d7 =3;LiquidCrystal lcd(rs, en, d4, d5, d6, d7);int inkomendechar;int KeyPad_R[ ] ={A2, A1, 9, 7}; //The KeyPad rowsint KeyPad_C [] ={8, 10, A3}; // De KeyPad Columnsint KeyReturn =0; // De uitvoer van de toetsenbordfunctie van 1-12int ABC; //variabele die wordt gebruikt om 3 tekens te coderen met één buttonint Rij; //variabele gebruikt in de Keypad functionint Column;//variabele gebruikt in de Keypad functionint StCursor =0; //variabele voor de Cursor Controlint NdCursor =0; //variabele voor de Cursor Controlint outcomingmatrix [32][5]; //De DATA Bufferint m =0;// variabele die wordt gebruikt om de lengte van de uitkomende matrix te kennen om te voorkomen dat alle 32*5 lege bufferint wordt verzonden 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}, SPATIE [] ={1, 1, 1, 1, 1}; // een kleine database om alle gecodeerde charachtersvoid setup() { lcd.begin (16, 2); pinMode (LaserPin, UITGANG); Serieel.begin(9600); voor (int i; i <4; i++) { pinMode (KeyPad_R[i], OUTPUT); } voor (int j; j <3; j++) { pinMode (Toetsenblok_C[j], INPUT); } lcd.print("HOUALEF RAMZI"); vertraging (5000); lcd.wissen(); lcd.setCursor (0) m][i] =alfa[i]; } lcd.print(Char);}void start_bit() { //THE START BIT digitalWrite(LaserPin, HIGH); vertraging (9); digitalWrite(LaserPin, LOW);}void KeyPad() {// VOERT HET AANTAL VAN DE KNOP INGEDRUKT VAN 1 TOT 12 VOOR (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; Kolom =j; digitalWrite (Toetsenblok_R[i], LAAG); if (Rij ==0) { switch (Kolom) { case 0:KeyReturn =1; pauze; geval 1:KeyReturn =2; pauze; geval 2:KeyReturn =3; pauze; } } if (Rij ==1) { switch (Kolom) { case 0:KeyReturn =4; pauze; geval 1:KeyReturn =5; pauze; geval 2:KeyReturn =6; pauze; } } if (Rij ==2) { switch (Kolom) { case 0:KeyReturn =7; pauze; geval 1:KeyReturn =8; pauze; geval 2:KeyReturn =9; pauze; } } if (Rij ==3) { switch (Kolom) { case 0:KeyReturn =10; pauze; geval 1:KeyReturn =11; pauze; geval 2:KeyReturn =12; pauze; } } } } } Serial.println(KeyReturn);}void KeyToAscii(int KeyN, int FirtAsciiValue) { // OM GEGEVENS VAN HET TOETSENBORD NAAR DE ASCII-WAARDE TE WERKEN OM MET DE BOVENSTAANDE CONV-FUNCTIE TE WERKEN DAT IS HOE WE BEIDE KUNNEN GEBRUIKEN MONITOR EN HET TOETSENBORD if (KeyReturn ==KeyN) {inkomendechar =FirtAsciiValue + ABC; ABC++; als (ABC ==3) {ABC =0; } }} ongeldig CursorControler() { lcd.setCursor(StCursor, NdCursor); if (KeyReturn ==10) {// OM DE TEKENS TE BEVESTIGEN OMDAT 11 IN DE BEVESTIGINGSKNOP vertraging (100); StCursor++; m++; } if (StCursor ==16) { // OM IN NIEUWE LIJN TE SCHRIJVEN WANNEER DE EERSTE VOL IS StCursor =0; NdCursor =1; }}void loop() { Toetsenbord(); vertraging (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) { case 65:conv(A, 'A'); pauze; geval 66:conv(B, 'B'); pauze; geval 67:conv(C, 'C'); pauze; geval 68:conv(D, 'D'); pauze; geval 69:conv(E, 'E'); pauze; geval 70:conv(F, 'F'); pauze; geval 71:conv(G, 'G'); pauze; geval 72:conv(H, 'H'); pauze; geval 73:conv(I, 'I'); pauze; geval 74:conv(J, 'J'); pauze; geval 75:conv(K, 'K'); pauze; geval 76:conv(L, 'L'); pauze; geval 77:conv(M, 'M'); pauze; geval 78:conv(N, 'N'); pauze; geval 79:conv(O, 'O'); pauze; geval 80:conv(P, 'P'); pauze; geval 81:conv(Q, 'Q'); pauze; geval 82:conv(R, 'R'); pauze; geval 83:conv(S, 'S'); pauze; geval 84:conv(T, 'T'); pauze; geval 85:conv(U, 'U'); pauze; geval 86:conv(V, 'V'); pauze; geval 87:conv(W, 'W'); pauze; geval 88:conv(X, 'X'); pauze; geval 89:conv(Y, 'Y'); pauze; geval 90:conv(Z, 'Z'); pauze; geval 32:conv(SPACE, ' '); pauze; geval 33:conv(SPACE, ' '); pauze; } // OM DE RUIMTE VAN DE SERILE MONITOR TE GEBRUIKEN MOET JE CASE 91 WIJZIGEN IN CASE 32 if (KeyReturn ==12) { // OM GEGEVENS TE VERZENDEN OMDAT 12 DE VERZENDKNOP vertraging (100); voor (int j =0; j  
LI-FI-ontvangercode V 2.0C/C++
LI-FI-ontvangercode V 2.0
/*LI-FI-ontvangercode V 2.0 Geschreven door HOUALEF AHMED RAMZI Gestart op 29-9-2020 Laatste update op 14-10-2020*/#include #define SolarCell A0 // Om de invoerpin van de zonnecellint StCursor =0 te definiëren; // Om de lcd te bedienen Cursorint 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}, SPATIE [] ={1, 1, 1, 1, 1};const int rs =12, en =11, d4 =5, d5 =4, d6 =3, d7 =2;int Cell_Input; // De input van de Solar-Cellint Threshold;int info[5]; // De ontvangen DATALiquidCrystal lcd (rs, en, d4, d5, d6, d7); void setup () {pinMode (A0, INPUT); Serieel.begin(9600); lcd.begin (16, 2); lcd.setCursor(0, 0); Drempel =analoog lezen (zonnecel) + 10; lcd.print("KLAAR OM TE ONTVANGEN"); vertraging (5000); lcd.clear();}void BufferClear() { // De buffer wissen voor (int i =0; i <5; i++) {info[i] =0; }}void check_condition(int Received_bits[5], int Binaryalpha[5], char Lcdalpha) {//Om de ontvangen bits te vergelijken Met de database if (received_bits[0] ==Binaryalpha[0] &&Received_bits[1] ==Binaryalpha[1] &&Received_bits[2] ==Binaryalpha[2] &&Received_bits[3] ==Binaryalpha[3] &&Received_bits[4] ==Binaryalpha[4]) { lcd.print(Lcdalpha); CursorControler(); }}void CursorControler() { // Om de cursor te besturen StCursor++; if (StCursor ==16) lcd.setCursor (0, 1);} void loop () { Cell_Input =analogRead (SolarCell); if (Cell_Input> Threshold) {// de startbit-detectievertraging (10); // timing voor (int i =0; i <5; i ++) {// gegevens opslaan als (analogRead (SolarCell)> Threshold) {info [i] =1; } anders { info[i] =0; } vertraging(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, ik, 'ik'); 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, SPATIE, ' '); BufferClear(); }}

Schema's

de fotocel moet tegenover de laser worden geplaatst om gegevens te ontvangen
LCD:
VSS ---> Grond
VDD ---> Arduino 5V
K ---> Grond
EEN ---> Arduino 5V
RW ---> Grond
V0/VEE ---> De Vout van de potentiometer
RS ---> Arduino digitale pin 12
NL ---> Arduino digitale pin 11
D4 ---> Arduino digitale pin 5
D5 ---> Arduino digitale pin 4
D6 ---> Arduino digitale pin 3
D7 ---> Arduino digitale pin 2

Zonnecel:
De negatieve kabel van de SC is verbonden met de grond
De positieve kabel van de SC is verbonden met de Arduino Analoge pin A0 de gebruiker moet kiezen wat hij wil verzenden met behulp van het toetsenbord en het LCD-scherm, na het typen van elke letter die u moet indrukken de bevestigingsknop en druk eventueel op de verzendknop.
LCD:
VSS ---> Grond
VDD ---> Arduino 5V
K ---> Grond
EEN ---> Arduino 5V
RW ---> Grond
V0/VEE ---> De Vout van de potentiometer
RS ---> Arduino digitale pin 12
NL ---> Arduino digitale pin 11
D4 ---> Arduino digitale pin 6
D5 ---> Arduino digitale pin 5
D6 ---> Arduino digitale pin 4
D7 ---> Arduino digitale pin 3
TOETSENBORD:
A ---> Arduino Analoge pin A2 // alle analoge pinnen worden gebruikt als digitale pinnen
B ---> Arduino Analoge pin A1
C ---> Arduino digitale pin 9
D ---> Arduino digitale pin 7
1 ---> Arduino digitale pin 8
2---> Arduino digitale pin 10
3---> Arduino analoge pin A3
PULL-DOWN WEERSTANDEN:
het eerste uiteinde van de weerstand is verbonden met de digitale pin 8 en het 2e met de grond
het eerste uiteinde van de weerstand is verbonden met de digitale pin 10 en het 2e met de grond
het eerste uiteinde van de weerstand is verbonden met de analoge pin A3 en het 2e met de grond

LASERDIODE:
De kathode van de LD is verbonden met de grond
De anode van de LD is verbonden met de Arduino digitale pin 2

Productieproces

  1. Gids voor aluminium lasermarkering
  2. Gids voor lasermarkering
  3. Wat is fiberlasermarkering?
  4. Laseraanwijzer
  5. Halfgeleiderlaser
  6. Solid State Laser
  7. dvd-speler
  8. Lasergeleide raket
  9. Nieuwe elektro-optische laser straalt 30 miljard pulsen per seconde uit
  10. De nieuwe snelste optische vezel verzendt 1 petabit/seconde
  11. UFO-aanval!