164浏览
查看: 164|回复: 0

[K10项目分享] 基于micropython的三轴传感器小应用

[复制链接]
在上一篇,我说明了官方的micropython固件可以使用LVGL所以本篇结合LVGL实现一个三轴传感器小应用。
1.行空板K10介绍
行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。

主要特点
集成摄像头&内置算法,可进行离线图像检测
集成麦克风&内置算法,可进行离线语音识别
集成扬声器&内置算法,可进行离线语音合成
2.8寸彩色屏幕,数据展示更清晰
集成度高,利于教学
接口丰富,兼容软件多,扩展性好


2.LVGL介绍
LVGL(轻量级和多功能图形库)是一个免费的开源图形库,提供创建具有易于使用的图形元素、美观的视觉效果和低内存占用的嵌入式 GUI 所需的一切。


3.测试代码
结合LVGL和三轴传感器的小应用参考代码如下:
  1. from unihiker_k10 import screen,acce
  2. import time,gc
  3. import lvgl as lv
  4. import fs_driver,math
  5. fs_drv = lv.fs_drv_t()
  6. fs_driver.fs_register(fs_drv, 'S')
  7. screen.init(dir=2)
  8. scrn = lv.screen_active()
  9. scrn.set_style_bg_color(lv.color_hex(0x000000), 0)
  10. class AccelerometerData:
  11.     def __init__(self, acc_x, acc_y, acc_z):
  12.         self.acc_x = acc_x
  13.         self.acc_y = acc_y
  14.         self.acc_z = acc_z
  15.     def calculate_angles(self):
  16.         # 计算X轴的角度
  17.         temp = self.acc_x / math.sqrt(self.acc_y**2 + self.acc_z**2)
  18.         self.AngleX = math.degrees(math.atan(temp))
  19.         # 计算Y轴的角度
  20.         temp = self.acc_y / math.sqrt(self.acc_x**2 + self.acc_z**2)
  21.         self.AngleY = math.degrees(math.atan(temp))
  22.         # 计算Z轴的角度
  23.         temp = self.acc_z / math.sqrt(self.acc_x**2 + self.acc_y**2)
  24.         self.AngleZ = math.degrees(math.atan(temp))
  25.         
  26.         
  27. # 2. 封装要显示的组件
  28. class MyWidget():
  29.     def __init__(self, scr):
  30.         # 外圈
  31.         arc = lv.arc(scr)
  32.         arc.set_size(222, 222)
  33.         arc.set_bg_angles(0, 360)
  34.         arc.set_angles(0, 360)
  35.         arc.center()
  36.         # 实心小球
  37.         led  = lv.led(scr)
  38.         led.set_brightness(150)
  39.         led.set_color(lv.palette_main(lv.PALETTE.RED))
  40.         led.align(lv.ALIGN.CENTER, 0, 0)
  41.    
  42.         
  43.         labelx = lv.label(scr)
  44.         labelx.set_width(310)
  45.         labelx.align(lv.ALIGN.TOP_LEFT, 5, 0)
  46.         
  47.         labely = lv.label(scr)
  48.         labely.set_width(310)
  49.         labely.align(lv.ALIGN.TOP_LEFT, 5, 20)
  50.         
  51.         labelz = lv.label(scr)
  52.         labelz.set_width(310)
  53.         labelz.align(lv.ALIGN.TOP_LEFT, 5, 40)
  54.         while True:
  55.             arc.set_angles(0, 360)
  56.             p = AccelerometerData(acce.read_x(), acce.read_y(), acce.read_z())
  57.             p.calculate_angles()
  58.             labelx.set_text("X={:+.2f}".format(acce.read_x()))
  59.             labely.set_text("Y={:+.2f}".format(acce.read_y()))
  60.             labelz.set_text("Z={:+.2f}".format(acce.read_z()))
  61.             led.align(lv.ALIGN.CENTER,round(p.AngleX),-round(p.AngleY))
  62. # 创建要显示的组件
  63. MyWidget(scrn)
复制代码
感兴趣想要了解原理的后台私信我,我不过多讲解。
4.效果
基于micropython的三轴传感器小应用图1
拍得有点模糊,大家可以自行尝试去感受
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail