魔改某宝红包LED灯
本帖最后由 云天 于 2022-1-22 17:40 编辑最近某宝有活动,我用签到红包买了一个红灯笼和一个LED灯,可能价格实在是低,质量都一般。我接下来,把它们俩改造成可遥控灯。快过年了,喜庆一下。
【nrf24l01无线模块】
遥控使用的是两个nrf24l01的模块。nrf24l01采用SPI总线通信,虽然占引脚数多,但是收发速度快,模块通信速率可达2Mbps,而功耗控制在待机22uA,如果掉电模式可以仅900nA,如果其余传感器功耗控制合理,用干电池驱动整个模块工作数月了,这可是其他通信模块不具备的特性,高速低耗,2.4Ghz的抗干扰能力也不错,穿透性稍差,但是家庭环境使用还是够的。在数据传输方面实现相对WiFi距离更远,但传输数据量不如WiFi。(掉电模式和空闲模式)使节能设计更方便。
接线方式
NRF24L01 2.4G无线模块 Arduino
VCC <------> 3.3V
GND <------> GND
CSN <------> 8
CE <------> 7
SCK <------> 13
MOSI <------> 11
MISO <------> 12
每个arduino开发板都有不同的SPI引脚,CSN和CE引脚可以连接刀Arduino板的任何数字引脚,它们用于将模块设置为待机或活动模式,以及用于在发送或命令模式之间切换。
电压控制在3.3v,用5v容易烧坏。
【遥控器】
遥控器使用Arduino,遥杆Vry接A1引脚,Vrx接A0引脚(未分配功能),SW接引脚2(一定要上拉,不然电平不稳。SW 的值:1代表未按下,0代表按下。),左右摆动可开灯,按下遥杆关灯(为了练习遥杆按钮功能)。
【遥控程序】
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h> //NRF24L01 2.4G无线模块的库文件
RF24 radio(7, 8); //创建一个RF24的对象CE=7, CSN=8
const byte address = "00001";//创建一个数组,建立发送机地址,或者说两个模块将用于通信的“管道”
int value=0;
void setup() {
pinMode(2, INPUT_PULLUP); //注意 Z 轴输入一定要上拉,不然电平不稳。SW 的值:1代表未按下,0代表按下。
//Serial.begin(9600);
radio.begin(); //初始化radio对象
radio.openWritingPipe(address);//使用radio.openWritingPipe()函数设置的发送机地址
radio.setPALevel(RF24_PA_MIN);//设置功率放大器级别,将其设置为最小值
radio.stopListening();// 使用radio.stopListening()函数将模块设置为发送机
}
void loop() {
value=analogRead(A1);
//Serial.println(value);
if (value<10 ){ //遥杆向左
const char text='f';//创建一个字符数组,并为其分配消息f
radio.write(&text, sizeof(text));//使用radio.write()函数将消息发送给接收机,text是要发送的字符变量,
// sizeof(text))设置了我们要从text变量中获取的字节数
delay(300);//延迟等待0.3秒
}
else if(value>1000){ //遥杆向右
const char text='b';//创建一个字符数组,并为其分配消息b
radio.write(&text, sizeof(text));//使用radio.write()函数将消息发送给接收机,text是要发送的字符变量,
// sizeof(text))设置了我们要从text变量中获取的字节数
delay(300);//延迟等待0.3秒
}
value = digitalRead(2);
if(value==0){//按下遥杆
const char text='s';//创建一个字符数组,并为其分配消息s
radio.write(&text, sizeof(text));//使用radio.write()函数将消息发送给接收机,,text是要发送的字符变量,
// sizeof(text))设置了我们要从text变量中获取的字节数
delay(300);//延迟等待0.3秒
}
}
【组装红灯笼】
【改造LED灯】
将接灯其中一条线中间剪断
连上电磁继电器
装进灯笼
【接收器】
电磁继电器接在引脚2上。
【接收器程序】
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h> //NRF24L01 2.4G无线模块的库文件
RF24 radio(7, 8); //创建一个RF24的对象CE=7, CSN=8
const byte address = "00001";//创建一个数组,建立接收机地址,或者说两个模块将用于通信的“管道”
void setup() {
pinMode(2, OUTPUT); //定义2号引脚为输出
Serial.begin(9600);
radio.begin(); //初始化radio对象
radio.openReadingPipe(0, address); //使用radio.openReadingPipe()函数设置的接收机地址
radio.setPALevel(RF24_PA_MIN); //设置功率放大器级别,将其设置为最小值
radio.startListening(); // 使用radio..startListening()将模块设置为接收机
}
void loop() {
if (radio.available()) {//判断是否有要接收的数据
char text = 0; //创建一个空的字符变量text
radio.read(&text, sizeof(text));//读取数据,并将其存储到text变量中
Serial.println(text);
if (text == 'f') { //如果接收到的数据是f,那么开灯
digitalWrite(2,HIGH);
}
else if(text == 'b') { //如果接收到的数据是b,那么开灯
digitalWrite(2,HIGH);
}
else if(text == 's') { //如果接收到的数据是s,那么关灯【演示视频】
https://www.bilibili.com/video/BV1Cb4y1J74r?share_source=copy_web
楼主厉害!!!
页:
[1]