Pan-Tilt HAT
| |||||||||||||||
| |||||||||||||||
说明
提供树莓派和Jetson nano使用例程
版本说明
由于芯片停产, 环境光传感器:TSL2581FN 更改为 TSL25911FN,如果您是老客户,需要再次采购新的模块的话,注意更新的你环境光传感器程序,如果没有使用则无需考虑。新版本在PCB有丝印标注Rev2.1。请注意区分。
产品概述
产品参数
- 工作电压: 3.3V/5V
- 控制芯片 PCA9685
- 逻辑电压: 3.3V
- 通信接口: I2C
- 产品尺寸: 56.6X65(mm)
控制器
本产品控制器为PCA9685,是一款基于IIC总线通信的12位精度16通道PWM波输出的芯片。并且板载TSL2581环境光传感器,通过检测光强辅助摄像头工作,同样通过 I2C 接口控制,不会占用太多接口引脚资源。
通信协议
从上的得知使用的是I2C通信,I2C 通信,一条数据线,一条时钟线。 I2C 总线在传送数据过程中共有三种类型信号:开始信号、结束信号和应答信号。
开始信号:SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。
结束信号:SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。
- I2C写数据时序
首先主机(即树莓派,后面统称为主机)会发送一个开始信号,然后将其 I2C 的 7 位地址与写操作位组合成 8 位的数据发送给从机(即 TSL2581 传感器模块,后面统称为从机),从机接收到后会响应一个应答信号,主机此时将命令寄存器地址发送给从机,从机接收到发送响应信号,此时主机发送命令寄存的值,从机回应一个响应信号,直到主机发送一个停止信号,此次 I2C 写数据操作结束
- I2C读数据时序
首先主机会发送一个开始信号,然后将其 I2C 的 7 位地址与写操作位组合成 8 位的数据发送给从机,从机接收到后会响应一个应答信号,主机此时将命令寄存器地址发送给从机,从机接收到发送响应信号,此时主机重新发送一个开始信号,并且将其 7 位地址和读操作位组合成 8 位的数据发送给从机,从机接收到信号后发送响应信号,再将其寄存器中的值发送给主机,主机端给予响应信号,直到主机端发送停止信号,此次通信结束
I2C地址
从上面的通信可知,PCA9685和TSL2581两个都是使用I2C通信,那么需要设置不同的I2C地址,地址不一样,就不会影响通信
- PCA9685
- TSL2581
详细见TSL2581数据手册第13页
注:我们模块默认PCA9685的I2C地址引脚A5=A4=A3=A2=A1=A0=0,PCA9685的I2C地址为0x40,TSL2581 的I2C 地址引脚浮空(Float),TSL2581 的I2C 地址为0x39。如果用户不使用树莓派驱动时候,例如使用STM32的时候需要在低位补上R/W位。
树莓派使用
先不要组装舵机,由于舵机初始角度不是在起始位置,如果直接组转上去舵机旋转时可能会卡死。建议先单独测试舵机转的角度,防止舵机意外损坏。请按照如下教程依次执行
硬件配置
开启I2C接口
- 打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config 选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动
sudo reboot
安装库
如果使用bookworm系统,只能使用lgpio库,bcm2835跟wiringPi无法安装与使用,python库可以不安装,直接运行程序即可
BCM2835
#打开树莓派终端,并运行以下指令 wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz tar zxvf bcm2835-1.71.tar.gz cd bcm2835-1.71/ sudo ./configure && sudo make && sudo make check && sudo make install # 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
wiringPi
#打开树莓派终端,并运行以下指令 cd sudo apt-get install wiringpi #对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级: wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb gpio -v # 运行gpio -v会出现2.52版本,如果没有出现说明安装出错 #Bullseye分支系统使用如下命令: git clone https://github.com/WiringPi/WiringPi cd WiringPi ./build gpio -v # 运行gpio -v会出现2.70版本,如果没有出现说明安装出错
lgpio
wget https://github.com/joan2937/lg/archive/master.zip unzip master.zip cd lg-master sudo make install # 更多的可以参考官网:https://github.com/gpiozero/lg
下载程序
sudo apt-get install p7zip-full wget http://www.waveshare.net/w/upload/9/96/Pan-Tilt_HAT_code.7z 7z x Pan-Tilt_HAT_code.7z -r -o./Pan-Tilt_HAT_code sudo chmod 777 -R Pan-Tilt_HAT_code cd Pan-Tilt_HAT_code/RaspberryPi/
调试
棕色线 | GND |
红色线 | 5V |
橙色线 | S1/S0 |
运行测试代码前一定注意倾斜舵机安装位置,安装位置不好可能会导致舵机发热烧毁,先不组装舵机,保证舵机可以旋转360不会有障碍,连接硬件,平移舵机连接S1,倾斜舵机连接S0。然后打开程序文件夹中test文件夹
cd test make clean make sudo ./main
运行后面,舵机全部旋转到0度(舵机旋转角度为0到180,也就是旋转到初始位置),然后切断电源组装,注意不要旋转倾斜舵机
组装
组装图如下:以下图示的为RPi-Camera-I,其余摄像头会略微有些不同,后面会有单独讲解。
组装视频参考1分19秒:https://www.waveshare.net/wiki/AlphaBot2-PiZero-Video
A: 平移舵机
B: 倾斜舵机
其他摄像头如何组装
模块配件提供了一包M2的独立螺丝包,一共5颗螺丝10个螺帽,摄像头全部是先给摄像头上好M2螺丝,抬高摄像头然后再连接亚克力板,将亚克力板使用螺丝锁好
RPi Camera V2
RPi Camera (E)、RPi Camera (G)、RPi Camera (F)、RPi Camera (J)、RPi Camera (M)
RPi Camera (H)
RPi NoIR Camera V2
RPi IR-CUT Camera(由于此摄像头孔位是非标准的,所以只能锁上两颗)
演示例程
基础演示
#在Pan-Tilt-HAT/RaspberryPi/目录下面执行如下: #如果使用环境光,就执行这个 cd Light_Sensor/ #如果使用云台,就执行这个 cd Servo_Driver/
- BCM2835例程
cd bcm2835 make clean make sudo ./main
- wiringpi例程
cd wiringpi make clean make sudo ./main
- python例程
cd python sudo python main.py
MJPG-STREAMER 软件实时监控
"MJPG-streamer",是用于从摄像头采集图像,把他们以流的形式通过基于 ip 的网络传输到浏览器。
- 使用摄像头前必须运行 raspi-config 命令启用摄像头:
sudo raspi-config 选择 Enable Camera,选择 YES
- 如果是使用 CSI 接口的摄像头,那么系统找不到/dev/video0 的设备节点。需要在/etc/modules 文件中添加一行 bcm2835-v4l2:
sudo nano /etc/modules
加上:
bcm2835-v4l2
sudo reboot ls /dev/video*
下面发现 video0 设备节点。
说明:如果执行前几步之后,请确认操作和指令正确的情况
- 运行如下命令:
sudo apt-get update sudo apt-get install libjpeg8-dev cmake cd Pan-Tilt-HAT/RaspberryPi/web_Python git clone https://github.com/jacksonliam/mjpg-streamer cd mjpg-streamer/mjpg-streamer-experimental/ sudo make clean all sudo ./start.sh
在谷歌浏览器(其他浏览器可能会无法显示)地址栏内输入树莓派 ip 地址,端口号 8080,点击 Stream 会实时显示摄像头拍摄的内容。
如果你需要了解更多可以查看:https://github.com/jacksonliam/mjpg-streamer
通过 BOTTLE 实现远程遥控
Bottle 是一个简单高效的遵循 WSGI 的微型 python Web 框架.通过 Bottle 可以快速实现 web控制,只支持python2。
安装库:
sudo apt-get install python-bottle cd Pan-Tilt-HAT/RaspberryPi/web_Python/ sudo python main.py
在谷歌浏览器(其他浏览器可能会异常)地址栏内输入树莓派 ip 地址,端口号 8001,会显示如下页面,点击按键可以遥控
支持手机和电脑控制,无需APP
手机控制:
电脑控制:
Jetson nano
安装库
安装函数库
- 打开终端界面,输入以下指令安装相应的函数库
sudo apt-get update sudo apt-get install python3-pip sudo pip3 install Jetson.GPIO sudo groupadd -f -r gpio sudo usermod -a -G gpio your_user_name sudo cp /opt/nvidia/jetson-gpio/etc/99-gpio.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules && sudo udevadm trigger
【注意】your_user_name 是你使用的用户名,比如说 waveshare
- 安装I2C
sudo apt-get install python-smbus
- 安装图像处理库:
sudo apt-get install python3-pil sudo apt-get install python3-numpy
下载程序
sudo apt-get install p7zip wget http://www.waveshare.net/w/upload/9/96/Pan-Tilt_HAT_code.7z 7zr x Pan-Tilt_HAT_code.7z -r -o./Pan-Tilt_HAT_code sudo chmod 777 -R Pan-Tilt_HAT_code cd Pan-Tilt_HAT_code/JetsonNano/
当然也可以下在我们Github上面的工程:
sudo git clone https://github.com/waveshare/Pan-Tilt-HAT cd Pan-Tilt-HAT/JetsonNano/
基础演示
#如果使用环境光,就执行这个 cd 1_Light_Sensor/ #如果使用云台,就执行这个 cd 2_Servo_Driver/
- python例程
#python2 cd python2 sudo python main.py #python3 cd python3 sudo python3 main.py
手机控制摄像头
测试摄像头
DISPLAY=:0.0 gst-launch-1.0 nvarguscamerasrc ! \'video/x-raw(memory:NVMM), width=1920, height=1080, format=(string)NV12, framerate=(fraction)30/1\' ! nvoverlaysink -e
正常摄像头拍到的数据会显示在屏幕上。按Ctrl + c结束
下载APP
下载安卓端手机APP:
https://www.waveshare.net/w/upload/8/8f/AlphaBot_LITE.apk
控制云台
在终端运行:
cd 3_Pan-Tilt+CAM sudo python main.py
一开始的会获取到Jetson的IP地址,这个在后面的APP会用到
后面的是摄像头工作了,并显示在了屏幕上。
手机端APP控制,打开App,点击Wifi控制:
输入IP地址:192.168.6.14
进入控制界面,只有右边的4个键可以用。
转动摄像头,屏幕实时显示摄像头数据
FAQ
- 无法做到精密控制,这个只是入门级的。
- 轻微的抖动是正常的,由于舵机转动的实际角度小于舵机转动的最小物理角度,此时会有电流维持他的角度,就会引起抖动。
- 使用的控制芯片对应的是PCA9685,在上电的时候,是有两个I2C地址的,一个是根据板载的电阻配置的地址,默认的是0X40,还有一个是0X70这个是ALLCALLADR寄存器配置出来的I2C地址,运行一遍例程即可清楚寄存器的值。还有一个I2C地址是环境光传感器的,它对应的是0x39
- 1.检测舵机线是否接错
- 2.两个舵机的接线接口交换一下看看是否是舵机的问题还是有一个接口没有输出。
- 3.先将其他配件拆除测试一下舵机是否转动
- 4.手上有其他树莓派的话,可以更换另外的树莓派测试一下,有可能是树莓派引脚出现了问题
- 5.更换新的树莓派系统测试一下,可能是系统进行了某些配置导致的,用纯净的系统测试一下