用树莓派来制作简单的遥控小车

简述

本文主要描述使用树莓派和L298N制作一个简单的遥控小车,遥控器使用简单的WEB来实现。

准备工作

  1. 树莓派,(本文使用的是Raspberry PI 2 B型,即2B)
  2. 8G以上TF卡 树莓派上可用和不可用的SD卡列表
  3. 四驱小车底(含电机,注:本文中的小车底盘佩戴的是高扭矩直流电机)
  4. 母对母、公对母、公对公(可不用)杜邦线
  5. L298N双HD桥电机驱动板
  6. 无线网卡(最好支持AP的)
  7. 充电电池组(7V以上的,镍氢或者18650充电电池皆可)

系统安装没什么说的,系统烧到SD就可以了,我使用的Raspbian,这货是基于Debian的,配置命令习惯几乎和ubuntu/debian一样,接上网线开机进入系统配置。

  • 换上中科大的源,再apt-get update一次;
  • 为root用户设置密码;
  • 配置无线网卡有两中方案,编辑/etc/network/interface,网上教程蛮多的:
    1. 自动连接到路由器,家里有无线路由器,小车在WIFI覆盖的地方;
    2. 树莓派上搭建WIFI热点,信号更好,可以在小区里面开,顺便勾搭妹子,哦哦哦,不对,应该是淘气小孩。唯一需要注意的是网卡芯片。

底盘组装

  • 拼装没啥难度,亚克力板上的牛皮纸沾得简直是丧心病狂,马蛋,废了好一会儿功夫才撕干净(⊙﹏⊙)b;
  • 马达那货就比较坑了,没有带线是裸机的,手中也恰巧没有电烙铁,当时我就懵逼啦。好吧,手中还有多余的公对公杜邦线,拔掉其中一头的接头,打火机烧一下(小时候学会的神技),拔掉一部分把铜线拧紧。最后铜线穿过马达接口的小洞里面,再拧紧。哎丫,没有胶带,最后用透明胶凑合凑合,绑紧。repeat 4次。

线路连接

之前一直没玩过硬件,毕竟我只是一个网工出身的程序猿,第一次拿到L298N研究了好久才明白,还是上图上图。

  1. +12V接口
    +5V~+35V, 如需要板内取电,则供电范围Vs:+7V~+35V
  2. 电机
    OUT1、OUT2 为电机A输出;OUT3、OUT4为电机B输出
  3. IO接口
    ENA和ENA分别为A、B电机的使能端,一开始ENA和ENB各自的上下两个针脚是用跳线帽连接起来的,拔掉就可以接线了。 IN1-IN4 为IO控制输入。

弄明白L298N之后,连接就方便多了,

  • OUT1 OUT2 连接小车左侧前后两个电机(并联),之前电机接出来的杜邦线公头直接往接口里面塞(好羞羞),拧紧螺丝;同理,OUT3 OUT4 连接小车右侧前后两个电机;
  • 便宜的镍氢电池组电源正负极分别连接12V、GND,电池组的接头是JST母头,比较好连接;
  • 5V和GND连接到树莓派上的5V和GND用于供电。
  • ENA、ENB、IN1-IN4连接到树莓派I/O端口上。

接好之后是这样子:

摄像头模块

摄像头是好几年前台式机用的摄像头,分辨率是奇葩的470x640,而不是480x640,mjpg-streamer下,画面是花的,等到画面调正常之后,画面却如放幻灯片一样。我勒个去!摄像头连接到装了openwrt的wndr3800路由器上流畅的没朋友,在树莓派上调来调去却怎么也不行,认命了,放弃放弃,没有摄像头也能当遥控车开。

小车遥控器

终于到了编程部分,为了简单,使用python的RPI.GPIO模块来操作I/O,不过我发现功能蛮少的,没找到调速的API,文档在这里,代码如下,轮子的参数视接的I/O口而定。


import RPi.GPIO as gpio

class Wheel(object):
    def __init__(self, in_pin1, in_pin2, enable_pin1, enable_pin2):
        ‘‘‘
        :param in_pin1 in_pin2: IN1 IN2 or IN3 IN4
        :param enable_pin1 enable_pin2: ENA or ENB
        ‘‘‘
        self.pin1 = in_pin1
        self.pin2 = in_pin2

        # setup I/O OUT
        gpio.setup(in_pin1, gpio.OUT)
        gpio.setup(in_pin2, gpio.OUT)
        gpio.setup(enable_pin1, gpio.OUT)
        gpio.setup(enable_pin2, gpio.OUT)

        # enable
        gpio.output(enable_pin1, True)
        gpio.output(enable_pin2, True)

    def forward(self):
        gpio.output(self.pin1, True)
        gpio.output(self.pin2, False)

    def backward(self):
        gpio.output(self.pin1, False)
        gpio.output(self.pin2, True)

    def stop(self):
        gpio.output(self.pin1, False)
        gpio.output(self.pin2, False)

