Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Transmissão de dados laser Wirlesse (LIFI) (100b / segundo)

Componentes e suprimentos

Arduino Nano R3
× 2
Placa de ensaio sem solda em tamanho real
× 2
LCD alfanumérico, 16 x 2
× 2
Fios de jumpers (genérico)
× 30
KeyPad 4x3
× 1
Bateria de 9 V (genérica)
× 2
Clipe de bateria 9V
× 2
Diodo laser, 2 pinos
× 1
Acessório do kit de desenvolvimento, célula solar
× 1
Potenciômetro rotativo (genérico)
× 2
Resistor 10k ohm
× 3

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)
Arame de solda, sem chumbo

Aplicativos e serviços online

Arduino IDE

Sobre este projeto






Este projeto é composto por duas partes, o emissor e o receptor, podendo ser utilizado para enviar textos a laser utilizando um teclado e um LCD.

Código

  • Código do transmissor LI-FI V 2.0
  • Código do receptor LI-FI V 2.0
Código do transmissor LI-FI V 2.0 C / C ++
Transmissor LI-FI Código V 2.0
 / * Transmissor LI-FI Código V 2.0 Escrito por HOUALEF AHMED RAMZI Iniciado em 29-9-2020 Última atualização em 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 entrychar; int KeyPad_R [ ] ={A2, A1, 9, 7}; // The KeyPad rowsint KeyPad_C [] ={8, 10, A3}; // O KeyPad Columnsint KeyReturn =0; // A saída da função do teclado de 1-12int ABC; // variável usada para codificar 3 caracteres usando um botão Row; // variável usada na functionint do teclado Coluna; // variável usada na functionint do teclado StCursor =0; // variável para o Cursor Controlint NdCursor =0; // variável para o Cursor Controlint outcomingmatrix [32] [5]; // O DATA Bufferint m =0; // variável usada para saber o comprimento da matriz de saída para evitar o envio de todos os 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}, ESPAÇO [] ={1, 1, 1, 1, 1}; // uma pequena base de dados para armazenar todos os charachtersvoid codificados setup () {lcd.begin (16, 2); pinMode (LaserPin, OUTPUT); Serial.begin (9600); para (int i; i <4; i ++) {pinMode (KeyPad_R [i], SAÍDA); } para (int j; j <3; j ++) {pinMode (KeyPad_C [j], INPUT); } lcd.print ("HOUALEF RAMZI"); atraso (5000); lcd.clear (); lcd.setCursor (0,0);} void conv (int alpha [5], char Char) {// PARA PREENCHER O BUFFER DE SAÍDA DA BASE DE DADOS para (int i =0; i <5; i ++) {outcomingmatrix [ m] [i] =alfa [i]; } lcd.print (Char);} void start_bit () {// O BIT DE INÍCIO digitalWrite (LaserPin, HIGH); atraso (9); digitalWrite (LaserPin, LOW);} void KeyPad () {// SAÍDA DO NÚMERO DO BOTÃO PRESSIONADO 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) {Linha =i; Coluna =j; digitalWrite (KeyPad_R [i], LOW); if (Row ==0) {switch (Column) {case 0:KeyReturn =1; pausa; caso 1:KeyReturn =2; pausa; caso 2:KeyReturn =3; pausa; }} if (Row ==1) {switch (Column) {case 0:KeyReturn =4; pausa; caso 1:KeyReturn =5; pausa; caso 2:KeyReturn =6; pausa; }} if (Row ==2) {switch (Column) {case 0:KeyReturn =7; pausa; caso 1:KeyReturn =8; pausa; caso 2:KeyReturn =9; pausa; }} if (Row ==3) {switch (Column) {case 0:KeyReturn =10; pausa; caso 1:KeyReturn =11; pausa; caso 2:KeyReturn =12; pausa; }}}}} Serial.println (KeyReturn);} void KeyToAscii (int KeyN, int FirtAsciiValue) {// PARA CONVERTER DADOS DO TECLADO PARA O VALOR ASCII PARA TRABALHAR COM A FUNÇÃO CONV ACIMA QUE É COMO PODEMOS USAR AMBOS SERIAL MONITORAR E O TECLADO if (KeyReturn ==KeyN) {Entrychar =FirtAsciiValue + ABC; ABC ++; if (ABC ==3) {ABC =0; }}} void CursorControler () {lcd.setCursor (StCursor, NdCursor); if (KeyReturn ==10) {// PARA CONFIRMAR OS PERSONAGENS PORQUE 11 NO BOTÃO CONFIRMAR atraso (100); StCursor ++; m ++; } if (StCursor ==16) {// PARA ESCREVER NA NOVA LINHA QUANDO A PRIMEIRA ESTÁ CHEIA StCursor =0; NdCursor =1; }} void loop () {KeyPad (); atraso (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 (atributo de entrada) {caso 65:conv (A, 'A'); pausa; caso 66:conv (B, 'B'); pausa; caso 67:conv (C, 'C'); pausa; caso 68:conv (D, 'D'); pausa; caso 69:conv (E, 'E'); pausa; caso 70:conv (F, 'F'); pausa; caso 71:conv (G, 'G'); pausa; caso 72:conv (H, 'H'); pausa; caso 73:conv (I, 'I'); pausa; caso 74:conv (J, 'J'); pausa; caso 75:conv (K, 'K'); pausa; caso 76:conv (L, 'L'); pausa; caso 77:conv (M, 'M'); pausa; caso 78:conv (N, 'N'); pausa; caso 79:conv (O, 'O'); pausa; caso 80:conv (P, 'P'); pausa; caso 81:conv (Q, 'Q'); pausa; caso 82:conv (R, 'R'); pausa; caso 83:conv (S, 'S'); pausa; caso 84:conv (T, 'T'); pausa; caso 85:conv (U, 'U'); pausa; caso 86:conv (V, 'V'); pausa; caso 87:conv (W, 'W'); pausa; caso 88:conv (X, 'X'); pausa; caso 89:conv (Y, 'Y'); pausa; caso 90:conv (Z, 'Z'); pausa; caso 32:conv (ESPAÇO, ''); pausa; caso 33:conv (SPACE, ''); pausa; } // PARA USAR O ESPAÇO DO MONITOR SERIAL VOCÊ TEM QUE ALTERAR CASO 91 PARA O CASO 32 if (KeyReturn ==12) {// PARA ENVIAR DADOS PORQUE 12 É O BOTÃO ENVIAR atraso (100); para (int j =0; j  
