3-osiowy akcelerometr ADXL345 i Arduino
Poradnik przedstawia sposób, w jaki można zmierzyć przyspieszenie korzystając z modułu ADXL345 za pomocą Arduino.
W przykładzie wykorzystano następujące elementy:
- Arduino Uno
-
Układ z modułem ADXL345 np. ADXL345 3-osiowy akcelerometr cyfrowy I2C / SPI - moduł
- Przewody np. z haczykami
- Biblioteka ADXL345
Podłączenie czujnika z Arduino:
Moduł komunikuje się za pośrednictwem popularnej magistrali I2C. Zatem połączenie z Arduino należy wykonać w następujący sposób:
Moduł ADXL345 | Pin Arduino |
---|---|
VCC | 5 V |
GND | GND |
SCL | A5 |
SDA | A4 |
Schemat podłączenia modułu ADXL345 z Arduino Uno.
Program do Arduino
Na początku bibliotekę należy dodać do środowiska Arduino (Szkic -> Include Library -> Add .ZIP Library...). W przykładzie został wykorzystany następujący kod:
#include#include #include //Przypisanie ID Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345); void displaySensorDetails(void) { sensor_t sensor; accel.getSensor(&sensor); Serial.println("------------------------------------"); Serial.print ("Czujnik: "); Serial.println(sensor.name); Serial.print ("Wersja sterownika: "); Serial.println(sensor.version); Serial.print ("ID: "); Serial.println(sensor.sensor_id); Serial.print ("Wartosc maksymalna: "); Serial.print(sensor.max_value); Serial.println(" m/s^2"); Serial.print ("Wartosc minimalna: "); Serial.print(sensor.min_value); Serial.println(" m/s^2"); Serial.print ("Rozdzielczosc: "); Serial.print(sensor.resolution); Serial.println(" m/s^2"); Serial.println("------------------------------------"); Serial.println(""); delay(500); } void displayDataRate(void) { Serial.print ("Predkosc danych: "); switch(accel.getDataRate()) { case ADXL345_DATARATE_3200_HZ: Serial.print ("3200 "); break; case ADXL345_DATARATE_1600_HZ: Serial.print ("1600 "); break; case ADXL345_DATARATE_800_HZ: Serial.print ("800 "); break; case ADXL345_DATARATE_400_HZ: Serial.print ("400 "); break; case ADXL345_DATARATE_200_HZ: Serial.print ("200 "); break; case ADXL345_DATARATE_100_HZ: Serial.print ("100 "); break; case ADXL345_DATARATE_50_HZ: Serial.print ("50 "); break; case ADXL345_DATARATE_25_HZ: Serial.print ("25 "); break; case ADXL345_DATARATE_12_5_HZ: Serial.print ("12.5 "); break; case ADXL345_DATARATE_6_25HZ: Serial.print ("6.25 "); break; case ADXL345_DATARATE_3_13_HZ: Serial.print ("3.13 "); break; case ADXL345_DATARATE_1_56_HZ: Serial.print ("1.56 "); break; case ADXL345_DATARATE_0_78_HZ: Serial.print ("0.78 "); break; case ADXL345_DATARATE_0_39_HZ: Serial.print ("0.39 "); break; case ADXL345_DATARATE_0_20_HZ: Serial.print ("0.20 "); break; case ADXL345_DATARATE_0_10_HZ: Serial.print ("0.10 "); break; default: Serial.print ("???? "); break; } Serial.println(" Hz"); } void displayRange(void) { Serial.print ("Zakres: +/- "); switch(accel.getRange()) { case ADXL345_RANGE_16_G: Serial.print ("16 "); break; case ADXL345_RANGE_8_G: Serial.print ("8 "); break; case ADXL345_RANGE_4_G: Serial.print ("4 "); break; case ADXL345_RANGE_2_G: Serial.print ("2 "); break; default: Serial.print ("?? "); break; } Serial.println(" g"); } void setup(void) { Serial.begin(9600); Serial.println("--- Test akcelerometru ADXL345 ---"); Serial.println(""); //Inicjalizacja modułu if(!accel.begin()) { //Błąd połączenia Serial.println("Nie wykryto czujnika ... Sprawdz polaczenie!"); while(1); } //Wybór zakresu accel.setRange(ADXL345_RANGE_16_G); // displaySetRange(ADXL345_RANGE_8_G); // displaySetRange(ADXL345_RANGE_4_G); // displaySetRange(ADXL345_RANGE_2_G); //Wyświetelnie informacji displaySensorDetails(); //Wyświetlenie ustawień dodatkowych displayDataRate(); displayRange(); Serial.println(""); } void loop(void) { sensors_event_t event; accel.getEvent(&event); //Wyświetlenie wyników w m/s^2) Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print(" "); Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print(" "); Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print(" ");Serial.println("m/s^2 "); delay(500); }
Program wyświetla przyspieszenie w trzech osiach podane w m/s^2. Efekty działania programu możemy zobaczyć poniżej:
Zrzut ekranu szeregowego monitora.