Как приладить sleep mode или как уменьшить энергопотребление

gosha2393
Offline
Зарегистрирован: 08.12.2014

Делаю противоугонную систему. Не силен в програмировании ардуино. Как уменьшить энергопотребеление?? светодиоды все выпаял. Сам так и не смог разобраться в режимах 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"
       }
    }
  }
} 
//     ---------БЛЮТУЗ----------

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Насчёт сна и энергосбережения

1. http://gammon.com.au/power

2. http://we.easyelectronics.ru/AVR/avr-power-management-ili-kak-pravilno-spat.html

А насчёт Вашей схемы - это упрощёнка или Всё так и собирается? Там явно не хватает обвязки для реле (как минимум диода, а может и ещё чего, типа резистора, от реле зависит). Ну и блютуз напрямую от Ардуины питать не есть хорошо. Потом придёте сюда с вопросом "а чё глючит?"

gosha2393
Offline
Зарегистрирован: 08.12.2014

1. Не хватает мне мозгов на понимание функции sleep mode. Точнее я понимаю, что сон по таймеру мне не подходит, т.к.  входные сигналы могут быть в любое время и если ардуино будет спать то ничего не сработает. Соответсвенно мне нужен пробуждение по прерыванию, но я не понимаю что такое прерывание, как оно работает и как им пользоваться. Все статьи, которые я читал про прерывание так и не открыли мне свет((( Может вы сможете мне по простому обьяснить что такое прерывание?

2. На схеме упращена обвязка реле, которое управляет бензанасосом. Тоесть Там стоит модуль реле с полноценной обвязкой. А реле которое подключена к дополниельному каналу сигнализации и имитирует нажатие кнопки оно подключено так как указано на схеме.

3. А как правльно подключить модуль блютуз?

Спасибо за отклик!)))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

"Правильно" здесь не то слово. Зависит от потребления Вашего модуля. Какой ток он кушает? Если небольшой, то и так, как у Вас -  правильно. Просто я всегда влкючаю их от независимого питания, чтобы не думалось.

А нижнее реле электромагнитное (с катушкой) или твёрдотельное? Если с катушкой, то параллельно катушке всегда нужно ставить диод "против шерсти".

arDubino
Offline
Зарегистрирован: 12.01.2017

есть в сети примеры для энергосбережение . просто смысла нет. сама ардуино жрет меньше чем будет ваш блютуз.