Arduino和主控板实现红外遥控和舵机控制

更新时间Invalid dateshi haowen

概况

红外遥控和舵机控制通过 涂鸦智能 App 下发 打开空调 指令控制红外发射模块发射指令打开格力空调,下发 开/关门 指令控制舵机实现开关门功能。

物料清单

硬件 (4)软件 (1)
  • 涂鸦三明治 Wi-Fi MCU 通信板(WB3S)

    数量:1

    适用于涂鸦 IoT 自定义方案中,照明、台灯、灯 丝灯、调光器、照明遥控器、排插、开关、家电、运动健康、传感类产品原型。

  • 涂鸦三明治红外遥控功能板

    数量:1

    一款无线发射与接收装置,能学习中心频率为37.9KHz 的红. 外信号,通过控制红外发射管的通断来达到控制红外设备的目的。

  • Arduino 开发板

    数量:1

    一个开发各类设备,让您比台式电脑更能充分感知和控制物理世界的生态系统。

  • STM32f103C8t6

    数量:1

    适用于电机驱动、应用控制、医疗和手持设备、PC 和游戏外设、GPS 平台、工业应用、PLC、变频器、打印机、扫描仪、报警系统、视频对讲和 HVAC 等应用。

步骤

WB3S模组的 Wi-Fi 板(测试)

  1. 涂鸦 IoT 平台 上创建一款 万能遥控器 产品,开发方案选择自定义方案。

  2. 输入产品名称,型号,选择 Wi-Fi +蓝牙+IR方案,标准功耗。

  3. 创建产品后,添加功能定义。由于要控制舵机开锁,需要添加一个布尔型功能点,填写一个较规范的标识符。因为是通过标识符控制功能的实现。

    说明:定时功能是云端实现,不需要写代码,可添加可不添加,我是想实现定时关闭空调所以添加了定时功能。

  4. 硬件开发,选择 WB3S Wi-Fi &BLE 双协议模组。在开发资料下载区域,下载开发资料。

    • MCU SDK:涂鸦的 MCU 开发代码包。可以移植到 Arduino Uno/Nano 最小系统。Uno 和 Nano 使用一样的芯片,代码一样,只是在 Arduino 下载的时候选择对应的开发板即可。同样,MCU SDK 也被移植到 STM32f103c8t6 最小系统板,并采用 Keil 开发。在 STM 32 和 Arduino 都成功与模组通信后,按下设备按键进入配网模式。

    • 涂鸦模组调试助手:可以模拟 MCU 和模拟模组。

    • 功能点调试文件:以 .json 结尾的文件。可以使用涂鸦模组调试助手需导入 DP 文件,即为这个文件。

  5. 在下载资料中安装 涂鸦模组调试助手。我的电脑是 Windows 10 直接安装即可,如果是 Windows 7 系统,则需安装 NET4.6.1 框架。使用方式详情请参考 涂鸦模组调试助手 。我拿到的是三明治开发板里的 TYDE5-WB3S-MCU-1 Wi-Fi 板,涂鸦已经把 MCU 通用对接的固件已经烧录好了,无需再烧录固件。所以直接在调试助手里选择 MCU模拟,选择串口端口号(端口号查看:右键我的电脑->设备管理器->端口),波特率选择 115000。导入之前下载的 功能点调试文件

  6. 点开 初始化配置,点击 开始调试 按钮。即可看到在调试窗口的模组心跳信息。

    <!---->

  7. 之后就可在 操作 栏,使用相关指令。本小节简单描述下配网操作。

    1. 点击 AP配网,在调试窗口就可看到 Wi-Fi 模组进入AP配网模式。

    2. 在手机端打开 涂鸦智能 APP,点右上角 + 号,选择自动发现,就可添加到 Wi-Fi 模组,按提示配网即可。

    3. 成功配网后,在涂鸦模组调试助手里查看 Wi-Fi 模组是否已成功连接路由器,且连接到涂鸦 IoT 云端。

    4. 在涂鸦智能 App 里尝试操作设备,然后在调试助手里查看是否有 MQTT 协议的云端下发数据。

Arduino控制舵机(注意事项)

舵机,故名思议,像船尾的舵那样,只能转动固定的角度,一般的舵机最大转角约为 180 度。也有一些舵机能达到 300 度的。使用 Arduino Uno 控制板控制舵机之前您可以参考以下资料。

  • 认识 Ardinuo 控制板:https://my.oschina.net/u/4238297/blog/3120912
  • Ardinuo实验室:https://arduino.nxez.com/tag/level1

舵机原理

将PPM信号,经信号线传输。 PPM信号的频率是50HZ。宽度从0.5MS到2.5MS。具体用到的代码如下所示:

//引入头文件
#include <Servo.h>    //调用舵机函数库
Servo myservo;

//初始化舵机控制脚为D6
myservo.attach(6);            //定义数字第6脚为舵机控制引脚

