到目前为止,我们已经在DevicePlus上介绍过Arduino的使用方法和一些应用案例。在本文中,我们将尝试一个用Arduino让传感器工作的电子作品。此次的分享嘉宾是福田和宏先生!他过去曾在DevicePlus上连载过“Arduino基础”等作品。
◆◆◆
大家好!让我们直接进入主题吧。通过将几个微控制器和电子元器件相组合,就能创作出很多不同的作品。从机器人和无人机等流行设备到闹钟和玩具等小物件,您可以实现各种创意。这次要为大家介绍的是一款名为“小鸡赛车”的车形机器人的制作过程。
作品简介
使用这次的作品可以玩一种游戏,让名为“小鸡赛车”的车形机器人向着墙壁行驶,比赛从机器人停下的地方到墙壁的距离谁最短。它采用了可以通过按钮来操作车形机器人的设计,因此任何人都可以轻松享受竞赛游戏。
这款小鸡赛车中配有电机,通过开关使其前进。参加游戏的人手握按钮,当小车马上要撞上墙壁时按下按钮使之停止。
然后使用距离传感器来测量赛车与墙壁之间的距离。即使和好几个人一起玩,只要能测量出到墙壁的距离,就能比出谁在离墙壁最近的位置停下来了,是不是很有趣?
另外,我们还需要提前准备一个用来检测是否已碰撞到墙壁的机制。我的设计是在小鸡赛车的前端安装了开关,这样,如果它撞到墙上开关就会被按下。如果这个开关被按下,就意味着玩家失败。
所需的电子零部件
在确定了小鸡赛车的大致动作之后,让我们来看看需要使用哪些电子零部件。这次我们将使用Arduino进行控制。由于“Arduino UNO”等产品体积较大,不适合安装在这么小的作品上,因此,我决定使用体积小巧的“Arduino Nano”。“Arduino Nano”的尺寸为45×18mm,大小是可以放在食指上的程度,所以正好可以安装在作品上,而不用担心尺寸太大。另外,虽然体积更小,但却具有与“Arduino Uno”相同的功能,这点很关键。
驱动电机使用配有齿轮的电机。这是因为齿轮会增强驱动的力量,这样即使放置电池等较重的部件,也可以轻松地让赛车跑起来。此外,还需要电机驱动器让电机运转。
使小鸡赛车停下来的操作,我用按钮开关来实现。这次,我想将开关线延长,以便从远处也可以控制赛车。
我使用微动开关来判断小鸡赛车是否撞到了墙上,选用了附有金属板的微动开关。金属板的存在可以确保开关被按下而不必担心碰撞角度。此外,通过在前方安装左右两个微动开关,可以提高发生碰撞时按下开关的准确性。
停止时,需要测量到墙壁的距离,我使用距离传感器来完成这项工作。这次用的是可以使用超声波测量距离的距离传感器。
另外,我还希望在显示器上显示结果,以便让玩家知道测量出来的距离。我使用的是字符液晶显示器,这样可以比较容易地显示字符。
可以通过LED让玩家知道开始的时间以及是否成功。安装一个绿色和三个红色的LED。通过倒计时来通知开始时间,先是所有红色LED点亮,然后逐一熄灭,绿色LED点亮表示开始,赛车驶出。另外,如果成功了,绿色LED亮起;如果失败了,则红色LED亮起,据此来告知参赛者结果。
除此之外,还要配备调整电机速度和设置距离的功能。
接下来,我们根据小鸡赛车的结构,来选择电子零部件。这次使用的电子零部件如下:
Arduino Nano Every
使用“Arduino Nano Every”作为微控制器来负责控制。Arduino Nano Every是一款于2019年5月发售的新Arduino Nano。当然,如果不想使用Arduino Nano Every,使用旧Arduino Nano或与Arduino Nano兼容的产品也没有问题。
超声波距离传感器
通过发射超声波并测量直到接收到墙壁反射回来的超声波的时间来测量与对象物之间的距离。
字符液晶显示器
可以显示字符和符号的显示器。这次使用的是“AQM1602Y-FLW-FBW”,最多可以显示2行16个字符。此外,该显示器有背光,因此即使在较暗环境下也可以查看所显示的字符。
圆形机器人底盘套件
该套件中包括电机、车轮和壳体。电机采用驱动力量较大的减速电机(齿轮电机)。按照说明书组装,可以很容易地制作出小鸡赛车壳体。将电子电路和传感器等安装到这个壳体里面,即可完成制作。当然,您也可以只购买电机,自己来制作壳体。
电机驱动器
使用输出为1.0A的电机适用的可逆电机驱动器来驱动电机。这次我使用的产品规格如下:
【绝对最大额定值(Ta=25℃)】
电源电压(VCC):18V
电源电压(VM):18V
输出电流(lomax):1A
工作温度范围:-20〜75℃
保存温度范围:-55〜150℃
【推荐工作范围】
电源电压(VCC):6.5〜15V
电源电压(VM):6.5〜15V
输出H电压设置:<VCC,VM
编号 | 引脚名 | 功能 |
1 | VREF | 输出H电压设置引脚 |
2 | OUT2 | 输出引脚 |
3 | RNF | 输出单元GND |
4 | OUT1 | 输出引脚 |
5 | VM | 电源(电机输出单元) |
6 | VCC | 电源(小信号单元) |
7 | FIN | 控制输入(正) |
8 | GND | GND |
9 | RIN | 控制输入(反) |
为了使赛车的左右两个车轮转动,我使用了2个电机。
红色LED
绿色LED
使用LED来通知倒计时和结果信息。我准备了3个红色和1个绿色的LED。
按钮开关
供玩家用来控制小鸡赛车。为了便于操作,最好选择能够连接到面板的形状。
微动开关
用来检测是否与墙壁发生了碰撞。在赛车前方安装左右两个微动开关。
除了上述部件之外,我还使用了以下电子元器件:
另外,需要使用如下排母将每个电子元器件用导线连接起来。如果直接将布线焊接起来则不需要这些器件。
当然,如果能实现同样的功能,选择其他电子元器件也没有问题。在这种情况下,需要注意它们的连接方法和控制方向。
为Arduino供电
首先需要确保为Arduino提供的电源。由于这是一个能够移动的作品,所以需要在作品自身上安装电池等作为电源。Arduino Nano可以通过连接USB数据线供电。因此,还可以通过安装移动电源等来实现供电。然而,目前市场上的移动电源很多是面向智能手机的,往往又大又重。此外,Arduino消耗的电量很小,不需要像移动电源那么大的容量。
因此,这次我用的是电池。Arduino中配有称为“VIN”的引脚,当它与最大21V的电源相连接时,就会将电压转换为5V并为Arduino供电。因此,我使用了可输出9V电压的006P电池来供电。
将电池扣的正极(红线)连接到“VIN”引脚,将负极(黑线)连接到“GND”引脚即可实现供电。
确认电子部件的工作情况
准备好电子部件后,需要确认每个电子部件是否可以正常工作。这是为了一旦出现无法工作的情况,便于采取诸如更换成其他电子部件等的措施。
在确认时,最好使用面包板进行连接。另外,如果能事先确认作品应该可以在实装后正常工作,那么您在编写程序时会更安心。
首先,我们来确认LED和开关是否能够正常工作。另外,我们要确认一下按下开关后是否开始计数。
将LED连接到Arduino的数字输出引脚可以打开和关闭LED。此外,我们还需要给LED连接一个电阻器,以防止过电流(关于更详细的LED使用方法,请参阅“Arduino基础:通过数字输出来控制LED照明”(https://techclass.rohm.com.cn/knowledge/tech-info/how-tos/arduino/the-basics-of-arduino-control-led-lighting-with-digital-output))。
这次我使用3个红色LED和1个绿色LED。将LED分别连接到Arduino的数字输出引脚8、9、10、11。
玩家操作时使用的按钮开关,连接数字输入引脚即可读取开关状态。此外,通过将另一个引脚连接到GND,按下按钮时数字输入引脚的状态会变为0V。另外,还要通过编程来启用上拉功能,以使其在未按下按钮时处于5V状态,如果要了解更详细的内容,请参考“Arduino基础:读取开关状态”(https://techclass.rohm.com.cn/knowledge/tech-info/arduino/the-basics-of-arduino-reading-switch-states)。这次,我们连接数字输入引脚7。
现在,让我们将LED和开关连接到面包板上来尝试计数吧。电子部件的连接如下图所示。由于开关不能直接连接到面包板上,所以我们用焊接导线的方式连接。
连接好之后,创建以下程序。通过这个程序,当您按下开关时,所有红色LED灯亮起,然后每秒熄灭1个LED灯,最后绿色LED灯亮起。
const int LED_RED1_PIN = 8;
const int LED_RED2_PIN = 9;
const int LED_RED3_PIN = 10;
const int LED_GREEN_PIN = 11;
const int SW_PIN = 7
void setup()
{
pinMode( LED_RED1_PIN, OUTPUT );
pinMode( LED_RED2_PIN, OUTPUT );
pinMode( LED_RED3_PIN, OUTPUT );
pinMode( LED_GREEN_PIN, OUTPUT );
pinMode( SW_PIN, INPUT_PULLUP );
digitalWrite( LED_RED1_PIN, LOW);
digitalWrite( LED_RED2_PIN, LOW);
digitalWrite( LED_RED3_PIN, LOW);
digitalWrite( LED_GREEN_PIN, LOW);
}
void loop()
{
if( digitalRead( SW_PIN ) == LOW ){
while( digitalRead( SW_PIN ) == LOW ){
delay( 10 );
}
digitalWrite( LED_RED1_PIN, HIGH );
digitalWrite( LED_RED2_PIN, HIGH );
digitalWrite( LED_RED3_PIN, HIGH );
digitalWrite( LED_GREEN_PIN, LOW );
delay( 3000 );
digitalWrite( LED_RED1_PIN, LOW );
delay( 1000 );
digitalWrite( LED_RED2_PIN, LOW );
delay( 1000 );
digitalWrite( LED_RED3_PIN, LOW );
digitalWrite( LED_GREEN_PIN, HIGH );
}
将程序传输到Arduino,就可以确认按下按钮时LED是否按预期工作啦。
◆◆◆
这次我简单为大家介绍了“小鸡赛车”以及所需的电子部件。下一次,我将为大家介绍如何确认超声波距离传感器等电子部件的工作情况,以及整个电子电路的创建方法。