最近很久没更新技术文章了,因为一直忙,本职工作也忙,单子也多,特别是前一阵子接了同一所大学的N个毕设(没有人能抗拒返现的诱惑),耗费比较多精力(主要是后期解答调试很耽误精力,看来我以后得做个截止时限),之后又连着做了两个商单,没闲着。
今天讲的也是商单引出的,有哥们托我写个摩尔斯电码的手表,商用的要求,不到毕设的预算,纯粹出于对这个项目的兴趣,我还是接下了。
这里重点研究了mpu6050,作为毕设最摆烂的六轴感应模块,以前我只知道输出原始数据没有深究,这次商用需要就对着手册好好撸了一遍,发现还是有很多东西可以深究的。
首先是mpy库,往上能找到一堆,但是我认为最专业的还是这个:
github mpu6050
一看就比其他的专业,一是种类全,把mpu9150 9250也都涵盖进去了,另外还带了简单的数据分析,这个是很可贵的,不然原始数据还是太糙,说明不了什么问题。本次需要解决的问题有两个:
一、mpu6050怎么实现中断
都看见有个Int引脚,具体咋用,资料还真是贼少,最后终于在CSDN另一位大佬那里找到了,看这里:
另一位大佬的mpu6050中断机制详解
参照这个就省事多了,说白了就是寄存器写入,下面是我的代码,实现了简单的加速度中断:

#mpu6050加速度中断演示 by jd3096 vx jd3096   20220525
from imu import MPU6050
from machine import I2C,Pin
import timei2c = I2C(sda=Pin(17), scl=Pin(16))
print(i2c.scan())
imu = MPU6050(i2c)
int_irq=Pin(26,Pin.IN,Pin.PULL_UP)
def fun(a):print('加速度中断')int_irq.irq(fun,Pin.IRQ_FALLING)
'''
I2C_Write(GYRO_ADDRESS,MOT_THR,0x25);          //设置加速度阈值为74mg
I2C_Write(GYRO_ADDRESS,MOT_DUR,0x14);          //设置加速度检测时间20ms
I2C_Write(GYRO_ADDRESS,CONFIG,0x04);           //配置外部引脚采样和DLPF数字低通滤波器
I2C_Write(GYRO_ADDRESS,ACCEL_CONFIG,0x1C);     //加速度传感器量程和高通滤波器配置
I2C_Write(GYRO_ADDRESS,INT_PIN_CFG,0X1C);      //INT引脚低电平平时
I2C_Write(GYRO_ADDRESS,INT_ENABLE,0x40);       //中断使能寄存器
'''
imu._write(0x25,0x1f,imu.mpu_addr)
imu._write(0x14,0x20,imu.mpu_addr)
imu._write(0x04,0x1a,imu.mpu_addr)
imu._write(0x1c,0x1c,imu.mpu_addr)
imu._write(0x1c,0x37,imu.mpu_addr)
imu._write(0x40,0x38,imu.mpu_addr)
#print(imu.accel.xyz)
# print(imu.gyro.xyz)
# print(imu.temperature)
# print(imu.accel.z)

有人会问要中断有啥用,直接拿数据多好,我个人理解是中断是简单可靠的方式,最重要的是省电,esp32如果一直去检测状态判断,会浪费资源,再有就是功耗的问题了,有了中断平时就可以一直睡眠了,超级省电,做手表肯定需要这个逻辑啊,上面代码亲测好使,用力晃会引发上升沿中断,Nice!
第二个问题,如何实现抬手亮
这个我在往上找了一下,找到了思路:先检测运动,再检测是否水平,然后如果这俩间距小于一定时间,就视为抬手逻辑,有了思路咱就啥都不怕了,撸代码!

#mpu6050抬手亮逻辑演示 by jd3096 vx jd3096   20220525
from imu import MPU6050
from machine import I2C,Pin
import timei2c = I2C(sda=Pin(17), scl=Pin(16))
print(i2c.scan())
imu = MPU6050(i2c)while 1:time.sleep_ms(100)print(imu.gyro.xyz)if abs(imu.gyro.x)>100 or abs(imu.gyro.y)>100 or abs(imu.gyro.z)>100:print('运动检测')s=time.ticks_ms()check=0while time.ticks_ms()-s<200:if abs(imu.accel.x)<0.1 and abs(imu.accel.y)<0.1:check=1if check==1:print('----------------------------')print('抬手亮')

上面代码亲测可用,动的时候会显示运动检测,并在200ms内检测是否水平,只有200ms内同时达到两个逻辑才是抬手,亲测真的挺好用,阈值也可以自己调节。
手表的逻辑是既要省电又要抬手亮,两一结合完事儿,中断先唤醒,然后看是不是水平,是的话亮屏进入逻辑,不是的话继续睡,当然我想的这个不一定是最优解,有想法欢迎评论区探讨一下子。

