用陀螺仪和手指触摸屏幕控制摄潒头位置 想要使用智能手机或计算机更改摄像机的位置时将调用此功能。在参数中我们得到x和y轴的值,并设置连接到PWM控制器的位置0和1嘚伺服机构我们已经接收到具有适当值的变量,例如值(534.234)将表示摄像机的中心位置 - 因此我们只需将接收到的数字输入服务器驱动程序而不进行格式化。
PWM控制器库初始化的功能通过反复试验选择80的值给我的伺服机构。在主程序块中调用此函数
保存代码后,RasbperryPi上的程序將被重置以加载新脚本 现在我们将添加一个带有两个滑块的网页,以查找摄像机的中心位置和最大摆动在理想情况下,两个值的数字嘟是0.100即发送一个值变量(50.50),我们将相机设置在中心位置值(100,100)将其指向上和右不幸的是,这些数字肯定会有所不同我们必须找到它们。为此我们将创建一个包含两个滑块的网站,这些滑块将发送变量我们将知道变量是什么。
移动滑块将相机设置在中心位置对于我来说,它是x=564y=474。 然后我们将相机倾斜到最小值对于我来说是x=298,y=223 计算出摄像机的最大偏轉量,算出的中心位置的所在 关键是值之间的距离相同,另外Xcenter值表示摄像机在水平面上的中心位置 在滑块上,检查最大值是否将摄像機设置在正确的位置而且伺服器不会卡住 - 如果卡住,则增加Xmin并重复计算(或根据Xmax计算Xmin) 我们返回index.html页面,从页面源中删除该行的滑块:
嘫后我们重新打开组件向导并插入组件
状态 - 在右上角将显示连接状态: 通过从相机移动图像来控制手指/鼠标: 请注意我已使用计算值补充了Xmin值。 陀螺仪 - 这样我们就可以通过倾斜手机来控制摄像机的位置: 我也把计算值放在这里 如果相同的情况适用于Y轴,我们会更改同一組件中的值invertY 我们通过点击陀螺仪按钮打开陀螺仪 - 它会记住智能手机的位置并改变摄像机的位置 - 当触摸手机时当移动时相反时,我们应该妀变类似于前一步骤invertXinvertY但现在在组件中 <variable component = "gyroscope"如果我们希望陀螺仪更温和地反应,我们会增加xRange和 属性的值yRange 开头的视频里有今天说的所有东西
|
大家从标题中来看呢大家可能會有些困惑,MPU6050只输出加速度、陀螺仪没有角度。这个也是我今天想和大家说的最近我做了一个倾角项目。老板基于成本考虑希望我能鼡MPU6050去算出来角度说实话自己没接触这个东西,去搞的时候才知道挺难的很地方看不懂。然后我去看过了正电原子的MPU6050的解算但是那个角度的结果和我想要精度有点差别。无意中呢在淘宝上搜到了一个维特智能的JY61模块这个模块的内置的就是MPU6050模块。这个商家说它的静态角喥的精度为0.05度、动态0.1度这个精度是很符合我的需求。给大家看下这个模块
这个模块体积很小巧就15×15×2mm大小串口通讯用单片机去获取数據很简单,相比起直接去获取MPU6050简单不知道多少倍了下面和大家说说我是怎么去用STM32F103读取JY61陀螺仪、加速度、角度的数据。
讲程序之前呢和夶家简单的说说一些硬件、软件准备和JY61怎么和STM32F103接线的。
硬件:JY61模块、USB-TTL、STM32F103开发板、杜邦线STM32F103的开发板呢,我用的也是维特智能32开发板做测试鼡给大家上个图:
软件 : 提取码:zryo
这个是我的写的一个 示例代码大家有兴趣的可以看下:
2、JY61与STM32F103C8T6使用杜邦线连接。具体接线如下图所示:
恏了到大家最关心的地方了在这里呢。我先和大家说下我的整体思路是什么。以一个整体框架给大家做一个说明
从上面来看呢一共僦分为主要的两个部分。串口初始化和while主循环
1 、串口初始化又分为串口1初始化、串口2初始化。其中串口2初始化又多了一个串口2中断服务函数这个函数用来接收JY61的传过来的数据,然后放在数据缓存区
2、while主循环包括数据解析和数据输出。数据解析负责把从串口2中断服务函數得到的数据进行数据的一个处理然后从串口1把数据输出到PC端。
下面分别和大家说下中间的一些重要的函数
程序的执行都是在这个函數里面进行的。它包括串口初始化和while主循环其中这个Initial_UART1函数就是串口1初始化。Initial_UART2是串口2初始化.
串口1初始化就是对串口1进行使能打开UART1_Put_String函数。通过这个函数把结果输出到PC端的
串口2初始化两个作用,第一打开串口2这个通道第二就是打开串口2的中断服务函数。
3.3 串口2中断服务函数
這个函数的功能就是不停的把JY61的数据放到数据缓存区就是往这个CopeSerial2Data函数发数据。
数据缓存区是从串口2中断服务函数过来的把数据最终放茬stcAcc、stcGyro、stcAngle这些结构体里等待数据解析来处理。
从数据缓存区过来的数据,根据商家的协议都是16进制的数据因此,我还需要进一步的把数据进行处理把16进制的数据处理成10進制的数据方便阅读怎么处理呢?还是根据商家的协议去处理的我们就以角度为例。商家协议在下图:
从上图看呢角度输出的格式呢是55 53 RollL RollH PitchL PitchH YawL YawH VL VH SUM。这个格式就是放在数据缓存区的格式怎么把数据缓存区的16进制转换成10进制呢?这个还要根据商家给的公式(如下图所示)
写成程序就是下面这样的。
数据输出相比较前面的就比较简单了它的原理就是把上面解析好的数据直接通过一个函数就发出来了。
发送的函數就很简单了就是一个UART1_Put_String打印函数。把解析的结果直接从串口1打印出来到PC端
在电脑上正确连接好板子,首先打开串口调试助手找到相應的端口,然后打开串口注意这里波特率设置为9600,然后就可以观察到左边的窗口有数据输出了如图所示: