python读取传感器数据(实战microPython12-加速度传感器的使用)
python读取传感器数据(实战microPython12-加速度传感器的使用)每个轴的加速度数值输出都有正负值,代表加速度的方向是沿轴正向还是反向。这在我们编程使用加速度芯片时要特别注意,芯片的本身的放置方向和我们自身感觉的上下左右方向也许并不一致,因此,我们在使用加速度传感器数据做应用时,也许要先搞清楚加速度芯片的放置方向。比如,在制作计步器的时候,我们并不能假定使用者如何佩戴产品,因此,我们也就无法预设加速度传感器芯片那面朝上。但如果将加速度传感器应用在无人机中,我们就可以在结构上确认传感器的方向,必竟飞机是不能长时间倒着飞的,而且在起飞前,飞机的上下左右方向是可以预知的。后面我会讲到如何通过加速度传感器判断当前设备的方向。前面之所以讲了些加速度传感器的测量知识,就是想告诉大家,在我们的三维世界中,加速度的测量是要有3个方向的,我们分别使用X Y Z三个坐标轴表示。加速度传感器是以芯片自身的方向输出3个坐标轴方向上的加速度测量结果的。如下图,芯片指明的方向:
大家好,今天我们讲解加速度传感器的原理及编程。
我之前讲过,微控制芯片只是会根据程序执行指令的大脑(参见我之前的文章《实战microPython(三)uPyBoard是如何控制机器人的》),一切外部的感知需要传感器将其转换为微控制器能够理解的数据,交由微控制器来处理,做出相对应的行动。
因此,传感器就是将外部的各种物理及化学的量,如温度,湿度,光亮度,各种气体,压力,震度等转换为电信号的器件。今天要讲的加速度传感器,就是其中比较特殊的一类。加速度传感器顾名思义,就是要将加速度值转换为对应的电信号。加速度中学物理会学到,通俗的讲,就是描述单位时间内速度变化程度的物理量,这里必须要强调的一点是,加速度不是速度,是速度的变化。不是运动的物体都会有加速度,比如,我们始终以60公里/小时的速度匀速前进时,那么在前进的方向上的加速度为0。只有在加速到70公里/小时或减速到50公里/小时的过程中,才有加速度(加速度不是0)。因此,加速度传感器不能用来检测速度的快慢。
另一方面,不是静止的物体就没有加速度(加速度为0),比如,静止的汽车开动起来的瞬间,加速度就不为0了。而最常见的就是地球上的所有有质量的物体都会无时不刻的受到地球引力的影响,让我们在一切可能的情况下坠向地心,因此,在我们身上无时不刻都有一个引力形成的加速度,只要我们踏空的瞬间,这个加速度就会将我们的身体由静止拽向地面。因此,加速度传感器,无论怎么放置在地球上,都会检测到一个指向地心的加速度,大小为1g(约为9.8m/s2),而加速度传感器的测量结果,也是以g为单位的。
假想一个盒子中,中间有一物体,两边使用弹簧连接,如果没有加速度时,物体处在正中间,弹簧两边受力相同,达到平衡。当有加速度时,物体会向加速度相反的方向滑动,此时物体与盒壁的距离发生变化,加速度越大,物体偏移的也越大,因此,只要将物体便宜的大小转换为电信号就可以知道加速度的大小了。这里有两种方法,一是通过测量物体与盒壁间电容量的变化可知物体所受加速度的大小,这就是电容式加速度传感器。二是也可以使用压电材料,测量得到弹簧上的压力大小来得到加速度大小,这就是压电式加速度传感器。其中,电容式传感器广泛应用在芯片中,是的,将一套机械装置坐在芯片上,这就是微机电系统(MEMS Micro-Electro-Mechanical System),也叫做微电子机械系统、微系统、微机械等。
微机电系统(MEMS Micro-Electro-Mechanical System),可是个高科技玩意,下图,就是来自于百度百科的一张芯片内部图片,大家可以感受下。
想了解更多的相关知识,就自己网上查一下吧,这里就不赘述了。
前面之所以讲了些加速度传感器的测量知识,就是想告诉大家,在我们的三维世界中,加速度的测量是要有3个方向的,我们分别使用X Y Z三个坐标轴表示。加速度传感器是以芯片自身的方向输出3个坐标轴方向上的加速度测量结果的。如下图,芯片指明的方向:
每个轴的加速度数值输出都有正负值,代表加速度的方向是沿轴正向还是反向。这在我们编程使用加速度芯片时要特别注意,芯片的本身的放置方向和我们自身感觉的上下左右方向也许并不一致,因此,我们在使用加速度传感器数据做应用时,也许要先搞清楚加速度芯片的放置方向。比如,在制作计步器的时候,我们并不能假定使用者如何佩戴产品,因此,我们也就无法预设加速度传感器芯片那面朝上。但如果将加速度传感器应用在无人机中,我们就可以在结构上确认传感器的方向,必竟飞机是不能长时间倒着飞的,而且在起飞前,飞机的上下左右方向是可以预知的。后面我会讲到如何通过加速度传感器判断当前设备的方向。
编程方面,之前其实已经介绍过,官方PyBoard板上带有加速度传感器,型号是MMA7660,这是一个最大量程±1.5g的传感器芯片。如果,我们手头的板子上带有这个芯片的话,那就可以简单的使用pyb中的Accel做检测了。程序如下:
官方相关说明:
http://docs.micropython.org/en/latest/library/pyb.Accel.html#pyb-accel
由官方文档及芯片手册可以看出,MMA7660传感器每个轴的测量值为6-bit,也就是说输出值的范围是-32到31之间。按照其最大量程±1.5g来算,其测量精度为1.5g/32约为0.047g。
精度不高但是也还是够用的。为了便于处理,我们通常使用mg(重力加速度的千分之一)作为单位。因此,上面的程序可以直接输出mg值:
当我尝试将PyBoard板水平放置的时候,结果输出如下:
我们可以看到,在X Y轴方向的加速度都为0,但在Z轴方向有一个约为1000mg左右的加速度,前面讲过,mg的单位是千分之一的重力加速度,那么这个Z轴现在测到大约1g左右的加速度,就是地球给我们的重力加速度了。由此,我们就可以知道,传感器芯片的朝向和运动方向等信息了。
那么,为什么不是精确的1g呢?这主要有两个原因传感器的转换精度以及地球上不同纬度的重力加速度的大小是不一样的,国际上以纬度45测量到的重力加速度为标准的1g,因此,我们测量的数值会有一些出入,但这并不影响方向的判断。因此,实际应用中,可通过设备在运动前静止时的测量值,以重力加速度的方向判断出被测物体的上下左右朝向。加速度传感器多运用在航空器,汽车载具等姿态判断或碰撞检测上。
那么,对与PyBoard板上没有加速度传感器的童鞋也不要着急,我们可以扩展连接一个外部加速度传感器模块,一样可以检测加速度了。
我们下期再见,祝各位玩的愉快。
更多新奇的内容,请继续关注:创客DIY乐园(MakerDIY-Park),您的关注就是我前进的动力。