ADXL345: 0-180 Derece Arasında Eğim Açısı Ölçme
  • Merhaba,

    ADXL345 sensörü kullanarak eğim açısını ölçmek istiyorum. Derleyicimin versiyonu 1.6.8 ve Arduino Uno R3 kullanıyorum. Sensörü masa kenarına yatay bir şekilde yerleştirdiğimde 0 derece ölçmem gerekirken -12 derece ölçüyorum ve sensörü masa ile dikgen hale getirdiğim zaman 90 derece ölçmem gerekirken 112 derece ölçüyorum.

    Bağlantılarım şu şekildedir:
    ADXL345 SCL --> Arduino SCL
    ADXL345 SDA --> Arduino SDA
    Vss --> 3.3 V
    Cs --> 3.3 V
    GND --> GND

    Kullandığım Kod (istenilen eğim açısı "pitch" değişkenine atanmaktadır):
    #define ADXL345 0x53 // device adress
    #define POWER_CTL 0x2D
    #define DATA_FORMAT 0x31
    #define DATAX0 0x32

    #include
    byte buff[6];
    int rawX, rawY, rawZ;
    double x,y,z,pitch;

    void setup()
    {
    Serial.begin(9600);
    Wire.begin();

    //measurement mode
    Wire.beginTransmission(ADXL345);
    Wire.write(POWER_CTL);
    Wire.write(0x08);
    Wire.endTransmission();

    // DATA FORMAT = +-16g, Full Resolution (4 mg/LSB) 13 bits. (see table 1 and table 21)
    Wire.beginTransmission(ADXL345);
    Wire.write(DATA_FORMAT);
    Wire.write(0x0B);
    Wire.endTransmission();

    }

    void loop()
    {
    int i=0;
    Wire.beginTransmission(ADXL345);
    Wire.write(DATAX0);
    Wire.requestFrom(ADXL345, 6);
    while(Wire.available())
    {
    buff[i] = Wire.read();
    ++i;
    }
    Wire.endTransmission();

    rawX = ((int)buff[1] << 8) | buff[0];<br /> rawY = ((int)buff[3] << 8) | buff[2];<br /> rawZ = ((int)buff[5] << 8) | buff[4];<br />
    //Gs = Measurement Value * (G range/2^n), n = bits
    //Gs = Measurement Value *(32/2^13) = 0.00390625

    x = rawX * 0.00390625;
    y = rawY * 0.00390625;
    z = rawZ * 0.00390625;

    pitch = atan2(x,sqrt(y*y+z*z));
    pitch *= 57.2957795+180; // radian to degree

    Serial.print("rawX = ");
    Serial.print(rawX);
    Serial.print("\trawY = ");
    Serial.print(rawY);
    Serial.print("\trawZ = ");
    Serial.print(rawZ);

    Serial.print("\tx = ");
    Serial.print(x);
    Serial.print("\ty = ");
    Serial.print(y);
    Serial.print("\tz = ");
    Serial.print(z);

    Serial.print("\tpitch=");
    Serial.println(pitch);
    delay(100);

    }
  • şu adamın video serileri bayağı iyi adxl için değil ama mantığı anlattığı bölümler belki işe yarar

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.