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;
}
@Anthony, 👍-1
Обсуждение1 ответ
Я предполагаю, что вы делаете что-то вроде двери или сейфового замка, который иногда может использоваться для активации двигателя, чтобы отпереть что-то, но 99,99% времени сидит там, ничего не делая, и вы хотите сэкономить энергию в это время.
Вам нужно кое-что переделать.
Прерывание для обнаружения нажатия переключателя. Тогда процессор может спать, используя очень мало энергии.
Прерывание, когда оно происходит, будит процессор
Вы активируете мотор, чтобы отпереть дверь или что-то в этом роде.
Вы переводите процессор в режим низкого энергопотребления и возвращаетесь в спящий режим
Поскольку мое имя было упомянуто в вопросе, советы по выполнению маломощных вещей находятся по этой ссылке. А вот насчет прерываний.
Плюс немного сокращенная версия (из - за ограничений пространства) здесь, на этом сайте.
(Вы не должны давать ответы там, где ответ полностью содержится в ссылке, но в данном случае ссылка-это просто дополнительный материал)
- Ты не должен давать ответы там, где ответ полностью находится в ссылке... Я полностью понимаю Ника. Управление питанием является сложным, действительно зависит от HW (т. Е. Процессора и схемы, которые вы используете) и не должно быть "добавлено" в проект. Скорее всего, проект (включая HW) должен быть построен вокруг управления питанием., @st2000
Вы правы в отношении моего проекта. Спасибо за информацию пойду хоть в эти выходные и попытаюсь заставить эту штуку работать, @Anthony
- Функция random() вообще не случайна
- DS3218MG Сервопривод - не работает с блоком питания
- Условие «если» проблема/вопрос
- Программа счетчик
- Почему моя кнопка всегда возвращается HIGH?
- Нажмите кнопку для подачи питания на сервопривод
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Какое максимальное энергопотребление Arduino Nano 3.0?
пожалуйста, задайте вопрос ... это сайт вопросов и ответов, @jsotola
Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией, чтобы определить адекватный ответ., @Community
Вопрос был в том, как соединить мой скетч со скетчем Кирка., @Anthony