Как приладить sleep mode или как уменьшить энергопотребление
- Войдите на сайт для отправки комментариев
Вс, 19/02/2017 - 22:40
Делаю противоугонную систему. Не силен в програмировании ардуино. Как уменьшить энергопотребеление?? светодиоды все выпаял. Сам так и не смог разобраться в режимах sleep mode. Хочу чтобы ардуина ухадила в сон если не приходит никакой сигнал. То есть если ничего не происходит например 5 секунд, уйти в сон. Если нажалась одна из кнопок или пришел сигнал из модуля блютуз, ардуино проснулась, всё сделала и уснула.
Буду очень признателен если поможете в моей проблеме))))
// противоугонка v1.0 сейчас залита на ардуино int flag=0; // флажок int val; // переменная для работы блютуз void setup() { Serial.begin(9600); // открываем связь с блютуз pinMode(2, OUTPUT); // настраиваем пин 2 как выход } void loop() { // ---------КНОПКА НА ПАНЕЛЕ-------- if(digitalRead(14)==HIGH&&flag==0)//если кнопка нажата // и перемення flag равна 0 , то ... { digitalWrite(2,!digitalRead(2)); flag=1; //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие // плюс защита от "дребезга" } delay(10); if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата //и переменная flag равна - 1 ,то ... { flag=0;//обнуляем переменную flag } // ---------КНОПКА НА ПАНЕЛЕ-------- // ---------РЕЛЕ - УПРАВЛЕНИЕ ЧЕРЕЗ СИГНАЛКУ---------- // эта функция работает так: // обмотка реле подключена: "+" на +12В, а "-" на дополнительный канал сигнализаци // замыкающие контакты на реле подключены на ардуино как обычная кнопка // при установки на охрану сигналиция даст импульс длиной 0,8с и реле замкнется if(digitalRead(18)==HIGH&&flag==0)//если кнопка нажата // и перемення flag равна 0 , то ... { digitalWrite(2, LOW); flag=1; //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие // плюс защита от "дребезга" } delay(10); if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата //и переменная flag равна - 1 ,то ... { flag=0;//обнуляем переменную flag } // ---------РЕЛЕ - УПРАВЛЕНИЕ ЧЕРЕЗ СИГНАЛКУ---------- // ---------БЛЮТУЗ---------- if (Serial.available()) // если с блютуз модуля пришел сигнал { val = Serial.read(); // записываем в переменную число которое пришло с блютуз if (val == '7'&&flag==0) // Если пришла "7" меняем состояние выхода { digitalWrite(2,!digitalRead(2)); flag=1; if(digitalRead(2)==HIGH) // если на выходе вкл то { Serial.println("ON"); // отправляем по блютуз на телефон "ON" } if(digitalRead(2)==LOW) // если на выходе выкл то { Serial.println("OFF"); // отправляем по блютуз на телефон "OFF" } } flag=0;//обнуляем переменную flag if (val == '2') // Если пришла "2" { if(digitalRead(2)==HIGH) // если на выходе вкл то { Serial.println("ON"); // отправляем по блютуз на телефон "ON" } if(digitalRead(2)==LOW) // если на выходе выкл то { Serial.println("OFF"); // отправляем по блютуз на телефон "OFF" } } } } // ---------БЛЮТУЗ----------
Насчёт сна и энергосбережения
1. http://gammon.com.au/power
2. http://we.easyelectronics.ru/AVR/avr-power-management-ili-kak-pravilno-spat.html
А насчёт Вашей схемы - это упрощёнка или Всё так и собирается? Там явно не хватает обвязки для реле (как минимум диода, а может и ещё чего, типа резистора, от реле зависит). Ну и блютуз напрямую от Ардуины питать не есть хорошо. Потом придёте сюда с вопросом "а чё глючит?"
1. Не хватает мне мозгов на понимание функции sleep mode. Точнее я понимаю, что сон по таймеру мне не подходит, т.к. входные сигналы могут быть в любое время и если ардуино будет спать то ничего не сработает. Соответсвенно мне нужен пробуждение по прерыванию, но я не понимаю что такое прерывание, как оно работает и как им пользоваться. Все статьи, которые я читал про прерывание так и не открыли мне свет((( Может вы сможете мне по простому обьяснить что такое прерывание?
2. На схеме упращена обвязка реле, которое управляет бензанасосом. Тоесть Там стоит модуль реле с полноценной обвязкой. А реле которое подключена к дополниельному каналу сигнализации и имитирует нажатие кнопки оно подключено так как указано на схеме.
3. А как правльно подключить модуль блютуз?
Спасибо за отклик!)))
"Правильно" здесь не то слово. Зависит от потребления Вашего модуля. Какой ток он кушает? Если небольшой, то и так, как у Вас - правильно. Просто я всегда влкючаю их от независимого питания, чтобы не думалось.
А нижнее реле электромагнитное (с катушкой) или твёрдотельное? Если с катушкой, то параллельно катушке всегда нужно ставить диод "против шерсти".
есть в сети примеры для энергосбережение . просто смысла нет. сама ардуино жрет меньше чем будет ваш блютуз.