Power ON, Кнопка с электронной фиксацией для Arduino

Артикул: Power ON
Ном. номер: 9000385372
Производитель: DIY
Power ON, Кнопка с электронной фиксацией для Arduino
188.30 руб.
Есть в наличии.
Отгрузка со склада в г.Москва
Добавить в корзину 1 шт. на сумму 188.30 руб.

Спецификация набора

То, что у вас уже есть, вы можете удалить в корзине.

НаименованиеЦенаКол-во
Печатная плата Power On, Печатная плата с разводкой, FR4 31.496х31.496мм (1.5мм, 18мкм) 130 руб. 1
Кер.ЧИП конд. 0.1 мкФ Y5V 50В,+80-20%, 0805 4 руб. 1
0.125Вт 0805 10 кОм, 5%, Чип резистор (SMD) 0.90 руб. 1
0.125Вт 0805 100 кОм, 5%, Чип резистор (SMD) 0.90 руб. 5
0.125Вт 0805 1 МОм, 5%, Чип резистор (SMD) 0.90 руб. 1
BAS321.115, Диод 250В 0.25А [SOD-323] 8 руб. 3
BC817-40.215, Транзистор NPN 45В, 0.5А, 0.31Вт, [SOT-23] 3 руб. 1
IRLML2244TRPBF, Транзистор, P-канал 20В 4.3А [Micro3 / SOT-23] 9 руб. 1
PLS-6 (DS1021-1x6), Вилка штыревая 2.54мм 1x6 прямая тип1 6 руб. 1
KLS7-TS6604-7.0-180-B (IT-1102SB), Кнопка тактовая 6х6х7мм SMD 6 руб. 1

Автор: Александр Вишняков

При использовании батарейного питания важно не только потребление устройства при работе, но и небольшое потребление в неактивном состоянии - неудобно, когда батарея у лежащего в ящике стола прибора разряжается полностью всего лишь за неделю. У ардуиновского микроконтроллера есть режимы с крайне низким энергопотреблением, но их не всегда удобно использовать, да и остальная часть схемы всё равно будет тянуть с батареи ненужные в данный момент миллиамперы (стабилизатор на 5В даст почти 5мА, а два десятка светодиодов WS2812B – все 20). Ставить переключатель на питание тоже не всегда удобно.

С помощью PowerOn можно как включать питание одной кнопкой, так и программным способом его отключать (например, когда контроллер определил, что устройством не пользуются какое-то достаточно длительное время).

Электрическая схема.

Схема

Подключаем батарею или аккумулятор к выводам G (земля, минусовой контакт) и Bat (плюсовой контакт). Питание основной схемы с микроконтроллером берём с вывода Vcc.
Два вывода Pwr и Keep подключаем к свободным ногам контроллера. Pwr – вход кнопки питания, Keep настраиваем как выход.
При нажатии на кнопку питание подаётся на схему, контроллер в самом начале программы выводит логическую единицу на вывод Keep – кнопку можно отпускать, всё будет работать дальше. При дальнейшем нажатии на кнопку она работает, как и все другие – на выводе Pwr появляется логическая единица при нажатии. Можно реализовать алгоритм выключения – при длительном нажатии на неё контроллер выводит на выход Keep логический ноль, схема обесточивается.
Дополнительный вход Ext можно использовать, например, при подключении внешнего питания - если мы запитали устройство от аккумулятора, а его подзаряжаем, например, от модуля RDC1-0010 – внешнее питание заводим также на вход Ext, при подаче его контроллер включается, но на его входе Pwr логический ноль – таким образом, понятно, что включили не кнопкой, и можно, например, миганием светодиода индицировать процесс зарядки.

Это открытый проект! Лицензия, под которой он распространяется – Creative Commons - Attribution - Share Alike license.

Скетч. Код программы


#include <Adafruit_NeoPixel.h>

#define   LEDS_PIN             A0
#define   ANALOG_PIN_RANDOM    A1
#define   PWR_KEY              (8)
#define   PWR_ON               (9)

#define   LEDS_MODULES      2
#define   PIXEL_IN_MODULE   8
#define   PIXEL_NUM         (LEDS_MODULES * PIXEL_IN_MODULE)

#define   BACKGROUND_COLOUR ((uint32_t) 0x00020000)

#define   PALE2_COLOUR ((uint32_t) 0x00030106)
#define   PALE1_COLOUR ((uint32_t) 0x00180830)

#define   BTN_OFF_TIME    50


Adafruit_NeoPixel LEDS = Adafruit_NeoPixel(PIXEL_NUM, LEDS_PIN, NEO_GRB + NEO_KHZ800);
unsigned int PowerOffCounter = 0;

void delay_check_power(unsigned int del)
{
    delay(del);
    // если кнопка нажата несколько секунд - выключаемся
    if (digitalRead(PWR_KEY) != 0)
    {
        PowerOffCounter++;
    }else{
        PowerOffCounter = 0;
    }
    if( PowerOffCounter == BTN_OFF_TIME ){
        // выключили питиние
        digitalWrite(PWR_ON, LOW);  
        // оно будет оставаться, пока кнопку не отпустят, выключим на это время иллюминацию
        for(byte i=0; i< PIXEL_NUM; i++)
        {
            LEDS.setPixelColor(i, 0);
        }
        LEDS.show();
        // зацикливаемся навсегда
        while(1);            
    }
}

void setup()
{ 
  // настраиваем вход кнопки
  pinMode(PWR_ON, OUTPUT);
  // настраиваем выход перманентного включения питания 
  pinMode(PWR_KEY, INPUT);
  // включаем питание, теперь кнопку можно отпустить
  digitalWrite(PWR_ON, HIGH);
  LEDS.begin();
  for(byte i=0; i< PIXEL_NUM; i++)
    LEDS.setPixelColor(i, BACKGROUND_COLOUR);
  LEDS.show();
}
//-----------------------------------
void loop()
{
  for(byte i=0; i < 3; i++)
    LEDS_1();
}
//-----------------------------------
void LEDS_1()
{
  const unsigned int ShowDelay = 50;

  for(byte i=0; i< PIXEL_NUM; i++)
    LEDS.setPixelColor(i, BACKGROUND_COLOUR);
  LEDS.show();
  
  for(byte i=0; i< PIXEL_NUM; i++)
  {
    LEDS.setPixelColor(i, 150, 58, 255); //цвет R, G, B
    LEDS.show();
    // в цикле задержки заодно проверяем, не нажата ли кнопка вкл-выкл
    delay_check_power(ShowDelay);
    LEDS.setPixelColor(i, BACKGROUND_COLOUR);
  }
}
//-----------------------------------

Техническая документация

PowerOn_BOM
pdf, 67 КБ
Схема
pdf, 9 КБ
PowerOn_Kicad_project
zip, 168 КБ

Выберите регион, чтобы увидеть способы получения товара.

Комментарии