Código do receptor LI-FI V 2.0 C / C ++
Código do receptor LI-FI V 2.0
 / * Código do receptor LI-FI V 2.0 escrito por HOUALEF AHMED RAMZI Iniciado em 29-9-2020 Última atualização em 14-10-2020 * / # include  #define SolarCell A0 // Para definir o pino de entrada do solarcellint StCursor =0; // Para controlar o cursor 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}, ESPAÇO [] ={1, 1, 1, 1, 1}; const int rs =12, en =11, d4 =5, d5 =4, d6 =3, d7 =2; int Cell_Input; // A entrada do Solar-Cellint Threshold; int info [5]; // O DATALiquidCrystal lcd (rs, en, d4, d5, d6, d7) recebido; void setup () {pinMode (A0, INPUT); Serial.begin (9600); lcd.begin (16, 2); lcd.setCursor (0, 0); Limiar =analogRead (SolarCell) + 10; lcd.print ("PRONTO PARA RECEBER"); atraso (5000); lcd.clear ();} void BufferClear () {// Limpa o buffer para (int i =0; i <5; i ++) {info [i] =0; }} void check_condition (int received_bits [5], int Binaryalpha [5], char Lcdalpha) {// Para comparar os bits recebidos com a base de dados 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 () {// Para controlar o cursor StCursor ++; if (StCursor ==16) lcd.setCursor (0, 1);} void loop () {Cell_Input =analogRead (SolarCell); if (Cell_Input> Threshold) {// o atraso de detecção do bit inicial (10); // tempo para (int i =0; i <5; i ++) {// salvar dados if (analogRead (SolarCell)> Limite) {info [i] =1; } else {info [i] =0; } atraso (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'); verificar_condição (info, H, 'H'); check_condition (info, I, 'I'); verificação_condição (info, J, 'J'); check_condition (info, K, 'K'); check_condition (info, L, 'L'); check_condition (info, M, 'M'); verificar_condição (info, N, 'N'); check_condition (info, O, 'O'); verificar_condição (info, P, 'P'); verificar_condição (info, Q, 'Q'); verificar_condição (info, R, 'R'); check_condition (info, S, 'S'); check_condition (info, T, 'T'); check_condition (info, U, 'U'); verificar_condição (info, V, 'V'); verificar_condição (info, W, 'W'); check_condition (info, X, 'X'); check_condition (info, Y, 'Y'); verificar_condição (info, Z, 'Z'); check_condition (info, SPACE, ''); BufferClear (); }} 

