산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

무선 레이저 데이터 전송(LIFI)(100b/초)

구성품 및 소모품

Arduino Nano R3
× 2
무납땜 브레드보드 전체 크기
× 2
영숫자 LCD, 16 x 2
× 2
점퍼 와이어(일반)
× 30
키패드 4x3
× 1
9V 배터리(일반)
× 2
9V 배터리 클립
× 2
레이저 다이오드, 2핀
× 1
개발 키트 액세서리, 태양 전지
× 1
회전 전위차계(일반)
× 2
저항 10k 옴
× 3

필요한 도구 및 기계

납땜 인두(일반)
납땜 와이어, 무연

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

이 프로젝트는 키패드와 LCD를 사용하여 레이저를 통해 텍스트를 보내는 데 사용할 수 있는 송신기와 수신기의 두 부분으로 구성되어 있습니다.

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • LI-FI 송신기 코드 V 2.0
  • LI-FI 수신기 코드 V 2.0
  • LI-FI 송신기 코드 V 2.0C/C++
    LI-FI 송신기 코드 V 2.0<사전>/*LI-FI 송신기 코드 V 2.0 HOUALEF AHMED RAMZI 작성 2020년 9월 29일 시작 마지막 업데이트 2020년 10월 14일*/#define LaserPin 2#include const int rs =12, en =11, d4 =6, d5 =5, d6 =4, d7 =3 ] ={A2, A1, 9, 7}; //키패드 행int KeyPad_C[] ={8, 10, A3}; // 키패드 Columnsint KeyReturn =0; // 1-12int ABC의 키패드 기능 출력; //하나의 버튼을 사용하여 3개의 문자를 코딩하는 데 사용되는 변수int Row; //키패드에서 사용되는 변수 functionint Column;//키패드에서 사용되는 변수 functionint StCursor =0; //Cursor Controlint의 변수 NdCursor =0; //Cursor Controlint outcomingmatrix[32][5]에 대한 변수; //The DATA Bufferint m =0;// 모든 32*5 emty bufferint A[] ={1, 1, 1, 1, 0}, B[] =전송을 피하기 위해 outcomingmatrix의 길이를 아는 데 사용되는 변수 {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}; 정수 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}; 정수 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}; // 코딩된 모든 데이터를 저장할 작은 데이터베이스 charachtersvoid setup() { lcd.begin(16, 2); 핀모드(레이저핀, 출력); Serial.begin(9600); for (int i; i <4; i++) { pinMode( KeyPad_R[i], OUTPUT); } (int j; j <3; j++) { pinMode( KeyPad_C[j], INPUT); } lcd.print("HOUALEF 램지"); 지연(5000); lcd.clear(); lcd.setCursor(0,0);}void conv(int alpha [5], char Char ) { // (int i =0; i <5; i++) { outcomingmatrix[ m][i] =알파[i]; } lcd.print(Char);}void start_bit() { //시작 비트 digitalWrite(LaserPin, HIGH); 지연(9); digitalWrite(LaserPin, LOW);}void KeyPad() { // (int i =0; i <4; i++) { digitalWrite( KeyPad_R[i], HIGH); for (int j =0; j <3; j++) { if (digitalRead(KeyPad_C[j]) ==1) { 행 =i; 열 =j; 디지털 쓰기(키패드_R[i], 낮음); if (행 ==0) { 스위치 (열) { 경우 0:KeyReturn =1; 부서지다; 사례 1:KeyReturn =2; 부서지다; 사례 2:KeyReturn =3; 부서지다; } } if (행 ==1) { 스위치 (열) { 경우 0:KeyReturn =4; 부서지다; 사례 1:KeyReturn =5; 부서지다; 사례 2:KeyReturn =6; 부서지다; } } if (행 ==2) { 스위치 (열) { 경우 0:KeyReturn =7; 부서지다; 사례 1:KeyReturn =8; 부서지다; 사례 2:KeyReturn =9; 부서지다; } } if (행 ==3) { 스위치 (열) { 경우 0:KeyReturn =10; 부서지다; 사례 1:KeyReturn =11; 부서지다; 사례 2:KeyReturn =12; 부서지다; } } } } } Serial.println(KeyReturn);}void KeyToAscii(int KeyN, int FirtAsciiValue) { // 키패드의 데이터를 ASCII 값으로 변환하여 위의 변환 함수로 작업하려면 두 가지 모두를 직렬로 사용할 수 있습니다. 모니터와 키패드 if (KeyReturn ==KeyN) { Incomingchar =FirtAsciiValue + ABC; ABC++; if (ABC ==3) { ABC =0; } }} 무효 CursorControler() { lcd.setCursor(StCursor, NdCursor); if (KeyReturn ==10) { //확인 버튼에서 11이 되기 때문에 문자를 확인하려면 delay(100); StCursor++; m++; } if (StCursor ==16) { // 첫 번째 줄이 FULL일 때 새 줄에 쓰기 StCursor =0; NdCursor =1; }}무효 루프() { 키패드(); 지연(150); 커서제어기(); 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(스페이스, ' '); 부서지다; 사례 33:conv(스페이스, ' '); 부서지다; } // 직렬 모니터의 공간을 사용하려면 CASE 91을 CASE 32로 변경해야 합니다. if (KeyReturn ==12) { //12가 SEND 버튼이기 때문에 데이터를 보내려면 delay(100); for (int j =0; j
    LI-FI 수신기 코드 V 2.0C/C++
    LI-FI 수신기 코드 V 2.0<사전>/*LI-FI 수신기 코드 V 2.0 HOUALEF AHMED RAMZI 작성 2020년 9월 29일 시작 마지막 업데이트 2020년 10월 14일*/#include #define SolarCell A0 //solarcellint의 입력 핀을 정의하려면 StCursor =0; // 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}; 정수 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; // Solar-Cellint 임계값의 입력;int info[5]; //수신된 DATALiquidCrystal lcd(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("수신 준비 완료"); 지연(5000); lcd.clear();}void BufferClear() { // 버퍼 지우기 for (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] ==바이너리알파[1] &&수신비트[2] ==바이너리알파[2] &&수신비트[3] ==바이너리알파[3] &&수신비트[4] ==바이너리알파[4]) { lcd.print(Lcdalpha); 커서제어기(); }}void CursorControler() { // 커서를 제어하려면 StCursor++; if (StCursor ==16) lcd.setCursor(0, 1);} 무효 루프() { Cell_Input =analogRead(SolarCell); if (Cell_Input> Threshold) { // 시작 비트 감지 지연(10); // 타이밍 for (int i =0; i <5; i++) { // 데이터 저장 if (analogRead(SolarCell)> Threshold) { info[i] =1; } 그렇지 않으면 { 정보[i] =0; } 지연(10); } check_condition(정보, A, 'A'); check_condition(정보, B, 'B'); check_condition(정보, C, 'C'); check_condition(정보, D, 'D'); check_condition(정보, E, 'E'); check_condition(정보, F, 'F'); check_condition(정보, G, 'G'); check_condition(정보, H, 'H'); check_condition(정보, 나, '나'); check_condition(정보, J, 'J'); check_condition(정보, K, 'K'); check_condition(정보, L, 'L'); check_condition(정보, M, 'M'); check_condition(정보, N, 'N'); check_condition(정보, O, 'O'); check_condition(정보, P, 'P'); check_condition(정보, Q, 'Q'); check_condition(정보, R, 'R'); check_condition(정보, S, 'S'); check_condition(정보, T, 'T'); check_condition(정보, U, 'U'); check_condition(정보, V, 'V'); check_condition(정보, W, 'W'); check_condition(정보, X, 'X'); check_condition(정보, Y, 'Y'); check_condition(정보, Z, 'Z'); check_condition(정보, 공간, ' '); 버퍼 지우기(); }}

    회로도

    데이터를 수신하려면 포토 셀을 레이저와 대면해야 합니다.
    LCD:
    VSS ---> 접지
    VDD ---> 아두이노 5V
    K ---> 접지
    A ---> 아두이노 5V
    RW ---> 접지
    V0/VEE ---> 전위차계의 Vout
    RS ---> Arduino 디지털 핀 12
    KO ---> Arduino 디지털 핀 11
    D4 ---> Arduino 디지털 핀 5
    D5 ---> Arduino 디지털 핀 4
    D6 ---> Arduino 디지털 핀 3
    D7 ---> Arduino 디지털 핀 2

    태양 전지:
    SC의 음극 리드는 접지에 연결됩니다.
    SC의 양극 리드는 Arduino 아날로그 핀 A0에 연결됩니다. 사용자는 눌러야 하는 각 문자를 입력한 후 키패드와 LCD를 사용하여 보낼 내용을 선택해야 합니다. 확인 버튼을 누르고 마지막으로 보내기 버튼을 누릅니다.
    LCD:
    VSS ---> 접지
    VDD ---> 아두이노 5V
    K ---> 접지
    A ---> 아두이노 5V
    RW ---> 접지
    V0/VEE ---> 전위차계의 Vout
    RS ---> Arduino 디지털 핀 12
    KO ---> 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에 연결된 저항의 첫 번째 끝과 접지에 두 번째 끝
    저항의 첫 번째 끝은 디지털 핀 10에 연결되고 두 번째 끝은 접지에 연결됩니다.
    저항기의 첫 번째 끝은 아날로그 핀 A3에 연결되고 두 번째 끝은 접지에 연결됩니다.

    레이저 다이오드:
    LD의 음극은 접지에 연결됩니다.
    LD의 양극은 Arduino 디지털 핀 2에 연결됩니다.

    제조공정

    1. 알루미늄 레이저 마킹 가이드
    2. 레이저 마킹 가이드
    3. 파이버 레이저 마킹이란 무엇입니까?
    4. 레이저 포인터
    5. 반도체 레이저
    6. 고체 레이저
    7. DVD 플레이어
    8. 레이저 유도 미사일
    9. 초당 300억 펄스를 방출하는 새로운 전기 광학 레이저
    10. 초당 1페타비트를 전송하는 가장 빠른 광섬유