Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Transmisión de datos láser Wirlesse (LIFI) (100b / segundo)

Componentes y suministros

Arduino Nano R3
× 2
Protoboard sin soldadura de tamaño completo
× 2
LCD alfanumérico, 16 x 2
× 2
Cables de puente (genéricos)
× 30
KeyPad 4x3
× 1
batería de 9V (genérica)
× 2
Clip de batería de 9V
× 2
Diodo láser, 2 pines
× 1
Accesorio del kit de desarrollo, célula solar
× 1
Potenciómetro giratorio (genérico)
× 2
Resistencia de 10k ohmios
× 3

Herramientas y máquinas necesarias

Soldador (genérico)
Alambre de soldadura, sin plomo

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Este proyecto consta de dos partes, el emisor y el receptor, se puede usar para enviar textos a través de láser usando un teclado y una pantalla LCD

Código

  • Código de transmisor LI-FI V 2.0
  • Receptor LI-FI Código V 2.0
Código de transmisor LI-FI V 2.0 C / C ++
Transmisor LI-FI Código V 2.0
 / * Código de transmisor LI-FI V 2.0 Escrito por HOUALEF AHMED RAMZI Iniciado el 29-9-2020 Última actualización el 14-10-2020 * / # define LaserPin 2 # incluye  const int rs =12, en =11, d4 =6, d5 =5, d6 =4, d7 =3; LiquidCrystal lcd (rs, en, d4, d5, d6, d7); int entrantechar; int KeyPad_R [ ] ={A2, A1, 9, 7}; // El teclado de filasint KeyPad_C [] ={8, 10, A3}; // El teclado Columnsint KeyReturn =0; // La salida de la función del teclado de 1-12int ABC; // variable usada para codificar 3 caracteres usando un botón en Fila; // variable utilizada en la función del teclado en la columna; // variable utilizada en la función del teclado en StCursor =0; // variable para el Cursor Controlint NdCursor =0; // variable para Cursor Controlint outcomingmatrix [32] [5]; // El DATA Bufferint m =0; // variable utilizada para conocer la longitud de la matriz saliente para evitar enviar todos los 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}, ESPACIO [] ={1, 1, 1, 1, 1}; // una pequeña base de datos para almacenar todos los caracteres codificados void setup () {lcd.begin (16, 2); pinMode (LaserPin, SALIDA); Serial.begin (9600); para (int i; i <4; i ++) {pinMode (KeyPad_R [i], SALIDA); } para (int j; j <3; j ++) {pinMode (KeyPad_C [j], INPUT); } lcd.print ("HOUALEF RAMZI"); retraso (5000); lcd.clear (); lcd.setCursor (0,0);} void conv (int alpha [5], char Char) {// PARA LLENAR EL BÚFER DE SALIDA DESDE LA BASE DE DATOS para (int i =0; i <5; i ++) {outcomingmatrix [ m] [i] =alfa [i]; } lcd.print (Char);} void start_bit () {// EL BIT DE INICIO digitalWrite (LaserPin, HIGH); retraso (9); digitalWrite (LaserPin, LOW);} void KeyPad () {// SALIDA EL NÚMERO DE BOTÓN PULSADO DE 1 A 12 para (int i =0; i <4; i ++) {digitalWrite (KeyPad_R [i], HIGH); para (int j =0; j <3; j ++) {if (digitalRead (KeyPad_C [j]) ==1) {Fila =i; Columna =j; digitalWrite (KeyPad_R [i], LOW); if (Fila ==0) {cambiar (Columna) {caso 0:KeyReturn =1; descanso; caso 1:KeyReturn =2; descanso; caso 2:KeyReturn =3; descanso; }} if (Fila ==1) {cambiar (Columna) {caso 0:KeyReturn =4; descanso; caso 1:KeyReturn =5; descanso; caso 2:KeyReturn =6; descanso; }} if (Fila ==2) {cambiar (Columna) {caso 0:KeyReturn =7; descanso; caso 1:KeyReturn =8; descanso; caso 2:KeyReturn =9; descanso; }} if (Fila ==3) {cambiar (Columna) {caso 0:KeyReturn =10; descanso; caso 1:KeyReturn =11; descanso; caso 2:KeyReturn =12; descanso; }}}}} Serial.println (KeyReturn);} void KeyToAscii (int KeyN, int FirtAsciiValue) {// PARA CONVERTIR LOS DATOS DEL TECLADO AL VALOR ASCII PARA TRABAJAR CON LA FUNCIÓN DE CONV. MONITOR Y EL TECLADO if (KeyReturn ==KeyN) {entrantechar =FirtAsciiValue + ABC; ABC ++; si (ABC ==3) {ABC =0; }}} void CursorControler () {lcd.setCursor (StCursor, NdCursor); if (KeyReturn ==10) {// PARA CONFIRMAR LOS CARACTERES PORQUE 11 EN EL BOTÓN CONFIRMAR delay (100); StCursor ++; m ++; } if (StCursor ==16) {// PARA ESCRIBIR EN NUEVA LÍNEA CUANDO LA PRIMERA ESTA COMPLETA StCursor =0; NdCursor =1; }} bucle vacío () {Teclado (); retraso (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); cambiar (carácter entrante) {caso 65:conv (A, 'A'); descanso; caso 66:conv (B, 'B'); descanso; caso 67:conv (C, 'C'); descanso; caso 68:conv (D, 'D'); descanso; caso 69:conv (E, 'E'); descanso; caso 70:conv (F, 'F'); descanso; caso 71:conv (G, 'G'); descanso; caso 72:conv (H, 'H'); descanso; caso 73:conv (yo, 'yo'); descanso; caso 74:conv (J, 'J'); descanso; caso 75:conv (K, 'K'); descanso; caso 76:conv (L, 'L'); descanso; caso 77:conv (M, 'M'); descanso; caso 78:conv (N, 'N'); descanso; caso 79:conv (O, 'O'); descanso; caso 80:conv (P, 'P'); descanso; caso 81:conv (Q, 'Q'); descanso; caso 82:conv (R, 'R'); descanso; caso 83:conv (S, 'S'); descanso; caso 84:conv (T, 'T'); descanso; caso 85:conv (U, 'U'); descanso; caso 86:conv (V, 'V'); descanso; caso 87:conv (W, 'W'); descanso; caso 88:conv (X, 'X'); descanso; caso 89:conv (Y, 'Y'); descanso; caso 90:conv (Z, 'Z'); descanso; caso 32:conv (ESPACIO, ''); descanso; caso 33:conv (ESPACIO, ''); descanso; } // PARA UTILIZAR EL ESPACIO DEL MONITOR SERIAL TIENE QUE CAMBIAR EL CASO 91 POR EL CASO 32 if (KeyReturn ==12) {// PARA ENVIAR DATOS PORQUE 12 ES EL BOTÓN DE ENVIAR delay (100); para (int j =0; j  