Esquemas

a fotocélula deve ser colocada frente a frente com o laser para receber dados
LCD:
VSS ---> Ground
VDD ---> Arduino 5V
K ---> Ground
A ---> Arduino 5V
RW ---> Ground
V0 / VEE ---> O Vout do potenciômetro
RS ---> pino digital 12 do Arduino
PT ---> Arduino digital pin 11
D4 ---> pino digital 5 do Arduino
D5 ---> pino digital 4 do Arduino
D6 ---> pino digital 3 do Arduino
D7 ---> pino digital 2 do Arduino

Célula solar:
O cabo negativo do SC é conectado ao aterramento
O terminal positivo do SC é conectado ao pino A0 do Arduino Analog o usuário deve escolher o que deseja enviar usando o teclado e o LCD, após digitar cada letra que você deve pressionar o botão confirmar e, eventualmente, pressione o botão enviar.
LCD:
VSS ---> Ground
VDD ---> Arduino 5V
K ---> Ground
A ---> Arduino 5V
RW ---> Ground
V0 / VEE ---> O Vout do potenciômetro
RS ---> pino digital 12 do Arduino
PT ---> Arduino digital pin 11
D4 ---> pino digital 6 do Arduino
D5 ---> pino digital 5 do Arduino
D6 ---> pino digital 4 do Arduino
D7 ---> pino digital 3 do Arduino
TECLADO:
A ---> pino analógico A2 do Arduino // todos os pinos analógicos são usados ​​como pinos digitais
B ---> Arduino analógico pino A1
C ---> pino digital 9 do Arduino
D ---> Arduino digital pino 7
1 ---> pino digital 8 do Arduino
2 ---> pino digital 10 do Arduino
3 ---> Arduino analógico pino A3
RESISTORES DE PUXAMENTO:
a primeira extremidade do resistor está conectada ao pino digital 8 e a 2ª ao terra
a primeira extremidade do resistor está conectada ao pino digital 10 e a 2ª ao terra
a primeira extremidade do resistor está conectada ao pino analógico A3 e a 2ª ao terra

DIODO LASER:
O cátodo do LD é conectado ao terra
O ânodo do LD é conectado ao pino digital 2 do Arduino

Processo de manufatura

  1. Guia para marcação a laser em alumínio
  2. Guia para marcação a laser
  3. O que é marcação a laser a fibra?
  4. Ponteiro Laser
  5. Laser semicondutor
  6. Laser de estado sólido
  7. DVD Player
  8. Míssil guiado por laser
  9. Novo laser eletro-óptico emite 30 bilhões de pulsos por segundo
  10. A nova fibra óptica mais rápida transmite 1 petabit / segundo