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

무선 레이저 데이터 전송(Li-Fi): 100bps 성능 개요

부품 및 소모품

부품수량
아두이노 나노 R32
브레드보드 풀사이즈2
16x2 영숫자 LCD2
점퍼 와이어30
4x3 키패드1
9V 배터리2
9V 배터리 클립2
레이저 다이오드 (2핀)1
태양전지 (개발 키트용)1
로터리 포텐셔미터2
10kΩ 저항3

필수 도구 및 장비

앱 및 온라인 서비스

프로젝트 소개

이 프로젝트는 송신부(이미터)와 수신부(리시버) 두 부분으로 구성되며, 키패드와 LCD를 사용해 레이저로 텍스트를 전송합니다.

코드

Li-Fi 송신부 코드 V 2.0 (C/C++)

/*LI-FI Transmitter Code V 2.0 Written By HOUALEF AHMED RAMZI Started on 29-9-2020 Last Update on 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 incomingchar;
int KeyPad_R[] = {A2, A1, 9, 7};
int KeyPad_C[] = {8, 10, A3};
int KeyReturn = 0;
int ABC = 0;
int Row, Column;
int StCursor = 0, NdCursor = 0;
int outcomingmatrix[32][5];
int m = 0;
int 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};

void setup() {
  lcd.begin(16, 2);
  pinMode(LaserPin, OUTPUT);
  Serial.begin(9600);
  for (int i=0; i<4; i++) pinMode(KeyPad_R[i], OUTPUT);
  for (int j=0; j<3; j++) pinMode(KeyPad_C[j], INPUT);
  lcd.print("HOUALEF RAMZI");
  delay(5000);
  lcd.clear();
  lcd.setCursor(0,0);
}

void conv(int alpha[5], char Char) {
  for (int i=0; i<5; i++) outcomingmatrix[m][i] = alpha[i];
  lcd.print(Char);
}

void start_bit() {
  digitalWrite(LaserPin, HIGH);
  delay(9);
  digitalWrite(LaserPin, LOW);
}

void KeyPad() {
  for (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; Column = j;
        digitalWrite(KeyPad_R[i], LOW);
        if (Row == 0) { switch(Column) { case 0: KeyReturn=1; break; case 1: KeyReturn=2; break; case 2: KeyReturn=3; break; } }
        if (Row == 1) { switch(Column) { case 0: KeyReturn=4; break; case 1: KeyReturn=5; break; case 2: KeyReturn=6; break; } }
        if (Row == 2) { switch(Column) { case 0: KeyReturn=7; break; case 1: KeyReturn=8; break; case 2: KeyReturn=9; break; } }
        if (Row == 3) { switch(Column) { case 0: KeyReturn=10; break; case 1: KeyReturn=11; break; case 2: KeyReturn=12; break; } }
      }
    }
  }
  Serial.println(KeyReturn);
}

void KeyToAscii(int KeyN, int FirtAsciiValue) {
  if (KeyReturn == KeyN) {
    incomingchar = FirtAsciiValue + ABC;
    ABC++; if (ABC == 3) ABC = 0;
  }
}

void CursorControler() {
  lcd.setCursor(StCursor, NdCursor);
  if (KeyReturn == 10) { delay(100); StCursor++; m++; }
  if (StCursor == 16) { StCursor = 0; NdCursor = 1; }
}

void loop() {
  KeyPad();
  delay(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'); break; case 66: conv(B,'B'); break; case 67: conv(C,'C'); break; case 68: conv(D,'D'); break;
    case 69: conv(E,'E'); break; case 70: conv(F,'F'); break; case 71: conv(G,'G'); break; case 72: conv(H,'H'); break;
    case 73: conv(I,'I'); break; case 74: conv(J,'J'); break; case 75: conv(K,'K'); break; case 76: conv(L,'L'); break;
    case 77: conv(M,'M'); break; case 78: conv(N,'N'); break; case 79: conv(O,'O'); break; case 80: conv(P,'P'); break;
    case 81: conv(Q,'Q'); break; case 82: conv(R,'R'); break; case 83: conv(S,'S'); break; case 84: conv(T,'T'); break;
    case 85: conv(U,'U'); break; case 86: conv(V,'V'); break; case 87: conv(W,'W'); break; case 88: conv(X,'X'); break;
    case 89: conv(Y,'Y'); break; case 90: conv(Z,'Z'); break; case 32: conv(SPACE,' '); break; case 33: conv(SPACE,' '); break;
  }
  if (KeyReturn == 12) {
    delay(100);
    for (int j=0; j

Li-Fi 수신부 코드 V 2.0 (C/C++)

/*LI-FI Receiver Code V 2.0 Written By HOUALEF AHMED RAMZI Started on 29-9-2020 Last Update on 14-10-2020 */
#include 
#define SolarCell A0
int StCursor = 0;
int 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, Threshold, info[5];
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  pinMode(A0, INPUT);
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  Threshold = analogRead(SolarCell) + 10;
  lcd.print("READY TO RECEIVE");
  delay(5000);
  lcd.clear();
}

void BufferClear() { for (int i=0; i<5; i++) info[i] = 0; }

void check_condition(int received_bits[5], int Binaryalpha[5], char Lcdalpha) {
  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() { StCursor++; if (StCursor == 16) lcd.setCursor(0, 1); }

void loop() {
  Cell_Input = analogRead(SolarCell);
  if (Cell_Input > Threshold) {
    delay(10);
    for (int i=0; i<5; i++) {
      info[i] = (analogRead(SolarCell) > Threshold) ? 1 : 0;
      delay(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, I, 'I'); 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, SPACE, ' ');
    BufferClear();
  }
}

회로도

수신부(LCD, 태양전지):

  • LCD: VSS→GND, VDD→5V, K→GND, A→5V, RW→GND, V0→포텐셔미터 출력, RS→D12, EN→D11, D4→D5, D5→D4, D6→D3, D7→D2
  • 태양전지: 음극→GND, 양극→A0

송신부(LCD, 키패드, 레이저 다이오드):

  • LCD: VSS→GND, VDD→5V, K→GND, A→5V, RW→GND, V0→포텐셔미터 출력, RS→D12, EN→D11, D4→D6, D5→D5, D6→D4, D7→D3
  • 키패드: A→A2, B→A1, C→D9, D→D7, 1→D8, 2→D10, 3→A3 (풀다운 저항 필요)
  • 레이저 다이오드: 캐소드→GND, 애노드→D2

사용법: 키패드와 LCD로 전송할 문자를 입력하고, 각 문자 입력 후 확인 버튼(10번), 마지막에 전송 버튼(12번)을 누릅니다.

제조공정

  1. 알루미늄 레이저 마킹 전문 가이드: 정밀도, 내구성, 산업 적용 사례
  2. 레이저 마킹 종합 가이드: 유형, 이점, 적용 분야 총정리
  3. 파이버 레이저 마킹: 현대 산업을 위한 정밀도, 속도, 다용도성
  4. 레이저 포인터: 설계, 제조, 안전성 개요
  5. 반도체 레이저: 현대 기술을 위한 정밀 광원
  6. 고체 레이저: 기술, 응용, 미래 트렌드
  7. DVD 플레이어: 역사, 기술, 그리고 미래 혁신
  8. 레이저 유도 미사일: 개발, 제조 및 전략적 영향
  9. 혁신적 전기광학 레이저, 30GHz 펄스 속도로 초고속 이미징·통신 구현
  10. 혁신적 광섬유, 1페타비트/초 전송 속도 달성