本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于树莓派的机器人—流浪者

发布时间:2021-11-10
分享到:

基于树莓派的机器人—流浪者

发布时间:2021-11-10
分享到:

介绍
从我记事起,关于机器人的某些东西就已经俘获了我的想象力。每当我开始新的创客冒险时,它们就是我的舒适区;一旦我通过“闪烁 LED”项目,在学习新平台或技术时,基本机器人始终是我的首选项目。因此,当我决定尝试 Windows IoT Core 时,这个项目自然是我的起点。Rover 是一个简单的机器人,所以它是一个很好的起点,但它也可以无限扩展。

这是一个初学者项目,不需要高级软件或硬件技能。排除先决条件,如果您有任何 Arduino 或类似的微控制器经验,这个项目可以在 1.5 到 2 小时内完成。如果这是您的第一个电子项目,我建议您在开始之前花几个小时观看一些介绍性的 Arduino 和 Raspberry Pi 视频。

我还有一些改进要做:

  • 用于前灯的光敏电阻器和 LED。
  • 模拟数字 GPIO 引脚上的 PWM 信号以调整 Rover 速度的代码。
  • 3D 打印一个身体来隐藏所有的电子设备(也可能打印一个底盘)。

如果您尝试任何这些增强功能或您想出的任何其他增强功能,请发表评论并让我知道它是如何进行的。

先决条件
在 Raspberry Pi 2 上运行 Windows 10 IoT Core。

在您的 PC 上运行 Windows 10 和 Visual Studio 2015。

将一个简单的 Windows 应用程序部署到 Raspberry Pi,以确保一切正常。

你需要什么
部分:

  • 树莓派2及标准配件:5v 2A电源、8GB class 10 micro SD卡、机箱、网线
  • 跳线– 公/公和公/母
  • 迷你面包板
  • 机器人汽车底盘套件,包括底座、电机和车轮
  • L298N电机控制器
  • HC-SR04超声波距离传感器
  • 1k 和 2.2k 欧姆电阻
  • LM2577 DC-DC 可调升压电源转换器模块
  • 3 x 1.5v AA 电池座
  • 可选:4 x 1.5v AA 电池座,带开/关开关和盖子
  • 可选:双面胶带或魔术贴或橡皮筋

工具:

  • 万用表
  • 十字头螺丝刀
  • 小尖嘴钳
  • 可选:剥线钳
  • 可选:烙铁
  • 可选:电工胶带

第 1 步:组装机器人底盘
时间:30分钟

工具:#1 十字头螺丝刀;烙铁或电工胶带;可选剥线器

零件:机器人底盘套件;可选 4 x AA 电池座,带开/关开关

市场上有多种机器人套件可用于该项目。您只需要一个带有两个从动轮和第三个用于平衡的套件。按照机器人底盘套件随附的说明组装底板、电机和轮子。

如果您有烙铁,请继续将随附的电线焊接到电机上。如果您没有烙铁,您只需弯曲暴露的电线末端并将它们钩在电机端子上,然后将电工胶带缠绕在电机上的两个电线/端子连接上以固定它们。

我没有使用机器人套件随附的 4 x AA 电池座,而是使用了另一个带有盖子和开/关开关的电池座。这是一个可选的替换,因为它根本不会改变机器人的性能或功能。我只是喜欢使用内置在电池座中的开关轻松关闭电机电源的便利性。由于我将 Raspberry Pi 直接安装在电池座的顶部,因此卸下电池以切断电机的电源要困难一些。

电池盒可以通过多种方式安装到底座上。如果机器人底座上的孔与电池盒上的孔对齐,并且您有合适尺寸的螺钉,则可以将外壳拧到底座上。否则,请使用魔术贴、双面胶带或橡皮筋。我用橡皮筋,它们工作得很好。我将外壳安装在底座的中间,以保持重心靠近底座的中点。

第 2 步:为 L298N 电机驱动器接线
时间:20分钟

工具:#1 十字头螺丝刀;小尖嘴钳

配件:L298N电机驱动器;跳线

L298N 电机驱动器允许您使用少量 GPIO 引脚向前和向后旋转电机。首先,将您在上一步中固定到每台电机的两根电线连接到一对电机端子 - 从一个电机到“电机 A”的红黑线和从另一个电机到“电机 B”的红黑线. 极性并不重要,如果您在部署代码时电机最终以错误的方式旋转,您可以随时切换电线的顺序。接下来,将 4 x AA 电池座的电线连接到电源端子 - 红色连接 +12v 输入,黑色连接接地;4 节 AA 电池是电机的电源。还要确保从 L298N 上的接地端子连接到 Raspberry Pi 上的 GND GPIO 引脚(引脚 6)。

