基于ArduinoUNOR3的智能调速风扇
一,项目介绍如今相当一部分的家庭依然使用着一些老式家电,扔掉浪费,继续使用又有点土不拉叽的。利用机智云的云计算IoT软件平台,可以轻而易举地实现一些智能功能,旧瓶装新酒,让老式电气发出现代异彩,感觉有点像用古代的缶装上现代的人头马XO,把风筝搞成隐形飞行器一样,极具科技感酷劲。为了更利于老式电气的改装,通过手机-Gokit-无线模块-风扇等一系列硬件的中继接力,完成对一台老式风扇的调速过程。
请看一下项目视频
http://v.youku.com/v_show/id_XMzE3MTQ0MTk2MA==.html
二 硬件准备
序号名称规格/型号数量
1老式风扇三档手动调速一台
2机智云开发板Gokit2一套
3无线发射模块L24YK-TXH一个
44路功率驱动模块TB6612FNG一个
5无线接收模块L24YK-RX4一个
6电源模块AC220V/DC3.3V一个
7继电器模块4路光耦一个
8电阻,电容,LED灯等200Ω,1K,RGB共阴极LED若干
项目完成后的图片
1)Gokit+无线发射模块
2)接收板
4路功率驱动模块+无线接收模块+电源模块+继电器模块
3)接收板通过一个插座盒安装到老式风扇
三 软件开发环境
[*]机智云账号一个
用于使用机智云的物联网云服务和开发工具,如自动代码生成等,这方面的教程机智云社区的前辈们已经介绍的非常详细,在此就不再啰嗦了。
四 代码说明
通过自动生成的代码+机智云宠物屋的云端部分+添加部分逻辑和自定义函数,就可以完成项目,可靠地进行控制。下面介绍一下逻辑和自定义函数部分的代码:
1)修改原来宠物屋的WiFi配置状态显示代码void wifiStatusHandle()
{
if(myGizwits.wifiHasBeenSet(WIFI_SOFTAP))
{
Serial.println(F("WIFI_SOFTAP!"));
ControlFan_1(); //Soft AP模式,向无线接收模块发送红灯点亮和启动第一档风量数据
}
if(myGizwits.wifiHasBeenSet(WIFI_AIRLINK))
{
Serial.println(F("WIFI_AIRLINK!"));
ControlFan_2(); //AirLink模式,向无线接收模块发送蓝灯点亮和启动第二档风量数据
}
if(myGizwits.wifiHasBeenSet(WIFI_STATION))
{
Serial.println(F("WIFI_STATION!"));
}
if(myGizwits.wifiHasBeenSet(WIFI_CON_ROUTER))
{
Serial.println(F("WIFI_CON_ROUTER!"));
ControlRst();//配置成功后,关闭远程设备。
}
}void wifiStatusHandle(),是宠物屋代码里的函数,用于监视Gokit开发板上的Key2状态,也就是手机与硬件设备配置时,自动或手动配置WiFi连接的按钮短按或长按的状态,只不过经过修改以上代码,该设备的Gokit开发板上不会有任何表示,取而代之的是,接收板收到数据后,RGBLDE灯点亮的同时,会以接收到的相应风量指令启动风扇,也就是远程配置。
2)添加逻辑控制代码
void loop() {
bool varR_Switch = 0;//系统根据数据点自动生成的开关变量,以下相同。
bool varR_Fan_1 = 0;//风量一档
bool varR_Fan_2 = 0;//风量二挡
bool varR_Fan_3 = 0;//风量三档
KEY_Handle();//key handle , network configure
wifiStatusHandle();//WIFI Status Handle
//手机发过来的开关事件
if(myGizwits.hasBeenSet(EVENT_Switch))
{
myGizwits.read(EVENT_Switch,&varR_Switch);
if(varR_Switch == 1)//当开关为开状态时
{
ControlFan_1();//默认风量一档开启
}
else{
ControlRst();//当开关为关闭时,风扇停止。
}
}
//手机发过来的第一档风量事件
if(myGizwits.hasBeenSet(EVENT_Fan_1))
{
myGizwits.read(EVENT_Fan_1,&varR_Fan_1);//Address for storing data
if(varR_Fan_1 == 1)//接收到云端一档时
{
ControlFan_1();//风量一档开启
}
else{
ControlRst();//当开关为关闭时,风扇停止。
}
}
//手机发过来的第二档风量事件
if(myGizwits.hasBeenSet(EVENT_Fan_2))
{
myGizwits.read(EVENT_Fan_2,&varR_Fan_2);//Address for storing data
if(varR_Fan_2 == 1)//接收到云端二档时
{
ControlFan_2();//风量二档开启
}
else{
ControlRst();//当开关为关闭时,风扇停止。
}
}
//手机发过来的第三档风量事件
if(myGizwits.hasBeenSet(EVENT_Fan_3))
{
myGizwits.read(EVENT_Fan_3,&varR_Fan_3);//Address for storing data
if(varR_Fan_3 == 1)//接收到云端三档时
{
ControlFan_3();//风量三档开启
}
else{
ControlRst();//当开关为关闭时,风扇停止。
}
}
myGizwits.process();
}
//关闭设备函数
void ControlRst(){
val = 0;
for(int i = 9;i <= 11;i++){
pinMode(i,OUTPUT);
digitalWrite(i,HIGH);
}
}
//风量一档控制函数
void ControlFan_1(){
ControlRst();//启动设备前,先关闭其他档位的风量
digitalWrite(Pin9,LOW);//向接收端无线模块发送开关启动信号
}
//风量二档控制函数
void ControlFan_2(){
ControlRst();//启动设备前,先关闭其他档位的风量
digitalWrite(Pin10,LOW);//向接收端无线模块发送开关启动信号
}
//风量三档控制函数
void ControlFan_3(){
ControlRst();//启动设备前,先关闭其他档位的风量
digitalWrite(Pin11,LOW);//向接收端无线模块发送开关启动信号
}
核心功能就是利用三个void ControlFan()风扇控制函数,依次启动ardiuno的9,10,11三个引脚低电位,从而控制连接在三个脚上面的无线发射模块三路开关信号发送出去。当风扇上的无线接收模块收到信号后,会立刻触发对应的继电器闭合,从而启动风扇运行和RGBLED灯点亮。
关闭设备函数void ControlRst(),其实质就是复位三个ardiuno引脚,从而触发接收模块动作,关闭风扇,不管风扇运行在任何风量档位上,都可以立刻关闭。
五 关于模块使用说明,完整代码,测试用APK
[*]1)本文提到的模块,电路图,完整代码等请参照附件的资料
[*]2)本文使用的手机APK是机智云提供的标准测试调试软件,大家请上云端下载就可以了。
配置前后的图标和界面如下图所示:
不错,感谢您的分享 感谢bigfanofloT一直以来的支持和帮助,谢谢您的关注。: 本帖最后由 peter58 于 2017-12-24 23:52 编辑
请问为什么要用无线发射模块和功率模块呢?直接继电器模块加ESP8266(SOC),控制不一样吗?控制一个全速的挡位,用PWM就可以调速了,这样不是更简单,没搞明白,能解释下吗?谢谢! peter58 发表于 2017-12-24 23:50
请问为什么要用无线发射模块和功率模块呢?直接继电器模块加ESP8266(SOC),控制不一样吗?控制一个全速的挡 ...
是的,您的方案很正确,只是有些朋友让我介绍一下无线模块的中继使用方法,刚好这个模块又是3.3V供电的,不能可靠地驱动市面上的带光耦继电器,所以之间加入功率模块。确实有些累赘,很感谢您的关注和建议。希望以后还请多多关照。 清风duino 发表于 2017-12-25 23:39
是的,您的方案很正确,只是有些朋友让我介绍一下无线模块的中继使用方法,刚好这个模块又是3.3V供电的, ...
客气了谢谢回复,以前用ESP8266(SOC方案)也做过类似的 东西(温度自动控制,多少度开几档),所以觉得是不是可以这样做简单点,不过学习了你的帖子给我认识新的东西确实帮助很大,谢谢!! peter58 发表于 2017-12-26 11:28
客气了谢谢回复,以前用ESP8266(SOC方案)也做过类似的 东西(温度自动控制,多少度开几档),所以觉得是 ...
很高兴跟您互相交流学习,以后还请您多多指教。 非常实用! 谢谢啦。好。值得赞
页:
[1]