标签:
本文主要描述使用树莓派和L298N制作一个简单的遥控小车,遥控器使用简单的WEB来实现。
系统安装没什么说的,系统烧到SD就可以了,我使用的Raspbian,这货是基于Debian的,配置命令习惯几乎和ubuntu/debian一样,接上网线开机进入系统配置。
之前一直没玩过硬件,毕竟我只是一个网工出身的程序猿,第一次拿到L298N研究了好久才明白,还是上图上图。
弄明白L298N之后,连接就方便多了,
接好之后是这样子:
摄像头是好几年前台式机用的摄像头,分辨率是奇葩的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
标签:
原文地址:http://my.oschina.net/toil/blog/393460