L298N 旨在支持电机和微控制器/计算机的单一电源。来自电源的全电压被路由到电机。同时,来自电源的电压被转换并调节为 5v 供微控制器/计算机使用,并通过电源块上的 +5v 端子供电。然而,通过过去的电机项目,我发现 L298N 的 5v 电源的功率变化太大——即,当电机停转时,5v 输出中的电压降很大(大到足以重置 Raspberry Pi)。此外,即使电机没有运行,我也仅测量到 5v 电源的 4.35v 输出。而实际上,这足以为 Raspberry Pi 供电(即使 Raspberry Pi 的规范声明它低于所需的最低电压),我不想冒险——在 Raspberry Pi 中追逐不一致的行为并不有趣,尤其是当它可能是由于非常小的电压变化时。因此,对于这个项目,我决定使用两种电源——一种用于电机,一种用于 Raspberry Pi。在此步骤的早些时候,我们将 4 节 AA 电池连接到 +12v 端子为电机供电。在下一步中,我们将连接 3 节 AA 电池为 Raspberry Pi 供电。

但是,当我们设置 L298N 时,我们将继续将 Raspberry Pi 的电源连接到 L298N。首先,从 L298N 上取下物理跳线(照片中标记为“5v enable”)。这将电机控制器逻辑设置为由 Raspberry Pi 通过电源块上的 +5v 端子供电,而不是从连接到 +12v 端子的电源供电。

重要提示:确保移除 L298N 上的物理 5v 启用跳线。如果不这样做,那么 L298N 将通过 +5v 端子输出可变的 4-5v,这可能会导致 Raspberry Pi 出现性能问题。

不幸的是,Raspberry Pi 只有两个 5v 引脚,我需要三个用于这个项目。所以,我决定在我的面包板上创建一个电源轨——使用面包板上的互连行来分配来自 Raspberry Pi 的电源。要创建电源轨,请将母/公跳线从 Raspberry Pi 的引脚 2(5v 引脚)连接到面包板上任何未使用的行(我通常使用第一行或最后一行)。现在,可以通过插入面包板上的同一行,将来自 Raspberry Pi 的 5v 电压分配到整个项目中。使用公/公跳线将 L298N 上的 +5v 端子连接到电源轨。

所需的最后连接是将 Raspberry Pi 的 4 个 GPIO 引脚连接到 L298N 上的 4 个电机输入引脚。IN1 和 IN2 控制电机 A 的方向,IN3 和 IN4 控制电机 B 的方向。将 L298N 上的跳线连接到两组电机使能引脚 - ENA 和 ENB - 保持原位。我的连接如下:

                IN1 -> GPIO 27 / 物理 13

                IN2 -> GPIO 22 / 物理 15

                IN3 -> GPIO 5 / 物理 29

                IN4 -> GPIO 6 / 物理 31

现在,您的连接应该与此图匹配:

第 3 步:为 DC-DC 升压电源转换器接线
时间:20分钟

工具:万用表;烙铁或电工胶带;可选剥线器

零件:DC-DC升压电源转换器;3 x AA 电池座;跳线

如第 2 步所述,我决定为 Raspberry Pi 和电机使用单独的电源。不幸的是,Raspberry Pi 不支持广泛的输入电源——3 节 AA 电池不够用,4 节太多——所以你需要在电池组和 Raspberry Pi 之间使用一些东西来输出稳定的 5v。为了尽可能减轻负载,我选择使用 3 节 AA 电池而不是 4 节。 DC-DC 升压转换器可以从 3 节 AA 电池中获取 4.5v 输入,并且可以为 Raspberry Pi 输出 5v .

将 3 x AA 电池座的红线和黑线分别焊接到直流转换器上的 In+ 和 In- 焊盘,或者,对于那些没有烙铁的,将电线的末端钩到焊盘上——标有“电源”从照片中的电池输入 - 并将电工胶带缠绕在它们周围几次。将三块电池放入支架中,然后使用万用表测量从直流转换器输出的直流电压。使用转换器的内置电位计“拨入”5v 输出。

重要提示:确保在将 DC 转换器连接到 Raspberry Pi 之前将其输出设置为 5v。开箱即用,转换器的功率输出通常要高得多 - 高到足以损坏 Raspberry Pi。

最后,将 DC 转换器的输出连接到 Raspberry Pi。使用剥线钳,我将两个公/母跳线的公端剪掉,剥掉一点绝缘层,给裸露的电线镀锡,然后将它们焊接到 Out+(红色跳线)和 Out-(黑色跳线)。或者,扭转暴露的线股,将它们钩在直流转换器的焊盘上,然后用胶带粘住。将跳线的母端连接到 Raspberry Pi 上的 5v 引脚(红线到引脚 4)和 GND 引脚(黑线到引脚 14)。

