基于STEP Pico制作电子可视化水平仪
本项目基于STEP Pico板卡,利用办卡上的加速度传感器,获取并分析板卡的姿态信息,制作一款简易水平仪
标签
嵌入式系统
显示
2023寒假在家练
lst
更新2023-03-29
北京理工大学
472

项目介绍:

本项目基于STEP Pico板卡以及Thonny编程环境制作了一个水平仪。该水平仪通过OLED屏进行可视化显示,OLED屏被分为左右两部分:在屏幕的左侧有一个小球,当板卡处于水平位置时,小球处在屏幕左侧的正中央,当板卡产生各个角度的倾斜时,小球随着板卡的倾斜在屏幕上滚动;在屏幕的右侧显示板卡的倾斜信息,包括坐标信息以及板卡的倾斜状态。

设计思路:

       本项目设计从STEP Pico板卡的硬件模块出发,根据mma7660这一芯片的功能特点进行设计。mma7660是一个加速度传感器,可以获取XYZ三轴收到的加速度大小,然后由IIC进行输出。在Thony平台上,我们可以通过程序控制获取mma7660得到的三个方向的加速度,并根据自己的需求将其进行某一范围内的量化。根据这一量化值,就可以根据数值区间划分得出板卡的倾斜状态,并据此控制OLED屏幕的显示。

框图:

FljPAnVezafB0cYVIxLIbD8sM2vH

 

硬件介绍:

1. mma7660:

      mma7660是一种加速度传感器,可以在-1.5g~1.5g范围内获取XYZ三轴的加速度大小,并由数字IIC进行传输,具有低功耗的特点,其中的低通滤波器可以用于0g的增益误差的补偿。模拟工作电压在2.4~3.6V,数字工作电压在1.71~3.6V,可以进行三轴取向/运动的检测,被广泛运用在手机、PDA以及游戏的运动检测等。

      mma7660是一种电容式g-sensor,与压阻不同的是,电容式传感器很难在同一个结构中同时感受到三个轴的变化,通常是XYZ分开来的。mma7660加速度传感器主要由两部分组成:G-单元和信号调理ASIC电路(见下图)。FqlEq-QebrEODsyNDqqu808pWw4i

2. OLED

      OLED属于一种电流型的有机发光器件,是通过载流子的注入和复合而致发光的现象,发光强度和注入的电流成正比。OLED在电场的作用下,阳极产生的空穴和阴极产生的电子就会发生移动,分别向空穴传输层和电子传输层注入,迁移到发光层。当二者在发光层相遇时,产生能量激子,从而激发发光分子最终产生可见光。OLED器件由基板、阴极、阳极、空穴注入层、电子注入层、空穴传输层、电子传输层、空穴阻挡层、电子阻挡层和发光层等部分组成,其结构图大致如下:

FtcjQ-J4vuPj3hXvkdOmVlRUgT4q

 

实现的功能:

       本项目实现电子可视化水平仪,主要由两部分组成,一部分是会随着板卡倾斜而滚动的小球,另一部分是板卡倾斜状态的文字显示。

       功能展示图如下,屏幕右侧下方显示的字符中,CT表示板卡基本处于水平状态。UP表示板卡朝上倾斜,DW表示板卡朝下倾斜,LEFT表示板卡朝左倾斜,RIGHT表示板卡朝右倾斜。

       根据小球所处的位置,将显示区域分为了九个部分,所以文字显示部分共有九种状态:CT、UP、DW、RIGHT、LEFT、UP RIGHT、UP LEFT、DW RIGHT、DW LEFT。当小球处在不同的区域时,字符显示区会显示不同的状态。高清展示图如下所示(允许上传的最清晰的了,由于OLED屏幕刷新速度和手机相机捕捉速度不匹配的问题,有的照片部分字符无法显示)。可以看到图中的小球出现位置与字符显示相对应。

FnfcKV4Iilg7tlsN0DiVfepeYCohFmRIxjcMlNVl0buF_c9M-9sxYGh3FkM8Obg0bre_okk39Ut3Y-tcs611

Fm1XHrfpVAYpB5Wr10vfov6J9IJgFne7CyWKvWapU6G3hU1Y7Wpb_rQ1FqW42q_lBsarP7KlckWP_vuogTB-

