基于ARDUINO的电器遥控系统

2017-12-22 07:35作者史舜晨临沂第一中学
电子制作 2017年21期
关键词:数码管倒计时舵机

作者/史舜晨,临沂第一中学

基于ARDUINO的电器遥控系统

作者/史舜晨,临沂第一中学

基于ARDUINO平台,集成红外收发模块、数码管显示模块、舵机控制模块及相应机械结构,开发了专门的控制程序,实现了一个红外遥控系统。该系统可以在不破坏原有电子设备开关控制结构的前提下,实现遥控开关和定时开关功能。更换触发头可以适应不同种类电器的多种触发控制模式。该系统可以提高家用老旧电器的易用性和智能化程度。

Arduino;遥控;开关;定时

引言

经济社会的发展,人民对生活质量有了更高的追求,希望家用电器以更加舒适的方式控制家中的电子设备、希望设备提供更贴心的服务,如电器的定时控制、智能控制等。但伴随着电器的更新换代速率不断加快,尤其是遥控的大量广泛应用极大便利了生活。例如人们可以不必在冬日离开温暖的被窝去关灯,不必匆匆在客厅和餐厅间往返来使用厨房电器。但是电器的更新速率并不完全与人们更换它们的能力与意向同步,尤其是在一些比较贵重或者更换麻烦的电器上。笔者设计了一种基于ARDUINO系统的、用于提升现有手动按键式电器易用性的远程遥控系统。如图1所示,在控制器控制下,舵机带动齿轮驱动齿条实现对机械按键的触发。当舵机顺时针转动触发一次开关,如状态一;当舵机逆时针转动再一次触发开关,如状态二。借助该系统,可以在原有手动按键的基础上添加了遥控开关与定时开关功能。这种设计可以在较大程度上提高人们对家用电器的控制能力,便利生活、提高生活质量。并且可以减少家电的更换频率,减少资源消耗;使老式电器物尽其用,符合绿色的可持续发展观念。

图 1 工作原理图

1.硬件系统设计

本系统采用了Arduino UNO控制板,控制板采用了ATmega16U2主控芯片,同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。 输入/输出口较多,且Arduino UNO支持3种方式供电,即外部直流电源通过电源插座供电、USB接口直接供电、电池连接电源连接器的GND和VIN引脚,而且能自动选择供电方式,配置满足了设计的需要[1]。此外,Arduino作为一个开源设计平台,具有类似 Java 和 C 语言开发环境,模块化的硬件设备,良好的封装性,适合大部分开发人群设计使用。另外重要的一点Arduino 价格比普通单片机便宜,并且体积只有巴掌大小,适合作为外附工具改进电器需要方便使用。它可方便地与传感器、各种电子元件进行连接,实现丰富的高级应用。

本项目采用ARDUINO作为控制系统,包括了数码管显示模块,红外发射接收模块以及舵机控制模块。图2为系统框架图。红外接收管接收来自外部红外发射器的数据,经过控制器解码,再相应驱动舵机控制模块和定时设置模块,通过舵机带动齿轮和齿条触发机械开关。

■1.1 红外遥控发射接收模块

红外线遥控是目前应用最广泛、性价比最好的一种遥控技术。基于Arduino平台实现红外遥控功能控制简单,实施方便。综合以上考虑,本系统中选用了红外遥控作为外部控制信号输入。

图 2 系统框架图

红外遥控器发出的信号是一连串二进制脉冲码。通常都是先将其调制在特定的载波频率上来使其在无线传输过程中免受其他红外信号的干扰,然后再经红外发射二极管发射出去。红外接收管将接收到的光信号转换为微弱的电信号,通过放大、自动增益控制、带通滤波、解调变、波形整形后还原为原始控制编码,再将此编码传递给中央控制芯片做相应控制输出。

本系统使用NEC格式的红外遥控编码方式。图3为NEC协议格式典型的脉冲序列。一个信息发送由9mS的AGC自动增益控制脉冲开头,用来设置增益。接着是4.5mS空闲,然后是地址、命令。地址和命令都传送2次,第二次的地址和命令是反码,可以用来校验接收到的信息。总的传输时间是固定的,因为每一位都有反码传送。

图3 NEC协议典型脉冲序列

本项目中所有的指令都是通过红外遥控器发出,包括时间设置指令、直接触发开关指令、倒计时开始指令等。项目设计中使用的码值如下:

long on0= 0x00FF6897; long on1 = 0x00あ30CF;

long on2 = 0x00FF18E7; long on3 = 0x00FF7A85;

long on4 = 0x00FF10EF; long on5 = 0x00FF38C7;

long on6 = 0x00FF5AA5; long on7 = 0x00FF42BD;

long on8 = 0x00FF4AB5; long on9 = 0x00FF52AD;

long add = 0x00FF02FD; long subtract = 0xFF9867;

long play = 0xFFA857;

on0–on9用来设置定时时间并显示,add按键用来控制舵机正转,subtract用来控制反转,play用来控制计时开始和计时结束后的开关触发。红外接收管的信号引脚连接到Arduino的数字3。

■1.2 舵机控制模块

舵机是一种位置伺服的驱动器,主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成,适用于角度不断变化并且可以保持的控制系统,目前舵机广泛应用在机器人关节的控制,机器车方向的扭动等在智能控制应用中。

