精灵宝可梦Go是全世界最受欢迎的手机游戏之一。捕捉精灵宝可梦有很多技巧,但是今天我们将构建一个Arduino精灵宝可梦Go车,使您可以更容易地完成孵蛋。精灵宝可梦Go孵蛋车旨在协助玩家孵化游戏中的蛋,最终通过制造一辆车并携带您的个人手机来完成。我们将对常规的RC车进行修改,并加载一些组件,例如用于蓝牙控制的HC06模块和用于检测物体以在撞上障碍物前转弯的HC-SR04距离传感器。游戏中有三种类型的蛋,车辆具有调整机制来适应不同的孵蛋里程。在本教程中,我们将介绍两种蛋(3km和5km)。
目标
- 1.车辆根据用户指定的距离进行移动。
- 2.车辆具有避障功能
- 3.通过蓝牙进行无线控制。
硬件
- • Arduino Uno
- • RC车
- • L9110S H桥
- • HC-SR04 超声波传感器
- • HC06 蓝牙模块
软件
- • Arduino IDE
- • 蓝牙终端应用程序
- • https://github.com/formus14/PokemonGO
工具
- • 面包板
- • 螺丝刀
- • 烙铁
组件概述
I. H桥
H桥中的H来自上图中四个电机连接所构成的H形。我们使用H桥而不是直接使用Arduino的GPIO主要因为我们想用外部电源来给电机供电,这样就不会影响Arduino的电源供给。
下表显示了H桥如何根据开关状态进行操作。S1和S2是前部电机的端子,而S3和S4是后部电机的端子。
S1 | S2 | S3 | S4 | Result |
1 | 0 | 0 | 1 | 电机右转 |
0 | 1 | 1 | 0 | 电机左转 |
0 | 0 | 0 | 0 | 电机未被使用 |
0 | 1 | 0 | 1 | 电机制动 |
1 | 0 | 1 | 0 | 电机制动 |
1 | 1 | 0 | 0 | 短路 |
0 | 0 | 1 | 1 | 短路 |
1 | 1 | 1 | 1 | 短路 |
表1:H桥开关表
II. 超声波传感器
我们将一个典型的HC-SR04超声波传感器用于实现避障功能。超声波传感器发出一个高频脉冲,然后计算脉冲的反射波返回的时间。该时间对应于传感器与最近的障碍物之间的距离。传感器有两个开口:一个发射超声波,另一个接收超声波。
III. 蓝牙模块
如果您想要找一个低成本的蓝牙模块,那么HC06能够满足您的要求。虽然它的覆盖范围很小(10米),但是可以用于有低功耗要求的项目中。
HC-06模块有两种模式:主模式和从模式。主设备具有存储最后配对的从设备的功能。主设备将搜索最后配对的从设备,直到建立连接。如果按下“唤醒”按钮,则模块内存将会丢失并开始搜索新的设备。
在我们的项目中,我们将遥控器(移动电话)作为主设备,将RC车作为从设备。只要RC车在连接范围内,就会自动与主设备连接。
步骤1:构建一个小车!
对于本项目,我选择购买一辆RC车并进行拆解和改造,以添加前面所提到的其他组件。您也可以使用任何可用的车辆。毕竟,这只是一辆有两台电机(每个电机都有两个端子)的小车。
我在这里想要做的是移除所有不再使用的塑料覆盖物/装饰物。我直接通过拧开RC车两侧的螺钉完成了拆卸。
卸下盖子后,您会看到一些电线和主控制器板。之后不会使用这个主控制器板,因此可以将其卸下。我们需要保留用于与轮胎机械连接的电机电线,其他的电线就可以拆卸了。
您会看到两根电线从两个电机引出。您可以通过将9V电池的正极连接到一根电线,然后将另一根电线接地来对其进行测试。如果您不想执行查找电机电线端子这一步骤,则可以购买两个装有直流3-6v齿轮电机的塑料轮胎轮,就像此处的这样。
步骤2:设置蓝牙模块
我们将使用一个简单的蓝牙终端应用程序来发送数据,并检查模块是否捕获了串行监视器上的数据。
首先,我们必须按照下图所示方式连接模块:
上传该草图,并确保上传草图时断开TX和RX,因为这些引脚负责与PC进行UART通信。
https://github.com/formus14/PokemonGO/tree/master/Milestone%20sketches/BluetoothTest
如果您不熟悉Arduino通信协议,请随时查阅我们的Arduino通信协议教程!
成功上传后,按照接线图重新连接TX和RX,然后下载该应用程序:Bluetooth Terminal HC-05
这个应用程序可以使我们通过蓝牙对RC车进行控制,而且您可以用应用程序终端传送任何类型的指令。该应用程序有5个按钮,您可以通过按下其中的按钮来选择发送特定的指令。
当您打开应用程序时,它将自动搜索可用的设备。根据模块版本,您将会找到名为“HC-05”或“HC-06”的模块。连接到模块,您将看到嵌入式LED在闪烁。
如下图所示,将应用程序连接到模块后,嵌入式LED将停止闪烁,并在整个连接过程中都保持稳定亮起。您可以以此来判断蓝牙是否成功配对!
现在可以尝试编写任何文本,并注意Arduino串行监视器上所发生的情况。
我们写入“test ..”看看会发生什么。
将串行监视器中的波特率设置为9600,您将在屏幕上看到文本信息。
注意:发送文本之前,请以9600波特率打开串行监视器。
如果有任何问题,请重新检查连线和嵌入式LED(如果它们在非稳定状态下发光)。
在应用程序上创建控制按钮
在同一应用程序上,您可以添加发送特定数据的按钮。例如,按钮“Press Here”可以发送字符串“I love Pokemon GO”或者任何您想发送的指令。
我选择创建5个按钮来用于5种不同的功能:2个按钮用于控制方向(左右)。1个按钮用于停止车辆,2个按钮用于控制在找到您的宝可梦之前所需要的孵蛋里程(3km或5km)。
想要选择按钮名称对应发送的数据,请用力按下任意按钮,控制窗口将会被打开。
您可以指定按钮的名称(我选择了“Left”),然后在指令部分指定从应用程序发送的数据或字符。我选择了“l”,可以在之后的Arduino代码中再次确认是否接收到了“l”。
与“Left”按钮相同,您可以指定按钮名称和相应要发送的数据。只要发送的字符与您在Arduino代码中指定的字符相匹配,发送什么字符都可以。但是还是建议您使字符与名称一致(如“r”代表“Right”,“l”代表“Left”等等),以免造成混淆。
按钮3Km将字符“3”发送给Arduino,以激活计时器,一旦接收到该字符,计时器便开始计算车辆所行驶的距离。
按钮5Km将字符“5”发送给Arduino,以激活计时器,一旦接收到该字符,计时器便开始计算车辆所行驶的距离。
字符“s”命令车辆停止。添加此按钮用于紧急情况下停车或一般状况下让车辆停止。
现在,我们已经添加了5个按钮。
您还可以通过写入字符或指令来激活这些功能,就像我们之前通过发送“testing..”来实现的那样。我们通过写入“b”添加了汽车向后移动的功能。您可以通过组合传感器的多种函数来创建自己的功能(如自动泊车)。
步骤3:将H桥与电机端子连接
您需要将H桥连接到2个电机和Arduino上,如下所示:
草图 :
https://github.com/formus14/PokemonGO/tree/master/Milestone%20sketches/Hbridge
步骤4:确定汽车速度/行驶距离
确定行驶距离的最简单方法是速度x行驶时间。
在假设车的速度恒定的前提下,我使用了外部测量的方式来确定车辆的平均速度。还有其他可以用于确定距离的方法:可以使用GPS模块,通过旋转编码器测量车轮的RPM或者使用霍尔效应传感器。这些方法都会消耗主电池的能量,而这是我希望尽量避免的。您只需要将起点和终点突出地显示出来,然后测量出车辆经过该范围所花费的时间,就可以简单地计算出速度。
我标记了汽车所行使区域的多个固定距离,然后检测出所花费的时间,从而计算出汽车的平均速度。
在我的项目中,车辆在2秒内行驶了1.1米,速度=(1.1) / (2)= 0.55 米/秒。
我又进行了几次试验来测量速度。每次试验的速度几乎都相同。使用这些数据,我们可以计算出车辆达到所需里程花费的时间:
1.1 米 — 2 秒 ( 2/60 分钟)
5 米 — 9 秒 ( 9/60 分钟)
3,000 米 ( 3 Km) — 1.5 小时
5,000 米 ( 5 Km) — 2.5 小时
- • 行驶3 Km所需时间 = ( 3000 X (9/60 ) ) / 5 = 90 分钟 = 1.5 小时
- • 行驶5 Km所需时间 = ( 5000 X (9/60 ) ) / 5 = 150 分钟 = 2.5 小时
- • 行驶10 Km所需时间 = ( 10000 X (9/60 ) ) / 5 = 300 分钟 = 5 小时
这些结果与三个重要因素相关:电机功率,电池功率以及增加了部件之后车辆的总重量。
步骤5:将手机放在车辆上并上传最终草图
我已经用塑料手机壳和橡皮筋将手机固定在了车辆上,如图13所示。您可以使用3D打印制造手机壳,或者直接使用任何可以达到相同目的的手机壳。
对于该项目,我们不需要使用任何库。所有的需要的函数都在主草图中。
不要忘记更改定义的车速,使其与以下所示的已定义部分中的车速匹配:
技巧和窍门
- • 每当您上传草图时,都要从Arduino断开RX线,否则会出现编译错误。这是因为引脚0和1负责UART通信,开发板将会接收来自PC端的代码。
- • 一定要选择可充电电池。我使用过Nikko可充电电池组。这种电池在RC车领域非常受欢迎。
- • 选择H桥模块而非H桥PIC,PIC很容易发热,H桥模块板上嵌有散热器,可以防止这种情况产生。
在这里,我们构建了低成本、低功耗、功能强大的精灵宝可梦Go车。完成组装很容易,但是仍有很多可以提升的地方。我们可以添加更多的传感器来实现高级功能,也可以通过升级电机和电池来加快行驶速度。我们还可以使用覆盖范围更大的蓝牙模块来实现更长距离的控制。请继续关注这个有趣项目的进展!如果您有任何改进建议,请随时与我们分享!