Как приладить 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. А как правльно подключить модуль блютуз?
Спасибо за отклик!)))
"Правильно" здесь не то слово. Зависит от потребления Вашего модуля. Какой ток он кушает? Если небольшой, то и так, как у Вас - правильно. Просто я всегда влкючаю их от независимого питания, чтобы не думалось.
А нижнее реле электромагнитное (с катушкой) или твёрдотельное? Если с катушкой, то параллельно катушке всегда нужно ставить диод "против шерсти".
есть в сети примеры для энергосбережение . просто смысла нет. сама ардуино жрет меньше чем будет ваш блютуз.