Arduino控制器可以通过输出不同占空比的PWM信号控制舵机的转动[3]。本项目中选择的舵机是TOWERPRO的9G舵机,该舵机具有尺寸小,质量轻,扭力大,相应脉冲相对较短的优点,能够满足项目中驱动齿条触发开关的需求,其工作电压在3.5–6v,扭矩为1.6kg·cm(4.8V),在无负载的时候的速度为0.12秒/60度(4.8V)或者0.10秒/60度(6.0V) 。该舵机有三个引脚分别是电源VCC、地线GND及信号线PWM。本项目中信号线接到Arduino的数值引脚10上。当控制器发送触发信号时,舵机通过正转或者反转驱动齿轮转动,然后带动齿条移动,实现如图1所示状态变化,控制开关闭合和断开。

■1.3 触发开关头的设计

设计不同的触发头可以实现对不同电器的控制。如图4所示的旋钮式开关头可以应用到旋钮式开关上,如燃气灶、微波炉等。

图4 旋钮式触发头

2.主控软件设计

控制软件是实现本项目的关键,直接影响系统的功能性、流畅性和执行效率。控制软件主要包括红外接收模块、舵机控制模块、数码管显示模块。红外遥控模块实现红外输入控制指令的解码,舵机控制模块根据相应的指令实现舵机的正转或者反转,数码管显示模块实现倒计时进度的显示和信息的提示。

图5 程序流程图

程序工作的流程图如图5所示,首先判断是否有按键按下,如果有,就对红外进行解码,判断相应的操作指令,如果没有识别出按键则在数码管上显示“E”,表示按键错误。如为时间设置指令,则在数码管上显示倒计时的时间,并且向倒计时模块传递倒计时的时间;如果为直接触发开关指令,则判断是正传还是反转,如果是正传则向舵机控制模块传递chePos=1,舵机接到指令后调用函数clockwisefan()实现正传;反转则向舵机控制模块传递chePos=0;舵机控制模块则调用函数Anticlockwisefan()实现反转。正反转函数代码如下,本项目中转动的角度为180度,转动度数可以根据项目需要进行改动。

void Clockwise(void) //正转程序

{ for(pos=0; pos <180; pos++) // 从0度到180度运动// 每次步进一度

{ myservo.write(pos); // 指定舵机转向的角度

delay(10); } } // 等待10ms让舵机到达指定位置

void Anti_clockwisefan(void) //反转程序

{ for(pos=180 ; pos >0; pos––)

// 从180度到0度运动,每次步进一度

{ myservo.write(pos); // 指定舵机转向的角度

delay(10); } } // 等待10ms让舵机到达指定位置

如果为倒计时开始指令,则调用led_diplay()函数,开始倒计时,同步驱动数码管的显示。倒计时函数delay_time_start()的代码如下:其中delay_time表示延时的分钟数,delay(x)函数,表示延时x毫秒。为了表示延时一分钟,本项目中使用了循环语句60次。

void delay_time_start(int delay_time)

{ for(int k=delay_time;k>0;k––)

{ led_display(k);

for(int m=60;m>0;m––)

{ delay(1000); //延时1秒

if(k==1 && m<11)//最后十秒显示

{ led_display((m)); } } }

chePos=!chePos;

led_display(0);

action_start(); }

其中action_start()函数实现舵机反转,代码如下:

void action_start(void)

{ if (chePos==1) //如果chePos为1,运行正转程序

{ Clockwise(); } //运行正转程序

else

{ Anti_clockwisefan(); } } //运行反转程序

3.系统展示

图6为各模块与ArduinoUNO的连接原理图,图7为实物连接图。

在demo验证过程中,红外遥控输入信号识别正确,舵机及齿轮和齿条控制输出平稳有效,成功实现了对按键的触发。倒计时模块工作正常,在倒计时结束后也有效的调用了舵机控制模块,实现了开关的触发。

图6 各模块连接图

图7 各构件实际连接图

4.结束语

技术调研后,本文设计的电器远程遥控系统成功实现了预期功能,可以加装在家中的手动按键式电器上,为生活带来一定程度的便利,具有一定的实用价值。

该系统采用模块化的设计思想,充分利用了Arduino平台的接口丰富、开发简单、功能实用等特性,以Arduino控制板为核心,通过自主编写的控制程序,成功实现了对舵机模块、红外接收发射模块和数码管显示模块的集成和控制,技术路线得到验证,笔者也从中得到锻炼,学习能力、创新能力、自信心得到极大提升。

在实验过程中也发现系统所存在的不足,今后还可以在以下方面对系统进行改进或做深入研究:

(1)使用精确度更高的舵机,避免由于误差不能够正常触发;(2)完善机械和外观设计,实现对不同机械按键的触发;(3)集成无线通信或wif i技术,实现手机远程遥控。

* [1]刘楚红,董镇,钱宇捷,陶立,柳盛东.基于Arduino 的倒车雷达系统设计[J],现代电子技术,2014年第37卷第17期

* [2]李雪莹.基于单片机的空调红外线编解码系统的设计和实现[D],电子科技大学硕士论文

* [3]蔡睿妍.基于Arduino的舵机控制系统设计[J],电脑知识与技术:1009-3044(2012)15-3719-03

猜你喜欢
数码管倒计时舵机
物理项目教学设计,用单片机控制四位数码管显示
直升机某型舵机自动测试系统设计分析
基于51单片机的分数计数器设计
Arduino编程
MC9S08FL16单片机数码管静态显示分析
基于dsPIC单片机的飞艇舵机控制实现
超音速舵机保护器
菜鸟看模型