如何利用Raspberry Pi建造半自动4WD汽车

本文是关于如何构建我的 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('', key_input)
command.mainloop()

USB连接器接口的行业发展分析
空调市场趋于增长,可为何会库存严重?问题竟在这里!
为什么HALT测试和HASS测试在PDLC中很重要
小米6原型机曝光:骁龙835或联发科Helio X30处理器?
详解5G新体制天线技术
如何利用Raspberry Pi建造半自动4WD汽车
充电宝哪个牌子好耐用质量好,值得入手的充电宝推荐
5G加速助推自动驾驶更加的成熟
如何正确挑选水银接头
索尼XperiaXZ和iPhone7Plus哪个好
三星在微软商城推出新应用,或是可在PC上拨打电话
友达光电10月合并营收396亿元
ADI推出低成本八通道超声接收器(AFE)AD9675
Backblaze推出云存储迁移服务
Allegro推出微功率霍尔效应开关 延迟电池使用寿命
森田化学将在中国工厂启动高纯度氟化氢生产 以向韩国厂商进行供货
关于土壤墒情远程监测系统的安装指导
三种国产大屏幕彩电I2C总线维修调整技术
UVM中的utility宏
红外LED灯珠常见用途有哪些