Código de receptor LI-FI V 2.0 C / C ++
Receptor LI-FI Código V 2.0
 / * Receptor LI-FI Código V 2.0 Escrito por HOUALEF AHMED RAMZI Iniciado el 29-9-2020 Última actualización el 14-10-2020 * / # include  #define SolarCell A0 // Para definir el pin de entrada del solarcellint StCursor =0; // Para controlar el Cursorint lcd 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}, ESPACIO [] ={1, 1, 1, 1, 1}; const int rs =12, en =11, d4 =5, d5 =4, d6 =3, d7 =2; int Cell_Input; // La entrada del Umbral Solar-Cellint; int info [5]; // El lcd DATALiquidCrystal recibido (rs, en, d4, d5, d6, d7); void setup () {pinMode (A0, INPUT); Serial.begin (9600); lcd. comienzo (16, 2); lcd.setCursor (0, 0); Umbral =analogRead (SolarCell) + 10; lcd.print ("LISTO PARA RECIBIR"); retraso (5000); lcd.clear ();} void BufferClear () {// El borrado del búfer para (int i =0; i <5; i ++) {info [i] =0; }} void check_condition (intived_bits [5], int Binaryalpha [5], char Lcdalpha) {// Para comparar los bits recibidos con la base de datos if (selected_bits [0] ==Binaryalpha [0] &&selected_bits [1] ==Binaryalpha [1] &&bits_ recibidos [2] ==Binaryalpha [2] &&bits_ recibidos [3] ==Binaryalpha [3] &&bits_ recibidos [4] ==Binaryalpha [4]) {lcd.print (Lcdalpha); CursorControler (); }} void CursorControler () {// Para controlar el cursor StCursor ++; if (StCursor ==16) lcd.setCursor (0, 1);} bucle vacío () {Cell_Input =analogRead (SolarCell); if (Cell_Input> Threshold) {// el retardo de detección del bit de inicio (10); // tiempo para (int i =0; i <5; i ++) {// guardar datos if (analogRead (SolarCell)> Threshold) {info [i] =1; } más {info [i] =0; } retraso (10); } condición_control (información, A, 'A'); check_condition (información, B, 'B'); check_condition (información, C, 'C'); check_condition (información, D, 'D'); check_condition (información, E, 'E'); check_condition (información, F, 'F'); check_condition (información, G, 'G'); check_condition (información, H, 'H'); check_condition (info, I, 'I'); check_condition (información, J, 'J'); check_condition (información, K, 'K'); check_condition (información, L, 'L'); check_condition (información, M, 'M'); check_condition (información, N, 'N'); check_condition (información, O, 'O'); check_condition (información, P, 'P'); check_condition (información, Q, 'Q'); check_condition (información, R, 'R'); check_condition (información, S, 'S'); check_condition (información, T, 'T'); check_condition (información, U, 'U'); check_condition (información, V, 'V'); check_condition (información, W, 'W'); check_condition (información, X, 'X'); check_condition (información, Y, 'Y'); check_condition (información, Z, 'Z'); check_condition (información, ESPACIO, ''); BufferClear (); }} 

