Pan-Tilt HAT

来自Waveshare Wiki
跳转至: 导航搜索
Pan-Tilt HAT
Pan-Tilt HAT
{{{name2}}}
{{{name3}}}
板载接口
RPi

提供树莓派和Jetson nano使用例程

产品概述

产品参数

  • 工作电压: 3.3V/5V
  • 控制芯片 PCA9685
  • 逻辑电压: 3.3V
  • 通信接口: I2C
  • 产品尺寸: 56.6X65(mm)

控制器

本产品控制器为PCA9685,是一款基于IIC总线通信的12位精度16通道PWM波输出的芯片。并且板载TSL2581环境光传感器,通过检测光强辅助摄像头工作,同样通过 I2C 接口控制,不会占用太多接口引脚资源。

通信协议

从上的得知使用的是I2C通信,I2C 通信,一条数据线,一条时钟线。 I2C 总线在传送数据过程中共有三种类型信号:开始信号、结束信号和应答信号。
Pan-tilt hat i2c.png
开始信号:SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。
结束信号:SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。

  • I2C写数据时序

Pan-tilt hat i2cwrite.png
首先主机(即树莓派,后面统称为主机)会发送一个开始信号,然后将其 I2C 的 7 位地址与写操作位组合成 8 位的数据发送给从机(即 TSL2581 传感器模块,后面统称为从机),从机接收到后会响应一个应答信号,主机此时将命令寄存器地址发送给从机,从机接收到发送响应信号,此时主机发送命令寄存的值,从机回应一个响应信号,直到主机发送一个停止信号,此次 I2C 写数据操作结束

  • I2C读数据时序

Pan-tilt hat i2cread.png
首先主机会发送一个开始信号,然后将其 I2C 的 7 位地址与写操作位组合成 8 位的数据发送给从机,从机接收到后会响应一个应答信号,主机此时将命令寄存器地址发送给从机,从机接收到发送响应信号,此时主机重新发送一个开始信号,并且将其 7 位地址和读操作位组合成 8 位的数据发送给从机,从机接收到信号后发送响应信号,再将其寄存器中的值发送给主机,主机端给予响应信号,直到主机端发送停止信号,此次通信结束

I2C地址

从上面的通信可知,PCA9685和TSL2581两个都是使用I2C通信,那么需要设置不同的I2C地址,地址不一样,就不会影响通信

  • PCA9685

Pan-tilt hat i2caddr.png
详细见PCA9685数据手册第7页

  • TSL2581

Pan-tilt hat i2caddr2.png
详细见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 内核驱动

RPI open i2c.png
然后重启树莓派:

sudo reboot

安装库

如果使用bookworm系统,只能使用lgpio库,bcm2835跟wiringPi无法安装与使用

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/

当然也可以下在我们Github上面的工程:

sudo git clone https://github.com/waveshare/Pan-Tilt-HAT
cd Pan-Tilt-HAT/RaspberryPi/web_Python
sudo git clone https://github.com/jacksonliam/mjpg-streamer
  • 使用以上是两种获取代码的方式,执行一种就可以,不要两个都执行

调试

连接:
Pan-tilt hat i2connet.png
注意连线:

棕色线 GND
红色线 5V
橙色线 S1/S0

运行测试代码前一定注意倾斜舵机安装位置,安装位置不好可能会导致舵机发热烧毁,先不组装舵机,保证舵机可以旋转360不会有障碍,连接硬件,平移舵机连接S1,倾斜舵机连接S0。然后打开程序文件夹中test文件夹

cd test
make clean
make
sudo ./main

运行后面,舵机全部旋转到0度(舵机旋转角度为0到180,也就是旋转到初始位置),然后切断电源组装,注意不要旋转倾斜舵机

组装

组装图如下:以下图示的为RPi-Camera-I,其余摄像头会略微有些不同,后面会有单独讲解。
Pan-Tilt-HAT-Assembly 780 01.jpg
Pan-Tilt-HAT-Assembly 780 02.jpg
Pan-Tilt-HAT-Assembly 780 03.jpg
组装视频参考1分19秒:http://www.waveshare.net/wiki/AlphaBot2-PiZero-Video
Pan-tilt hat servoAB.png
A: 平移舵机
B: 倾斜舵机