//写入舵机角度,0~180度
myservo.write(120); //写入舵机角度

Arduino红外发射控制格力空调

  • 红外发射参考链接:

    • https://www.yiboard.com/thread-910-1-1.html
    • https://www.cnblogs.com/hgxh/p/4109012.html
    • https://www.arduino.cn/thread-1220-1-1.html
    • Arduino控制格力空调:http://bbs.mydigit.cn/read.php?tid=2103622
  • 红外接收代码,此代码不能用于控制空调:

    //本例来自于红外接收模组的IRremote自带范例
    //已经作出了修改
    /*电路连接
    *红外接收器的VOUT接在数字引脚3上
    *效果,当遥控器按下按键时电脑的串口会出现按键的命令编码.
    */
    #include <IRremote.h>        //加载头文件,红外的库需自己导入
    int RECV_PIN = 3;             //定义红外接收器的引脚为3
    int a=0;
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    
    void setup()
    {
        Serial.begin(115200);       //串口波特率115200
        irrecv.enableIRIn();         //初始化红外接收器
    }
    
    void loop() 
    {
    if (irrecv.decode(&results))
    {
        Serial.print("IR DATA IS:"); 
        Serial.println(results.value); 
        irrecv.resume(); // 接收下一个值
    }
    delay(100);
    }
    

    使用上述代码,读出空调遥控器红外码,开空调:2425357322,关空调:2156921866。

  • 红外控制空调

    上述代码适合普通红外解码和发送,不适合空调,多数空调遥控器编码都是100位以上,甚至200位。

    再看看 IRremote 库能接收多少位,在 IRremote.h 文件中你可以找到如下语句:

    // [mw_shl_code=cpp,true]'#define RAWBUF 100
    // Length of raw duration buffer[/mw_shl_code] 设置成 100 位过于偏低,可以修改成
    [mw_shl_code=cpp,true]#define RAWBUF 255[/mw_shl_code]
    

    红外控制空调代码主要参考下面的链接。已测试可以成功打开格力空调,但关闭空调部分的代码有问题。

    Arduino控制格力空调:http://bbs.mydigit.cn/read.php?tid=2103622

Arduino 与涂鸦 WB3S 模组通信

在涂鸦创建产品后,有生成 MCU SDK 包,在 Arduino 中导入 MCU SDK 包,然后按下方更改即可。

//(1)#error "请将MCU串口发送函数填入该函数,并删除该行"
Serial.write(value);

//(2)#error " 请在main函数中添加wifi_protocol_init()完成wifi协议初始化,并删除该行"
//添加wifi_protocol_init();
void setup() 
{
  wifi_protocol_init();  //wifi协议初始化  
}

//(3)#error "请在串口接收中断中调用uart_receive_input(value),串口数据由MCU_SDK处理,用户请勿再另行处理,完成后删除该行"
   //创建serialEvent()函数,实现串口接收
void serialEvent() 
{
  if (Serial.available()) 
  {
     unsigned char ch = (unsigned char)Serial.read();
     uart_receive_input(ch);
  }
}

//在setup()函数里调用serialEvent();
void setup() 
{
  serialEvent();           //串口接收处理   
}

//(4)#error "请直接在main函数的while(1){}中添加wifi_uart_service(),调用该函数不要加任何条件判断,完成后删除该行"
//添加wifi_uart_service();
void loop() 
{
  wifi_uart_service();     // Wi-Fi 串口
}

//(5)还需要在变量申明处去掉const ,否则会报错
//const DOWNLOAD_CMD_S download_cmd[] =
DOWNLOAD_CMD_S download_cmd[] =
{
  {DPID_OPENSW, DP_TYPE_BOOL},
  {DPID_OPENKT, DP_TYPE_BOOL},
};

上述工作完成后,基本问题已解决。可在涂鸦模组调试助手测试。测试界面如下:导入 DP 文件(即 .JSON 文件),波特率设置为 115200。

小结

涂鸦物联网开发平台为开发者提供了便捷的 IoT 开发工具与服务,助力开发者更高效的完成设备接入,并为开发者提供物联网应用开发及场景服务能力。

您正在浏览的内容为涂鸦开发者平台注册用户自主发布,版权归原作者所有,涂鸦开发者平台不拥有其著作权,亦不承担相应法律责任,涂鸦开发者平台不对该等内容作出不违反、不侵权的陈述与保证。您应知晓并了解您对于该等内容的复制、改编、转发传播等任何其他使用行为应当符合法律法规并应取得相关权利人的许可,您的该等行为所造成的全部相应后果(包括但不限于侵权、违约、受损、与第三方的纠纷等)均应由您个人承担。内容知识产权相关条款可查看涂鸦开发者平台用户协议。如果您发现有涉嫌侵权的内容,请立即通过平台上的联系方式联系平台进行举报并发送有关证据,一经查实,平台将立刻删除涉嫌侵权内容。

喜欢举报