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.
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.
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