Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Transmission de données laser sans fil (LIFI) (100b/seconde)

Composants et fournitures

Arduino Nano R3
× 2
Planche à pain sans soudure pleine grandeur
× 2
LCD alphanumérique, 16 x 2
× 2
Câbles de raccordement (générique)
× 30
KeyPad 4x3
× 1
Batterie 9V (générique)
× 2
Clip de batterie 9V
× 2
Diode laser, 2 broches
× 1
Accessoire de kit de développement, cellule solaire
× 1
Potentiomètre rotatif (générique)
× 2
Résistance 10k ohm
× 3

Outils et machines nécessaires

Fer à souder (générique)
Fil à souder, sans plomb

Applications et services en ligne

Arduino IDE

À propos de ce projet

Ce projet est composé de deux parties l'émetteur et le récepteur, il peut être utilisé pour envoyer des textes par laser à l'aide d'un clavier et d'un écran LCD

Code

  • Code émetteur LI-FI V 2.0
  • Code récepteur LI-FI V 2.0
Li-FI Transmitter Code V 2.0C/C++
Code de l'émetteur LI-FI V 2.0/*Code de l'émetteur LI-FI V 2.0 Écrit par HOUALEF AHMED RAMZI Commencé le 29-9-2020 Dernière mise à jour le 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 entrantchar;int KeyPad_R[ ] ={A2, A1, 9, 7} ; //La ligne du pavé numérique KeyPad_C[] ={8, 10, A3} ; // Le clavier Columnsint KeyReturn =0; // La sortie de la fonction du clavier de 1-12int ABC; //variable utilisée pour coder 3 caractères à l'aide d'un seul bouton Row; //variable utilisée dans la fonction Clavierint Column;//variable utilisée dans la fonction Keypadint StCursor =0; //variable pour le Cursor Controlint NdCursor =0; //variable pour la matrice de sortie Cursor Controlint[32][5] ; //La DATA Bufferint m =0;// la variable utilisée pour connaître la longueur de la matrice sortante pour éviter d'envoyer tous les 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}, ESPACE [] ={1, 1, 1, 1, 1} ; // une petite base de données pour stocker tous les caractères codés setup() { lcd.begin(16, 2); pinMode(LaserPin, SORTIE); Serial.begin(9600); for (int i; i <4; i++) { pinMode( KeyPad_R[i], OUTPUT); } pour (int j; j <3; j++) { pinMode( KeyPad_C[j], INPUT); } lcd.print("HOUALEF RAMZI"); retard (5000); lcd.clear(); lcd.setCursor(0,0);}void conv(int alpha [5], char Char ) { // POUR REMPLIR LE TAMPON DE SORTIE DE LA BASE DE DONNÉES pour (int i =0; i <5; i++) { outcomingmatrix[ m][i] =alpha[i] ; } lcd.print(Char);}void start_bit() { //LE BIT DE DÉBUT digitalWrite(LaserPin, HIGH); délai(9) ; digitalWrite(LaserPin, LOW);}void KeyPad() { // SORTIE DU NUMÉRO DU BOUTON APPUYÉ DE 1 À 12 pour (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; Colonne =j; digitalWrite( KeyPad_R[i], LOW); if (Ligne ==0) { switch (Column) { case 0 :KeyReturn =1 ; Pause; cas 1 :KeyReturn =2 ; Pause; cas 2 :KeyReturn =3; Pause; } } if (Ligne ==1) { switch (Column) { case 0 :KeyReturn =4; Pause; cas 1 :KeyReturn =5 ; Pause; cas 2 :KeyReturn =6 ; Pause; } } if (Ligne ==2) { switch (Column) { case 0 :KeyReturn =7; Pause; cas 1 :KeyReturn =8 ; Pause; cas 2 :KeyReturn =9 ; Pause; } } if (Ligne ==3) { switch (Column) { case 0 :KeyReturn =10; Pause; cas 1 :KeyReturn =11 ; Pause; cas 2 :KeyReturn =12 ; Pause; } } } } } Serial.println(KeyReturn);}void KeyToAscii(int KeyN, int FirtAsciiValue) { // POUR CONVERTIR LES DONNÉES DU CLAVIER EN VALEUR ASCII POUR TRAVAILLER AVEC LA FONCTION CONV CI-DESSUS C'EST COMMENT NOUS POUVONS UTILISER LES DEUX DE SÉRIE MONITEUR ET LE CLAVIER if (KeyReturn ==KeyN) { comingchar =FirtAsciiValue + ABC; ABC++ ; si (ABC ==3) { ABC =0; } }}void CursorControler() { lcd.setCursor(StCursor, NdCursor); if (KeyReturn ==10) { // POUR CONFIRMER LES CARACTERES CAR 11 DANS LE BOUTON CONFIRMER delay(100); StCurseur++; m++; } if (StCursor ==16) { // POUR ÉCRIRE DANS LA NOUVELLE LIGNE QUAND LA PREMIÈRE EST PLEINE StCursor =0; NdCurseur =1 ; }}boucle vide() { KeyPad(); retard (150); CursorControler(); CléVersAscii(1, 65); CléVersAscii(2, 68); CléVersAscii(3, 71); CléVersAscii(4, 74); CléVersAscii(5, 77); CléVersAscii (6, 80); CléVersAscii (7, 83); CléVersAscii(8, 86); CléVersAscii(9, 89); CléVersAscii(11, 32); switch (incomingchar) { case 65:conv(A, 'A'); Pause; cas 66 : conv(B, 'B'); Pause; cas 67 : conv(C, 'C'); Pause; cas 68 : conv(D, 'D'); Pause; cas 69 : conv(E, 'E'); Pause; cas 70 :conv(F, 'F'); Pause; cas 71 : conv(G, 'G'); Pause; cas 72 : conv(H, 'H'); Pause; cas 73 : conv(I, 'I'); Pause; cas 74 : conv(J, 'J'); Pause; cas 75 : conv(K, 'K'); Pause; cas 76 : conv(L, 'L'); Pause; cas 77 : conv(M, 'M'); Pause; cas 78 : conv(N, 'N'); Pause; cas 79 : conv(O, 'O'); Pause; cas 80 : conv(P, 'P'); Pause; cas 81 : conv(Q, 'Q'); Pause; cas 82 : conv(R, 'R'); Pause; cas 83 : conv(S, 'S'); Pause; cas 84 : conv(T, 'T'); Pause; cas 85 :conv(U, 'U'); Pause; cas 86 : conv(V, 'V'); Pause; cas 87 : conv(W, 'W'); Pause; cas 88 : conv(X, 'X'); Pause; cas 89 : conv(Y, 'Y'); Pause; cas 90 :conv(Z, 'Z'); Pause; cas 32 : conv(ESPACE, ' '); Pause; cas 33 :conv(ESPACE, ' '); Pause; } // POUR UTILISER L'ESPACE DU MONITEUR SERIE, VOUS DEVEZ CHANGER CASE 91 EN CASE 32 if (KeyReturn ==12) { // POUR ENVOYER DES DONNÉES PARCE QUE 12 EST LE BOUTON ENVOYER delay(100); for (int j =0; j
Code récepteur LI-FI V 2.0C/C++
LI-FI Receiver Code V 2.0
/*LI-FI Receiver Code V 2.0 Écrit par HOUALEF AHMED RAMZI Commencé le 29-9-2020 Dernière mise à jour le 14-10-2020*/#include #define SolarCell A0 //Pour définir la broche d'entrée du solarcellint StCursor =0; // Pour contrôler l'écran lcd 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}, SPACE[] ={1, 1, 1, 1, 1};const int rs =12, en =11, d4 =5, d5 =4, d6 =3, d7 =2;int Cell_Input; // L'entrée du seuil de la cellule solaire;int info[5]; //Le DATALiquidCrystal lcd(rs, en, d4, d5, d6, d7);void setup() { pinMode(A0, INPUT); Serial.begin(9600); lcd.begin (16, 2); lcd.setCursor(0, 0); Seuil =lecture analogique (Cellule solaire) + 10 ; lcd.print("PRÊT À RECEVOIR"); retard (5000); lcd.clear();}void BufferClear() { // L'effacement du tampon pour (int i =0; i <5; i++) { info[i] =0; }}void check_condition(int receive_bits[5], int Binaryalpha[5], char Lcdalpha) {//Pour comparer les bits reçus Avec la base de données 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() { // Pour contrôler le curseur StCursor++; if (StCursor ==16) lcd.setCursor(0, 1);}void loop() { Cell_Input =analogRead(SolarCell); if (Cell_Input> Threshold) { // le délai de détection du bit de départ (10) ; // timing pour (int i =0; i <5; i++) { // enregistrer les données if (analogRead(SolarCell)> Threshold) { info[i] =1; } else { info[i] =0; } délai(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, je, 'je'); 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, ESPACE, ' '); BufferClear(); }}

