电源设计技术信息网站

订阅电子杂志   English   繁體中文   日本語   한국어

下载中心

TECH INFOArduino入门指南

如何使用Arduino制造出一个精灵宝可梦Go孵蛋车?

这篇文章来源于DevicePlus.com英语网站的翻译稿。

 

pokemon go egg hatching

 

精灵宝可梦Go是全世界最受欢迎的手机游戏之一。捕捉精灵宝可梦有很多技巧,但是今天我们将构建一个Arduino精灵宝可梦Go车,使您可以更容易地完成孵蛋。精灵宝可梦Go孵蛋车旨在协助玩家孵化游戏中的蛋,最终通过制造一辆车并携带您的个人手机来完成。我们将对常规的RC车进行修改,并加载一些组件,例如用于蓝牙控制的HC06模块和用于检测物体以在撞上障碍物前转弯的HC-SR04距离传感器。游戏中有三种类型的蛋,车辆具有调整机制来适应不同的孵蛋里程。在本教程中,我们将介绍两种蛋(3km和5km)。

 

目标

  1. 1.车辆根据用户指定的距离进行移动。
  2. 2.车辆具有避障功能
  3. 3.通过蓝牙进行无线控制。

 

硬件

  • Arduino Uno
  • RC车
  • L9110S H桥
  • HC-SR04 超声波传感器
  • HC06 蓝牙模块

 

软件

  • Arduino IDE
  • 蓝牙终端应用程序
  • https://github.com/formus14/PokemonGO

 

工具

  • 面包板
  • 螺丝刀
  • 烙铁

 

组件概述
I. H桥

 

pokemon go egg hatching

图1:L9110S H桥步进电机双直流驱动控制器

 

pokemon go egg hatching

图2: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. 超声波传感器

pokemon go egg hatching

图3:HC-SR04 超声波传感器

我们将一个典型的HC-SR04超声波传感器用于实现避障功能。超声波传感器发出一个高频脉冲,然后计算脉冲的反射波返回的时间。该时间对应于传感器与最近的障碍物之间的距离。传感器有两个开口:一个发射超声波,另一个接收超声波。

III. 蓝牙模块

pokemon go egg hatching

图4:HC06蓝牙模块

如果您想要找一个低成本的蓝牙模块,那么HC06能够满足您的要求。虽然它的覆盖范围很小(10米),但是可以用于有低功耗要求的项目中。

HC-06模块有两种模式:主模式和从模式。主设备具有存储最后配对的从设备的功能。主设备将搜索最后配对的从设备,直到建立连接。如果按下“唤醒”按钮,则模块内存将会丢失并开始搜索新的设备。

在我们的项目中,我们将遥控器(移动电话)作为主设备,将RC车作为从设备。只要RC车在连接范围内,就会自动与主设备连接。

 

步骤1:构建一个小车!

对于本项目,我选择购买一辆RC车并进行拆解和改造,以添加前面所提到的其他组件。您也可以使用任何可用的车辆。毕竟,这只是一辆有两台电机(每个电机都有两个端子)的小车。

 

pokemon go egg hatching

图5:改造前的RC车

 

pokemon go egg hatching

图6:RC车(底视图)

我在这里想要做的是移除所有不再使用的塑料覆盖物/装饰物。我直接通过拧开RC车两侧的螺钉完成了拆卸。

pokemon go egg hatching

图7:无盖RC车及其主控制器板

卸下盖子后,您会看到一些电线和主控制器板。之后不会使用这个主控制器板,因此可以将其卸下。我们需要保留用于与轮胎机械连接的电机电线,其他的电线就可以拆卸了。

pokemon go egg hatching

图8:RC车基底

您会看到两根电线从两个电机引出。您可以通过将9V电池的正极连接到一根电线,然后将另一根电线接地来对其进行测试。如果您不想执行查找电机电线端子这一步骤,则可以购买两个装有直流3-6v齿轮电机的塑料轮胎轮,就像此处的这样。

步骤2:设置蓝牙模块

我们将使用一个简单的蓝牙终端应用程序来发送数据,并检查模块是否捕获了串行监视器上的数据。

首先,我们必须按照下图所示方式连接模块:

 

 

pokemon go egg hatching

图9: HC06蓝牙模块与Arduino UNO的连接/© c-sharpcorner

上传该草图,并确保上传草图时断开TX和RX,因为这些引脚负责与PC进行UART通信。

https://github.com/formus14/PokemonGO/tree/master/Milestone%20sketches/BluetoothTest

如果您不熟悉Arduino通信协议,请随时查阅我们的Arduino通信协议教程!

成功上传后,按照接线图重新连接TX和RX,然后下载该应用程序:Bluetooth Terminal HC-05

pokemon go egg hatching

这个应用程序可以使我们通过蓝牙对RC车进行控制,而且您可以用应用程序终端传送任何类型的指令。该应用程序有5个按钮,您可以通过按下其中的按钮来选择发送特定的指令。

当您打开应用程序时,它将自动搜索可用的设备。根据模块版本,您将会找到名为“HC-05”或“HC-06”的模块。连接到模块,您将看到嵌入式LED在闪烁。

pokemon go egg hatching

如下图所示,将应用程序连接到模块后,嵌入式LED将停止闪烁,并在整个连接过程中都保持稳定亮起。您可以以此来判断蓝牙是否成功配对!

