Arduino Sleep для экономии заряда батареи - Как подключить его к существующему скетчу

Мой скетч ниже просто использует сенсорный датчик для активации серводвигателя, чтобы перейти из начального положения 0 в 180, а затем обратно в 0. затем я хочу, чтобы Adruino NANO перешел в спящий режим, чтобы сэкономить время автономной работы.

Будучи новичком в программировании и после многих попыток использовать его код и объединить его с моим. Был неудачен.

так что если кто-нибудь может помочь вставить нижеприведенный скетч окорока в мой, я буду очень признателен. Поскольку у меня закончились идеи.

ВОТ МОЙ СКЕТЧ

#include <Servo.h>

// константы не изменятся
const int SENSOR = 2; // Вывод Arduino подключен к выводу датчика движения 7
const int SERVO = 9; // Вывод Arduino подключен к выводу серводвигателя 9

Servo servo; // создать объект servo для управления сервоприводом

int pos = 0; // переменная для хранения положения сервопривода

// переменные изменятся:
int lastMotionState; // предыдущее состояние датчика движения
int currentMotionState; // текущее состояние датчика движения

void setup() {

Serial.begin(9600); // инициализировать последовательный
pinMode(SENSOR, INPUT); // установить вывод arduino 9 в режим ввода
servo.attach(SERVO); // прикрепляет сервопривод на выводе 12 к объекту сервопривода

servo.write(0);
currentMotionState = digitalRead(SENSOR);
}

void loop() {
lastMotionState = currentMotionState; // сохранить последнее состояние
currentMotionState = digitalRead(SENSOR); // прочитать новое состояние

if (currentMotionState == LOW && lastMotionState == HIGH) { // изменение состояния вывода: НИЗКИЙ - > ВЫСОКИЙ
Serial.println("OFF");
servo.write(0);
delay(100); // ждет (X)мс, пока сервопривод достигнет нужного положения.
}
else
if (currentMotionState == HIGH && lastMotionState == LOW) { // изменение состояния вывода: ВЫСОКИЙ - > НИЗКИЙ
Serial.println("ACTIVE");
servo.write(180);
delay(2000); // ждет (x)мс, пока сервопривод достигнет нужного положения.
}
delay(10); // повторяет программу - большая задержка - триггер
}

______________________________________

Автор:Ab Kurk SLEEP SKETCH

Этот скетч является частью руководства для начинающих по переводу Arduino в спящий режим. Она должна продемонстрировать, как погрузить ваш arduino в глубокий сон и как его разбудить.

*/

#include <avr/sleep.h>//эта библиотека AVR содержит методы, управляющие режимами сна
#define interruptPin 2 //Pin we are going to use to wake up the Arduino

void setup() {
Serial.begin(115200);//Start Serial Comunication
pinMode(LED_BUILTIN,OUTPUT);//Мы используем светодиод на выводе 13 для неприличия, когда Arduino находится в спящем
pinMode(interruptPin,INPUT_PULLUP);//Set pin d2 to input using the buildin pullup resistor
digitalWrite(LED_BUILTIN,HIGH);//включение светодиода
}

void loop() {
delay(5000);//подождите 5 секунд перед сном
Going_To_Sleep();
}

void Going_To_Sleep(){
sleep_enable();//Включение режима сна
attachInterrupt(0, wakeUp, LOW);//подключение прерывания к контакту d2
set_sleep_mode(SLEEP_MODE_PWR_DOWN);//Установка режима сна, в нашем случае full sleep
digitalWrite(LED_BUILTIN,LOW);//выключение
delay(1000); //подождите секунду, чтобы светодиод погас, прежде чем перейти в спящий
sleep_cpu();//активация спящего режима
Serial.println("just woke up!");//следующая строка кода,выполняемая после прерывания
digitalWrite(LED_BUILTIN,HIGH);//включение светодиода
}

void wakeUp(){
Serial.println("Interrrupt Fired");//Print message to serial monitor
sleep_disable();//Disable sleep mode

detachInterrupt(0); //Удаляет прерывание с вывода 2;

}

, 👍-1

Обсуждение

пожалуйста, задайте вопрос ... это сайт вопросов и ответов, @jsotola

Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией, чтобы определить адекватный ответ., @Community

Вопрос был в том, как соединить мой скетч со скетчем Кирка., @Anthony


1 ответ


1

Я предполагаю, что вы делаете что-то вроде двери или сейфового замка, который иногда может использоваться для активации двигателя, чтобы отпереть что-то, но 99,99% времени сидит там, ничего не делая, и вы хотите сэкономить энергию в это время.

Вам нужно кое-что переделать.

  • Прерывание для обнаружения нажатия переключателя. Тогда процессор может спать, используя очень мало энергии.

  • Прерывание, когда оно происходит, будит процессор

  • Вы активируете мотор, чтобы отпереть дверь или что-то в этом роде.

  • Вы переводите процессор в режим низкого энергопотребления и возвращаетесь в спящий режим

Поскольку мое имя было упомянуто в вопросе, советы по выполнению маломощных вещей находятся по этой ссылке. А вот насчет прерываний.

Плюс немного сокращенная версия (из - за ограничений пространства) здесь, на этом сайте.

(Вы не должны давать ответы там, где ответ полностью содержится в ссылке, но в данном случае ссылка-это просто дополнительный материал)

,

- Ты не должен давать ответы там, где ответ полностью находится в ссылке... Я полностью понимаю Ника. Управление питанием является сложным, действительно зависит от HW (т. Е. Процессора и схемы, которые вы используете) и не должно быть "добавлено" в проект. Скорее всего, проект (включая HW) должен быть построен вокруг управления питанием., @st2000

Вы правы в отношении моего проекта. Спасибо за информацию пойду хоть в эти выходные и попытаюсь заставить эту штуку работать, @Anthony