简单的 Pi 机器人
Simple Pi Robot旨在以简单的形式实现机器人控制。
图>Simple Pi Robot旨在以简单的形式实现机器人控制。
零件清单
(1) Raspberry pi(任何型号)但最近推出的 pizero 或 pi 2 应该是一个不错的选择,我目前的型号采用 B+。
(2) 40 针 GPIO 电缆(如果使用 pi B+ 或 pi 2)。
(3) 面包板(用于快速组装各种传感器)。
(4) 2wd 底盘。
(5) 距离传感器(Ultrasonic HC SR04)。
(6) 移动电源(用于给pi供电)。
(7) 充电电池AA(最好是2100毫安时)。
(8) 跳线,公母型,电阻器。
(9) WiFi 适配器(EDUP/EDIMAX 用于与 pi 进行无线通信)。
(10) 存储卡(4GB 及以上用于在 pi 上运行操作系统)。
(11) 电机驱动器 (L298)。
(12)伺服电机。
(13) 杂项 – 扎线带(用于绑跳线)和泡沫胶带(用于固定伺服系统或任何其他无法使用螺钉组件的传感器)。
第 1 步:选择电机驱动护罩
目前用于树莓派的电机驱动屏蔽很少,仅举几例:-
(1) RTK 电机控制器屏蔽
(2) 用于 Raspberry Pi 的 Pololu DRV8835 双电机驱动器套件
(3) Adafruit DC 和 Stepper Motor HAT for Raspberry Pi
(4) Adafruit 制作的 Raspirobot 板
和最近像 ZEROBORG 一样不发达
构建任何机器人最常见的问题之一是最大限度地减少布线需求,并且可以通过使用屏蔽/帽子来实现这一点。我尝试构建我的机器人,首先使用一个与制造商 ALSROBOT 的 Raspirobot 相当的盾牌。套件从中国发货,但问题是我无法增加电机输入电压。最大值小于 5 伏,电压之间有轻微的不平衡,仍然可以检查以下链接 – ALSROBOT – PI Motor driver shield
无论如何,在我当前的教程中,我使用了廉价且多功能的 L298 电机驱动器 - L298。
上述板的优点除了价格便宜外,还有5V稳压输出可用。
我用L298板驱动了2个直流电机和1个伺服电机。
第 2 步:L298 电机驱动器
图>我在机箱底部安装了 L298 电机驱动器,现在连接直流电机和伺服电机连接
(i) 直流电机 -A 到输出 -A (+ &-).
(ii) 直流电机 -B 到输出 -B (+ &-).
(iii) 伺服电机+ve to L298 Board的+5V稳压电源&伺服电机-ve to L298 Board的GND。
保持启用引脚跳线不变,如果您不想要速度控制,否则请移除跳线。跳线到位确保+5V 电源以启用引脚,进而以额定速度驱动电机。
现在将 4 个 nos 跳线连接到控制输入,将跳线的另一端连接到下一步指定的 GPIO 引脚。
对于伺服电机连接一号。用于控制GPIO引脚的跳线,如下一步
第 3 步:伺服电机
图>伺服有 3 线连接:电源、接地和控制。必须不断地施加电源。
控制信号是脉冲宽度调制 (PWM),但这里正向脉冲的持续时间决定了伺服轴的位置。例如,一个 1.520 毫秒的脉冲是 Futaba S148 伺服的中心位置。较长的脉冲使舵机转向中心顺时针位置,较短的脉冲使舵机转向中心逆时针位置。
我使用过 Futuba s3003 伺服——连接非常简单,“+”和“-”连接到前面提到的 L298 板。看舵机的工作电压很重要(在我的例子中是 4.8 - 6 V,见上图),信号线要连接到 GPIO 输出,通常是白色或橙色。
在 raspberry pi 中控制伺服电机可能会很棘手,但是有一个非常强大的库托管@ RPIO.PWM,要在 pi 上安装它,请使用以下代码。
sudo apt-get install python-setuptoolssudo easy_install -U RPIO
要了解有关 RPIO.PWM 和使用的 DMA 的更多信息,请参阅链接 https://pythonhosted.org/RPIO/pwm_py.html
第 4 步:机器人底盘
图> 图>我用过带2wd的Ellipzo Robot底盘,2wd简单易控。
该套件随附直流电机、用于伺服电机的平底锅套件以及组装该套件所需的所有硬件。
详细链接位于 – Ellipzo Robot Chasis kit。
Pl。参考视频组装树莓派,以及L298电机驱动器、分线板、摄像头模块和移动电源。
第 5 步:距离传感器
图>集成距离传感器很容易,我们只需要 1k 电阻器和跳线。将 VCC &GND 分别连接到 pi +5Volts &GND。
其他两个引脚 TRIG 和 ECHO 将按照前面的步骤连接到 GPIO 引脚。记得按图片连接电阻。
测量距离的Python代码包含在最后一步。
第 6 步:Raspberry Pi -camera – 使用 VLC 播放器的视频流
这里我使用了 Pi 摄像头模块,设置非常简单,您可以参考链接:Raspberry pi Camera setup
对于视频流,使用 VLC 从在树莓派上安装 VLC 开始
sudo apt-get install vlc
要使用 RTSP 开始流式传输摄像机视频,请输入以下内容
raspivid -o - -t 0 -n | cvlc -vvv 流:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
或具有适当的宽度和高度使用以下代码
raspivid -o - -t 0 -n -w 600 -h 400 -fps 12 | cvlc -vvv 流:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
现在要通过 VLC 播放器查看流,请在远程系统上打开 VLC,而不是使用
打开网络流rtsp://###.###.###.###:8554/
其中###.###.###.### 是网络路由器提供的 pi 地址。
现在,当 pi 在您家中移动时,您可以在远程系统上看到视频流。
第7步:树莓派引脚和python代码
图>第 8 步:一些组装图像
图>代码
from RPIO import PWMimport RPi.GPIO as GPIOfrom RPIO import PWMimport RPi.GPIO as GPIOimport timefrom time import sleepfrom subprocess import callGPIO.setmode(GPIO.BCM)GPIO.setup(19,GPIO) .OUT)GPIO.setup(26,GPIO.OUT)GPIO.setup(16,GPIO.OUT)GPIO.setup(20,GPIO.OUT)GPIO.setup(21,GPIO.IN)GPIO.setup(8,GPIO.OUT) .OUT)GPIO.setup(27,GPIO.OUT)GPIO.setup(9,GPIO.OUT)TRIG=18ECHO=17print"controls"print"1:向前移动"print"2:向后移动"print"3:停止机器人“打印”4:使用自定义名称拍照“打印”5:速度控制前进“打印”6:旋转机器人“打印”7:转动机器人“打印”8:伺服控制请“打印” 11:欢迎使用自主控制"print"press enter to send command"def takestillpic(inp):print"请输入照片字符" inp =raw_input() call ( ["raspistill -vf -hf -o " + str(inp) + ".jpg" ],shell=True ) def fwd():GPIO.output(19,True) GPIO.output(26,False) GPIO.output(16,True) GPIO.output(20,False)def rev ():GPIO.output(19,False) GPI O.output(26,True) GPIO.output(16,False) GPIO.output(20,True)def stop():GPIO.output(19,False) GPIO.output(26,False) GPIO.output(16) ,False) GPIO.output(20,False)def distmeas():打印“正在进行距离测量” GPIO.setup(TRIG,GPIO.OUT) GPIO.setup(ECHO,GPIO.IN) GPIO.output(TRIG,False) ) 打印“请等待传感器稳定” time.sleep(2) GPIO.output(TRIG,True) time.sleep(0.00001) GPIO.output(TRIG,False) 而 GPIO.input(ECHO)==0:pulse_start =time.time() while GPIO.input(ECHO)==1:pulse_end=time.time() pulse_duration =pulse_end - pulse_start distance =pulse_duration * 17150 distance =round(distance,2) 打印“距离”,距离,“ cm" if distance <50 :GPIO.output(19,False) GPIO.output(26,False) GPIO.output(16,False) GPIO.output(20,False) time.sleep(1) 打印“机器人停止为距离更小”打印“现在机器人倒退” GPIO.output(19,False) GPIO.output(26,True) GPIO.output(16,False) GPIO.output(20,True) time.sleep(1) GPIO .output(19,False) GPIO.output(26,False) G PIO.output(16,False) GPIO.output(20,False) TLr() time.sleep(4) fwd() distmeas() else:distmeas() def TL():GPIO.output(19,True) GPIO .output(26,False) GPIO.output(16,False) GPIO.output(20,False)def TLr():GPIO.output(19,True) GPIO.output(26,False) time.sleep(0.75) GPIO.output(19,False) GPIO.output(26,False)while True:inp=raw_input() if inp =="1":fwd() 打印"机器人正向移动" elif inp =="2" :rev() 打印“机器人向 rev 方向移动” elif inp==“3”:stop() 打印“机器人停止” elif inp ==“4”:takestillpic(inp) 打印“请拍照” elif inp ==” 5":GPIO.output(7,False) GPIO.output(8,False) elif inp =="6":TL() elif inp =="7":TLr() elif inp =="8":伺服=PWM.Servo()servo.set_servo(27,1000)time.sleep(2)servo.stop_servo(27)elif inp ==“9”:伺服=PWM.Servo()servo.set_servo(27,1500)时间.sleep(2)servo.stop_servo(27)elif inp ==“10”:伺服=PWM.Servo()servo.set_servo(27,2000)time.sleep(2)servo.stop_servo(27)elif inp ==“11”:fwd() distmeas() GPIO.c倾斜()
来源:简单派机器人
制造工艺