pokemon go egg hatching

现在可以尝试编写任何文本,并注意Arduino串行监视器上所发生的情况。

pokemon go egg hatching

我们写入“test ..”看看会发生什么。

pokemon go egg hatching

将串行监视器中的波特率设置为9600,您将在屏幕上看到文本信息。

注意:发送文本之前,请以9600波特率打开串行监视器。

如果有任何问题,请重新检查连线和嵌入式LED(如果它们在非稳定状态下发光)。

 

pokemon go egg hatching

在应用程序上创建控制按钮

在同一应用程序上,您可以添加发送特定数据的按钮。例如,按钮“Press Here”可以发送字符串“I love Pokemon GO”或者任何您想发送的指令。

我选择创建5个按钮来用于5种不同的功能:2个按钮用于控制方向(左右)。1个按钮用于停止车辆,2个按钮用于控制在找到您的宝可梦之前所需要的孵蛋里程(3km或5km)。

pokemon go egg hatching

想要选择按钮名称对应发送的数据,请用力按下任意按钮,控制窗口将会被打开。

pokemon go egg hatching

您可以指定按钮的名称(我选择了“Left”),然后在指令部分指定从应用程序发送的数据或字符。我选择了“l”,可以在之后的Arduino代码中再次确认是否接收到了“l”。

pokemon go egg hatching

与“Left”按钮相同,您可以指定按钮名称和相应要发送的数据。只要发送的字符与您在Arduino代码中指定的字符相匹配,发送什么字符都可以。但是还是建议您使字符与名称一致(如“r”代表“Right”,“l”代表“Left”等等),以免造成混淆。

pokemon go egg hatching

按钮3Km将字符“3”发送给Arduino,以激活计时器,一旦接收到该字符,计时器便开始计算车辆所行驶的距离。

pokemon go egg hatching

按钮5Km将字符“5”发送给Arduino,以激活计时器,一旦接收到该字符,计时器便开始计算车辆所行驶的距离。

pokemon go egg hatching

字符“s”命令车辆停止。添加此按钮用于紧急情况下停车或一般状况下让车辆停止。

pokemon go egg hatching

 

现在,我们已经添加了5个按钮。

您还可以通过写入字符或指令来激活这些功能,就像我们之前通过发送“testing..”来实现的那样。我们通过写入“b”添加了汽车向后移动的功能。您可以通过组合传感器的多种函数来创建自己的功能(如自动泊车)。

 

 

步骤3:将H桥与电机端子连接

您需要将H桥连接到2个电机和Arduino上,如下所示:

 

pokemon go egg hatching

图10:H桥连接

草图 :

https://github.com/formus14/PokemonGO/tree/master/Milestone%20sketches/Hbridge

 

步骤4:确定汽车速度/行驶距离

确定行驶距离的最简单方法是速度x行驶时间。

pokemon go egg hatching

图11:速度,距离和时间之间的关系

 

在假设车的速度恒定的前提下,我使用了外部测量的方式来确定车辆的平均速度。还有其他可以用于确定距离的方法:可以使用GPS模块,通过旋转编码器测量车轮的RPM或者使用霍尔效应传感器。这些方法都会消耗主电池的能量,而这是我希望尽量避免的。您只需要将起点和终点突出地显示出来,然后测量出车辆经过该范围所花费的时间,就可以简单地计算出速度。

 

pokemon go egg hatching

图12:测量车辆所要行驶区域的固定距离

 

我标记了汽车所行使区域的多个固定距离,然后检测出所花费的时间,从而计算出汽车的平均速度。

在我的项目中,车辆在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打印制造手机壳,或者直接使用任何可以达到相同目的的手机壳。

对于该项目,我们不需要使用任何库。所有的需要的函数都在主草图中。

不要忘记更改定义的车速,使其与以下所示的已定义部分中的车速匹配:

 

pokemon go egg hatching

 

pokemon go egg hatching

图13:最终的精灵宝可梦Go车(侧视图)

 

pokemon go egg hatching

图14:最终的精灵宝可梦Go车(顶视图)

 

技巧和窍门

  • • 每当您上传草图时,都要从Arduino断开RX线,否则会出现编译错误。这是因为引脚0和1负责UART通信,开发板将会接收来自PC端的代码。
  • • 一定要选择可充电电池。我使用过Nikko可充电电池组。这种电池在RC车领域非常受欢迎。
  • • 选择H桥模块而非H桥PIC,PIC很容易发热,H桥模块板上嵌有散热器,可以防止这种情况产生。

 

在这里,我们构建了低成本、低功耗、功能强大的精灵宝可梦Go车。完成组装很容易,但是仍有很多可以提升的地方。我们可以添加更多的传感器来实现高级功能,也可以通过升级电机和电池来加快行驶速度。我们还可以使用覆盖范围更大的蓝牙模块来实现更长距离的控制。请继续关注这个有趣项目的进展!如果您有任何改进建议,请随时与我们分享!

 

Rabindranath Andujar
Rabindranath Andujar

Rab拥有计算物理学博士学位,是计算、自动化和复杂系统领域的专业科研人员。Rab还拥有电子、机器人和数字制造方面的经验。

分享到社交媒体