置顶   精帖  树莓派使用 I2C接口云台扩展板 两自由度云台使用资料I2C,舵机云台

By frdhjgjgj

2023-05-13 18:35:42

浏览量84056

已赞8

Image

 ➥ 两自由度云台扩展板点此链接

这个云台是基于IIC总线通信的12位精度16通道PWM波输出的芯片。板载了TSL2581环境光传感器,通过检测光强辅助摄像头工作,同样通过 I2C 接口控制,还不会占用太多GPIO接口引脚资源。

一:参数

扩展板的参数:

工作电压: 3.3V/5V

控制芯片 PCA9685

逻辑电压: 3.3V

通信接口: I2C

产品尺寸: 56.6X65(mm)

二:通信协议

从上的得知使用的是I2C通信,I2C 通信,一条数据线,一条时钟线。 I2C 总线在传送数据过程中共有三种类型信号:开始信号、结束信号和应答信号。

Image

开始信号:SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。

结束信号:SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。

应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。

三:I2C写数据时序

Image

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

四:I2C读数据时序

Image

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

五:I2C地址

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

PCA9685 详细见PCA9685数据手册第7页

Image


TSL2581 详细见TSL2581数据手册第13页

Image

注:我们模块默认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 内核驱动(如下图)
Image

开启I2C然后重启一下树莓派:sudo reboot

1.安装库

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版本,如果没有出现说明安装出错
2.下载程序

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/
3.调试

接线方式:

棕色线 GND

红色线 5V

橙色线 S1/S0

Image

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

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

接下来把驱动板舵机和树莓派组装好

云台扩展板组装图纸

组装视频(视频前面小车可忽略,请看中间部分云台组装即可

效果图如下:(摄像头请自备哈)

A: 平移舵机
B: 倾斜舵机

Image


4.程序演示:

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

5.MJPG-STREAMER 软件实时监控

"MJPG-streamer",是用于从摄像头采集图像,把他们以流的形式通过基于 ip 的网络传输到浏览器。使用摄像头前必须运行 raspi-config 命令启用摄像头:

sudo raspi-config
选择 Enable Camera,选择 YES

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

sudo nano /etc/modules

加上:bcm2835-v4l2 
Image

那么系统启动之后,系统会加载这个文件中的模块名,重启系统:

sudo reboot
ls /dev/video*
下面发现 video0 设备节点。

Image

说明:如果执行前几步之后,请确认操作和指令正确的情况

运行如下命令:

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

Image

6.通过 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,会显示如下页面,点击按键可以遥控

Image

支持手机和电脑控制,无需APP

手机控制:

Image

电脑控制:

Image

7.更多资源下载:

问题?: 能否精密控制转动角度?

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


问题: 为什么抖动?

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


问题: 为什么扫描I2C地址会出现三个I2C设备地址?

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


问题: 突然有一个舵机不能转动?
答:

1.检测舵机线是否接错
2.两个舵机的接线接口交换一下看看是否是舵机的问题还是有一个接口没有输出。
3.先将其他配件拆除测试一下舵机是否转动
4.手上有其他树莓派的话,可以更换另外的树莓派测试一下,有可能是树莓派引脚出现了问题
5.更换新的树莓派系统测试一下,可能是系统进行了某些配置导致的,用纯净的系统测试一下









本文章最后由 超级版主2023-05-20 02:48 编辑
发表评论
请先 注册/登录 后参与评论

已有1 发布

默认   热门   正序   倒序
  • 2F
    hgszsvf2023-05-16 23:29:26   
    0
查看更多评论
(8) 分享
分享

扫二维码或复制链接分享该篇文章

取消
已有0次打赏
本站免责声明
1、本站资源,均来自网络或个人用户发布,版权归原作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !

侵权删除请致信 E-Mail:cxg88@qq.com