视频如下:
一、制作方案:红外线控制使用1个GPIO,使用lirc软件
一个步进器使用4个GPIO × 2
超声波测距 使用2个GPIO
语音输出使用espeak软件
声明:本人iamhihi@gmail.com和上述淘宝店无任何关联,纯粹是因为我在该店买了东西而已。
硬件连接:本人假设你懂基本的电路图,上述淘宝店中有相关资料可参考,本文不详细描述。
二、红外线控制:1. 需要的硬件:一个红外接收管,型号可以是TSOP1238/TSOP2238等可以3.3V电压下工作的38KHz红外接收管。
一个红外遥控器,可以是电视机、机顶盒等的遥控器。但别拿空调遥控器这种自带状态逻辑的遥控器来折磨自己。
2. 连接红外接收管:不同的红外接收管连线可能不太一样,需要参考相应的Datasheet。以TSOP 1238为例的话,当红外线接收窗朝向自己时,从左到右三个引脚分别为:
1. GND,接地,RPi PIN 6
2. VS,电源,接3.3V电源,RPi PIN 17
3. OUT,数据输出,接GPIO 24,RPi PIN 18
由于
Raspberry Pi的GPIO只能接收3.3V的输入,所以红外接收管的电源务必要接3.3V的供电。我自己用的红外接收管的型号是TSOP 1838(引脚顺序是OUT, GND, VS),按lirc_rpi项目页面的说法,这个管子应该在
5V供电下才能正常工作,不过我还是只接了3.3V,发现也能用。 3. 系统软件安装和配置:lirc_rpi项目为
Linux内核提供了支持GPIO口的红外接收管的驱动,在最新的Raspbian系统中应该已经包含。如果你的系统中没有这个模块,也许需要自己重新编译内核。具体可以参考
lirc_rpi项目主页。 然后需要安装用户态的服务进程:
sudo apt-get install lirc
加载lirc_rpi内核模块:
sudo modprobe lirc_rpi gpio_in_pin=24 gpio_out_pin=23
注意,在加载lirc_rpi时必须指定输入端口是GPIO 24,跟实际接线一致。输出端口设为GPIO 23,是因为我不需要这个输出端口,而目前我们GPIO 23口是空着的。
4. 测试红外接收是否正常:sudo mode2 -d /dev/lirc0
如果按遥控器上的键,屏幕上能显示出一串pluse和space值的话,多半就是正常了。
5. 配置下/etc/lirc/hardware.conf:...
LIRCD_ARGS=""
...
DRIVER="default"
...
DEVICE="/dev/lirc0"
6. 让lirc学习一下你遥控器上的按键在我的例子中,请至少学习5个按键,分别做为上(UP)、下(DOWN)、左(LEFT)、右(RIGHT)、选择(SELECT):
sudo /etc/init.d/lirc stop
#学习按键
irrecord -n -d /dev/lirc0 ~/lircd.conf
#把学习后生成的配置文件作为lircd的配置文件
sudo mv ~/lircd.conf /etc/lirc/lircd.conf
sudo /etc/init.d/lirc start
配置完后,可以用irw命令测试遥控器是否工作正常。
执行完irw命令,按遥控器,确认能正确输出所按按钮的名称。
7. 配置~/.lircrc.文件,把按键与需要触发的行为进行关联:在~/.lircrc文件中增加如下内容
begin
prog = irexec
button = RIGHT
config = sudo python /home/pi/right.py
end
begin
prog = irexec
button = LEFT
config = sudo python /home/pi/left.py
end
begin
prog = irexec
button = SELECT
config = sudo python /home/pi/ultrasonic.py
end
begin
prog = irexec
button = UP
config = sudo python /home/pi/up.py
end
begin
prog = irexec
button = DOWN
config = sudo python /home/pi/down.py
end
见附件的.lircrc
8. 重启lircsudo /etc/init.d/lirc restart
9. 执行irexec命令,确认python脚本正确运行。建议先在python脚本中直接echo 显示,确认能正确执行到脚本
三、步进电机控制:比较简单,请看附件中的up.py down.py left.py right.py
注意修改里面的GPIO端口号
四、超声波测距:请看附件中的ultrasonic.py
注意修改里面的GPIO端口号
五、语音输出:sudo apt-get install espeak
Test Espeak with: English female voice, emphasis on capitals (-k), speaking slowly (-s) using direct text:-
espeak -ven+f3 -k5 -s150 "I've just picked up a fault in the AE35 unit"
我的例子中直接在超声波测距中调用espeak输出语音。见ultrasonic.py
text = "espeak -ven+f3 -k5 -s150 " + "\"Distance %.1f\"" % distance
print text
os.system(text)