Schémas

la cellule photo doit être placée face à face avec le laser pour recevoir les données
ACL :
VSS ---> Terre
VDD ---> Arduino 5V
K ---> Terre
Un ---> Arduino 5V
RW ---> Terre
V0/VEE ---> Le Vout du potentiomètre
RS ---> broche numérique Arduino 12
FR ---> broche numérique Arduino 11
D4 ---> broche numérique Arduino 5
D5 ---> broche numérique Arduino 4
D6 ---> broche numérique Arduino 3
D7 ---> broche numérique Arduino 2

Cellule photovoltaïque:
Le fil négatif du SC est connecté à la terre
Le fil positif du SC est connecté à la broche analogique Arduino A0 l'utilisateur doit choisir ce qu'il veut envoyer à l'aide du clavier et de l'écran LCD, après avoir tapé chaque lettre, vous devez appuyer sur le bouton de confirmation et éventuellement appuyer sur le bouton d'envoi.
ACL :
VSS ---> Terre
VDD ---> Arduino 5V
K ---> Terre
Un ---> Arduino 5V
RW ---> Terre
V0/VEE ---> Le Vout du potentiomètre
RS ---> broche numérique Arduino 12
FR ---> broche numérique Arduino 11
D4 ---> broche numérique Arduino 6
D5 ---> broche numérique Arduino 5
D6 ---> broche numérique Arduino 4
D7 ---> broche numérique Arduino 3
CLAVIER:
A ---> broche analogique Arduino A2 // toutes les broches analogiques sont utilisées comme broches numériques
B ---> broche analogique Arduino A1
C ---> broche numérique Arduino 9
D ---> broche numérique Arduino 7
1 ---> broche numérique Arduino 8
2---> broche numérique Arduino 10
3---> Broche analogique Arduino A3
RÉSISTANCES DE TRACTION :
la première extrémité de la résistance est connectée à la broche numérique 8 et la 2ème à la terre
la première extrémité de la résistance est connectée à la broche numérique 10 et la 2ème à la terre
la première extrémité de la résistance est connectée à la broche analogique A3 et la 2ème à la terre

DIODE LASER:
La cathode du LD est reliée à la terre
L'anode du LD est connectée à la broche numérique Arduino 2

Processus de fabrication

  1. Guide du marquage laser sur aluminium
  2. Guide du marquage laser
  3. Qu'est-ce que le marquage laser à fibre ?
  4. Pointeur laser
  5. Laser à semi-conducteur
  6. Laser à semi-conducteurs
  7. Lecteur DVD
  8. Le nouveau laser électro-optique émet 30 milliards d'impulsions par seconde
  9. La nouvelle fibre optique la plus rapide transmet 1 pétabit/seconde