• 基于ArduinoUNOR3的智能调速风扇


    一,项目介绍
      如今相当一部分的家庭依然使用着一些老式家电,扔掉浪费,继续使用又有点土不拉叽的。利用机智云的云计算IoT软件平台,可以轻而易举地实现一些智能功能,旧瓶装新酒,让老式电气发出现代异彩,感觉有点像用古代的缶装上现代的人头马XO,把风筝搞成隐形飞行器一样,极具科技感酷劲。为了更利于老式电气的改装,通过手机-gokit-无线模块-风扇等一系列硬件的中继接力,完成对一台老式风扇的调速过程。
      请看一下项目视频


    二 硬件准备

    序号
    名称
    规格/型号
    数量
    1
    老式风扇
    三档手动调速
    一台
    2
    机智云开发板
    Gokit2
    一套
    3
    无线发射模块
    L24YK-TXH
    一个
    4
    4路功率驱动模块
    TB6612FNG
    一个
    5
    无线接收模块
    L24YK-RX4
    一个
    6
    电源模块
    AC220V/DC3.3V
    一个
    7
    继电器模块
    4路光耦
    一个
    8
    电阻,电容,LED灯等
    200Ω,1K,RGB共阴极LED
    若干


    项目完成后的图片
    1)Gokit+无线发射模块
     
    2)接收板
    4路功率驱动模块+无线接收模块+电源模块+继电器模块
     

    3)接收板通过一个插座盒安装到老式风扇
     

    三 软件开发环境

    • 机智云账号一个


            用于使用机智云的物联网云服务和开发工具,如自动代码生成等,这方面的教程机智云社区的前辈们已经介绍的非常详细,在此就不再啰嗦了。

    四 代码说明
            通过自动生成的代码+机智云宠物屋的云端部分+添加部分逻辑和自定义函数,就可以完成项目,可靠地进行控制。下面介绍一下逻辑和自定义函数部分的代码:
    1)修改原来宠物屋的WiFi配置状态显示代码

    1. void wifiStatusHandle()
    2. {
    3.   if(myGizwits.wifiHasBeenSet(WIFI_SOFTAP))
    4.   {
    5.     Serial.println(F("WIFI_SOFTAP!"));
    6.     ControlFan_1();        //Soft AP模式,向无线接收模块发送红灯点亮和启动第一档风量数据
    7.   }
    8.   
    9.   if(myGizwits.wifiHasBeenSet(WIFI_AIRLINK))
    10.   {
    11.     Serial.println(F("WIFI_AIRLINK!"));
    12.         ControlFan_2();        //AirLink模式,向无线接收模块发送蓝灯点亮和启动第二档风量数据
    13.   }
    14.   
    15.   if(myGizwits.wifiHasBeenSet(WIFI_STATION))
    16.   {
    17.     Serial.println(F("WIFI_STATION!"));
    18.   }
    19.   
    20.   if(myGizwits.wifiHasBeenSet(WIFI_CON_ROUTER))
    21.   {
    22.     Serial.println(F("WIFI_CON_ROUTER!"));
    23.         ControlRst();//配置成功后,关闭远程设备。
    24.   }
    25.   }

    void wifiStatusHandle(),是宠物屋代码里的函数,用于监视Gokit开发板上的Key2状态,也就是手机与硬件设备配置时,自动或手动配置WiFi连接的按钮短按或长按的状态,只不过经过修改以上代码,该设备的Gokit开发板上不会有任何表示,取而代之的是,接收板收到数据后,RGBLDE灯点亮的同时,会以接收到的相应风量指令启动风扇,也就是远程配置。

    2)添加逻辑控制代码

    1. void loop() {  
    2.   bool varR_Switch = 0;//系统根据数据点自动生成的开关变量,以下相同。
    3.   bool varR_Fan_1 = 0;//风量一档
    4.   bool varR_Fan_2 = 0;//风量二挡
    5.   bool varR_Fan_3 = 0;//风量三档
    6.   
    7.   KEY_Handle();//key handle , network configure
    8.   wifiStatusHandle();//WIFI Status Handle
    9.   //手机发过来的开关事件
    10.   if(myGizwits.hasBeenSet(EVENT_Switch))
    11.   {
    12.     myGizwits.read(EVENT_Switch,&varR_Switch);
    13.         if(varR_Switch == 1)//当开关为开状态时
    14.         {
    15.         ControlFan_1();//默认风量一档开启
    16.         }
    17.         else{
    18.         ControlRst();//当开关为关闭时,风扇停止。
    19.         }
    20.   }
    21.   //手机发过来的第一档风量事件  
    22.   if(myGizwits.hasBeenSet(EVENT_Fan_1))
    23.   {
    24.     myGizwits.read(EVENT_Fan_1,&varR_Fan_1);//Address for storing data
    25.     if(varR_Fan_1 == 1)//接收到云端一档时
    26.         {
    27.         ControlFan_1();//风量一档开启
    28.         }
    29.         else{
    30.         ControlRst();//当开关为关闭时,风扇停止。
    31.         }
    32.   }
    33.   //手机发过来的第二档风量事件  
    34.   if(myGizwits.hasBeenSet(EVENT_Fan_2))
    35.   {
    36.     myGizwits.read(EVENT_Fan_2,&varR_Fan_2);//Address for storing data
    37.     if(varR_Fan_2 == 1)//接收到云端二档时
    38.         {
    39.         ControlFan_2();//风量二档开启
    40.         }
    41.         else{
    42.         ControlRst();//当开关为关闭时,风扇停止。
    43.         }
    44.   }
    45.   //手机发过来的第三档风量事件  
    46.   if(myGizwits.hasBeenSet(EVENT_Fan_3))
    47.   {
    48.     myGizwits.read(EVENT_Fan_3,&varR_Fan_3);//Address for storing data
    49.     if(varR_Fan_3 == 1)//接收到云端三档时
    50.         {
    51.         ControlFan_3();//风量三档开启
    52.         }
    53.         else{
    54.         ControlRst();//当开关为关闭时,风扇停止。
    55.         }
    56.   }
    57.   myGizwits.process();
    58. }
    59. //关闭设备函数
    60. void ControlRst(){
    61.    val = 0;
    62.    for(int i = 9;i <= 11;i++){
    63.   pinMode(i,OUTPUT);
    64.   digitalWrite(i,HIGH);
    65.    }
    66. }
    67. //风量一档控制函数
    68. void ControlFan_1(){
    69.     ControlRst();//启动设备前,先关闭其他档位的风量
    70.         digitalWrite(Pin9,LOW);//向接收端无线模块发送开关启动信号
    71. }
    72. //风量二档控制函数
    73. void ControlFan_2(){
    74.         ControlRst();//启动设备前,先关闭其他档位的风量
    75.         digitalWrite(Pin10,LOW);//向接收端无线模块发送开关启动信号
    76. }
    77. //风量三档控制函数
    78. void ControlFan_3(){
    79.         ControlRst();//启动设备前,先关闭其他档位的风量
    80.         digitalWrite(Pin11,LOW);//向接收端无线模块发送开关启动信号
    81. }

        核心功能就是利用三个void ControlFan()风扇控制函数,依次启动ardiuno的9,10,11三个引脚低电位,从而控制连接在三个脚上面的无线发射模块三路开关信号发送出去。当风扇上的无线接收模块收到信号后,会立刻触发对应的继电器闭合,从而启动风扇运行和RGBLED灯点亮。
        关闭设备函数void ControlRst(),其实质就是复位三个ardiuno引脚,从而触发接收模块动作,关闭风扇,不管风扇运行在任何风量档位上,都可以立刻关闭。

    五 关于模块使用说明,完整代码,测试用APK

    • 1)本文提到的模块,电路图,完整代码等请参照附件的资料
    • 2)本文使用的手机APK是机智云提供的标准测试调试软件,大家请上云端下载就可以了。



    配置前后的图标和界面如下图所示:
      

    源码下载地址:http://club.gizwits.com/thread-7992-1-1.html

  • 相关阅读:
    assert用法,原理,改编(C++)
    使用临界段实现优化的进程间同步对象原理和实现 (转)
    去除表达式里面多余的()
    为什么C++编译器不能支持对模板的分离式编译
    python试题[转]
    从CSDN的趣味题学Python
    即时战略游戏中如何协调对象移动
    贪心算法精讲
    游戏引擎大全
    I/O 完成端口( Windows核心编程 )
  • 原文地址:https://www.cnblogs.com/dapangsen/p/7929052.html
Copyright © 2020-2023  润新知