class Car(object):
    def __init__(self):
        gpio.setmode(gpio.BOARD)

        self.left_wheel = Wheel(13, 15, 7, 11)
        self.right_wheel = Wheel(16, 18, 22, 29)

    def forward(self):
        self.left_wheel.forward()
        self.right_wheel.forward()

    def backward(self):
        self.left_wheel.backward()
        self.right_wheel.backward()

    def left(self):
        self.left_wheel.stop()
        self.right_wheel.forward()

    def right(self):
        self.left_wheel.forward()
        self.right_wheel.stop()

    def stop(self):
        self.left_wheel.stop()
        self.right_wheel.stop()

    def shutdown(self):
        self.stop()
        gpio.cleanup()

最后用Flask模块实现Web(android真的好久都没摸了,偷笑),这需要在树莓派装Flask模块,在安装的时候发现树莓派的python环境是不完整的。这个代码就不贴了,直接上仓库地址。

小车遥控器部分代码:https://github.com/fordoo/rpi-car

小车演示GIF: http://ww2.sinaimg.cn/bmiddle/a3b0dabfgw1eqed43g2ivg20b20coqv5.gif

时间: 2024-08-02 21:53:47

用树莓派来制作简单的遥控小车的相关文章

树莓派遥控小车

优酷视频地址:http://v.youku.com/v_show/id_XMTMxMDY0NzY2NA==.html?from=s1.8-1-1.2 最近在玩树莓派遥控小车,很早之前就把wifi遥控的给整完给予nginx+lua,为什么不用python?因为不喜欢python. 后面为了在户外也可以玩,加了一个数码管和红外.数码管开机后自动显示当前机器的Ip,一个是为了方便wifi链接时候能及时知道当前Ip,第二个也是方便知道机器可以开启,可以进行操作了. 红外,买了一个遥控器,质量不行,稍微远

JSP制作简单登陆

JSP制作简单登陆界面 运行环境 eclipse+tomcat+MySQL 不知道的可以参考Jsp运行环境--Tomcat 项目列表 这里我先把jsp文件先放在Web-INF外面访问 需要建立的几个文件在图上.jsp 还要导入MySQL的jar包mysql-5.0.5.jar,导到WEB-INF中的lib文件夹就可以不需要Bulid Path 开始编写代码: 代码演示: index.jsp就好像一般网站的首页一样感觉,将header.jsp和footer.jsp引入其中 <%@ page lan

ArcGIS利用DEM制作简单三维

利用DEM数据镶嵌后,矢量数据裁剪得到研究范围的DEM数据,在ARCScene中进行三维制作 ArcGIS利用DEM制作简单三维 点击学习我的系统教程哦

如何制作简单的 3D 打印模型

Hi 大家好! 了解一个方兴未艾,但极为有趣的话题 - 3D 打印 . 为了帮助大家对3D打印有一个初步的感性认识,我在线制作了一款可用于3D打印的model, 大家可以先通过体验这个在线 model 的3D 效果,体验一下让我们耳目为之一新的感觉 J ~ 首先打开URL : http://www.123dapp.com/Catch/2014-4-1-21-5-35/2258051 .首次进入时先看到的是一张2维的平面图片,然后请点选左下 3D VIEW . 待图像加载结束,就可以通过鼠标的拖曳

利用replaceChild制作简单的吞噬效果【jsDEMO】

[功能说明] 利用replaceChild制作简单的吞噬效果 [HTML代码说明] <ul class="list" id="list"> <li class="in">1</li> <li class="in">2</li> <li class="in">3</li> <li class="in"

利用removeChild制作简单的倒序删除效果【jsDEMO】

[功能说明] 利用removeChild制作简单的倒序删除效果 [HTML代码说明] <ul class="list" id="list"> <li class="in">1</li> <li class="in">2</li> <li class="in">3</li> <li class="in"

使用 FineUI 制作简单的购物车页面(源代码免费下载,另附 24 张专业版截图)

起因 最初是一位 FineUI 网友对购物车功能的需求,需要根据产品单价和数量来计算所有选中商品的总价. 这个逻辑最好在前台使用JavaScript实现,如果把这个逻辑移动到后台C#实现,则会导致过多的AJAX请求而影响用户体验. 最终效果 准备数据 在生成页面之前,我们需要准备购物车的数据,这里只是简单的用表格来模拟数据: 1 protected DataTable GetCartDataTable() 2 { 3 DataTable table = new DataTable(); 4 ta

利用for循环制作简单的99乘法表

利用for循环制作简单的99乘法表 public class chengfabiao { public static void main(String[] args) { for(int a = 1;a <= 9;a++) { for(int b = 1; b <= a;b++) { int res = a * b; System.out.print("["+a+"x"+b+"="+res+"]"); } Syst

BASH 脚本制作简单 Workflow - 更新 2014/6/17 12:00

因为需要,我创建了一个脚本叫 wf.sh (随意起什么名字),它可以读取当前目录下的 config.ini 配置文件来解析并执行工作流任务(Workflow). 直接上代码: config.ini Workflow.Name = example Workflow.Description = my work flow example \n and I know what's going on here. #Workflow.StartJob = job1 Workflow.NextJobCount