树莓派(一代B+版)+红外收发管+智能小车——实现小车远程控制
前段时间的,新生工程体验课上,两人一组,靠厂家提供的元器件和烧录代码,焊接了了一台智能小车。
最进,碰巧手头有空闲的一块树莓派,本来打算用树莓派去实现远程控制空调,但发现空调的红外编码带有逻辑控制,只能退而求其次,试试远程控制小车,大体框架结构如图。
2017-07-03更新,已经实现对空调类带逻辑编码设备的简单控制。
烧录系统
几乎所有的新手教程都使用Win32DiskImager作为系统安装工具——中文的、英文的、官方的、eLinux wiki的,不一而足。 但是这个工具不支持中文目录名(文件或目录有中文,会出现123错误),不支持压缩,必须先插好SD卡,再开软件。 而USB Image Tool,就是Win32DiskImager的一个更方便的替代品。
写SD卡:直接读取zip压缩包
USB Image Tool可以直读.zip压缩包。网上下载的zip格式系统镜像,下完直接可以烧录。 点击Restore,选择.zip文件即可。注意打开对话框中默认看不到.zip文件,在“文件类型”处选择“All Files (.)”即可。
SSH无法连接问题
自从2016年11月开始,树莓派官方推荐 Raspbian 系统镜像关闭了默认ssh连接,重新开启也很简单,把SD卡拔下来,进入到根目录,新建一个名为ssh的空白文件(无后缀)就可以。
好了然后再把卡插回树莓派,就可以使用SSH了。
- 初始用户名:pi
- 初始密码:raspberry
将红外接受管和发射管连接至树莓派GPIO接口
材料:
红外接受管(3pin),红外接受管(2pin),杜邦线若干。
根据不同树莓派版本,查看GPIO的引线图,该实验采用B+版,具体实物对应图和GPIO与pin对应图如下图:
硬件连接
红外接收器
vcc 连 pin1 (3.3v)
gnd 连 pin6(ground)
data 连 pin12(gpio18)
红外发射器
gnd 连 pin25(ground)
data 连 pin11(gpio17)
红外接受器规格见图,左引脚为data,中为接地,右为3.3V供电
红外发射器规格见图,长脚为data,短脚为接地
接收器和发射器通过杜邦线跟树莓派相连,最后的连接实物图
预先解析控制码
修改 raspbian 仓库默认源
- 修改apt源
1 | sudo nano /etc/apt/sources.list |
例如使用大连东软信息学院软件源镜像,修改之后的内容如下:
1 | deb http://mirrors.aliyun.com/raspbian/raspbian jessie main contrib non-free rpi |
其他可用源如下:
中国科学技术大学 Raspbian http://mirrors.ustc.edu.cn/raspbian/raspbian/
阿里云 Raspbian http://mirrors.aliyun.com/raspbian/raspbian/
清华大学 Raspbian http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/
华中科技大学 Raspbian http://mirrors.hustunique.com/raspbian/raspbian/ Arch Linux ARM http://mirrors.hustunique.com/archlinuxarm/
华南农业大学(华南用户) Raspbian http://mirrors.scau.edu.cn/raspbian/
大连东软信息学院源(北方用户) Raspbian http://mirrors.neusoft.edu.cn/raspbian/raspbian/
重庆大学源(中西部用户)
- 更新软件源和软件
1 | # 更新软件源 |
更换vi文本编译器为vim
因为vi在insert模式下,方向键会变为ABCD,故用vim进行替换
1 | #卸载vi |
安装lirc
LIRC (Linux Infrared remote control)是一个linux系统下开源的软件包。这个软件可以让Linux系统接收及发送红外线信号。
1 | sudo apt-get install lirc |
配置硬件
1 | # sudo vim /boot/config.txt #在文件结尾添加 |
注意:配置gpio_in_pin和gpio_out_pin时,编号为GPIO号,并非pin号
启动测试
1 | sudo mode2 -d /dev/lirc0 |
红外接收器已经打开,处于监听状态。这个时候,利用任何红外发射器(可以是电视遥控器或其他遥控器)对红外接收模块按任意按钮,就可以在树莓派终端上看到类似如下的代码
看到这个代码便证明红外接收模块是正常工作的。
如果没有看到,请检查你的接线、电压、以及通过lsusb查看是否加载了相应模块。
1 | pulse 1681 |
录制解析控制码
- 开始录制
1 | irrecord -d /dev/lirc0 ~/lircd.conf #按照提示操作即可,录制完后会让你输入按键名 |
- 查看可用键名列表
1 | irrecord --list-namespace |
- 将已录制的编码加载进 lirc 配置参数
1 | sudo cp ~/lircd.conf /etc/lirc/lircd.conf |
通过树莓派发射红外编码
- 启动lircd服务
1 | sudo lircd -d /dev/lirc0 |
- 查看录制好可以使用的键名
1 | irsend LIST /home/pi/lircd.conf "" |
- 发送红外编码
1 | irsend SEND_ONCE /home/pi/lircd.conf KEY_XXX |
演示效果
关于录制带逻辑编码的红外编码
一个比较令人兴奋的消息,谢谢博客http://blog.just4fun.site/raspberrypi-lirc.html的帮助,直接发送raw原始码就可以实现简单的控制程序。😘
注意:其只能使用raw原始码,记录是通过mode2命令实现。
- 制作模版(不设置按键,初始化玩直接跳过)
1 | sudo /etc/init.d/lirc restart |
- 录制需要实现的按键
1 | mode2 -d /dev/lirc0 > /tmp/temp.code |
- 最后一个参考格式的lircd.conf文件(保证空格正确)
1 | begin remote |
- 启动服务,运行指令
1 | sudo lircd -d /dev/lirc0 |