- Componenten vereist
- Korte introductie tot Li-Fi
- Li-Fi Transmitter Sectie met Arduino
- Li-Fi-ontvangersectie met Arduino
- Arduino-codering voor Li-Fi
Li-Fi (Light Fidelity) is een geavanceerde technologie waarmee gegevens kunnen worden overgebracht met behulp van optische communicatie, zoals zichtbaar licht. Li-Fi-gegevens kunnen door het licht reizen en vervolgens aan de ontvangerzijde worden geïnterpreteerd met behulp van elk lichtgevoelig apparaat zoals LDR of fotodiode. Li-Fi-communicatie kan 100 keer sneller zijn dan Wi-Fi.
Hier in dit project zullen we Li-Fi-communicatie demonstreren met behulp van twee Arduino. Hier worden de tekstgegevens verzonden met behulp van een LED en een 4x4-toetsenbord. En het wordt aan de ontvangerzijde gedecodeerd met behulp van LDR. We hebben Li-Fi eerder in detail uitgelegd en Li-Fi gebruikt om audiosignalen over te dragen.
Componenten vereist
- Arduino UNO
- LDR-sensor
- 4 * 4 toetsenbord
- 16 * 2 Alfanumeriek LCD
- I2C-interfacemodule voor LCD
- Breadboard
- Jumpers aansluiten
- 5 mm LED
Korte introductie tot Li-Fi
Zoals hierboven besproken, is Li-Fi een geavanceerde communicatietechnologie die 100 keer sneller kan zijn dan Wi-Fi-communicatie. Met behulp van deze technologie kunnen de gegevens worden overgedragen met behulp van zichtbare lichtbronnen. Stel je voor dat je toegang hebt tot supersnel internet door alleen je lichtbron te gebruiken. Lijkt het niet erg interessant?
Li-Fi gebruikt zichtbaar licht als communicatiemedium voor de overdracht van gegevens. Een LED kan als lichtbron fungeren en de fotodiode werkt als een transceiver die lichtsignalen ontvangt en weer doorgeeft. Door de lichtpuls aan de zenderzijde te sturen, kunnen we unieke datapatronen verzenden. Dit fenomeen doet zich met extreem hoge snelheid voor en is niet zichtbaar met het menselijk oog. Aan de ontvangerzijde zet de fotodiode of lichtafhankelijke weerstand (LDR) de gegevens vervolgens om in bruikbare informatie.
Li-Fi Transmitter Sectie met Arduino
Zoals te zien is in de bovenstaande afbeelding, wordt in het zendergedeelte van Li-Fi-communicatie het toetsenbord hier als invoer gebruikt. Dat betekent dat we de te verzenden tekst met het toetsenbord selecteren. Vervolgens wordt de informatie verwerkt door de besturingseenheid die in ons geval niets anders is dan Arduino. Arduino zet de informatie om in binaire pulsen die voor transmissie naar een LED-bron kunnen worden gestuurd. Vervolgens worden deze gegevens naar LED-licht gevoerd dat de zichtbare lichtpulsen naar de ontvangerzijde stuurt.
Schakelschema van de zendersectie:
Hardware-instellingen voor zenderzijde:
Li-Fi-ontvangersectie met Arduino
In het ontvangergedeelte ontvangt de LDR-sensor de zichtbare lichtpulsen van de zenderzijde en zet deze om in interpreteerbare elektrische pulsen, die naar de Arduino (besturingseenheid) worden gestuurd. Arduino ontvangt deze puls en zet deze om in actuele gegevens en geeft deze weer op een 16x2 LCD-scherm.
Schakelschema van het ontvangergedeelte:
Hardware-instellingen voor ontvangerzijde:
Arduino-codering voor Li-Fi
Zoals hierboven weergegeven, hebben we twee secties voor Li-Fi-zender en -ontvanger. De volledige codes voor elke sectie worden onderaan de tutorial gegeven en een stapsgewijze uitleg van codes wordt hieronder gegeven:
Arduino Li-Fi-zendercode:
Aan de zenderzijde wordt Arduino Nano gebruikt met 4x4 toetsenbord en LED. Eerst worden alle afhankelijke bibliotheekbestanden gedownload en via Arduino IDE op Arduino geïnstalleerd. Hier wordt de Keypad-bibliotheek gebruikt voor het gebruik van 4 * 4-toetsenborden die via deze link kunnen worden gedownload. Lees hier meer over het koppelen van een 4x4-toetsenbord met Arduino.
# omvatten
Na de succesvolle installatie van bibliotheekbestanden, definieert u het nr. rijen en kolomwaarden, wat 4 is voor beide, omdat we hier een 4 * 4-toetsenbord hebben gebruikt.
const byte RIJ = 4; const byte COL = 4; char keyscode = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '} };
Vervolgens worden de Arduino-pinnen gedefinieerd die worden gebruikt om te communiceren met het 4 * 4-toetsenbord. In ons geval hebben we A5, A4, A3 en A2 gebruikt voor respectievelijk R1, R2, R3, R4 en A1, A0, 12, 11 voor respectievelijk C1, C2, C3 en C4.
byte rowPin = {A5, A4, A3, A2}; byte colPin = {A1, A0, 12, 11}; Keypad customKeypad = Keypad (makeKeymap (keyscode), rowPin, colPin, ROW, COL);
Binnen setup (), wordt de output pin gedefinieerd, waar de LED-bron is aangesloten. Het wordt ook UIT gehouden tijdens het inschakelen van het apparaat.
leegte setup () { pinMode (8, OUTPUT); digitalWrite (8, LOW); }
Binnen de while- lus worden de waarden die van het toetsenbord worden ontvangen gelezen met customKeypad.getKey () en het wordt vergeleken in de if-else- lus om unieke pulsen te genereren bij elke toetsaanslag. In de code is te zien dat de timerintervallen uniek worden gehouden voor alle sleutelwaarden.
char customKey = customKeypad.getKey (); if (customKey) { if (customKey == '1') { digitalWrite (8, HIGH); vertraging (10); digitalWrite (8, LOW); }
Arduino Li-Fi-ontvangercode:
Aan de kant van de Li-Fi-ontvanger is Arduino UNO gekoppeld aan een LDR-sensor, zoals weergegeven in het schakelschema. Hier is de LDR-sensor in serie verbonden met een weerstand om een spanningsdelercircuit te vormen en wordt de analoge uitgangsspanning van de sensor als een ingangssignaal naar Arduino gestuurd. Hier gebruiken we een I2C-module met LCD om nee te verminderen. van verbindingen met Arduino omdat deze module slechts 2 datapinnen SCL / SDA en 2 stroompinnen nodig heeft.
Start de code door alle vereiste bibliotheekbestanden in de code op te nemen, zoals Wire.h voor I2C-communicatie, LiquidCrystal_I2C.h voor LCD, enz. Deze bibliotheken zouden vooraf worden geïnstalleerd met Arduino, dus het is niet nodig om ze te downloaden.
# omvatten
Voor het gebruik van de I2C-module voor 16 * 2 alfanumerieke LCD, configureert u deze met behulp van de klasse LiquidCrystal_I2C . Hier moeten we het adres, rij- en kolomnummer doorgeven, die in ons geval respectievelijk 0x3f, 16 en 2 zijn.
LiquidCrystal_I2C lcd (0x3f, 16, 2);
Geef in setup () de pulsinvoerpen aan voor het ontvangen van het signaal. Druk vervolgens een welkomstbericht af op het LCD-scherm dat tijdens de initialisatie van het project wordt weergegeven.
leegte setup () { pinMode (8, INPUT); Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print ("WELKOM BIJ"); lcd.setCursor (0, 1); lcd.print ("CIRCUIT DIGEST"); vertraging (2000); lcd.clear (); }
Binnen de while- lus wordt de pulsingangsduur van LDR berekend met behulp van de pulseIn- functie en wordt het type puls gedefinieerd dat in ons geval LOW is. De waarde wordt voor foutopsporingsdoeleinden op de seriële monitor afgedrukt. Het wordt aanbevolen om de duur te controleren, aangezien deze voor verschillende instellingen kan verschillen.
lange duur zonder teken = pulseIn (8, HIGH); Serial.println (duur);
Nadat we de duur van alle zenderpulsen hebben gecontroleerd, hebben we nu 16 pulsduurbereiken, die ter referentie worden genoteerd. Vergelijk ze nu met behulp van een IF-ELSE- lus om de exacte gegevens te krijgen die zijn verzonden. Een voorbeeldlus voor sleutel 1 wordt hieronder gegeven:
if (duur> 10000 && duur <17000) { lcd.setCursor (0, 0); lcd.print ("Ontvangen: 1"); }
Li-Fi-zender en -ontvanger met Arduino
Na het uploaden van de volledige code in beide Arduino's, drukt u op een willekeurige knop op het toetsenbord aan de kant van de ontvanger en hetzelfde cijfer wordt weergegeven op het 16x2 LCD-scherm aan de kant van de ontvanger.
Dit is hoe Li-Fi kan worden gebruikt om gegevens door licht te verzenden. Ik hoop dat je het artikel leuk vond en er iets nieuws van hebt geleerd, als je twijfelt, kun je de commentaarsectie gebruiken of vragen in forums.