Digispark подключение реле
- Войдите на сайт для отправки комментариев
Ср, 22/08/2018 - 10:20
Привет всем, вопрос такой, с Digispark не работал, поэтому не понимаю, когда подключаю модуль с мосфетом и отправляю Дигис спать все работает , но когда подключаю реле (твердотельное или обычное) горит тсполнительный светодио, как будто диги не спит.
/* Данный код превратит вашу Digispark в спящий таймер. Через каждые PERIOD секунд система подаёт 5 вольт на протяжении WORK секунд. Всё время, кроме переключения пина, система спит и потребляет 28 микроампер на плате Digispark с отрезанным светодиодом, стабилизатором и двумя диодами на шину USB. На голом камне будет работать ещё лучше! */ #define PERIOD 259200 // период работы в секундах (пример: 60*60*24*3 = 259200 - три дня!) #define WORK 30 // время работы в секундах #define MOS 1 // пин мосфета uint32_t mainTimer, myTimer; boolean state = false; #include <avr/wdt.h> #include <avr/sleep.h> #include <avr/interrupt.h> #define adc_disable() (ADCSRA &= ~(1<<ADEN)) // disable ADC (before power-off) #define adc_enable() (ADCSRA |= (1<<ADEN)) // re-enable ADC // http://alexgyver.ru/arduino/DigiDrivers.rar void setup() { // все пины как входы, экономия энергии for (byte i = 0; i < 6; i++) { pinMode(i, INPUT); } adc_disable(); // отключить АЦП (экономия энергии) wdt_reset(); // инициализация ватчдога wdt_enable(WDTO_1S); // разрешаем ватчдог // 15MS, 30MS, 60MS, 120MS, 250MS, 500MS, 1S, 2S, 4S, 8S WDTCR |= _BV(WDIE); // разрешаем прерывания по ватчдогу. Иначе будет резет. sei(); // разрешаем прерывания set_sleep_mode(SLEEP_MODE_PWR_DOWN); // максимальный сон } void loop() { mainTimer++; if (!state) { // если помпа не включена if ((long)mainTimer - myTimer > PERIOD) { // таймер периода myTimer = mainTimer; // сброс таймера state = true; // флаг на запуск pinMode(MOS, OUTPUT); // пин как выход digitalWrite(MOS, HIGH); // врубить } } else { // если помпа включена if ((long)mainTimer - myTimer > WORK) { // таймер времени работы myTimer = mainTimer; // сброс state = false; // флаг на выкл digitalWrite(MOS, LOW); // вырубить pinMode(MOS, INPUT); // пин как вход (экономия энергии) } } sleep_enable(); // разрешаем сон sleep_cpu(); // спать! } ISR (WDT_vect) { WDTCR |= _BV(WDIE); // разрешаем прерывания по ватчдогу. Иначе будет реcет. }
думаю, что нужно сравнить схемы подключения - 1)с мосфетом и 2) с реле
Выкладывайте.
думаю, что нужно сравнить схемы подключения - 1)с мосфетом и 2) с реле
Выкладывайте.
Кривые руки мои?
У вас в первой схеме светодиод, похоже, питается через вашу подтяжку пина D3
Первая схема вообще плохая. - Во-первых, вы питаете реле через стабилизатор Дигиспарка. Реле может не хватать тока.
Во-вторых, питая всю схему от 12в через регулятор Диги - ни о какой экономичности даже говорить не стоит, при таком подключении перевод МК в сон бесполезен.
У вас в первой схеме светодиод, похоже, питается через вашу подтяжку пина D3
Первая схема вообще плохая. - Во-первых, вы питаете реле через стабилизатор Дигиспарка. Реле может не хватать тока.
Во-вторых, питая всю схему от 12в через регулятор Диги - ни о какой экономичности даже говорить не стоит, при таком подключении перевод МК в сон бесполезен.
Там ситуация такая, что схемы взял за основу, но не использовал 100% всю (схемы не мои), И кнопку как в схеме я не использую,
Опишу что я хочу сделать, простоя программа, которая работает на обычной ардуине, раз в сутки Диги просыпается через мосфет подает на устройство 12в, через пару секунд реле замыкает контакт, работает все так 8 минут и выключается, на счет обжоры я знаю это след вопрос. Но пока не понимаю, почему реле нормально работает на ардине, но как то странно (имею ввиду странно для меня) на Диги.
вы питаете реле через стабилизатор Дигиспарка. Реле может не хватать тока.
на счет этого можно не беспокоиться. На этом спарке стоит 78M05. Он держит до 500мА, что поболее чем даже на ардуине. На такое реле точно хватит, даже на два.