树莓派pico使用维特智能jy61/jy901/jy61p陀螺仪
材料:
- 树莓派pico开发板(焊好排针方便插线)
- jy61或jy61p或jy901
- 杜邦线4根,分别插rx、tx、vcc、gnd(具体见后文)
- 一根microusb数据线连接树莓派pico和电脑
因为我们使用串口通信获取这款陀螺仪的输出信息才能使用被模块处理后的角度值,所以选择用串口通信来获取陀螺仪的信息。
测试代码:
首先,创建一个空的.py文件,把以下代码复制粘贴进去,并命名TestIMU.py。
from machine import Timer, UART, Pinclass Imu:def __init__(self, uart):self.ACCData = [0.0] * 8self.GYROData = [0.0] * 8self.AngleData = [0.0] * 8self.FrameState = 0self.Bytenum = 0self.CheckSum = 0self.a = [0.0] * 3self.w = [0.0] * 3self.Angle = [0.0] * 3self.uart = uartdef recieveData(self, imuTimer): # 被用于周期性获取陀螺仪信息。print(self.Angle) # 打印上一次获取到的角度值if self.uart.any():self.DueData(self.uart.read(33))def DueData(self, inputdata):for data in inputdata:if self.FrameState == 0:if data == 0x55 and self.Bytenum == 0:self.CheckSum = dataself.Bytenum = 1continueelif data == 0x51 and self.Bytenum == 1:self.CheckSum += dataself.FrameState = 1self.Bytenum = 2elif data == 0x52 and self.Bytenum == 1:self.CheckSum += dataself.FrameState = 2self.Bytenum = 2elif data == 0x53 and self.Bytenum == 1:self.CheckSum += dataself.FrameState = 3self.Bytenum = 2elif self.FrameState == 1:if self.Bytenum < 10:self.ACCData[self.Bytenum - 2] = dataself.CheckSum += dataself.Bytenum += 1else:if data == (self.CheckSum & 0xff):self.a = self.get_acc(self.ACCData)self.CheckSum = 0self.Bytenum = 0self.FrameState = 0elif self.FrameState == 2:if self.Bytenum < 10:self.GYROData[self.Bytenum - 2] = dataself.CheckSum += dataself.Bytenum += 1else:if data == (self.CheckSum & 0xff):self.w = self.get_gyro(self.GYROData)self.CheckSum = 0self.Bytenum = 0self.FrameState = 0elif self.FrameState == 3: # angleif self.Bytenum < 10:self.AngleData[self.Bytenum - 2] = dataself.CheckSum += dataself.Bytenum += 1else:if data == (self.CheckSum & 0xff):self.Angle = self.get_angle(self.AngleData)#d = self.a + self.w + self.Angleself.CheckSum = 0self.Bytenum = 0self.FrameState = 0def get_acc(self, datahex):axl = datahex[0]axh = datahex[1]ayl = datahex[2]ayh = datahex[3]azl = datahex[4]azh = datahex[5]k_acc = 16.0acc_x = (axh << 8 | axl) / 32768.0 * k_accacc_y = (ayh << 8 | ayl) / 32768.0 * k_accacc_z = (azh << 8 | azl) / 32768.0 * k_accif acc_x >= k_acc:acc_x -= 2 * k_accif acc_y >= k_acc:acc_y -= 2 * k_accif acc_z >= k_acc:acc_z -= 2 * k_accreturn acc_x, acc_y, acc_zdef get_gyro(self, datahex):wxl = datahex[0]wxh = datahex[1]wyl = datahex[2]wyh = datahex[3]wzl = datahex[4]wzh = datahex[5]k_gyro = 2000.0gyro_x = (wxh << 8 | wxl) / 32768.0 * k_gyrogyro_y = (wyh << 8 | wyl) / 32768.0 * k_gyrogyro_z = (wzh << 8 | wzl) / 32768.0 * k_gyroif gyro_x >= k_gyro:gyro_x -= 2 * k_gyroif gyro_y >= k_gyro:gyro_y -= 2 * k_gyroif gyro_z >= k_gyro:gyro_z -= 2 * k_gyroreturn gyro_x, gyro_y, gyro_zdef get_angle(self, datahex):rxl = datahex[0]rxh = datahex[1]ryl = datahex[2]ryh = datahex[3]rzl = datahex[4]rzh = datahex[5]k_angle = 180.0angle_x = (rxh << 8 | rxl) / 32768.0 * k_angleangle_y = (ryh << 8 | ryl) / 32768.0 * k_angleangle_z = (rzh << 8 | rzl) / 32768.0 * k_angleif angle_x >= k_angle:angle_x -= 2 * k_angleif angle_y >= k_angle:angle_y -= 2 * k_angleif angle_z >= k_angle:angle_z -= 2 * k_anglereturn angle_x, angle_y, angle_zMyIMU = Imu(UART(1, 115200, tx=Pin(4), rx=Pin(5))) # 选4和5分别用于tx和rx,并选用115200波特率。
imuTimer = Timer()
imuTimer.init(period=20, mode=Timer.PERIODIC, callback=MyIMU.recieveData)
接线:
树莓派pico GP4 ---> 陀螺仪rx
树莓派pico GP5 ---> 陀螺仪tx
树莓派pico 3v3(OUT)或者5v电源 ---> 陀螺仪vcc
树莓派pico GND ---> 陀螺仪GND
补充说明:
选GP4和GP5分别用作UART1 TX和UART1 RX。
这段代码把陀螺仪写成了一个类,方便管理变量,也方便定义多个陀螺仪。
“MyIMU = Imu(UART(1, 115200, tx=Pin(4), rx=Pin(5)))”声明了一个名为MyIMU的对象。
用定时器20ms周期性执行“recieveData”函数获取串口信息。
运行TestIMU.py,即可看见一串角度值不断打印。
参考维特智能官方提供的python代码:
Python连接维特智能角度传感器JY61/JY901的方法_Fred_1986的博客-CSDN博客
树莓派pico使用维特智能jy61/jy901/jy61p陀螺仪相关推荐
- 51单片机连接维特智能JY61串口6轴加速度陀螺仪(通过串口中断实现数据的现实)
51单片机连接维特智能JY61串口6轴加速度陀螺仪(通过串口中断实现数据的现实) 1.JY61的初始化 利用USB转TTL模块连接只需要连接: 打开厂家赠送的上位机软件,模块出厂默认设置使用串口,波特 ...
- 【UAV】陀螺仪数据分析,以维特智能 JY901B 为例
文章目录 简介 1 加速度 Acceleration 2 陀螺仪 Gyroscope 3 欧拉角 Euler angles 4 磁场 Magnetic 5 四元数 Quaternion 6 时间 7 ...
- 树莓派53/100 - Pico小车v4版本,蓝牙、陀螺仪之后,再加上OLED显示屏
我的树莓派Pico小车接上了蓝牙.陀螺仪之后,今天再把OLED显示屏接上,OLED的电源是3.3V,SDA/SCL分别接GP4/GP5,代码增加一些.对于OLED的SSD1306显示模块不熟悉的,可以 ...
- Python连接维特智能角度传感器JY61/JY901的方法
文章目录 1. 准备工具 2. 环境安装 3.硬件连接 4. 运行代码 5.运行结果 1. 准备工具 python 3.9.1安装包 三合一USB转串口模块 JY61或JY901姿态角度传感器模块 示 ...
- 智能垃圾桶(十二)——电路图软件fritzing+raspberry pi pico(树莓派pico)
文章目录 一.起因 二.raspberry pi pico元件库 三.小试牛刀 一.起因 总是看到这种图,却一直不知道叫啥,上午搜索半天才知道是电路图软件fritzing,找了找官网,发现不是免费,伤 ...
- 维特智能六轴姿态传感器JY61P_stm32f1xx驱动代码解析
目录 硬件准备/上位机直连 代码驱动 关于官方给出的示例 代码功能及其走位 1.怎样不依托代码验证传感器的某个功能是否有效或者能用? 2.写寄存器的方式 3.为什么不使用WIT私有协议中的关闭上电输出 ...
- 维特智能IMU 接入ROS发布IMU数据类型话题
#维特智能IMU 接入ROS发布IMU数据类型话题 1.准备工作 1.1安装串口功能包 sudo apt-get install ros-melodic-serial 1.2创建功能包 $ cd ~/ ...
- 轻松玩转树莓派Pico之三、Windows+Ubuntu虚拟机模式下VSCode C语言开发环境搭建
目录 1.VSCode下载与安装 2.VSCode基础插件安装 3.SSH连接与配置 4.SSH免密登录 5.Pico编译 工欲善其事,必先利其器.之前的介绍的Pico流程都是通过命令行编译,没有进行 ...
- 树莓派Pico直流电机接口技术及PWM电机调速控制MicroPython编程
内容目录: 一.树莓派Pico开发板直流电机接口技术 1.H桥驱动电路的基本工作原理 2.典型H桥驱动电路分析 3.DRV8833双H桥电机驱动模块介绍 4.Pico开发板与直流电机接口 二.Pico ...
最新文章
- Windows 使用 Gogs 搭建 Git 服务器
- boost::sort模块实现整数排序与右移函子反向排序示例
- v8学习笔记(五) 编译过程
- 惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密
- Java知识积累——同时输出到控制台和指定文件,或直接输出到指定文件
- 小心了!一大波存储厂商术语正在靠近
- Bean和Spirng模块
- 现在每天虽然比较早到达公司,鸡腿中午8:30接到施电话
- PowerShell Gallery .nupkg手动下载将.nupkg文件重命名为.zip,然后将内容提取到本地文件夹中
- NCU SEM 发文检索2015年
- win10安装Vmware虚拟机黑屏的解决
- 以自动开发票为例,解析RPA(机器人流程自动化)在财务场景的使用
- 运行时异常和受检查异常的区别
- cisco packet tracer_交换机配置/mac地址表(图解version:8+)
- centos 6.8使用wine安装QQ2016
- 基于51单片机的智能门禁系统仿真LCD12864显示原理图程序
- MATLAB---csape斜率拟合
- C#Lesson09 面向对象
- 数学建模常用模型18 :多维标度法
- Memtest86 —— Modulo20 算法
热门文章
- 手把手教学爬小姐姐图片(jsoup)
- realsense D435i gazebo slam(px4)仿真(转载)
- Improved Techniques for Grid Mapping With Rao-Blackwellized Particle Filters-翻译
- 云服务器8M公网带宽下载速度分析
- 旺财年的汪式编程人生
- Windows Server 2016 安装步骤
- android一行命令实现多渠道打包并自动进行资源混淆(Walle,AndResGuard)
- 代码随想录训练营day60
- Facebook想知道它是否破坏民主
- 什么是Keepalived?