第 22 课 简单创作 - 小风扇

介绍

在夏天若有个手持小风扇,让你能够走到哪吹到哪,并且还能更改档速,将是个非常爽的事情。

在这个课程中,我们将制作一个手持风扇原型(去外壳)。

所需器件

../_images/uno26.png

原理图

Arduino I/O 端口的最大电流为 20mA,但电机的驱动电流至少为 70mA。因此,我们不能直接使用I/O口来驱动电流;相反,我们可以使用 L293D 来驱动电机。

L293D 的Enable pin 1,2EN 已经连接到5V,所以L293D 一直处于工作状态。将引脚 1A 和 2A 分别连接到控制板的引脚 9 和 10。电机的两个引脚分别连接到引脚 1Y 和 2Y。当 10 脚为高电平,9 脚为低电平时,电机开始向一个方向旋转。当引脚 10 为低电平且引脚 9 为高电平时,它以相反的方向旋转。

原理图如下所示:

../_images/image190.png

实验步骤

第 1 步:搭建电路。

../_images/image191.png

第 2 步:打开代码文件 Lesson_22_Small_Fan.ino

第 3 步:选择 开发板端口

第 4 步:点击 上传 按钮来上传代码。

制作的小风扇有3档速度,按下第一次,风扇转速较慢,再次按下,风扇加速;第三次按下,风扇达到最大速度,按下第四次风扇将停止;以此为一个循环。

../_images/image192.jpeg

代码

代码分析

这个代码嵌套了5个 if 语句用来判断按键的按下状态。

  • 第一个if语句用来判断按键是否按下。

  • 第二个if语句用来判断时间是否过了50ms。

  • 第三个if语句用来判断过了50ms, 按键确实有按下,以免有误触。

  • 第四个if语句用来记录按键按下次数,每按下一次, stat 加1。

  • 第五个if语句用来判断按键按下次数是否大于4,如果是,则将 stat 清零。

switch()语句

switch(stat)
{
case 1:
    clockwise(rank1);// When stat=1, set the rotate speed of the motor as rank1=150
    break;
case 2:
    clockwise(rank2);// When stat=2, set the rotate speed of the motor as rank1=200
    break;
case 3:
    clockwise(rank3);// When stat=3, set the rotate speed of the motor as rank1=250
    break;
default:
    clockwise(0);
}

switch 语句与 if 语句一样, switch case 允许程序员在各种条件下执行的不同代码来控制程序流程。特别是,switch 语句将变量的值与 case 语句中指定的值进行比较。当找到值与变量的值匹配的 case 语句时,将运行该 case 语句中的代码。 如果没有 break 语句, switch 语句将继续执行下面的表达式,直到 break 或到达 switch 语句的末尾。

在这部分代码中:

  • 如果stat = 1, 让风扇以速度 rank1(150)转动。

  • 如果stat = 1, 让风扇以速度 rank2(200)转动。

  • 如果stat = 1, 让风扇以速度 rank3(250)转动。

  • 如果stat = 0, 让风扇以速度 0转动。

clockwise()函数

void clockwise(int Speed)//
{
    analogWrite(motorIn1,0);
    analogWrite(motorIn2,Speed);
}

该功能是设置电机的转速:将 Speed 写入 引脚9,将0写入引脚10。电机朝某个方向旋转,速度为 Speed 的值。

实验总结

在本实验中,你还可以控制电机转动与否。只需将 L293D 的引脚 1、2EN 连接到控制板的 I/O 端口。设置1、2EN为高电平,电机开始转动;将其设置为低电平,它将停止旋转。