Li-Fi (Light Fidelity) 는 가시광 선과 같은 광통신을 사용하여 데이터를 전송할 수있는 첨단 기술입니다. Li-Fi 데이터는 빛을 통해 이동 한 다음 LDR 또는 포토 다이오드와 같은 빛에 민감한 장치를 사용하여 수신기 측에서 해석 될 수 있습니다. Li-Fi 통신은 Wi-Fi보다 100 배 더 빠를 수 있습니다.
이 프로젝트에서는 두 개의 Arduino를 사용하여 Li-Fi 통신을 시연 합니다. 여기서 텍스트 데이터는 LED 및 4x4 키패드를 사용하여 전송됩니다. 그리고 LDR을 사용하여 수신기 측에서 디코딩됩니다. 이전에 Li-Fi에 대해 자세히 설명하고 Li-Fi를 사용하여 오디오 신호를 전송했습니다.
필요한 구성 요소
- Arduino UNO
- LDR 센서
- 4 * 4 키패드
- 16 * 2 영숫자 LCD
- LCD 용 I2C 인터페이스 모듈
- 브레드 보드
- 점퍼 연결
- 5mm LED
Li-Fi에 대한 간략한 소개
위에서 논의한 바와 같이 Li-Fi는 Wi-Fi 통신보다 100 배 빠른 고급 통신 기술입니다. 이 기술을 사용하면 가시 광선을 사용하여 데이터를 전송할 수 있습니다. 광원 만 사용하여 고속 인터넷에 액세스 할 수 있다고 상상해보십시오. 매우 흥미롭지 않나요?
Li-Fi는 가시 광선을 데이터 전송을위한 통신 매체로 사용합니다. LED는 광원 역할을 할 수 있고 포토 다이오드는 광 신호를 수신하고 다시 전송하는 트랜시버 역할을합니다. 송신기 측에서 광 펄스를 제어하여 고유 한 데이터 패턴을 보낼 수 있습니다. 이 현상은 매우 빠른 속도로 발생하며 육안으로는 볼 수 없습니다. 그런 다음 수신기 측에서 광 다이오드 또는 LDR (Light-dependent resistance)이 데이터를 유용한 정보로 변환합니다.
Arduino를 사용하는 Li-Fi 송신기 섹션
위 그림과 같이 Li-Fi 통신의 송신기 부분에서는 키패드를 입력으로 사용합니다. 즉, 키패드를 사용하여 전송할 텍스트를 선택합니다. 그런 다음 정보는 우리의 경우 Arduino에 불과한 제어 장치에 의해 처리됩니다. Arduino는 정보를 전송을 위해 LED 소스에 공급할 수있는 바이너리 펄스로 변환합니다. 그런 다음 이러한 데이터는 가시 광선 펄스를 수신기 측으로 보내는 LED 조명에 공급됩니다.
송신기 섹션의 회로도:
송신기 측 하드웨어 설정:
Arduino를 사용한 Li-Fi 수신기 섹션
수신기 섹션에서 LDR 센서는 송신기 측에서 가시 광선 펄스를 수신하고이를 해석 가능한 전기 펄스로 변환하여 Arduino (제어 장치)에 공급합니다. Arduino는이 펄스를 수신하여 실제 데이터로 변환하여 16x2 LCD 디스플레이에 표시합니다.
수신기 섹션의 회로도:
수신기 측 하드웨어 설정:
Li-Fi 용 Arduino 코딩
위에 표시된 것처럼 Li-Fi 송신기와 수신기에 대한 두 개의 섹션이 있습니다. 각 섹션에 대한 전체 코드는 튜토리얼의 맨 아래에 있으며 코드에 대한 단계별 설명은 다음과 같습니다.
Arduino Li-Fi 송신기 코드:
송신기 측에서 Arduino Nano는 4x4 키패드 및 LED와 함께 사용됩니다. 먼저 모든 종속 라이브러리 파일이 Arduino IDE를 통해 Arduino에 다운로드되고 설치됩니다. 여기에서 키패드 라이브러리는이 링크에서 다운로드 할 수있는 4 * 4 키패드를 사용하는 데 사용됩니다. 여기에서 Arduino와 4x4 키패드 인터페이스에 대해 자세히 알아보십시오.
#포함
라이브러리 파일을 성공적으로 설치 한 후 번호를 정의하십시오. 여기에서 4 * 4 키패드를 사용했기 때문에 둘 다 4 인 행과 열 값의 수입니다.
const 바이트 ROW = 4; const 바이트 COL = 4; 문자 키 코드 = { { '1', '2', '3', 'A'}, { '4', '5', '6', 'B'}, { '7', '8', ' 9 ','C '}, {'* ','0 ','# ','D '} };
그런 다음 4 * 4 키패드와 인터페이스하는 데 사용되는 Arduino 핀이 정의됩니다. 우리의 경우 R1, R2, R3, R4에 대해 각각 A5, A4, A3 및 A2를 사용하고 C1, C2, C3 및 C4에 대해 각각 A1, A0, 12, 11을 사용했습니다.
바이트 rowPin = {A5, A4, A3, A2}; 바이트 colPin = {A1, A0, 12, 11}; 키패드 customKeypad = 키패드 (makeKeymap (keyscode), rowPin, colPin, ROW, COL);
설정 () 내부 에서 LED 소스가 연결된 출력 핀이 정의됩니다. 또한 장치를 켜는 동안에는 꺼진 상태로 유지됩니다.
void setup () { pinMode (8, OUTPUT); digitalWrite (8, LOW); }
while 루프 내 에서 키패드에서 수신 된 값은 customKeypad.getKey ()를 사용하여 읽히고 if-else 루프 에서 비교 되어 각 키 누름에서 고유 한 펄스를 생성합니다. 코드에서 타이머 간격이 모든 키 값에 대해 고유하게 유지된다는 것을 알 수 있습니다.
char customKey = customKeypad.getKey (); if (customKey) { if (customKey == '1') { digitalWrite (8, HIGH); 지연 (10); digitalWrite (8, LOW); }
Arduino Li-Fi 수신기 코드:
Li-Fi 수신기 측에서 Arduino UNO는 회로도에 표시된대로 LDR 센서와 인터페이스됩니다. 여기서 LDR 센서는 저항과 직렬로 연결되어 전압 분배기 회로를 형성하고 센서에서 출력되는 아날로그 전압은 입력 신호로 Arduino에 공급됩니다. 여기에서는 LCD가있는 I2C 모듈을 사용하여 아니오를 줄입니다. 이 모듈로 Arduino와의 연결에는 2 개의 데이터 핀 SCL / SDA와 2 개의 전원 핀만 필요합니다.
I2C 통신용 Wire.h , LCD 용 LiquidCrystal_I2C.h 등과 같은 코드에 필요한 모든 라이브러리 파일을 포함하여 코드를 시작합니다. 이러한 라이브러리는 Arduino와 함께 사전 설치되므로 다운로드 할 필요가 없습니다.
#포함
16 * 2 영숫자 LCD에 I2C 모듈을 사용하려면 LiquidCrystal_I2C 클래스를 사용하여 구성하십시오. 여기서 우리는 각각 0x3f, 16, 2 인 주소, 행, 열 번호를 전달해야합니다.
LiquidCrystal_I2C lcd (0x3f, 16, 2);
내부 설정 () 신호를 수신하기위한 상기 펄스 입력 핀을 선언한다. 그런 다음 프로젝트 초기화 중에 표시 될 LCD에 환영 메시지를 인쇄합니다.
void setup () { pinMode (8, INPUT); Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print ("환영합니다"); lcd.setCursor (0, 1); lcd.print ("CIRCUIT DIGEST"); 지연 (2000); lcd.clear (); }
while 루프 내 에서 LDR의 펄스 입력 지속 시간은 pulseIn 함수를 사용하여 계산되며 펄스 유형은 우리의 경우 LOW로 정의됩니다. 이 값은 디버깅 목적으로 직렬 모니터에 인쇄됩니다. 설정에 따라 다를 수 있으므로 기간을 확인하는 것이 좋습니다.
부호없는 긴 기간 = pulseIn (8, HIGH); Serial.println (기간);
모든 송신기 펄스의 지속 시간을 확인한 후 이제 16 개의 펄스 지속 시간 범위를 갖게되었으며, 이는 참고 용으로 기록됩니다. 이제 전송 된 정확한 데이터를 얻기 위해 IF-ELSE 루프를 사용하여 비교합니다. 키 1의 샘플 루프는 다음과 같습니다.
if (duration> 10000 && duration <17000) { lcd.setCursor (0, 0); lcd.print ("수신: 1"); }
Arduino를 사용하는 Li-Fi 송신기 및 수신기
두 아두 이노에 완전한 코드를 업로드 한 후, 수신기 측의 키패드에서 아무 버튼이나 누르면 동일한 숫자가 수신기 측의 16x2 LCD에 표시됩니다.
이것이 Li-Fi를 사용하여 빛을 통해 데이터를 전송하는 방법입니다. 기사를 즐겁게 읽고 새로운 것을 배웠기를 바랍니다. 의심스러운 점이 있으면 댓글 섹션을 사용하거나 포럼에서 질문 할 수 있습니다.