ADXL345


ADXL345_第1张图片
ADXL345_第2张图片


ADXL345 是一款小巧纤薄的低功耗三轴加速度计,可以对高达±16 g的加速度进行高分辨率(13 位)测量。数字输出数据为 16 位二进制补码格式,可通过SPI (3 线或 4 线)或者I2C数字接口访问。
ADXL345 非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。
它具有高分辨率(4 mg/LSB),能够测量约 0.25°的倾角变化。
使用 ADXL345 等数字输出加速度计时,无需进行模数转换,从而可以节省系统成本和电路板面积。
其高分辨率(3.9mg/LSB),能够测量不到1.0°的倾斜角度变化。


不多说了,老套路:直接用 兼容Arduino的禾灮智能机器人控制板 来个发烟测试。(板子上直接集成了ADXL345,IIC通信)

Arduino源码:

    // Visual Micro is in vMicro>General>Tutorial Mode
    // 
    /*
        Name:       ADXL345.ino
        Created:    2018/7/23 2:03:35
        Author:     禾灮\HeGuang
    */

    // Define User Types below here or use a .h file
    //
    #include  
    #include 

    // Define Function Prototypes that use User Types below here or use a .h file
    //
    #define Register_ID 0
    #define Register_2D 0x2D
    #define Register_X0 0x32
    #define Register_X1 0x33
    #define Register_Y0 0x34
    #define Register_Y1 0x35
    #define Register_Z0 0x36
    #define Register_Z1 0x37

    // Define Functions below here or use other .ino or cpp files
    //
    LiquidCrystal LCD1602(16,15,7,6,5,4);       //初始化LCD16021602
    int ADXAddress = 0xA7>>1;  //转换为7位地址
    int reading = 0;
    int val = 0;
    int X0,X1,X_out;
    int Y0,Y1,Y_out;
    int Z1,Z0,Z_out;
    double Xg,Yg,Zg;

    // The setup() function runs once each time the micro-controller starts
    void setup(){
        LCD1602.begin(16, 2);  //初始化LCD1602
        delay(100);
        Wire.begin();  //初始化I2C
        delay(100);
        Wire.beginTransmission(ADXAddress);
        Wire.write(Register_2D);
        Wire.write(8);
        Wire.endTransmission();
    }

    // Add the main program code into the continuous loop() function
    void loop(){
        Wire.beginTransmission(ADXAddress);
        Wire.write(Register_X0);
        Wire.write(Register_X1);
        Wire.endTransmission();
        Wire.requestFrom(ADXAddress,2);
        if(Wire.available()<=2);
        {
            X0 = Wire.read();
            X1 = Wire.read();
            X1 = X1<<8;
            X_out = X0+X1;
        }

        Wire.beginTransmission(ADXAddress);
        Wire.write(Register_Y0);
        Wire.write(Register_Y1);
        Wire.endTransmission();
        Wire.requestFrom(ADXAddress,2);
        if(Wire.available()<=2){
            Y0 = Wire.read();
            Y1 = Wire.read();
            Y1 = Y1<<8;
            Y_out = Y0+Y1;
        }

        Wire.beginTransmission(ADXAddress);
        Wire.write(Register_Z0);
        Wire.write(Register_Z1);
        Wire.endTransmission();
        Wire.requestFrom(ADXAddress,2);
        if(Wire.available()<=2){
            Z0 = Wire.read();
            Z1 = Wire.read();
            Z1 = Z1<<8;
            Z_out = Z0+Z1;
        }

        Xg = X_out/256.00;      //把输出结果转换为重力加速度g,精确到小数点后2位。
        Yg = Y_out/256.00;
        Zg = Z_out/256.00;
        LCD1602.clear();         //清屏
        LCD1602.print("X=");        //使屏幕显示文字X=
        LCD1602.print(Xg);
        LCD1602.setCursor(8, 0);
        LCD1602.print("Y=");
        LCD1602.print(Yg);
        LCD1602.setCursor(0, 1);
        LCD1602.print("Z=");
        LCD1602.print(Zg);
        delay(300);         //延时0.3秒,刷新频率这里进行调整
    }

ADXL345_第3张图片


AVR单片机演示例程

下面,基于 禾灮智能机器人控制板,进行AVR单片机C语言程序设计:

                未完待续。。。

    感谢一直关注着禾灮成长进步的朋友们。你们的信任、支持和鼓励,鞭策着我们一路走到了今天。

    感谢所有的合作伙伴,我们相互促进,共同见证了彼此的成长。

    感谢所有曾经在禾灮彼此倚靠、相互鼓励、携手同心、砥砺同行的兄弟姐妹。这里承载了我们的青春与热血。

                禾灮,感谢有你。

    未来,我们将一如既往,砥砺前行。

                                        禾灮·小楊
                                       2018.07.23

你可能感兴趣的:(Arduino,Basic)