本文是关于如何构建我的 Pi Car 的指南!
当我第一次发现 Raspberry Pi 时,我渴望学习电子学和编码,以便创造出很酷的小工具。但是,由于没有事先编码或电子知识,我真的不知道从哪里开始。
所以这作为我的第一个项目,我决定建造一辆 Raspberry Pi Car。同时,在尝试学习 Raspberry Pi、Linux、电子和 Python 的基础知识的过程中!
阅读本文可以帮助你了解在构建自己的 Pi Car 时的一些具体细则。
最终目标:
构建具有以下内容的 Pi Car:
-4WD
- 半自主能力
-Camera Stream(可通过 Internet 访问)
实物:
建造 Pi 车:
1. 构建机箱:
组装底盘套件。这是相当直截了当的,但请参阅下面的构建前和构建后图片以获取帮助。
重要提示:在将电机拧入到位之前(如下图所示),将红线和黑线连接到每个电机。红线需要连接到每个电机的顶部,黑线也需要连接到底部。用绝缘胶带将这些连接牢牢固定。 如果您想要永久连接,您可以焊接这些。最后, 记得取下每张塑料片上的棕色盖子。
在我的 构建中,我 将电池组移向底盘末端以创造更多空间(由下图中的箭头指示)。
2. 将电机连接到 L298N 电机驱动器:
接下来,我们将 4 个电机连接到电机驱动器。
2.1 连接电线:
请参阅下面的图片以识别哪个电机是哪个电机,以及电机驱动器的图片以清楚地识别如何连接 4 个电机中的每一个。下面的列表还说明了如何为每个电机接线。
左上电机: 右上电机:
红色:输出 2 红色:输出 4
黑色:输出 1 黑色:输出 3
左下电机: 右下电机:
红色:输出 1 红色:输出 3
黑色:输出 2 黑色:输出 4
重要提示:对于这个项目,我们将两根电线连接到电机驱动器上可用的每个“OUT”孔中。拧紧每个连接以确保电线不会移动。这可能是一个相当麻烦的过程,但请注意不要损坏电线。对于电缆管理,您可以将电线穿过机箱中内置的许多小孔。
2.2 连接电池组:
要将电池组(已安装在底盘上)连接到电机驱动器,请按如下方式连接电线:
将红线连接到 VCC 孔, 黑线连接到 GND 孔。
现在所有 4 个电机都连接到电机驱动器,我们可以添加 Raspberry Pi 并将其连接到电机驱动器。
3. 将树莓派连接到 L298N 电机驱动器
在添加我们的 Raspberry Pi 之前,我们需要按照以下步骤进行准备:
3.1 准备树莓派:
下载 Raspbian Jessie 操作系统 (OS)
将 Raspbian 格式化并安装到 SD 卡
将无线互联网和无线键盘 USB 适配器插入 Pi 的 USB 插槽
3.2 连接 L298N 电机驱动器:
完成后,我们需要将其放置在 Pi-Car 的前面。(我可以用 Pi 外壳上的一些螺丝固定我的)接下来使用跳线将 Pi 的 GPIO 引脚连接到电机驱动器。
如下所示连接引脚:
GPIO 引脚 2 至 5V(使用母对公跳线)
GPIO 引脚 6 到 GND(使用母对公跳线)
GPIO 引脚 7 到 INI4 (EVA)
GPIO 引脚 11 至 INI3 (5V)
GPIO 引脚 13 至 INI2 (5V)
GPIO 引脚 15 到 INI1 (EVB)
如需识别 Pi 的引脚,请参见下图。
现在 Pi 已定位,我们需要添加超声波传感器。
4.添加HC-SR04超声波测距传感器模块
如下图所示,将传感器模块和电线连接到面包板上。确保包括 1ohm 电阻,因为这将保护您的 Pi。(请参阅下面的其他图片,了解使用哪个电阻)
完成后,将面包板放置在汽车前部的底层。
4.1 将传感器连接到 Pi:
将面包板上的电线连接到 Pi 和电机驱动器,如下所示:
回声电缆(上图中的黄色电缆)到 Pi 上的引脚 16(使用母对公跳线)
触发电缆(上图中的橙色电缆)到 Pi 上的引脚 12 (使用母对公跳线)
接地电缆(上图中的黑色电缆)到 电机驱动器上的 GND(使用母对公跳线)
电源线(上图中的红色电缆)到电机驱动器上的 5V(使用母对公跳线)
到这一步,你现在应该已将所有必要的电缆插入电机驱动器!1 条电缆进入 VCC(来自电池组), 3 条电缆进入 GND(1 条来自电池组、Raspberry Pi 和超声波传感器。)和 2 条进入 5V 的电缆(1 条来自 Pi,1 条来自超声波传感器)
5. 将相机添加到 Pi:
- 相机本身的概述
-如何将相机模块连接到树莓派
-如何在 Pi 本身上启用相机模块
- 使用相机的基本命令(即如何拍照和录像)
在我的构建中,我使用了“ Scorpi / Flexible Mount” 电缆来帮助将相机固定到位。
6. 放置电源组:
将便携式充电器放在机箱背面的底层。我使用松紧带帮助在使用时将充电器临时固定到位。
设置 Pi 车:
现在汽车已经建成,我们现在可以为汽车开发软件。
1. 准备树莓派:
在打开 Pi 之前,请确保以下内容已连接到 Pi :
- 无线键盘 USB 适配器
- 无线互联网 USB 适配器
- 连接显示器/电视的 HDMI 电缆。
- 相机也应该连接。
2. 开启树莓派:
要打开 Pi 电源,请将 micro-USB 电缆从电源连接到 Pi。 Pi 第一次启动需要几分钟时间。完成后,图形用户界面 (GUI) 将自动加载。
3. 配置树莓派:
我们需要做的第一件事是配置 Pi。为此,请单击:
菜单(屏幕左上角)》首选项》Raspberry Pi 配置
将打开以下窗口:
单击“扩展文件系统”以确保我们使用 SD 卡上的所有可用内存。(随时更改您的密码等)
接下来,单击“接口”选项卡并启用相机(确保 SHH 也已启用。)
然后,单击“本地化”选项卡并将语言和国家/地区设置为您的偏好。
单击“确定”并重新启动 Pi。
4. 连接互联网:
Pi重新启动后,单击屏幕右上角的“网络”图标。
从下拉菜单中选择您的路由器并输入其密码。
5. 更新 Raspbian 操作系统:
现在我们已连接到互联网,我们可以将我们的操作系统更新到最新版本。为此,请打开“终端”并分别输入以下代码:
sudo apt-get update
sudo apt-get upgrade
(对于第二个命令,在提示时输入 Y)
两者都可能需要几分钟才能完成,完成后重新启动您的 Pi。
6.安装VLC:
VLC 是我们将用于将 Raspberry Pi 相机流式传输到 Internet 的应用程序。我们需要将它安装在您想要从中查看摄像头流的 Pi 和计算机/智能手机上。
在 Pi 上:
在终端中输入以下代码:
sudo apt-get install vlc
(出现提示时输入 Y)
在客户端计算机/智能手机上:
访问:http ://www.videolan.org/vlc/index.en_GB.html 并下载适合您操作系统的版本。(Windows/Mac/安卓)
7. 创建文件:
现在我们的 Pi 是最新的,我们拥有所有必需的应用程序,可以创建实际驾驶汽车的代码。
首先,我们将创建一个文件夹来存放我们的文件。为此,我们在终端中输入以下命令:
mkdir PiCar
这将创建一个名为“PiCar”的文件夹 - 您可以随意命名。
现在文件夹已经创建,我们需要通过输入以下命令进入它;
cd PiCar
现在我们需要创建实际驾驶汽车的 python 文件:
7.1 main.py - 这将是我们为驾驶汽车而运行的主文件
要创建一个空文件 ,请在终端中键入以下命令:
sudo nano main.py
这将在 Raspberry Pi 的文本编辑器中打开一个新文件。(称为纳米)
现在将附加的main.py文件中的代码复制或键入 到这个空文件中。
7.2 sensor.py - 该文件将初始化超声波传感器。
为 sensor.py 文件再次完成上述过程。请记住首先使用以下命令创建文件;
sudo nano sensor.py
(确保在我们创建的 PiCar 文件夹中创建它)
7.3 camera.sh - 此文件将通过互联网传输我们的相机。
首先使用以下命令创建文件;
sudo nano camera.sh
现在将附加的 camera.sh 文件中的代码复制或键入到这个空文件中。
运行代码:
1.给树莓派上电(用HDMI线连接显示器)
2.启动后,打开终端
3. 将目录更改为 PiCar(键入 cd PiCar)
4.运行汽车文件(输入‘sudo python main.py’)
5. PiCar现在可以通过无线键盘运行和控制(开车前记得拔掉HDMI线!)
以下钥匙将驾驶汽车:
W = 前进
S = 反向
A = 左转
D = 右转
P = 停止
Pi 也将是半自动的,如果有任何东西进入前传感器的 15 厘米范围内,那么 PiCar 将自动倒车一秒钟。
流式传输相机(可选):
在 Pi 上:
1.打开终端
2. 将目录更改为 PiCar(键入 cd PiCar)
3.运行camera.sh(输入。/camera.sh)
在客户端计算机/智能手机上:
启动 VLC
单击“文件”,然后单击“打开网络流”
输入 http://《YourIPAddressHere》 :8554/
单击“打开”,几秒钟后,将打开一个带有流的新窗口。(可能会有几秒钟的延迟)
重要提示:要查找您的 IP 地址,请在终端中输入以下命令:
hostname -I
未来可能的拓展:
让main.py文件在启动时自动运行(所以我不需要将Pi插入显示器超时)
创建一个 python 文件,它将执行与我们的 camera.sh bash 脚本(使用 Picamera)相同的操作,并将其 合并到我们的main.py文件中。
添加额外的超声波传感器
python main文件:
import RPi.GPIO as gpio
import time
import sys
import Tkinter as tk
from sensor import distance
def init():
gpio.setmode(gpio.BOARD)
gpio.setup(7, gpio.OUT)
gpio.setup(11, gpio.OUT)
gpio.setup(13, gpio.OUT)
gpio.setup(15, gpio.OUT)
def reverse(tf):
gpio.output(7, False)
gpio.output(11, True)
gpio.output(13, False)
gpio.output(15, True)
time.sleep(tf)
def forward(tf):
gpio.output(7, True)
gpio.output(11, False)
gpio.output(13, True)
gpio.output(15, False)
time.sleep(tf)
def turn_right(tf):
gpio.output(7, True)
gpio.output(11, False)
gpio.output(13, False)
gpio.output(15, True)
time.sleep(tf)
def turn_left(tf):
gpio.output(7, False)
gpio.output(11, True)
gpio.output(13, True)
gpio.output(15, False)
time.sleep(tf)
def stop(tf):
gpio.output(7, False)
gpio.output(11, False)
gpio.output(13, False)
gpio.output(15, False)
time.sleep(tf)
gpio.cleanup()
def key_input(event):
init()
print "Key:", event.char
key_press = event.char
sleep_time = 0.060
if key_press.lower() == "w":
forward(sleep_time)
elif key_press.lower() == "s":
reverse(sleep_time)
elif key_press.lower() == "a":
turn_left(sleep_time)
elif key_press.lower() == "d":
turn_right(sleep_time)
elif key_press.lower() == "p":
stop(sleep_time)
else:
pass
curDis = distance("cm")
print("Distance:", curDis)
if curDis <15:
init()
reverse(0.5)
command = tk.TK()
command.bind('
command.mainloop()