Pro M5stack jednotky lze zakoupit různé rozšiřovací moduly, kdy jedním ze základních je ACCEL, celým názvem accelerometer. Uvnitř modulu se nachází integrovaný obvod ADXL345.

M5Stack jednotka ACCEL s akcelerometrem ADXL345

Pro jeho spojení s M5stack deskou stačí propojit 4 vodiče, přičemž můžeme propojit modul s M5stack zařízením pomocí dodaného kabelu pomocí Grove konektoru. Pokud budete chtít zapojit modul napřímo, tak propojte GND s GND, 5V s 5V, SCL s pinem D22 a SCL s pinem D21. Piny SDA a SCL odpovídají pinům sběrnice I2C.

M5Stack jednotka ACCEL s akcelerometrem ADXL345

Ukázkový program najdete níže, přičemž jeho popis můžete najít na videu, které je připojeno na konci návodu.

// M5 stack a jednotka ACCEL
// Akcelerometr ADXL345
// navody.dratek.cz

// připojení potřebných knihoven
#include <M5Stack.h>
#include <SparkFun_ADXL345.h>

// vytvoření objektu akcelerometru
ADXL345 adxl = ADXL345();

void setup() {
  // zahájení komunikace s M5 stack
  M5.begin();
  // zahájení komunikace s napájecím čipem
  M5.Power.begin();
  // vypnutí reproduktoru
  dacWrite(25, 0);
  // zapnutí senzoru
  adxl.powerOn();

  adxl.setRangeSetting(16);           // nastavení citlivosti na 16g
  adxl.setActivityXYZ(1, 0, 0);       // Set to activate movement detection in the axes "adxl.setActivityXYZ(X, Y, Z);" (1 == ON, 0 == OFF)
  adxl.setActivityThreshold(75);      // 62.5mg per increment   // Set activity   // Inactivity thresholds (0-255)

  adxl.setInactivityXYZ(1, 0, 0);     // Set to detect inactivity in all the axes "adxl.setInactivityXYZ(X, Y, Z);" (1 == ON, 0 == OFF)
  adxl.setInactivityThreshold(75);    // 62.5mg per increment   // Set inactivity // Inactivity thresholds (0-255)
  adxl.setTimeInactivity(10);         // How many seconds of no activity is inactive?

  adxl.setTapDetectionOnXYZ(0, 0, 1); // Detect taps in the directions turned ON "adxl.setTapDetectionOnX(X, Y, Z);" (1 == ON, 0 == OFF)

  // Set values for what is considered a TAP and what is a DOUBLE TAP (0-255)
  adxl.setTapThreshold(50);           // 62.5 mg per increment
  adxl.setTapDuration(15);            // 625 μs per increment
  adxl.setDoubleTapLatency(80);       // 1.25 ms per increment
  adxl.setDoubleTapWindow(200);       // 1.25 ms per increment

  // Set values for what is considered FREE FALL (0-255)
  adxl.setFreeFallThreshold(7);       // (5 - 9) recommended - 62.5mg per increment
  adxl.setFreeFallDuration(30);       // (20 - 70) recommended - 5ms per increment

  // zapnutí detekce všech přerušení
  adxl.InactivityINT(1);
  adxl.ActivityINT(1);
  adxl.FreeFallINT(1);
  adxl.doubleTapINT(1);
  adxl.singleTapINT(1);

  // nastavení velikosti textu
  M5.Lcd.setTextSize(4);
  // nastavení kurzoru do levého horního rohu
  M5.Lcd.setCursor(0, 0);
  // vypsání základního textu
  M5.Lcd.println("Hodnota ACCEL");
  M5.Lcd.print("X  |  Y  |  Z");
}

void loop() {
  // vyčtení údajů do vytvořených proměnných
  int x, y, z;
  adxl.readAccel(&x, &y, &z);
  // vytisknutí všech údajů na displej
  M5.Lcd.setTextColor(YELLOW);
  M5.Lcd.setCursor(0, 80);
  M5.Lcd.print(x);
  M5.Lcd.print(", ");
  M5.Lcd.print(y);
  M5.Lcd.print(", ");
  M5.Lcd.println(z);
  // kontrola všech přerušení
  ADXL_ISR();
  // krátká pauza
  delay(500);
  // smazání údajů černou barvou
  M5.Lcd.setTextSize(4);
  M5.Lcd.setTextColor(BLACK);
  M5.Lcd.setCursor(0, 80);
  M5.Lcd.print(x);
  M5.Lcd.print(", ");
  M5.Lcd.print(y);
  M5.Lcd.print(", ");
  M5.Lcd.println(z);
  // vymazání předchozí zprávy o přerušeních
  M5.Lcd.fillRect(0, 120, 305, 120, BLACK);
}

void ADXL_ISR() {
  // nastavení menšího textu, barvy a pozice
  M5.Lcd.setTextSize(3);
  M5.Lcd.setTextColor(RED);
  M5.Lcd.setCursor(0, 120);
  // načtení všech přerušení do proměnné
  byte interrupts = adxl.getInterruptSource();
  // detekce volného pádu
  if (adxl.triggered(interrupts, ADXL345_FREE_FALL)) {
    M5.Lcd.println("Volny pad!");
  }
  // detekce neaktivity
  if (adxl.triggered(interrupts, ADXL345_INACTIVITY)) {
    M5.Lcd.println("Neaktivita!");
  }
  // detekce aktivity
  if (adxl.triggered(interrupts, ADXL345_ACTIVITY)) {
    M5.Lcd.println("Aktivita!");
  }
  // detekce dvojitého poklepání
  if (adxl.triggered(interrupts, ADXL345_DOUBLE_TAP)) {
    M5.Lcd.println("Dvoji poklepani!");
  }
  // detekce poklepání
  if (adxl.triggered(interrupts, ADXL345_SINGLE_TAP)) {
    M5.Lcd.println("Poklepani!");
  }
}

Sestřih ze streamu:

Celý záznam:

Na eshopu můžete tento M5stack Accel modul zakoupit zde:
https://dratek.cz/arduino/20938-m5stack-3osy-akcelerometr.html

FB tw

Další podobné články