[项目]魔改某宝红包LED灯 精华

289浏览
查看: 289|回复: 1

[项目] 魔改某宝红包LED灯

[复制链接]
本帖最后由 云天 于 2022-1-22 17:40 编辑

IMG_20220122_164113.jpg


最近某宝有活动,我用签到红包买了一个红灯笼和一个LED灯,可能价格实在是低,质量都一般。我接下来,把它们俩改造成可遥控灯。快过年了,喜庆一下。

Collage_20220122_165907.jpg




nrf24l01无线模块

遥控使用的是两个nrf24l01的模块。nrf24l01采用SPI总线通信,虽然占引脚数多,但是收发速度快,模块通信速率可达2Mbps,而功耗控制在待机22uA,如果掉电模式可以仅900nA,如果其余传感器功耗控制合理,用干电池驱动整个模块工作数月了,这可是其他通信模块不具备的特性,高速低耗,2.4Ghz的抗干扰能力也不错,穿透性稍差,但是家庭环境使用还是够的。在数据传输方面实现相对WiFi距离更远,但传输数据量不如WiFi。(掉电模式和空闲模式)使节能设计更方便。
IMG_20220122_163713.jpg

接线方式
NRF24L01 2.4G无线模块                         Arduino
               VCC                         <------>         3.3V
               GND                         <------>         GND
               CSN                          <------>           8
                 CE                           <------>           7
                SCK                         <------>          13
                MOSI                        <------>          11
                MISO                         <------>         12
SatJanuary-202201228917..png
每个arduino开发板都有不同的SPI引脚,CSN和CE引脚可以连接刀Arduino板的任何数字引脚,它们用于将模块设置为待机或活动模式,以及用于在发送或命令模式之间切换。


SatJanuary-202201224708..png

电压控制在3.3v,用5v容易烧坏。
【遥控器】
IMG_20220122_160925.jpg


遥控器使用Arduino,遥杆Vry接A1引脚,Vrx接A0引脚(未分配功能),SW接引脚2(一定要上拉,不然电平不稳。SW 的值:1代表未按下,0代表按下。),左右摆动可开灯,按下遥杆关灯(为了练习遥杆按钮功能)。
【遥控程序】
  1. #include <SPI.h>
  2. #include <nRF24L01.h>
  3. #include <RF24.h>   //NRF24L01 2.4G无线模块的库文件
  4. RF24 radio(7, 8);   //创建一个RF24的对象CE=7, CSN=8
  5. const byte address[6] = "00001";  //创建一个数组,建立发送机地址,或者说两个模块将用于通信的“管道”
  6. int value=0;
  7. void setup() {
  8.   
  9.   pinMode(2, INPUT_PULLUP); //注意 Z 轴输入一定要上拉,不然电平不稳。SW 的值:1代表未按下,0代表按下。
  10.   //Serial.begin(9600);
  11.   radio.begin();    //初始化radio对象
  12.   radio.openWritingPipe(address);  //使用radio.openWritingPipe()函数设置的发送机地址
  13.   radio.setPALevel(RF24_PA_MIN);  //设置功率放大器级别,将其设置为最小值
  14.   radio.stopListening();  // 使用radio.stopListening()函数将模块设置为发送机
  15. }
  16. void loop() {
  17. value=analogRead(A1);
  18. //Serial.println(value);
  19. if (value<10 ){    //遥杆向左
  20.   const char text=  'f';  //创建一个字符数组,并为其分配消息f
  21.   radio.write(&text, sizeof(text));  //使用radio.write()函数将消息发送给接收机,text是要发送的字符变量,
  22. // sizeof(text))设置了我们要从text变量中获取的字节数
  23.   
  24.   delay(300);  //延迟等待0.3秒
  25. }
  26. else if(value>1000){    //遥杆向右
  27.   const char text=  'b';  //创建一个字符数组,并为其分配消息b
  28.   radio.write(&text, sizeof(text));  //使用radio.write()函数将消息发送给接收机,text是要发送的字符变量,
  29. // sizeof(text))设置了我们要从text变量中获取的字节数
  30.   delay(300);  //延迟等待0.3秒
  31. }
  32. value = digitalRead(2);
  33. if(value==0){//按下遥杆
  34.     const char text=  's';  //创建一个字符数组,并为其分配消息s
  35.   radio.write(&text, sizeof(text));  //使用radio.write()函数将消息发送给接收机,,text是要发送的字符变量,
  36. // sizeof(text))设置了我们要从text变量中获取的字节数
  37.   delay(300);  //延迟等待0.3秒
  38. }
  39. }
复制代码

【组装红灯笼】

IMG_20220122_151954.jpg


【改造LED灯】

IMG_20220122_153343.jpg



IMG_20220122_153359.jpg


IMG_20220122_153428.jpg


IMG_20220122_153551.jpg

将接灯其中一条线中间剪断

IMG_20220122_153831.jpg

连上电磁继电器

IMG_20220122_154113.jpg


IMG_20220122_154811.jpg


IMG_20220122_155711.jpg


IMG_20220122_155747.jpg

装进灯笼


【接收器】
电磁继电器接在引脚2上。
IMG_20220122_153027.jpg

IMG_20220122_153130.jpg




【接收器程序】
  1. #include <SPI.h>
  2. #include <nRF24L01.h>
  3. #include <RF24.h>   //NRF24L01 2.4G无线模块的库文件
  4. RF24 radio(7, 8);   //创建一个RF24的对象CE=7, CSN=8
  5. const byte address[6] = "00001";  //创建一个数组,建立接收机地址,或者说两个模块将用于通信的“管道”
  6. void setup() {
  7.   pinMode(2, OUTPUT);   //定义2号引脚为输出
  8.   Serial.begin(9600);
  9.   radio.begin();   //初始化radio对象
  10.   radio.openReadingPipe(0, address);   //使用radio.openReadingPipe()函数设置的接收机地址
  11.   radio.setPALevel(RF24_PA_MIN);   //设置功率放大器级别,将其设置为最小值
  12.   radio.startListening();    // 使用radio..startListening()将模块设置为接收机
  13. }
  14. void loop() {
  15.   if (radio.available()) {  //判断是否有要接收的数据
  16.     char text = 0;      //创建一个空的字符变量text
  17.     radio.read(&text, sizeof(text));  //读取数据,并将其存储到text变量中
  18.     Serial.println(text);
  19.     if (text == 'f') {   //如果接收到的数据是f,那么开灯
  20.     digitalWrite(2,HIGH);
  21. }
  22. else if(text == 'b') { //如果接收到的数据是b,那么开灯
  23. digitalWrite(2,HIGH);
  24.     }
  25.    else if(text == 's') { //如果接收到的数据是s,那么关灯
复制代码
【演示视频】


赤星三春牛!  中级技匠

发表于 2022-1-24 13:11:27

楼主厉害!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail