云天 发表于 2022-1-22 17:33:49

魔改某宝红包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

赤星三春牛! 发表于 2022-1-24 13:11:27

楼主厉害!!!
页: [1]
查看完整版本: 魔改某宝红包LED灯