前段时间,接触了一款在开源硬件界被称为是“人气之王”的树莓派(Raspberry Pi)袖珍计算机,功能强大的她拥有一颗SOC,集CPU、GPU、DSP和SDRAM为一体,以SD卡为内存硬盘,拥有网卡、USB口(可以直接连接键盘、鼠标、U盘等外设)、同时具备视频、音频模拟输出以及HDMI高清输出的能力,在外部接口上还具备了一般计算机设备不具有的GPIO、SPI、I2C、UART等硬件配置,为我们的创新机器人制作提供硬件条件。切入正题,用Python让Raspberry Pi动起来,在这个醒目的标题中可以看出我这个制作的主题就是利用Raspberry Pi的硬件和Python语言来完成一个机器人制作,那下面就听我娓娓到来吧!
在这次制作中,我选择了一款AS-4WD铝合金的小车平台,以小车平台为基础,在上面添加了7寸高清液晶显示器、无线键盘、蓝牙模块以及电机驱动器等配件,如图1是罗列制作机器人所用的物料。整个树莓派的小车系统分两步来搭建,首先是搭建树莓派的计算机系统,虽然是一个袖珍的计算机,但是“麻雀虽小,五脏俱全”,除去树莓派的主板外,还需准备一套标准通用的USB键盘鼠标,一个显示器(在本文描述的是一个用于车载监控设备的7寸显示器,通过RCA接口相连),一块电池用于整个系统供电,最后也是最关键的需要准备预装了Debian系统的SD卡(对于SD卡要求读写最好在4MB/S以上、容量大于2GB,当然容量更大速度越快更好)。在完成计算机系统搭建后,接下来是完成机器人系统的搭建,在原理上,主要利用树莓派那两排外置的针脚的GPIO功能控制外置树莓派专用的驱动器(Raspi Driver)来实现电机的使能、正反转控制,以及利用UART功能与蓝牙数传模块实现数据通信,这样就能通过手机端的蓝牙遥控器对小车进行控制,如图2是整体硬件搭建完后的靓图,在图3中给出了树莓派机器人的硬件连线图。
图1 机器人所用的物料
图2-1 会行走的树莓派电脑
图2-2 整体硬件搭建完后的靓图
图3 树莓派机器人的硬件连线图
在使用树莓派时,也是我第一次接触Python这门语言,通过对相关资料的学习,发现Python是门简单易学的语言,如果有着C或者其他的计算机语言基础,基本上半天就能上手编写程序,在开始编写小车控制程序前需要对我们的树莓派计算机的相关Python的库文件进行安装设置,首先是GPIO,打开LX终端(LXTerminal),更新apt-get软件安装包列表(注意必须要在网络连接正常情况下),然后执行安装命令来安装raspberry-gpio-python包,具体指令如下:
pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install python-rpi.gpio
|
pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install python-rpi.gpio
|
pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install python-serial
|
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait |
去掉
|
退出vi编辑器时,注意要对文件进行保存;同时需要对系统初始化文件进行编辑,在LXTerminal中,键入“ sudo nano /etc/inittab”,然后找到以下片段内容
#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
|
#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
|
import RPi.GPIO as GPIO
#### gpio init
GPIO.setmode(GPIO.BCM)
GPIO.setup(7,GPIO.OUT) #LED2
GPIO.setup(8,GPIO.OUT) #LED1
GPIO.output(7,GPIO.LOW)#LED2 ON
GPIO.output(8,GPIO.HIGH)#LED1 OFF
|
图4 试验截图
对于树莓派的UART功能的实现其实方法和步骤与上面的GPIO 的使用类似,也是分作4步走:
Step1:导入串口库,键入“import serial”;
Step3:打开使能串口,“if ser.isOpen() == False:ser.open()”;
Step4:当读取数据时使用“ser.read() ”,当发送数据时使用“ser.write(数据)”。在这里我通过IDLE3编辑了一个Python的程序Serial_test.py,然后直接在LXTerminal键入“sudo python Serial_test.py”(注意,由于默认状态下是利用账户名:pi进行操作,所以需要将文件放置在/home/pi目录下,才能直接执行,无需),然后手机蓝牙遥控器(如图5)与蓝牙透传模块相连接,成功通讯后,既可以通过手机遥控器的按键按钮发送相应字符在串口上看见对应字符打印至屏幕。在此我给出了测试的源程序(如下),通过电脑端的蓝牙虚拟出串口与树莓派外接的蓝牙透明串口模块连接,进行数据传递,电脑端的串口助手发送字母“B”,同时收到树莓派发送来的字母“A”并显示在调试的接收窗口,树莓派端收到由电脑端发送来的字母“B”,并打印出来,通过此现象既可以证明树莓派的UART功能测试正常,如下附实验的屏幕截图6。
import serial
import time
ser = serial.Serial('/dev/ttyAMA0', 9600, timeout = 0.5)
while True:
if ser.isOpen() == False:
ser.open()
print ser.read()
ser.write('A')
time.sleep(1)
|
图5 手机蓝牙遥控器
图6 截屏显示图和测试图片
图7 系统控制原理框图
至此,用树莓派的小车已经告一段落,也是完成了笔者对树莓派的电子制作的处女作,通过几天的的学习,发现其资源以及各方面的性能允许我们开发更多更好地电子制作、机器人制作,相信在不久的将来,还能继续为大家奉上树莓派大餐!
相关文章: 【新书抢先看】《树莓派应用速成 Raspbmc媒体中心》--私人定制属于你自己的媒体中心
近期新闻
热门新闻
奥松智能微信