该项目旨在介绍用Arduino让传感器工作的一个电子作品。此次的分享嘉宾是福田和宏先生!他过去曾在DevicePlus上连载过“Arduino基础”等作品。
在第2篇中,我们了解了小鸡赛车中使用的电子部件的工作情况以及整个电子电路的制作过程。本文是第3篇,也是本项目的最后一篇,在这里我们将制作壳体和程序,彻底完成小鸡赛车。
制作壳体
我决定使用第1篇中提到的“圆形机器人底盘套件”来制作壳体。利用圆形机器人底盘套件中的两枚金属板做成两层,再安装上电机和车轮,即可轻松完成能行驶的车身了。
但是,对于这次需要安装两块电路板、两节电池、还有超声波距离传感器和微动开关的情况而言,实在是显得太拥挤了。另外,仅凭圆形机器人底盘套件附带的前轮用球头难以直行,而且一旦有点台阶,行进方向还可能会发生偏移。
因此,我决定使用3D打印机自己制作所需部件,以完成壳体制作。我使用的是3D打印机,这种打印机也可以加工板子类的部件,大家也可以试试。
安装电机和车轮
在最底下的一层,除了左右两个电机外,还需要安装第2篇中制作的用来控制电机的电路板。另外,我在赛车的前部安装了自己用3D打印机制作的支架,使之起到加长的作用,以便安装迷你四驱车轮作为前轮。此外,还在与前方墙壁碰撞的部分安装了左右两个微动开关。
安装超声波传感器和电池
在电机上方一层安装电池。这次,我分别准备了Arduino和电机工作用的电池。两者都是可提供9V电压的006P电池。小鸡赛车会受到诸如与墙壁碰撞等的冲击。因此,如果不将电池安装牢固,就可能会脱落。另外,由于电机的用电量较大,所以很容易耗尽电池电量。为了便于在没电时更换电池,我用3D打印机做了一个电池盒,这样就能从背面很方便地更换电池了。
除此之外,还在前方安装了超声波传感器,以测量到墙壁之间的距离。这次使用的超声波传感器“HC-SR04”无法测量小于2cm的距离。出于这个原因,超声波传感器应安装在至少离小鸡赛车头部(微动开关被按下的位置)之后2cm的位置。
安装主板
将主板安装到赛车顶部。我用3D打印机制作了电池盒的顶盖,这样,就可以将主板安装在它上面了。
组装好车身后,安装车轮,然后将每个电子部件的导线连接到主板上,就完成了。
另外,由于控制开关是用导线连接的,因此需要准备几米左右的导线并将其接到开关上。
用保险杠吸收冲击
如果玩家未能在最后一刻将赛车停下来,那么小鸡赛车就会撞到墙上。而撞到墙上后,车身就会受到冲击。特别是如果有像这次这样的由3D打印机打印的部件时,它们可能会因撞击而开裂。而且,超声波距离传感器也可能会错位,从而无法准确地测量距离。
基于这些可能出现的问题,我给小鸡赛车安装了“保险杠”,以缓冲赛车与墙壁碰撞时的冲击力,防止车身断裂。保险杠上带有弹簧,可以吸收撞击墙壁时的冲击力,从而避免其影响车身。
这次我使用了通过3D打印机制作的保险杠。另外,在保险杠上面还装上了两个微动开关,用来检测与墙壁的碰撞。安装位置要确保墙壁碰到保险杠时开关被按下。
当然,如果您打算以低速行驶赛车,即使有碰撞也不会产生多大的冲击力,那么就不需要安装保险杠。
创建程序
壳体做好后,我们还需要完成编程工作。程序的主要结构如下:
要想实现各个功能,就需把第1篇和第2篇中介绍过的让每个零部件工作的方法通过编程结合起来。例如,赛车行驶起来之后,判断控制开关被按下了还是保险杠被撞了的程序如下:
lcddisp.clear(); lcddisp.move( 0x00, 0x00 ); lcddisp.charwrite( " G O ! " ); digitalWrite( MOTOR1_PIN, HIGH ); flag = 0; while( 1 ){ if( digitalRead( BUMPER_PIN ) == LOW ){ flag = 2; break; } if( digitalRead( SW_PIN ) == LOW ){ flag = 1; break; } } digitalWrite( MOTOR1_PIN, LOW );
第1行到第3行,是在液晶显示器上显示“GO!”,让玩家知道即将开始行驶。通过第5行的digitalWrite() 将连接到电机驱动器的引脚设置为“HIGH”,电机旋转,赛车向前行驶。
通过第8行的while(),一直持续行驶,直到控制开关被按下或保险杠的微动开关被按下。在保持行进过程中,会随时确认控制开关和微动开关的状态。
第9行用来判断保险杠的开关是否被按下,即是否撞到了墙壁。通过digitalRead来确认微动开关所连接的引脚的状态,若为Low,则判断微动开关已被按下。通过将flag变量置“2”来记录撞到了墙壁。通过第11行的“break”退出while循环。
第13行用来判断控制开关被按下,即玩家按下停止开关。和微动开关的情况一样,通过确认控制开关所连接的引脚的状态,当变为“Low”时,判断开关已被按下。在flag变量中记录“1”并通过break退出循环。
退出循环后,通过第19行,将电机驱动器所连接的引脚置“Low”,使电机停止运行。
然后,确认flag变量并进行相应的处理。如果为“1”,则判断“成功”,通过超声波距离传感器测量到墙壁的距离,并显示在液晶显示器上。如果为“2”,则在液晶显示器上显示“Fail …”,表示挑战失败。
整个程序可以从以下链接下载:
关于其他处理,请参考下载的程序。您可以通过Arduino IDE打开文件,并将程序传输到Arduino Nano,即可用于小鸡赛车。
还配备了距离校准功能
在测量到墙壁之间的距离时,需要使撞墙状态下的距离为“0cm”。这个可以通过从超声波距离传感器测得的距离中减去超声波传感器和微动开关之间的距离来计算。例如,超声波距离传感器和微动开关之间的距离是3.5cm,测得的距离是5.1cm,那么到墙壁的距离可以计算得出“1.6cm”。
但是,在使用过程中,安装位置可能会发生偏移,超声波距离传感器和微动开关之间的距离可能会发生变化。这样的话,即使撞墙,也不会是0cm,成功时测得的距离甚至可能会显示为负数。
在这种情况下,需要每次在程序中改写计算公式并将其传输到Arduino,这需要花费大量的时间和精力。因此,我决定安装一个可以轻松调整距离校准值的功能。
要进行校正,请确保小鸡赛车处于撞墙状态(微动开关被按下的状态),然后按下位于液晶显示器右下方的距离校准开关。接着,测量到墙壁的距离,通过从实际测量值中减去该值,即可得到正确的距离。
让小鸡赛车跑起来
现在,让我们试试做好的小鸡赛车能不能跑起来。打开电源开关后,液晶显示器将显示“Chicken Racer”。想玩赛车比赛游戏时,请按下有线连接的控制开关。然后,LED将开始倒计时。
当倒计时LED变为绿灯时,小鸡赛车开始向前行驶。在快要撞上墙壁之前,按下控制开关,让小鸡赛车停下来。
如果您可以在不撞墙的情况下停下来,液晶显示器上将会显示出与墙壁之间的距离。如果失败,则会显示“Fail …”,让您知道失败了。如果在游戏结束后按下保险杠上的微动开关,就会被重置,您可以重新开始游戏。
到这里,小鸡赛车就大功告成了。本系列连载文章中介绍的电子部件的操作方法和制作过程,在创作其他作品时也会用得到,欢迎参考并尝试使用Arduino挑战各种电子作品的创作!