第 4 步:连接超声波距离传感器
时间:20分钟

工具:不适用

配件:HC-SR04超声波距离传感器;迷你面包板;1k 和 2.2k 欧姆电阻;跳线

HC-SR04 有 4 个引脚 – VCC、Trig、Echo 和 GND。我将传感器安装在一个迷你面包板上,以将其固定在机器人上并简化所有必要的连接。传感器上的 VCC 应连接到 5v,因此使用公/公跳线将距离传感器的 VCC 连接到第 2 步中创建的面包板上的电源轨。 

现在传感器已通电,让我们完成与其他三个引脚的连接。将母/公跳线从 Raspberry Pi 上的 GPIO 引脚连接到传感器的 Trig 引脚 - 在我的项目中,我使用 Raspberry Pi 的 GPIO 23/物理引脚 16。对 Echo 引脚执行相同操作,但首先放置 1K 欧姆传感器的回声引脚和 Raspberry Pi 的 GPIO 引脚之间的电阻器——在我的项目中,我将 Raspberry Pi 的 GPIO 24/物理引脚 18 连接到电阻器,然后将电阻器连接到传感器的回声引脚。将第二个电阻器(2.2k 欧姆)连接到 GPIO 24 的跳线和传感器的 GND 引脚。在传感器的 GND 引脚和 Raspberry Pi 中的接地引脚(即引脚 20)之间运行另一个跳线。(传感器将通过回波引脚提供 5v 电压,但 RPi 仅喜欢 GPIO 引脚上的 3.3v,因此我们需要对电压进行分压。 )

第 5 步:将组件安装到机器人底盘上
时间:20分钟

工具:不适用

零件:可选的橡皮筋或双面胶带或魔术贴

有多种布局可供选择,当然,这取决于您选择的机器人套件。对于我的,我将 4 芯电池组放在机箱中间,将 Raspberry Pi 放在电池组顶部的外壳中,将 L298N 放在 Raspberry Pi 顶部——所有这些都用橡皮筋固定。DC-DC 升压转换器放置在 4 芯电池组旁边的底盘上,并由固定电池组、Raspberry Pi 和电机控制器的橡皮筋固定到位。3 芯电池组位于该电池组后面。

第 6 步:下载并部署代码
时间:20分钟

工具:Visual Studio 2015 社区版

零件:完成的漫游者 

从下方链接下载源代码并将项目加载到 Visual Studio。程序的主要部分很简单——只有两个while循环。只要 GPIO 引脚正确初始化,第一个 while 循环就会无限期地驱动机器人前进。嵌套在其中的是第二个 while 循环,只要有障碍物挡在它的路上,它就会简单地转动机器人来改变它的路线。 

由于我们将跳线留在 L298N 上的电机启用引脚中,因此电机始终处于启用状态。您可以使用输入引脚(每个电机 2 个引脚)向前驱动、停止它们和反向驱动它们。如果您将两个引脚都设置为低电平,则电机停止。如果您将一个引脚设置为高电平,将一个引脚设置为低电平,则电机旋转;反转两个输入引脚上的高/低设置,以相反方向旋转电机。

提示:如果电机旋转方向错误,请交换代码中的引脚设置或交换端子块中来自电机的物理电线。

这个最初的项目只需要前进、右转和停止。但是,在代码中,您还将看到反向和左转的子程序。该功能暂时被注释掉了;我把它留在了,因为当我扩展我的项目时很快就会需要它。 

ObstacleDetected 子程序简单地比较机器人与检测到的物体的距离,并确定机器人是否足够接近以保证改变路线。距离传感器的规格表明它可以测量长达几百厘米的距离。仅仅因为房间另一侧的墙壁距离 300 厘米并不意味着它目前是障碍物,机器人需要进行路线修正。因此,我随意选择了 30 厘米的距离——机器人前方小于 30 厘米的任何物体都被视为障碍物,因此需要通过路线修正来避免。 

DistanceReading 子程序控制距离传感器读取读数。获取距离读数的过程如下:

确保触发器已关闭并给它一些时间来稳定下来。

打开触发器 10 微秒

等到回声打开

一旦回声打开,然后启动秒表

等到回声关闭

一旦回声关闭,然后停止秒表

根据记录的时间计算到物体的距离 

一切正常运行后,您可以将程序设置为在启动时运行,这样您就无需手动启动程序

本方案用到的一些代码

如果您对此项目有任何想法、意见或问题,请在下方留言。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论