加速度传感器芯片MMA8451Q初步——倾角计算与校准值
MMA845xQ系列是飞思卡公司出品的一系列加速度传感器芯片,通过测量XYZ三轴的加速度可以检测倾角,自由落体,翻转,脉冲,振动等一系列运动状态。
我用的是14位精度的MMA8451Q。单片机型号为STC8A8K64。
通过读取倾角寄存器获得X,Y,Z三个方向的重力加速度向量值,根据三角函数公式,计算传感器与自然坐标轴的夹角。
另外初步测试了偏差校正功能。
I2C读写模块 MMA8451.c/MMA8451.h
MMA8451.h
#ifndef __MMA8451_H
#define __MMA8451_Hextern unsigned char BUF[6];void Init_MMA8451();
void Multiple_read_MMA8451();
unsigned char Single_Read_MMA8452(unsigned char REG_Address);
void Single_Write_MMA8451(unsigned char REG_Address,unsigned char REG_data);
#endif
MMA8451.c
#include "MMA8451.h"
#include "intrins.h"
#include "config.h"#define uchar unsigned char
#define uint unsigned inttypedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long int LWORD;sbit SCL=P1^1; //IIC时钟引脚定义 根据自己线路板连接
sbit SDA=P1^0; //IIC数据引脚定义#define SlaveAddress 0x38BYTE BUF[6]; //数据区 /**************************************
延时5微秒(STC90C52RC@12M)
不同的工作环境,需要调整此函数,注意时钟过快时需要修改
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5us()
{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}/**************************************
延时5毫秒(STC90C52RC@12M)
不同的工作环境,需要调整此函数
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5ms()
{WORD n = 560;while (n--);
}/**************************************
起始信号
**************************************/
void MMA8451_Start()
{SDA = 1; //拉高数据线SCL = 1; //拉高时钟线Delay5us(); //延时SDA = 0; //产生下降沿Delay5us(); //延时SCL = 0; //拉低时钟线
}/**************************************
停止信号
**************************************/
void MMA8451_Stop()
{SDA = 0; //拉低数据线SCL = 1; //拉高时钟线Delay5us(); //延时SDA = 1; //产生上升沿Delay5us(); //延时
}/**************************************
发送应答信号
入口参数:ack (0:ACK 1:NAK)
**************************************/
void MMA8451_SendACK(bit ack)
{SDA = ack; //写应答信号SCL = 1; //拉高时钟线Delay5us(); //延时SCL = 0; //拉低时钟线Delay5us(); //延时
}/**************************************
接收应答信号
**************************************/
bit MMA8451_RecvACK()
{SCL = 1; //拉高时钟线Delay5us(); //延时CY = SDA; //读应答信号SCL = 0; //拉低时钟线Delay5us(); //延时return CY;
}/**************************************
向IIC总线发送一个字节数据
**************************************/
void MMA8451_SendByte(BYTE dat)
{BYTE i;for (i=0; i<8; i++) //8位计数器{dat <<= 1; //移出数据的最高位SDA = CY; //送数据口SCL = 1; //拉高时钟线Delay5us(); //延时SCL = 0; //拉低时钟线Delay5us(); //延时}MMA8451_RecvACK();
}/**************************************
从IIC总线接收一个字节数据
**************************************/
BYTE MMA8451_RecvByte()
{BYTE i;BYTE dat = 0;SDA = 1; //使能内部上拉,准备读取数据,for (i=0; i<8; i++) //8位计数器{dat <<= 1;SCL = 1; //拉高时钟线Delay5us(); //延时dat |= SDA; //读数据 SCL = 0; //拉低时钟线Delay5us(); //延时}return dat;
}//******单字节写入*******************************************void Single_Write_MMA8451(uchar REG_Address,uchar REG_data)//2a 01
{MMA8451_Start(); //起始信号MMA8451_SendByte(SlaveAddress); //发送设备地址+写信号MMA8451_SendByte(REG_Address); //内部寄存器地址MMA8451_SendByte(REG_data); //内部寄存器数据MMA8451_Stop(); //发送停止信号
}//********单字节读取*****************************************uchar Single_Read_MMA8452(uchar REG_Address)
{ uchar REG_data;MMA8451_Start(); //起始信号MMA8451_SendByte(SlaveAddress); //发送设备地址+写信号MMA8451_SendByte(REG_Address); //发送存储单元地址,从0开始 MMA8451_Start(); //起始信号MMA8451_SendByte(SlaveAddress+1); //发送设备地址+读信号REG_data=MMA8451_RecvByte(); //读出寄存器数据MMA8451_SendACK(1); MMA8451_Stop(); //停止信号return REG_data;
}//*********************************************************
//
//连续读出MMA8451内部加速度数据,地址范围0x01~0x06
//
//*********************************************************
void Multiple_read_MMA8451()//Multiple_Read_MMA8451();
{ uchar i;MMA8451_Start(); //起始信号MMA8451_SendByte(SlaveAddress); //发送设备地址+写信号MMA8451_SendByte(0x01); //发送存储单元地址,从0x01开始 MMA8451_Start(); //起始信号MMA8451_SendByte(SlaveAddress+1); //发送设备地址+读信号for (i=0; i<6; i++) //连续读取6个地址数据,存储中BUF{BUF[i] = MMA8451_RecvByte(); //BUF[0]存储0x32地址中的数据if (i == 5){MMA8451_SendACK(1); //最后一个数据需要回NOACK}else{MMA8451_SendACK(0); //回应ACK}}MMA8451_Stop(); //停止信号Delay5ms();
}//*****************************************************************//初始化MMA8451,根据需要请参考pdf进行修改************************
void Init_MMA8451()
{Single_Write_MMA8451(0x2a,0x01); //Single_Write_MMA8451(0x2b,0x02); //}
V1:获取倾角 计算atan值
main.c
/*********************************************
P10 数据口 P11时钟口
P0,P2,接数码管倾角寄存器0x01-0x06
读取数据为重力加速度在传感器坐标轴上分量
通过计算过程转换为自然XYZ坐标轴夹角tan值
当tan值在极值(无穷大)一侧时,改用cot值计算
***********************************************/#include "config.h"
//#include "MPU6050.h"
#include "MMA8451.h"
#include "display.h"
#include <math.h>void delay_ms(u8 ms);int xa,ya,za;//*********************************************************************
//****************角度计算*********************************************
//*********************************************************************int MMA8451_Get_Angle(long x,long y,long z,u8 dir);
void MMA8451_Add_Angle2(int x,int y,int z);
void MMA8451_Get_Angle3(int x,int y,int z);// ===================== 主函数 =====================
void main(void)
{int x,y,z;//所有I/O口全设为准双向,弱上拉模式P0M0=0xff; P0M1=0xff;P1M0=0xff; P1M1=0xff;P2M0=0xff; P2M1=0xff;P3M0=0xff; P3M1=0xff;P4M0=0xff; P4M1=0xff;P5M0=0xff; P5M1=0xff;P6M0=0xff; P6M1=0xff;P7M0=0xff; P7M1=0xff;//P1=0x00;P1M0=0xfc; P1M1=0xfc; //时钟口1.1 数据口1.0 11111100 11111100P0 = 0xFF;P0M0=0x00; P0M1=0x00; //数码管数据通道 00000000 00000000 常规P2 = 0xFF;P2M0=0x00; P2M1=0x00; //数码管位选通道 00000000 00000000 常规initLedDisplay();delay_ms(100);Init_MMA8451(); //初始化MPU-6050delay_ms(100);EA = 1; //允许总中断while(1){// Init_MMA8451(); // delay_ms(100);delay_ms(100);Multiple_read_MMA8451();x=(unsigned int)BUF[0]<<8|BUF[1];y=(unsigned int)BUF[2]<<8|BUF[3];z=(unsigned int)BUF[4]<<8|BUF[5];//hexstr[7]=(BUF[0]&0xf0)>>4;//hexstr[6]=(BUF[0]&0x0f);//hexstr[5]=16;//hexstr[4]=(BUF[2]&0xf0)>>4;//hexstr[3]=(BUF[2]&0x0f);//hexstr[2]=18;//hexstr[1]=(BUF[4]&0xf0)>>4;//hexstr[0]=(BUF[4]&0x0f);//hexstr[1]=(BUF[5]&0xf0)>>4;//hexstr[0]=(BUF[5]&0x0f);// x=(char)BUF[0];// y=(char)BUF[2];// z=(char)BUF[4];xa=MMA8451_Get_Angle(x,y,z,1);ya=MMA8451_Get_Angle(x,y,z,2);za=MMA8451_Get_Angle(x,y,z,0);hexstr[7]=ya/1000;// if(ya<0)// hexstr[7]=16,ya=-ya;// else // hexstr[7]=17;hexstr[6]=(ya%1000)/100;hexstr[5]=(ya%100)/10;hexstr[4]=ya%10;hexstr[3]=xa/1000;// if(za<0)// hexstr[3]=16,za=-za;// else// hexstr[3]=17;hexstr[2]=(xa%1000)/100;hexstr[1]=(xa%100)/10;hexstr[0]=xa%10;showLedDisplay();delay_ms(3000);}
}int abs_round(double v){return (int)(v>=0?(v+0.5):(v-0.5));
}void MMA8451_Get_Angle3(int x,int y,int z)
{double temp,xd,yd,zd;temp = sqrt((double)(x*x+y*y+z*z));yd = y/temp;if(yd<=0.707 && yd>=-0.707){yd = asin(yd);ya = yd*180/3.1416+0.5;}else{yd = acos(yd);ya = yd*180/3.1416-0.5;ya=90-ya;}zd = z/temp;if(zd<=0.707 && zd>=-0.707){zd = asin(zd);za = zd*180/3.1416+0.5;}else{zd = acos(zd);za = zd*180/3.1416-0.5;za=90-za;}xd = x/temp;if(xd<=0.707 && xd>=-0.707){xd = asin(xd);xa = xd*180/3.1416+0.5;}else{xd = acos(xd);xa = xd*180/3.1416-0.5;xa=90-xa;}
}void MMA8451_Add_Angle2(int x,int y,int z)
{double temp,xd,yd,zd;temp = sqrt((double)(x*x+y*y+z*z));zd = asin(z/temp)*180/3.1416; //与自然Z轴的角度xd = asin(x/temp)*180/3.1416; //与自然X轴的角度yd = asin(y/temp)*180/3.1416; //与自然Y轴的角度za += (int)(zd+0.5);ya += (int)(yd+0.5);xa += (int)(xd+0.5);}int MMA8451_Get_Angle(long x,long y,long z,u8 dir)
{double temp;double res=0;switch(dir){case 0://与自然Z轴的角度temp = sqrt((double)(x*x+y*y));if(temp<abs(z)){ temp=temp/z;res=atan(temp);}else{temp= z/temp;res=atan(temp);if(res>=0)res = 1.5708 - res;elseres = - 1.5708 - res;}res=atan(temp);break;case 1://与自然X轴的角度temp = sqrt((double)(y*y+z*z));if(temp>=abs(x)){ temp=x/temp;res=atan(temp);}else{temp= temp/x;res=atan(temp);if(res>=0)res = 1.5708 - res;elseres = - 1.5708 - res;}break;case 2://与自然Y轴的角度temp = sqrt((double)(x*x+z*z));if(temp>=abs(y)){ temp=y/temp;res=atan(temp);}else{temp= temp/y;res=atan(temp);if(res>=0)res = 1.5708 - res;elseres = - 1.5708 - res;}break;}// if(res<0) res = 1.5708+res;return res*1800/3.1416;//把弧度转换成角度
}void delay_ms(u8 ms)
{u16 i;do{i = MAIN_Fosc / 13000;while(--i) ; //13T per loop}while(--ms);
}
V2:加上偏差校正,可抵消因机械误差引起的14度以内的微小角度偏移。
main.c
/*********************************************
P10 数据口 P11时钟口
P0,P2,接数码管P30 P31 P32 P33接触点开关P30 清零校准寄存器重新计算校正值
P31 获取当下倾角值
P32 清零校准计算器
P33 将最近一次计算的校正值写到校准寄存器
***********************************************/
#include "config.h"
//#include "MPU6050.h"#include "MMA8451.h"
#include "display.h"#include <math.h>int MMA8451_Get_Angle(long x,long y,long z,u8 dir);void displayAngle();/* ============================================= */void delay_ms(u8 ms);unsigned char hexstr_cp[8];int xa,ya,za;// ===================== 主函数 =====================
void main(void)
{unsigned char reg;unsigned int ux,uy,uz;int sx,sy,sz;//所有I/O口全设为准双向,弱上拉模式P0M0=0xff; P0M1=0xff;P1M0=0xff; P1M1=0xff;P2M0=0xff; P2M1=0xff;P3M0=0xff; P3M1=0xff;P4M0=0xff; P4M1=0xff;P5M0=0xff; P5M1=0xff;P6M0=0xff; P6M1=0xff;P7M0=0xff; P7M1=0xff;//P1=0x00;P1M0=0xfc; P1M1=0xfc; //时钟口1.1 数据口1.0 11111100 11111100P0 = 0xFF;P0M0=0x00; P0M1=0x00; //数码管数据通道 00000000 00000000 常规P2 = 0xFF;P2M0=0x00; P2M1=0x00; //数码管位选通道 00000000 00000000 常规P2 = 0xFF;P3M0=0x00; P3M1=0x00;initLedDisplay();delay_ms(100);Init_MMA8451(); //初始化MPU-6050delay_ms(100);EA = 1; //允许总中断while(1){// Init_MMA8451(); // delay_ms(100);if(!P30){delay_ms(10);if(!P30){while(!P30);showdot = 0;delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg &= 0xFE; Single_Write_MMA8451(0x2A, reg); delay_ms(100);Single_Write_MMA8451(0x2F,0x00);Single_Write_MMA8451(0x30,0x00);Single_Write_MMA8451(0x31,0x00);delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg |= 0x01; Single_Write_MMA8451(0x2A, reg);delay_ms(100);Multiple_read_MMA8451();/*hexstr[7]=(BUF[0]&0xf0)>>4;hexstr[6]=(BUF[0]&0x0f);hexstr[5]=(BUF[1]&0xf0)>>4;hexstr[4]=(BUF[1]&0x0f);hexstr[3]=(BUF[2]&0xf0)>>4;hexstr[2]=(BUF[2]&0x0f);hexstr[1]=(BUF[3]&0xf0)>>4;hexstr[0]=(BUF[3]&0x0f);*/displayAngle();showLedDisplay();hexstr_cp[0]=hexstr[0];hexstr_cp[1]=hexstr[1];hexstr_cp[2]=hexstr[2];hexstr_cp[3]=hexstr[3];hexstr_cp[4]=hexstr[4];hexstr_cp[5]=hexstr[5];hexstr_cp[6]=hexstr[6];hexstr_cp[7]=hexstr[7];ux=((unsigned int)BUF[0]<<8)|BUF[1];uy=((unsigned int)BUF[2]<<8)|BUF[3];uz=((unsigned int)BUF[4]<<8)|BUF[5];/*if(BUF[0]>0x7f){ux=(~ux+1)>>2;sx=ux/8;}else{sx=((~ux+1)>>2)/8;}if(BUF[2]>0x7f){uy=(~uy+1)>>2;sy=uy/8;}else{sy=((~uy+1)>>2)/8;}if(BUF[4]>0x7f){uz=(~uz+1)>>2;sz=(4069+uz)/8;}else{sz=(int)(4069-(uz>>2))/8;if(sz<0){sz+=256;}}*/if(BUF[0]>0x7f){ ux=(~ux+1)>>2;sx=ux/8;}else{sx=~(ux>>2)+1;sx=sx/8;}if(BUF[2]>0x7f){uz=(~uz+1)>>2;sz=uz/8;}else{sz=~(uz>>2)+1;sz=sz/8;}if(BUF[4]>0x7f){uy=(~uy+1)>>2;sy=(4069+uy)/8;}else{sy=~(uy>>2)+1;sy=(4069+sy)/8; } /*delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg &= 0xFE; Single_Write_MMA8451(0x2A, reg); delay_ms(100);Single_Write_MMA8451(0x2F,(char)sx);Single_Write_MMA8451(0x30,(char)sy);Single_Write_MMA8451(0x31,(char)sz);delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg |= 0x01; Single_Write_MMA8451(0x2A, reg);delay_ms(100);reg = Single_Read_MMA8452(0x2F);hexstr[7]=(reg&0xf0)>>4;hexstr[6]=(reg&0x0f);hexstr[5]=0;reg = Single_Read_MMA8452(0x30);hexstr[4]=(reg&0xf0)>>4;hexstr[3]=(reg&0x0f);hexstr[2]=18;reg = Single_Read_MMA8452(0x31);hexstr[1]=(reg&0xf0)>>4;hexstr[0]=(reg&0x0f);showLedDisplay();*/delay_ms(3000);}}if(!P31){delay_ms(10);if(!P31){while(!P31);delay_ms(100);Multiple_read_MMA8451();/*hexstr[7]=(BUF[2]&0xf0)>>4;hexstr[6]=(BUF[2]&0x0f);hexstr[5]=(BUF[3]&0xf0)>>4;hexstr[4]=(BUF[3]&0x0f);hexstr[3]=(BUF[4]&0xf0)>>4;hexstr[2]=(BUF[4]&0x0f);hexstr[1]=(BUF[5]&0xf0)>>4;hexstr[0]=(BUF[5]&0x0f);*/displayAngle();showLedDisplay();delay_ms(3000);}}if(!P32){delay_ms(10);if(!P32){while(!P32);showdot = 0;delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg &= 0xFE; Single_Write_MMA8451(0x2A, reg); delay_ms(100);Single_Write_MMA8451(0x2F,0x00);Single_Write_MMA8451(0x30,0x00);Single_Write_MMA8451(0x31,0x00);delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg |= 0x01; Single_Write_MMA8451(0x2A, reg);/*delay_ms(100);reg = Single_Read_MMA8452(0x2F);hexstr[7]=(reg&0xf0)>>4;hexstr[6]=(reg&0x0f);hexstr[5]=0;reg = Single_Read_MMA8452(0x30);hexstr[4]=(reg&0xf0)>>4;hexstr[3]=(reg&0x0f);hexstr[2]=16;reg = Single_Read_MMA8452(0x31);hexstr[1]=(reg&0xf0)>>4;hexstr[0]=(reg&0x0f);*/hexstr[0]=0;hexstr[1]=0;hexstr[2]=0;hexstr[3]=0;hexstr[4]=0;hexstr[5]=0;hexstr[6]=0;hexstr[7]=0;showLedDisplay();delay_ms(3000);}}if(!P33){delay_ms(10);if(!P33){while(!P33);showdot = 1;delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg &= 0xFE; Single_Write_MMA8451(0x2A, reg); delay_ms(100);Single_Write_MMA8451(0x2F,0x00);Single_Write_MMA8451(0x30,0x00);Single_Write_MMA8451(0x31,0x00);delay_ms(100);Single_Write_MMA8451(0x2F,(char)sx);Single_Write_MMA8451(0x30,(char)sy);Single_Write_MMA8451(0x31,(char)sz);delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg |= 0x01; Single_Write_MMA8451(0x2A, reg);/*delay_ms(100);reg = Single_Read_MMA8452(0x2F);hexstr[7]=(reg&0xf0)>>4;hexstr[6]=(reg&0x0f);hexstr[5]=0;reg = Single_Read_MMA8452(0x30);hexstr[4]=(reg&0xf0)>>4;hexstr[3]=(reg&0x0f);hexstr[2]=17;reg = Single_Read_MMA8452(0x31);hexstr[1]=(reg&0xf0)>>4;hexstr[0]=(reg&0x0f);*/hexstr[0]=hexstr_cp[0];hexstr[1]=hexstr_cp[1];hexstr[2]=hexstr_cp[2];hexstr[3]=hexstr_cp[3];hexstr[4]=hexstr_cp[4];hexstr[5]=hexstr_cp[5];hexstr[6]=hexstr_cp[6];hexstr[7]=hexstr_cp[7];showLedDisplay();delay_ms(3000);}}}
}void displayAngle(){int x,y,z;x=(unsigned int)BUF[0]<<8|BUF[1];y=(unsigned int)BUF[2]<<8|BUF[3];z=(unsigned int)BUF[4]<<8|BUF[5];xa=MMA8451_Get_Angle(x,y,z,1);ya=MMA8451_Get_Angle(x,y,z,2);za=MMA8451_Get_Angle(x,y,z,0);//hexstr[7]=ya/1000;if(ya<0)hexstr[7]=16,ya=-ya;else hexstr[7]=17;hexstr[6]=(ya%1000)/100;hexstr[5]=(ya%100)/10;hexstr[4]=ya%10;//hexstr[3]=xa/1000;if(xa<0)hexstr[3]=16,xa=-xa;elsehexstr[3]=17;hexstr[2]=(xa%1000)/100;hexstr[1]=(xa%100)/10;hexstr[0]=xa%10;/*//hexstr[3]=za/1000;if(za<0)hexstr[3]=16,za=-za;elsehexstr[3]=17;hexstr[2]=(za%1000)/100;hexstr[1]=(za%100)/10;hexstr[0]=za%10;*/}int MMA8451_Get_Angle(long x,long y,long z,u8 dir)
{double temp;double res=0;switch(dir){case 0://与自然Z轴的角度temp = sqrt((double)(x*x+y*y));if(temp<abs(z)){ temp=temp/z;res=atan(temp);}else{temp= z/temp;res=atan(temp);if(res>=0)res = 1.5708 - res;elseres = - 1.5708 - res;}res=atan(temp);break;case 1://与自然X轴的角度temp = sqrt((double)(y*y+z*z));if(temp>=abs(x)){ temp=x/temp;res=atan(temp);}else{temp= temp/x;res=atan(temp);if(res>=0)res = 1.5708 - res;elseres = - 1.5708 - res;}break;case 2://与自然Y轴的角度temp = sqrt((double)(x*x+z*z));if(temp>=abs(y)){ temp=y/temp;res=atan(temp);}else{temp= temp/y;res=atan(temp);if(res>=0)res = 1.5708 - res;elseres = - 1.5708 - res;}break;}// if(res<0) //res = 1.5708+res;return res*1800/3.1416;//把弧度转换成角度
}void delay_ms(u8 ms)
{u16 i;do{i = MAIN_Fosc / 13000;while(--i) ; //13T per loop}while(--ms);
}
PS:display.c是数码管显示模块,config.h来自STC例程。可以根据自己的外设环境改变配置。
加速度传感器芯片MMA8451Q初步——倾角计算与校准值相关推荐
- 溢出检测单符号位法_设计经验:如何用三轴加速度传感器检测倾斜角?
本文介绍了三轴加速度传感器的特性,并通过一个典型的应用--检测倾斜角--对单轴.双轴和三轴加速度传感器进行了比较,并给出了选型建议. 在前两篇文章中,我们介绍了单/双轴加速度传感器在来检测倾斜角上的应 ...
- linux加速度传感器校准,加速度传感器校准方法及装置与流程
本申请涉及传感器校准领域,具体而言,涉及一种加速度传感器校准方法及装置. 背景技术: 在移动终端中,导航软件的使用频率越来越高,比如说百度地图.高德导航等.目前,移动终端通常包含加速度传感器,在导航过 ...
- 与众不同 windows phone (18) - Device(设备)之加速度传感器, 数字罗盘传感器
原文:与众不同 windows phone (18) - Device(设备)之加速度传感器, 数字罗盘传感器 [索引页] [源码下载] 与众不同 windows phone (18) - Devic ...
- 平方根计算在加速度传感器中的应用
帮助实际使用场景中,用户手持传感器,不受正反面.侧面影响,准确识别动作. 平方根运算,可以解决加速度传感器,判断X.Y.Z任意方向的运动幅度. 下面展示原始数据及示平方根后的数据在曲线图中的展示. x ...
- ST公司 Lis2dh12 三轴加速度传感器,计算加速度值转成角度值
目录 概述 项目上使用了一款Lis2dh12三轴加速度传感器.开发前要准备的工作. 1.原理图: 1.1.创建lis2dh12.c文件 1.2.在此重点说明,如果想调传感器的中断灵敏度,注意:关注1. ...
- 树莓派基础实验31:MPU6050陀螺仪加速度传感器实验
一.介绍 MPU6050是世界上第一款也是唯一一款专为智能手机.平板电脑和可穿戴传感器的低功耗.低成本和高性能要求而设计的6轴运动跟踪设备. 它集成了3轴MEMS陀螺仪,3轴MEMS加速度 ...
- 带你了解加速度传感器的几种应用
加速度传感器是一种能够测量加速力的电子设备.加速力也就是当物体在加速过程中作用在物体上的力.加速度传感器有两种:一种是角加速度传感器,是由陀螺仪改进过来的.另一种就是线加速度传感器.它也可以按测量轴分 ...
- android 三轴加速度传感器【转】
一.手机中常用的传感器 在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用,具体如下:(Sensor类) #define SENSOR_TYPE_ACCE ...
- 基于三轴加速度传感器的计步算法
基于三轴加速度传感器计步算法 By Sky.J 2018.08.08 概述 今天主要是想要分享利用三轴加速度传感器计步的一个算法步骤. 数据分析--->模型 这里拿到的是ADI公司的测试数据,可 ...
最新文章
- ECharts 图表导出
- [云炬ThinkPython阅读笔记]1.6 形式语言和自然语言
- 物理磁盘空间使用已满导致数据库hang起
- 微型计算机原理risc,微型计算机原理习题及解答-20210409003329.docx-原创力文档
- Yarn 国内加速,修改镜像源
- android 底部tab效果,Android 仿微信底部渐变Tab效果
- js 学习笔记(一)
- xml dtd 约束建立xml文档
- 『转』Dr.Web Security Space 8 – 免费3个月
- tomcat、netty以及nodejs的helloworld性能对比
- 计算机桌面壁纸希望,电脑用的励志的壁纸简约壁纸
- Linux 通配符 与 正则表达式 的区别与详解
- chrome 自动操纵谷歌小恐龙
- 整理了46个python人工智能库,详细介绍(含资源),建议收藏
- ACP.敏捷概念梳理1
- Linux内存管理之UMA模型和NUMA模型
- About Sealed
- 软件测试流程及主要内容
- Delphi写游戏外挂
- Python isdigit()方法能处理带符号的数字字符串么?
热门文章
- 基于控制主题的对话生成 相关论文总结
- 慢节奏的和府,能否掌握资本带来的“加速度”
- 从秋香,芳娜到不嫁国人的女大学生
- 华为C8815 ROOT 成功
- 烧录flash_烧录固件完成后,配置JFLASH让程序自动运行
- VC++游戏编程基础无法找到“d3d9.h”问题
- 开发工具---Eclipse 教程Ⅰ
- C语言handle对象对应java,c语言和java语言之间的关系到底是怎么样的,两种 体系?还是一种体系的不同阶段?还是其它的什么?...
- 计算机网络技术教程第3版课后答案,《计算机网络技术基础教程》课后习题答案刘四清版3.doc...
- java模拟实现操作系统进程调度中的多级反馈队列算法