Esquemas

la fotocélula debe colocarse cara a cara con láser para recibir datos
LCD:
VSS ---> Tierra
VDD ---> Arduino 5V
K ---> Tierra
A ---> Arduino 5V
RW ---> Tierra
V0 / VEE ---> La Vout del potenciómetro
RS ---> Pin digital Arduino 12
ES ---> Pin digital Arduino 11
D4 ---> Pin digital 5 de Arduino
D5 ---> Pin digital 4 de Arduino
D6 ---> Pin digital 3 de Arduino
D7 ---> Pin digital 2 de Arduino

Célula solar:
El cable negativo del SC está conectado a tierra
El cable positivo del SC está conectado al pin analógico Arduino A0 el usuario debe elegir lo que quiere enviar usando el teclado y la pantalla LCD, luego de escribir cada letra debe presionar el botón confirmar y finalmente presione el botón enviar.
LCD:
VSS ---> Tierra
VDD ---> Arduino 5V
K ---> Tierra
A ---> Arduino 5V
RW ---> Tierra
V0 / VEE ---> La Vout del potenciómetro
RS ---> Pin digital Arduino 12
ES ---> Pin digital Arduino 11
D4 ---> Pin digital 6 de Arduino
D5 ---> Pin digital 5 de Arduino
D6 ---> Pin digital 4 de Arduino
D7 ---> Pin digital 3 de Arduino
TECLADO:
A ---> Pin analógico A2 de Arduino // todos los pines analógicos se utilizan como pines digitales
B ---> Pin analógico Arduino A1
C ---> Pin digital Arduino 9
D ---> Pin digital 7 de Arduino
1 ---> Pin digital Arduino 8
2 ---> Pin digital Arduino 10
3 ---> Pin analógico Arduino A3
RESISTENCIAS DE TIRAR HACIA ABAJO:
el primer extremo de la resistencia está conectado al pin digital 8 y el segundo al suelo
el primer extremo de la resistencia está conectado al pin digital 10 y el segundo al suelo
el primer extremo de la resistencia está conectado al pin analógico A3 y el segundo al suelo

DIODO LÁSER:
El cátodo del LD está conectado a tierra
El ánodo del LD está conectado al pin digital 2 de Arduino

Proceso de manufactura

  1. Guía para el marcado láser de aluminio
  2. Guía de marcado láser
  3. ¿Qué es el marcado láser de fibra?
  4. Puntero láser
  5. Láser semiconductor
  6. Láser de estado sólido
  7. Reproductor de DVD
  8. Misil guiado por láser
  9. El nuevo láser electroóptico emite 30 mil millones de pulsos por segundo
  10. La nueva fibra óptica más rápida transmite 1 petabit / segundo
  11. ¡Ataque OVNI!