jjjjsum 发表于 2022-8-14 11:10:22

上手行空板第一帖,运用板载六轴陀螺仪自制水平仪

【灵感来源】拿到行空板的第一件事就是看看这块板具备什么功能,强大的行空板有光线传感器,麦克风,六轴陀螺仪,可触控的电容屏等一个智能手机所具备的大部分传感器,采用主频1.2GHz的cpu运行速度也是杠杠的。当看到陀螺仪的传感器时,我灵光一闪,这个长得像手机的行空板可以还原手机中的水平仪吗,于是这篇帖子出炉了。废话少说,直接进入主题。【展示视频】
https://www.bilibili.com/video/BV1iP411L7Mp
【材料清单】

【软件环境】
采用mind+软件进行编程,Mind+是一款拥有自主知识产权的国产青少年编程软件,集成各种主流主控板及上百种开源硬件,支持人工智能(AI)与物联网(IoT)功能,既可以拖动图形化积木编程,还可以使用Python/C/C++等高级编程语言,让大家轻松体验创造的乐趣。行空板还支持满血python编程,而不是micropython。

【功能介绍】
(1)当行空板处于水平面时,屏幕会提示为绿色且位于屏幕中央的文字可以实时显示当前行空板平面的角度。


(2).当行空板垂直与水平面时,屏幕会提示为红色。

                
(3)中央的运动圆会随姿态变化


【传感器介绍】
ICM-20689追踪物体运动6轴IMU惯性传感器在同一个硅芯片上配有3轴陀螺仪和3轴加速度计,是市场上性能的传感器,具有的噪音、的温度稳定性和的灵敏度精度。
【实验步骤】
第一步,捉到一块野生的行空板

第二步,选择编程环境

第三步,创建一个名为水平仪的文件

第四步,就可以开始进行愉快的编程了

第五步,编程结束,点亮自己的行空板看看效果吧

【完整程序】


#加载库文件
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from unihiker import GUI


def numberMap(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min


u_gui=GUI()
Board().begin()
背板=u_gui.draw_rect(x=0,y=0,w=240,h=320,width=320,color="#FFFFFF")
#初始化背板颜色
角度=u_gui.draw_text(text="0",x=110,y=140,font_size=16, color="#000000")
#初始化角度
y=u_gui.draw_circle(x=120,y=160,r=45,width=7,color="#FF99FF")
#初始化移动圆位置
while True:
    yShangXian = ((accelerometer.get_y() * -120) + 120)
    #y方向数据处理
    xShangXian = ((accelerometer.get_x() * 160) + 160)
    #x方向数据处理
    JiaoDu = round((numberMap(xShangXian, 0, 314, -90, 90)),)
    #将x方向的角度映射在-90到90区间中
    JiaoDuy = round((numberMap(yShangXian, 3, 237, -90, 90)),)
    #将y方向的角度映射在-90到90区间中
    ZhongHeJiaoDu = (JiaoDu + JiaoDuy)
    ZhongHeJiaoDu = round((numberMap(ZhongHeJiaoDu, -180, 180, -90, 90)),)
    角度.config(text=(str((ZhongHeJiaoDu * 2)) + str((str("度")))))
    y.config(x=yShangXian)
    y.config(y=xShangXian)
    if (((yShangXian > 118) and (yShangXian < 121)) and ((xShangXian > 155) and (xShangXian < 159))):
      背板.config(color="#00FF00")
    elif (((yShangXian > 118) and (yShangXian < 121)) and ((xShangXian > 312) and (xShangXian < 315))):
      背板.config(color="#FF0000")
    elif (((yShangXian > 235) and (yShangXian < 238)) and ((xShangXian > 159) and (xShangXian < 162))):
      背板.config(color="#FF0000")
    elif (((yShangXian > 2) and (yShangXian < 4)) and ((xShangXian > 159) and (xShangXian < 162))):
      背板.config(color="#FF0000")
    else:
      背板.config(color="#FFFFFF")
      #设置垂直和水平背板变色条件
    print((str((str("变量y"))) + str(yShangXian)))
    print((str((str("变量x"))) + str(xShangXian)))

【总结】
至此行空板自制水平仪的功能已经全部展示完成,水平仪源码放在下方附件,在测试过程中发现行动圆运动时有时会挡住中央的角度数字,好像没有找到类似图层的功能函数,请问还有其他解决办法吗











Forgotten 发表于 2022-8-16 18:14:16

很经典的项目{:5_175:}

小企鹅 发表于 2022-8-23 15:54:20

厉害厉害

ASH腻 发表于 2022-9-30 14:05:03

不错的项目,谢谢分享
页: [1]
查看完整版本: 上手行空板第一帖,运用板载六轴陀螺仪自制水平仪