ARDUINO Можно ли разбудить arduino с помощью imu`шки встряхиванием?

Strochy

✩✩✩✩✩✩✩
4 Янв 2024
2
1
Форумчане, привет!
Вопрос следующий - есть небольшой проект, включающий в себя обычную MPU6050. В разделе по урокам Arduino, нашёл статью как раз по MPU6050, в частности там рассматривается работа со считыванием углов, в котормо говорится про работу датчика через встроенный DMP (Digital Motion Processor). Там же есть два скетча, один из которых реализуется через прерывания.
Так вот я не до конца въехал как работает пин прерывания на имушке, вместе с этим, изучая статью по режимам сна на arduino, в голове сложилось 2 и 2 - хотелось бы сделать пробуждение устройства встряхиванием (а по всем наводкам, пробуждение как раз производится через прерывания).

Собственно вопрос - можно ли вывести arduino из режима сна с помощью MPU6050 при встряхивании, и если да, то как?

P.S. Сори, если задваиваю тему, по поиску на форуме не нашёл, ровно как и в интернетах (возможно, не умею гуглить, но вопрос немного специфический, нашёл пару статей с другими датчиками, но вот с имушками - не обнаружил).
P.P.S. Вообще за помощью на форум обращаю впервые, надеюсь достаточно чётко сформулировал вопрос и контекст.
 

Strochy

✩✩✩✩✩✩✩
4 Янв 2024
2
1
@Bruzzer, действительно, информация в статье исчерпывающая, нужно было дочитать и изучить самый последний скетч.

Наврядли вам интересно, но получился следующий скетч:


C++:
#include <Wire.h>
#include <I2Cdev.h>
#include <MPU6050.h>
#include "LowPower.h"

MPU6050 mpu;

void setup() {
  Serial.begin(9600);
  mpu.initialize();
  mpu.setInterruptMode(true);
  mpu.setIntMotionEnabled(true);
  mpu.setMotionDetectionThreshold(2);
  mpu.setMotionDetectionDuration(2);
  pinMode(2, INPUT);
  attachInterrupt(digitalPinToInterrupt(2), wakeUp, RISING);
}

void loop() {
  Serial.println("Sleeping...");
  delay(1000); 
  sleep();
}

void wakeUp() {
  Serial.println("Wake up!");
  Serial.println("Device was shaken!");
  delay(5000);
}

void sleep() {
  digitalWrite(LED_BUILTIN, LOW);
  LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
  attachInterrupt(digitalPinToInterrupt(2), wakeUp, RISING);
}
 
  • Лойс +1
Реакции: N360