一直想做个像酒店一样的全屋灯光控制系统玩玩,可惜自己只会Arduino编程。而UNO,NANO的体积对于遥控灯而言还是大了些,而且外接无线接收模块还得自己焊线,想起就头大。
最近淘得CC_SMINI_433R的超微型 Arduino开发板,一下子解决了所有遥控的问题。好东西不能独享。
如图,这个开发板不含天线大小仅2.8*1.8cm,天线大概1.5CM.天线可以拉直,拉直后接收距离明显增加,拉直长度约17.5CM.
开发板采用了328PB芯片,焊在了板子背面,因此空间利用率非常高。
开发环境建议使用Arduno 2.0及以上,如果您没有安装MiniCore开发板,请在文件-首选项-其他开发板管理器地址 中添加 https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json,然后搜索MiniCore安装即可。安装好后,选择开发板为-MiniCore-ATMEGA328,然后在选择主频为16MHZ,芯片型号为328PB即可。
代码比较简单,直接使用了常用的RCSwitch.h 库,店家网盘有下载来直接使用即可;示范完整代码如下:
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
#define PD_LED A0 //CC_433R模块板载的 LED指示灯
#define SHUT_PIN A7 //CC_433R模块 休眠控制引脚,高电平休眠,低电平启用
unsigned long RV433OLD = 0; //最近接收到的433遥控码,在5秒内避免重复接收
unsigned long HMSOLD = 0; //上次接收同样数据的开机毫秒数,以此判断是否重复接收
unsigned int RV_Rpt_Time=1000;// 同一个按键接收时间间隔,防止重复。如控制灯开关,建议设置为3000-5000,如需连续控制如电机转向,可设置为0
void setup() {
Serial.begin(9600); //启用到PC的串口
pinMode(PD_LED, OUTPUT); //LED
digitalWrite(PD_LED, LOW);
mySwitch.resetAvailable();
mySwitch.enableReceive(0); //中断0接收 接 D2脚代表使用的中断0,接D3脚代表中断1
Serial.println("start.");
pinMode(SHUT_PIN, OUTPUT);
digitalWrite(SHUT_PIN, LOW); //让433接收电路工作,433芯片启动时间3ms
}
void loop() {
RV_433(); //处理接收到无线遥控数据
delay(1);
}
void RV_433() {
if (mySwitch.available()) {
delay(10); //延迟以防止重复接收
if (mySwitch.getReceivedBitlength() == 24) { //1527遥控编码数据为24 BIT,后面 4 bit为按键码
unsigned long AA = mySwitch.getReceivedValue(); //接收解码出来会是一个很大的整数
unsigned long TM1 = millis();
//************防重复接收,这部分可以根据需求删除********************
if ((TM1 - HMSOLD) <= RV_Rpt_Time && AA == RV433OLD) { //设定的时间内收到重复的按键码则丢弃
mySwitch.resetAvailable();
return;
}
//**************************************************************
RV433OLD = AA; //记忆最新的接收数据
HMSOLD = TM1; //记忆最新的接收时间
String YK_NUM = String(AA, HEX);
YK_NUM.toUpperCase();
Serial.println(YK_NUM); //输出接收到的遥控器按键码
digitalWrite(PD_LED, HIGH);
delay(100);
digitalWrite(PD_LED, LOW); //闪一下指示灯
}
mySwitch.resetAvailable();
}
}
以上代码最方便的是 RV_Rpt_Time 参数,可以在指定时间内去重。
经测试,遥控器的兼容性非常好,手里好几款433MHZ 1527编码格式的遥控器均能成功解码接收。下图是市面常见的433遥控器外形:
测了下功耗,整个电路3.3V供电环境下,工作电流仅仅14mA.接收电路休眠(SHUT_PIN 置高电平),电流仅11mA, 全电路休眠开启定时器唤醒最低电流仅3uA.
遥控距离实测:
1.为了得到最远效果,我们把原配的天线拉直成一条直线;
2.遥控器我们采用上图左边第4款3按键,带拉杆天线的,遥控器电池型号是12V23A,实测电池电压12.7V;
空旷地无人车阻挡情况最远距离达到了1000米,对于这样的小身板和这么低的功耗来说,确实非常强悍。
室内穿墙能力也出奇的好,三居室那是可以说毫无死角,全覆盖了。把天线放在窗户外面,32层楼高,整个小区中庭全覆盖了。呵呵,以后改个遥控路灯啥的,简直都不是啥事了。
开发板上引出了11个IO口,也就是说可以使用11按键的遥控板配这个开发板,实现11路遥控控制了。
如图所示,家里的家电都可以用这个开发板来轻松控制了。可以将遥控按键编码存储在开发板的EEPROM中,接收到按键后,在EEPROM中查找,找到匹配的就去操作相应的IO口。这样每一盏灯可以对应多个遥控器操作,实现类似酒店的灯控效果。在床头可以控制所有的灯,在洗漱间和客厅可以控制本区域的灯。
以下是我改造遥控电灯用到的材料,仅供参考:
CC_SMINI-433R 遥控开发板地址:https://item.taobao.com/item.htm?id=745055383210
220V转5V 模块地址:https://detail.tmall.com/item.htm?id=597773741262
继电器模块地址:https://item.taobao.com/item.htm?id=738837038343