Light Fidelity, or Li-Fi for short, is a cutting-edge innovation that enables data transfer through optical communication, such as visible light. Any light-sensitive device, such as an LDR or photodiode, can be used as a receiver for Li-Fi data. The speed of a Li-Fi connection can be one hundred times that of a Wi-Fi one.
In this experiment, we will use two Arduino to demonstrate Li-Fi networking.The temperature from the NTC is sent over lifi, and the LCD on the other side shows the temperature in degrees Celsius.
A Quick Overview of Li-Fi
As previously stated, Li-Fi is a cutting-edge communication technology that can be 100 times faster than Wi-Fi communication. Data can be transferred using visible light sources using this technology. Consider having access to high-speed internet simply by using a light source. Doesn’t it seem intriguing?
Li-Fi transmits data using visible light as a communication medium. A LED can function as a light source, and a photodiode can function as a transceiver, receiving and transmitting light signals. By controlling the light pulse at the transmitter side, we can send unique data patterns. This phenomenon occurs at extremely high speeds and is invisible to the naked eye. The data is then converted into useful information by the photodiode or light-dependent resistor (LDR) on the receiver side.
Components Required
- ARDUINO UNO
- LI-FI – VISIBLE LIGHT COMMUNICATION MODULE
- NTC – TEMPERATURE SENSOR MODULE
- 16X2 LCM CHARACTER LCD DISPLAY
- I2C LCD DISPLAY ADAPTER
- ACTIVE BUZZER ALARM MODULE
- FEMALE TO MALE JUMPER WIRE
- 12V 1A AC/DC POWER ADAPTER
- 9V BATTERY
- 12V 1A AC/DC POWER ADAPTER
Li-Fi Transmitter Section using Arduino
The NTC Sensor module is used as an input in the transmitter part of Li-Fi communication. The NTC determines the temperature in degrees Celsius, and the data is then processed by the control unit, which in our case is nothing but an Arduino. The Arduino converts the data into binary pulses that can be transmitted via an LED source. This data is then fed into an LED light, which sends visible light pulses to the receiver side.
Li-Fi Receiver Section using Arduino
The LDR sensor in the receiver section receives visible light pulses from the transmitter side and converts them into interpretable electrical pulses that are fed to the Arduino (control unit). This pulse is received by the Arduino, which converts it into data and displays it on a 16×2 I2C display.
HARDWARE CONNECTIONS
-
LIFI TRANSMITTER SIDE.
-CONNECTING ARDUINO TO LIFI TRANSMITTER BOARD
ARDUINO TX PIN to LIFI TX PIN
ARDUINO GND to LIFI GND
ARDUINO VCC to LIFI 12V
-CONNECTING ARDUINO TO TEMPERATURE SENSOR
ARDUINO 5V to TEMPERATURE SENSOR VCC PIN
ARDUINO GND to TEMPERATURE SENSOR GND
ARDUINO A0 PIN to TEMPERATURE SENSOR OUT PIN
-
LIFI RECEIVER SIDE
-CONNECTING ARDUINO TO LIFI RECEIVING BOARD
ARDUINO RX PIN to LIFI RX PIN
ARDUINO GND to LIFI GND
ARDUINO VCC to LIFI 12V
-CONNECTING ARDUINO TO I2C 16X2 LCD DISPLAY
ARDUINO GND to I2C DISPLAY GND
ARDUINO 5V to I2C DISPLAY VCC PIN
ARDUINO A4 PIN to I2C DISPLAY STA PIN
ARDUINO A5 PIN to I2C DISPLAY SDA PIN
-CONNECTING ARDUINO TO BUZZER MODULE
ARDUINO 5V to BUZZER VCC PIN
ARDUINO GND to BUZZER GND PIN
ARDUINO 13 PIN to BUZZER IN PIN
ARDUINO PROGRAMMING
-
LIFI TRANSMITTER CODE
#include <LiquidCrystal.h> #include <SoftwareSerial.h> int RXPin = 2; int TXPin = 3; int ThermistorPin = A0; int Vo; int V1 , V2 , V3; float R1 = 10000; float logR2, R2, T, Tf; int Tc; int count = 0; float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07; SoftwareSerial softserial (RXPin, TXPin); LiquidCrystal lcd(8, 9, 10, 11, 12, 13); void setup() { Serial.begin(9600); softserial.begin(9600); lcd.begin(16,2); } void loop() { Vo = analogRead(ThermistorPin); R2 = R1 * (1023.0 / (float)Vo - 1.0); logR2 = log(R2); T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); Tc = T - 273.15; Tf = (Tc * 9.0)/ 5.0 + 32.0; lcd.setCursor(0,0); lcd.print("T1:"); lcd.setCursor(3,0); lcd.print(Tc); lcd.setCursor(7,0); lcd.print("C"); if(Tc == 20) { softserial.print("A"); } if(Tc == 21) { softserial.print("a"); } if(Tc == 22) { softserial.print("B"); } if(Tc == 23) { softserial.print("b"); } if(Tc == 24) { softserial.print("C"); } if(Tc == 25) { softserial.print("c"); } if(Tc == 26) { softserial.print("D"); } if(Tc == 27) { softserial.print("d"); } if(Tc == 28) { softserial.print("E"); } if(Tc == 29) { softserial.print("e"); } if(Tc == 30) { softserial.print("F"); } if(Tc == 31) { softserial.print("f"); } if(Tc == 32) { softserial.print("G"); } if(Tc == 33) { softserial.print("g"); } if(Tc == 34) { softserial.print("H"); } if(Tc == 35) { softserial.print("h"); } if(Tc == 36) { softserial.print("I"); } if(Tc == 37) { softserial.print("i"); } if(Tc == 38) { softserial.print("J"); } if(Tc == 39) { softserial.print("j"); } if(Tc == 40) { softserial.print("K"); } if(Tc == 41) { softserial.print("k"); } if(Tc == 42) { softserial.print("L"); } if(Tc == 43) { softserial.print("l"); } if(Tc == 44) { softserial.print("M"); } if(Tc == 45) { softserial.print("m"); } if(Tc == 46) { softserial.print("N"); } if(Tc == 47) { softserial.print("n"); } if(Tc == 48) { softserial.print("O"); } if(Tc == 49) { softserial.print("o"); } if(Tc == 50) { softserial.print("P"); } if(Tc >= 51) { softserial.print("p"); } if(Tc == 0) { softserial.print("Q"); } if(Tc == 1) { softserial.print("q"); } if(Tc == 2) { softserial.print("R"); } if(Tc == 3) { softserial.print("r"); } if(Tc == 4) { softserial.print("S"); } if(Tc == 5) { softserial.print("s"); } if(Tc == 6) { softserial.print("T"); } if(Tc == 7) { softserial.print("t"); } if(Tc == 8) { softserial.print("U"); } if(Tc == 9) { softserial.print("u"); } if(Tc == 10) { softserial.print("V"); } if(Tc == 11) { softserial.print("v"); } if(Tc == 12) { softserial.print("W"); } if(Tc == 13) { softserial.print("w"); } if(Tc == 14) { softserial.print("X"); } if(Tc == 15) { softserial.print("x"); } if(Tc == 16) { softserial.print("Y"); } if(Tc == 17) { softserial.print("y"); } if(Tc == 18) { softserial.print("Z"); } if(Tc == 19) { softserial.print("z"); } delay(1000); lcd.clear(); }
-
LIFI RECEIVER CODE
#include <LiquidCrystal_PCF8574.h> #include <SoftwareSerial.h> int RXPin = 3; int TXPin = 2; LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display int led13 =13; String a; String b; SoftwareSerial softserial (RXPin, TXPin); void setup() { Serial.begin(9600); // opens serial port, sets data rate to 9600 bps softserial.begin(9600); lcd.begin(16,2); lcd.setBacklight(255); lcd.clear(); lcd.print("LIFI RECEIVER"); pinMode(led13 , OUTPUT); digitalWrite(led13 , LOW); } void loop() { while(softserial.available() > 0) { a= softserial.readString();// read the incoming data as string softserial.println(a); Serial.print(a); if( a == "A") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("20"); delay(1000); } if( a == "a") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("21"); delay(1000); } if( a == "B") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("22"); delay(1000); } if( a == "b") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("23"); delay(1000); } if( a == "C") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("24"); delay(1000); } if( a == "c") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("25"); delay(1000); } if( a == "D") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("26"); delay(1000); } if( a == "d") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("27"); delay(1000); } if( a == "E") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("28"); delay(1000); } if( a == "e") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("29"); delay(1000); } if( a == "F") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("30"); delay(1000); } if( a == "f") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("31"); delay(1000); } if( a == "G") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("32"); delay(1000); } if( a == "g") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("33"); delay(1000); } if( a == "H") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("34"); delay(1000); } if( a == "h") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("35"); delay(1000); } if( a == "I") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("36"); delay(1000); } if( a == "i") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("37"); delay(1000); } if( a == "J") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("38"); delay(1000); } if( a == "j") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("39"); delay(1000); } if( a == "K") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("40"); delay(1000); } if( a == "k") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("41"); delay(1000); } if( a == "L") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("42"); delay(1000); } if( a == "l") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("43"); delay(1000); } if( a == "M") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("44"); delay(1000); } if( a == "m") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("45"); delay(1000); } if( a == "N") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("46"); delay(1000); } if( a == "n") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("47"); delay(1000); } if( a == "O") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("48"); delay(1000); } if( a == "o") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("49"); delay(1000); } if( a == "P") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("50"); delay(1000); } if( a == "p") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("51"); delay(1000); while(1) { digitalWrite(led13 , HIGH); lcd.clear(); lcd.print ("High Temperature"); delay(1000); } } if( a == "Q") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("0"); delay(1000); } if( a == "q") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("1"); delay(1000); } if( a == "R") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("2"); delay(1000); } if( a == "r") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("3"); delay(1000); } if( a == "S") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("4"); delay(1000); } if( a == "s") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("5"); delay(1000); } if( a == "T") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(0,1); lcd.print("6"); delay(1000); } if( a == "t") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("7"); delay(1000); } if( a == "U") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("8"); delay(1000); } if( a == "u") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("9"); delay(1000); } if( a == "V") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("10"); delay(1000); } if( a == "v") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("11"); delay(1000); } if( a == "W") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("12"); delay(1000); } if( a == "w") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("13"); delay(1000); } if( a == "X") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("14"); delay(1000); } if( a == "x") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("15"); delay(1000); } if( a == "Y") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("16"); delay(1000); } if( a == "y") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("17"); delay(1000); } if( a == "Z") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("18"); delay(1000); } if( a == "z") { lcd.clear(); lcd.setCursor(1,0); lcd.print("LIFI RECEIVER"); lcd.setCursor(0,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print("C"); lcd.setCursor(5,1); lcd.print("19"); delay(1000); } } }