micropython 实现手表抬手亮屏以及mpu6050中断相关推荐

  1. Android加速度传感器 -- 抬手亮屏

    android系统提供以下传感器供应用层使用,具体如下: // android.hardware.Sensor TYPE_ACCELEROMETER 1 // 加速度传感器 TYPE_MAGNETIC ...

  2. Android抬手亮屏

    抬手亮屏主要是用到了手机的加速度传感器,但不同厂商的加速度传感器不是一直开着的,有些为了节省电量,会 在手机熄屏后强制关闭加速度传感器 想要实现抬手亮屏,务必在androidmanifest.xml中 ...

  3. vivos9抬手亮屏功能取消设置方法

    抬手亮屏功能只要将手机倾斜即可使屏幕亮起.但这个功能会在无形之间消耗许多电量.那vivos9抬手亮屏功能该怎么关呢?相信很多朋友都很好奇.换换来为大家详细介绍一下吧.希望能帮到你! vivos9抬手亮 ...

  4. android 手机亮屏广播_不用羡慕了!Android 手机这样轻松开启「抬手亮屏」和「跑马灯」的技能...

    在 Android 4.x 时代,手机想要深度定制可以说是困难重重.你必须先 root.解锁 recovery,再安装 Xposed,你才有可能深度定制你的手机,解锁一些新的功能. 可随着 Andro ...

  5. BMA250 BMA253 ---国产的完美代替者 SC7A20 7A21-抬手亮屏传感器 技术指导代码分享欢迎索取

    SC7A20采用标准 I2C 串行接口通信, 具备智能休眠.唤醒及状态监测功能.测量量程:±2g/±4g/±8g/ ±16g:数据输出率:1Hz/10Hz/25Hz/50Hz/100Hz/200Hz/ ...

  6. 华为gt2抬腕亮屏设置教程介绍

    华为gt2一直深受不少用户的喜爱.其中还内置了一个抬腕亮屏功能.开启后当用户抬起手腕手表就会自动亮屏.相信很多朋友还不清楚抬腕亮屏如何设置?快来看看为大家整理的详细教程吧! 华为gt2抬腕亮屏设置教程 ...

  7. android人脸解锁亮屏,EMUI 8.0升级加入全新人脸解锁 抬腕亮屏功能:快来看看如何开启...

    作为华为高端机型,华为mate10以及mate10 pro终于在近日收到了基于安卓8.0 的EMUI 8.0升级,升级之后EMUI的系统版本号为8.0.0.128SP2. 华为mate10系统更新 除 ...

  8. Android 亮屏流程分析

    https://blog.csdn.net/FightFightFight/article/details/79808100 相关文章: [Android Framework] 8.1 PowerMa ...

  9. Android 按电源键亮屏/息屏流程分析

    上一篇介绍了Android 电源键事件流程分析,其中分析了,在按电源键,长按的时候,弹出系统菜单,以及点击其中的关机按键,都执行了哪些操作.这一篇,作为上一篇的补充,主要分析一下,Android按键亮 ...

最新文章

  1. Windows Azure-2.5天免费深度技术训练营——面向软件工程师和架构师
  2. 新上映的电影不在影院也一样能看到
  3. java日志处理汇总
  4. 搭建elsticsearch集群 报错 failed to send join request to master [{data-node-0}(已经测试)
  5. [转]leo谈“80后”程序员为什么找不到工作?(1)
  6. MySQL 索引 :哈希索引、B+树索引、全文索引
  7. Linux设置 cockpit 自动开机启动
  8. 人不是被事物本身困扰是什么理论_你常常被负面情绪困扰么?怎么释放和解决负面情绪...
  9. 小波变换与傅里叶变换的区别
  10. 基于安卓的宠物店预约商城APP源码
  11. 影音先锋 android下载地址,影音先锋安卓版下载
  12. 小学生计算机课上的小游戏,信息技术教师必备:适合小学生玩的游戏
  13. 从含有数字的字符串中提取数字
  14. macos 系统固件 路径_itunes下载固件在哪里 itunes下载固件位置【介绍】
  15. OpenGL 栅格化
  16. 欧盟授权代表EU Representative是什么?
  17. 音视频封装到MP4/MP3ffmpeg(十四)
  18. 中国10大PCBA加工厂商排名
  19. 编写程序显示一个两位的数的英文单词
  20. nyist 三点顺序

热门文章

  1. blend界面右侧 大纲视图和属性窗口不见了?
  2. java求偶数位之和,JavaSE (四)程序流程控制 -- if 、switch、for、while
  3. Vmware虚拟机Ubuntu20无法上网
  4. 「传统的互联网模式」与「互联网」,其实是有着本质的区别的
  5. Tensorflow快餐教程(3) - 向量
  6. java籍贯怎么定义,籍贯是什么意思怎么写比如(全面解说籍贯定义及其写法)...
  7. 不少Android应用为何丧心病狂地进行链式启动及针对开发者的解决方案
  8. Ubuntu 下安装 Yar 扩展遇到的问题以及解决方案
  9. 《黑客与画家》读后感——不能说的话
  10. 逆水寒 服务器正在维护,逆水寒:有超过一半的服务器已经变成紫色了,鬼才策划还在开新区...