其他摄像头如何组装

模块配件提供了一包M2的独立螺丝包,一共5颗螺丝10个螺帽,摄像头全部是先给摄像头上好M2螺丝,抬高摄像头然后再连接亚克力板,将亚克力板使用螺丝锁好
M2 screw package.png
目前只支持以下摄像头
RPi Camera (I)与RPi Camera (B)
RPi Camera (I).png
RPi Camera V2
RPi Camera V2.png
RPi Camera (E)、RPi Camera (G)、RPi Camera (F)、RPi Camera (J)、RPi Camera (M)
RPi Camera (E).png
RPi Camera (H)
RPi Camera (H).png
RPi NoIR Camera V2
RPi NoIR Camera V2.png
RPi IR-CUT Camera(由于此摄像头孔位是非标准的,所以只能锁上两颗)
RPi IR-CUT Camera.png

演示例程

基础演示

#在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

Rpi Enable Camera.png

  • 如果是使用 CSI 接口的摄像头,那么系统找不到/dev/video0 的设备节点。需要在/etc/modules 文件中添加一行 bcm2835-v4l2:
sudo nano /etc/modules

加上:

bcm2835-v4l2 

Pan-tilt hat addmodules.png
那么系统启动之后,系统会加载这个文件中的模块名,重启系统:

sudo reboot
ls /dev/video*

下面发现 video0 设备节点。
Pan-tilt hat addmodules1.png
说明:如果执行前几步之后,请确认操作和指令正确的情况

  • 运行如下命令:
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
Pan-tilt hat cam.png

通过 BOTTLE 实现远程遥控

Bottle 是一个简单高效的遵循 WSGI 的微型 python Web 框架.通过 Bottle 可以快速实现 web控制
安装库:

sudo apt-get install python-bottle
cd Pan-Tilt-HAT/RaspberryPi/web_Python/
sudo python main.py

在谷歌浏览器(其他浏览器可能会异常)地址栏内输入树莓派 ip 地址,端口号 8001,会显示如下页面,点击按键可以遥控
Pan-tilt hat ip.png
支持手机和电脑控制,无需APP
手机控制:
Pan-tilt hat phonecontrol.png
电脑控制:
Pan-tilt hat PCcontrol.png

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/Pan-Tilt\ HAT/

当然也可以下在我们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: http://www.waveshare.net/w/upload/8/8f/AlphaBot_LITE.apk

控制云台

在终端运行:

cd 3_Pan-Tilt+CAM
sudo python main.py

Pan-tilt hat appcontrol.png
一开始的会获取到Jetson的IP地址,这个在后面的APP会用到
后面的是摄像头工作了,并显示在了屏幕上。

手机端APP控制,打开App,点击Wifi控制:
输入IP地址:192.168.6.14
进入控制界面,只有右边的4个键可以用。
Pan-tilt hat appcontrol1.png
转动摄像头,屏幕实时显示摄像头数据
Pan-tilt hat appcontrol2.png

文档

程序

数据手册


批量下载教程——请戳Download-icon.png


  • 无法做到精密控制,这个只是入门级的。


  • 轻微的抖动是正常的,由于舵机转动的实际角度小于舵机转动的最小物理角度,此时会有电流维持他的角度,就会引起抖动。


  • SG90是入门级别舵机,主要是里面的电位器不准的原因,使用一段时间就发生了松动,于是就导致了齿轮与理论上转的角度不一致,导致响声并发热。


  • 使用的控制芯片对应的是PCA9685,在上电的时候,是有两个I2C地址的,一个是根据板载的电阻配置的地址,默认的是0X40,还有一个是0X70这个是ALLCALLADR寄存器配置出来的I2C地址,运行一遍例程即可清楚寄存器的值。还有一个I2C地址是环境光传感器的,它对应的是0x39