Page Title

第9课 在Arduino中使用电机与红外遥控器——智能小风扇


2019-07-31 15:43:01


电风扇曾经是很多家庭上个世纪八、九十年代最重要的消暑电器,拥有一台自己独自享用的电风扇是那个年代很多孩子梦想的礼物。本课我们将制作一个能够用红外遥控器控制的小风扇,甚至还可以为它加上其它的传感器,使得小风扇更智能。

 

blob.png

 

要制作本课的范例作品,需要使用以下新的硬件模块:

红外遥控器


红外遥控器是一种红外线发射装置。Arduino套件中的红外遥控器有17个按键,除了0-9这十个数字以外,还包括四个方向键、“OK”键以及“*”、“#”键(如下图9-1所示)。红外遥控器每个按键都有对应的按键值,可以根据需要在程序中定义不同的功能。


blob.png

 

红外接收模块


红外接收模块一般与红外发射器一起使用,它能够接收发射器发射的红外线,然后将接收到的红外线信号转换为电信号,经过处理后还原为红外发射器发射的按键值(如上图9-2所示)。

Arduino套件中,红外遥控器和红外接收模块组成了一个完整的红外遥控系统。这类红外遥控方式在现实生活中几乎随处可见,比如绝大多数家庭都有的电视机、空调机,都采用了类似的红外遥控方式。

电机


电机,也叫“马达”,是依据电磁感应原理将电能转换为机械能的一种装置,很多常用电器和机械的动力源都是各种各样的电机。

电机根据输入电源的不同,可以分为使用直流电的直流电机、使用交流电的交流电机。Arduino套件中的130电机就是一种直流电机,能够将输入的直流电能转换为机械能,可以带动套件中的风扇叶旋转(如下图9-3所示)。

blob.png

 

 图9-3 130电机和风扇叶 

 

要制作本课的范例作品,还需要使用以下新的指令:

blob.png

使用“读红外值”指令可以读取指定端口红外接收模块的值。指令默认是数字端口“2”,单击下拉列表,选择红外接收模块与扩展板连接的端口号。

blob.png

使用“红外按键值”指令可以读取红外遥控器按键的值。指令默认是“OK”键;通过单击下拉列表,还可以选择0-9这十个数字键、四个方向键、以及“*”、“#”键。

blob.png

使用“设置电机输出指令”指令可以设置指定端口电机的输出值。指令默认端口是“MA”、输出值是“150”;通过单击第一个参数的下拉列表,可以选择电机的连接端口MA或者MB通过单击第二个参数下拉列表或者直接输入,可以设置电机的输出值,它的取值范围是(-255255)。

 

blob.png

要制作本课的范例作品,需要使用以下器材:

²  UNO主控板和配套的扩展板

²  130电机模块:一个

²  风扇叶:一个

²  红外接收模块:一个

²  红外遥控器:一个

²  数码管模块:一个

²  3P连接线:一根

²  4P连接线:一根

 

第一步:连接硬件、运行插件                       


要搭建本课的范例作品硬件,可以按以下步骤操作:

1.  将UNO扩展板插入到UNO主控板上。

2.      4P连接线白色插头插入数码管模块的接口中、黑色插头插入扩展板第二排右边的IIC端口,黑色插头插入时要注意连接线每根线的颜色和扩展板插座针脚的颜色相同。

3.      将一条3P连接线白色插头插入红外接收模块的白色接口中、黑色插头插入扩展板中间的“2”号端口,黑色插头插入时要注意连接线每根线的颜色和扩展板插座针脚的颜色相同。

4.      130电机白色接口插入扩展板的MA接口、将风扇叶安装到130电机的转头上。

具体器材连接方式如下图9-4所示:

blob.png


9-4 “智能小风扇”范例作品硬件连接图

5.      USB线把主控板和计算机连接起来,打开“好好搭搭硬件下载”插件,选择“型号”为“UNO”,确认插件程序左下角的端口和型号显示正确。

第二步:在数码管上显示红外接收模块接收到的值                       


登录“好好搭搭”网站,选择“创作”栏目中的“Arduino模板”,进入“Arduino编程设计页”进行编程。

要在数码管上显示红外接收模块接收到的值,可以先“新建变量”“ir”;然后使用“重复执行”指令,重复执行“将ir设定为”“读红外值”在端口“2”;再进行条件判断:如果“ir”变量“大于0”,那么执行“数码管消除”及“数码管显示”指令,在数码管上显示“ir”变量的值,也就是端口“2”上读取的红外值。具体程序代码如下图9-5所示:


blob.png


9-5 “在数码管上显示红外接收模块接收到的值”程序代码

blob.png

将上图9-5所示代码编译后下载到主控板上,然后按红外遥控器上的按键,观察数码管上显示的数值,思考以下问题:

1. 按一下红外遥控器的按键,数码管上一直会显示这个按键的数值吗?可能是什么原因?

2. 红外遥控器必须对准红外接收模块吗?如果不对准会怎么样?

 

 

我发现:________________________________________________________________

_______________________________________________________________________

 

 

第三步:让风扇旋转起来                       


要让风扇旋转起来,可以使用“电机输出”指令,具体程序代码如下图9-6所示:

blob.png


9-6 “让风扇旋转起来”程序代码

blob.png

根据上图9-6所示代码,按下表要求分别修改电机输出值,编译后下载到主控板上,观察不同参数下风扇旋转的状态,最后将观察结果记录到表格中。

 

 

 

blob.png

 

_______________________________________________________________________我发现:________________________________________________________________

 

 

第四步:用红外遥控器控制风扇旋转                  


要用红外遥控器控制风扇旋转:按数字“1”键控制风扇比较慢的旋转、“2”键比较快旋转、“3”非常快旋转,可以按以下步骤编写程序:

 单击“数据”类别中的“新建变量”按钮,在打开的“新建变量”对话框中输入新变量的名称“zhuansu”,单击“确定”按钮完成新建变量。

1.      添加“重复执行”指令,重复执行“将变量设定为”和“如果那么”指令;将“zhuansu”变量设定为“读红外值”指令的值;

2.      设置“如果那么”指令的条件为“zhuansu”变量“等于”“红外按键值”;单击“红外按键值”指令的下拉列表,选择“IR_BUTTON_1”选项,也就是红外遥控器上的“1”按键。

3.      设置“如果那么”指令条件成立时执行“电机输出”指令,设置电机输出值为“-100”。

4.      将“如果那么”指令再复制三个,分别修改“红外按键值”指令的参数为“IR_BUTTON_2”、“IR_BUTTON_3”、“IR_BUTTON_0”,再分别修改“电机输出”指令的输出值为“-150”、“-255”、“0”。

具体的程序代码如下图9-7所示:


blob.png

9-7 “用红外遥控器控制风扇旋转”程序代码

blob.png

可以不新建“zhuansu”变量,直接设置“读红外值”指令“等于”“红外按键值”指令吗?

 

 

blob.png

进一步修改程序,使得小风扇旋转的同时,数码管上能够显示相应的转速。比如显示比较慢的“1”档、比较快的“2”档以及非常快的“3”档。

 

blob.png

 

除了使用红外遥控器控制风扇,你还能让风扇的控制更智能、使用更方便吗?

我打算这么做:_______________________________________________________

______________________________________________________________________

做的时候需要注意:____________________________________________________

______________________________________________________________________