FopjDvp0i1nJys9oF3u4pSGK4scWFqgYimOyDBDZngywpTJ0jCWAYPTqFtYWkE2OsUT1NpwCR_g1jYtC5zIp

主要代码片段:

       数据获取部分:

i2c1 = I2C(1, scl=Pin(pin_cfg.i2c1_scl), sda=Pin(pin_cfg.i2c1_sda))
acc = MMA7660(i2c1)
acc.on(True)
d = bytearray(3)

acc.getSample(d)
for i in range(3):
   r[i] = twos_compliment(d[i], 6)

       坐标转换部分:

ball_xx = 0
ball_yy = 0
ball_k = 4

ball_x = -int(r[1]/22*64)+20
ball_y = -int(r[0]/22*64)+24
det_x = ball_x - ball_xx
det_y = ball_y - ball_yy

         小球运动轨迹优化部分:

    if det_x>ball_k :
        ball_x = ball_xx + 1
    elif det_x<-ball_k :
        ball_x = ball_xx - 1
    else :
        ball_x = ball_xx
    if det_y>ball_k :
        ball_y = ball_yy + 1
    elif det_y<-ball_k :
        ball_y = ball_yy - 1
    else :
        ball_y = ball_yy
    if ball_x>52 :
        ball_x = 52
    if ball_x<0 :
        ball_x = 0
    if ball_y>56 :
        ball_y = 56
    if ball_y<0 :
        ball_y = 0

    ball_xx = ball_x
    ball_yy = ball_y

         小球运动区域划分部分:

    if(r[0]<-5):
        if(r[1]>-5 and r[1]<5):
            oled.text("UP",88,50)
        elif(r[1]<-5):
            oled.text("UP RIGHT",64,50)
        elif(r[1]>5):
            oled.text("UP LEFT",70,50)
    elif(r[0]>5):
        if(r[1]>-5 and r[1]<5):
            oled.text("DW",88,50)
        elif(r[1]<-5):
            oled.text("DW RIGHT",64,50)
        elif(r[1]>5):
            oled.text("DW LEFT",70,50)
    else:
        if(r[1]>-5 and r[1]<5):
            oled.text("CT",88,50)
        elif(r[1]<-5):
            oled.text("RIGHT",80,50)
        elif(r[1]>5):
            oled.text("LEFT",84,50)

遇到的主要问题及解决措施:

       在本项目的进行过程中,遇到的问题主要有两点:第一个是如何从mma7660传感器上获取数据,即在python语言中如何对IIC协议进行使用;第二个是在项目的最初版本中,小球可以随着板卡的倾斜而运动,但是由于OLED屏幕刷新的频率和mma7660更新数据的频率之间存在差异,导致小球在屏幕上的运动不连续,存在着“跳跃”的情况。

       解决:对于第一个问题,我查阅了mma7660的使用手册,并且观看了项目的直播、录播课程,掌握了python环境下的数据获取;对于第二个问题,我通过思考,分析出问题的关键在于想让小球“滚动”而不是“跳跃”,二者之间的本质区别在于滚动的小球坐标是不可能发生突变的,所以我规定了一个阈值,当相邻两次mma7660获取的数据之差大于这个阈值的时候,小球的坐标发生改变,且每次改变的幅度是一样的。通过对阈值大小和幅度大小的调整,可以修改此水平仪的灵敏性。

不足之处:

   本项目虽然完成要求的基本内容,但是仍然存在很多不足之处:比如在小球的成像方面,本项目选取英文的句点代替小球,没有去设计小球的具体图像;小球随着板卡倾斜是匀速倾斜的,没有将加速度这一因素考虑在其中。

未来的规划:

       在项目开始还想在小球滚动的同时,按照我的设计让办卡上的RGB三色灯进行发光,根据发光强弱的设计,可以达到单从12个灯上就看出板卡倾斜状态的效果。但是后期因为学业任务以及各种不可抗力,导致这一部分没有实现,希望未来如果条件允许的话可以将这一部分进行完善。

  

附件下载
项目代码.py
团队介绍
北京理工大学 李斯腾
团队成员
lst
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号