Li-Fi(光保真度)是一项高级技术,允许使用可见光等光学通信来传输数据。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接口模块
- 面包板
- 连接跳线
- 5毫米LED
Li-Fi简介
如上所述,Li-Fi是一种先进的通信技术,可以比Wi-Fi通信快100倍。使用这项技术,可以使用可见光源传输数据。想象一下,如果您仅使用光源就可以访问高速互联网。看起来不是很有趣吗?
Li-Fi使用可见光作为数据传输的通信介质。LED可以充当光源,而光电二极管则充当收发器,接收光信号并将其传输回去。通过控制发射器端的光脉冲,我们可以发送独特的数据模式。这种现象以极高的速度发生,无法通过人眼看到。然后在接收器端,光电二极管或光敏电阻(LDR)将数据转换为有用的信息。
使用Arduino的Li-Fi发送器部分
如上图所示,在Li-Fi通信的发送器部分,此处将键盘用作输入。这意味着我们将选择要使用键盘传输的文本。然后信息由控制单元处理,在我们的例子中,控制单元不过是Arduino。Arduino将信息转换为二进制脉冲,可将其馈送到LED源进行传输。然后,这些数据被馈送到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键盘,可从此链接下载。在此处了解有关4x4键盘与Arduino接口的更多信息。
#包括
成功安装库文件后,定义编号。行和列的值都是4,因为我们在这里使用了4 * 4键盘。
const字节ROW = 4; const字节COL = 4; char keyscode = { {'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);
在 setup() 内部 , 定义了连接LED源的输出引脚。同样,在打开设备电源时,它保持关闭状态。
void setup() { pinMode(8,OUTPUT); digitalWrite(8,LOW); }
在 while 循环内部,使用 customKeypad.getKey() 读取从键盘接收的值,并在 if-else 循环中对其进行比较 ,以在每次按键中生成唯一的脉冲。在代码中可以看出,计时器间隔对于所有键值都保持唯一。
字符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模块来减少No。与Arduino的连接,因为此模块仅需要2个数据引脚SCL / SDA和2个电源引脚。
通过在像代码所需的所有库文件,启动代码 Wire.h 用于I2C通信, LiquidCrystal_I2C.h 液晶,等,这些库将被预装了Arduino的,所以没有必要下载。
#包括
要将 I2C模块用于16 * 2字母数字LCD,请使用 LiquidCrystal_I2C 类对其进行配置。在这里,我们必须传递地址,行和列号,在本例中分别为0x3f,16和2。
LiquidCrystal_I2C lcd(0x3f,16,2);
在 setup() 内部 , 声明用于接收信号的脉冲输入引脚。然后在液晶显示屏上打印欢迎消息,该消息将在项目初始化期间显示。
void setup() { pinMode(8,INPUT); Serial.begin(9600); lcd.init(); lcd.backlight(); lcd.setCursor(0,0); lcd.print(“欢迎使用”); lcd.setCursor(0,1); lcd.print(“电路摘要”); delay(2000); lcd.clear(); }
在 while 循环内部,使用 pulseIn 函数计算LDR的脉冲输入持续时间,并定义脉冲类型(在我们的情况下为LOW)。该值将打印在串行监视器上,以进行调试。建议检查持续时间,因为不同的设置可能会有所不同。
无符号长持续时间= pulseIn(8,HIGH); Serial.println(duration);
在检查了所有发射器脉冲的持续时间之后,我们现在有了16个脉冲持续时间范围,下面将其记录下来以供参考。现在,使用 IF-ELSE 循环比较它们,以获取已传输的确切数据。下面给出了密钥1的一个示例循环:
if(持续时间> 10000 &&持续时间<17000) { lcd.setCursor(0,0); lcd.print(“ Received:1”); }
使用Arduino的Li-Fi发射器和接收器
将完整的代码上传到两个Arduino中后,按接收器侧小键盘上的任意按钮,接收器侧的16x2 LCD上将显示相同的数字。
这就是Li-Fi可以用来通过光传输数据的方式。希望您喜欢这篇文章并从中学到新东西,如果有任何疑问,可以使用评论部分或在论坛中提问。