Всем привет!
Я сделал ещё один незамысловатый девайс. Решил сюда тоже выложить.
Цель устройства – через определенный промежуток времени запищать/завибрировать и напомнить мне, что пора встать из-за компа(например) и немного размяться.
Осталось только в корпус оформить...
Почему не использовать для этого, например таймер в телефоне, спросите Вы? На работе не хочу отвлекать окружающих. Пищалку я заменю на вибрационный двигатель для мобильных телефонов. Будет лежать в кармане и в указанное время начинать вибрировать. Опять таки можно для этой цели использовать разные приложения для телефона, которые включают вибрацию в нужное время. Проблем в том, что на работе телефон лежит на столе в основном.
Ну и наверно основная причина – мне тупо хотелось что-то сделать, а за сложные проекты пока браться не хочется.
В устройстве 2 переключателя:
1. Вкл/Выкл
2. Переключение работы режимов 40мин/10 мин
После того как устройство запищит/завибрирует выключается отключением питания.
Есть 2 светодиода, которые показывают, какой режим выбран.
Для экономии энергии светодиоды зажигаются только при нажатии тактовой кнопки.
Зарядка внешняя (TP4056 слегка переделанный на зарядку низким током)
Схема:
За основу взят скетч Гайвера для простого автополива. Т.к. таймер вотчдога кривой, во временные интервалы внесены поправки. Сейчас погрешность примерно +/-30 секунд, что меня в целом устраивает.
Скетч:
Я сделал ещё один незамысловатый девайс. Решил сюда тоже выложить.
Цель устройства – через определенный промежуток времени запищать/завибрировать и напомнить мне, что пора встать из-за компа(например) и немного размяться.
Осталось только в корпус оформить...
Почему не использовать для этого, например таймер в телефоне, спросите Вы? На работе не хочу отвлекать окружающих. Пищалку я заменю на вибрационный двигатель для мобильных телефонов. Будет лежать в кармане и в указанное время начинать вибрировать. Опять таки можно для этой цели использовать разные приложения для телефона, которые включают вибрацию в нужное время. Проблем в том, что на работе телефон лежит на столе в основном.
Ну и наверно основная причина – мне тупо хотелось что-то сделать, а за сложные проекты пока браться не хочется.
В устройстве 2 переключателя:
1. Вкл/Выкл
2. Переключение работы режимов 40мин/10 мин
После того как устройство запищит/завибрирует выключается отключением питания.
Есть 2 светодиода, которые показывают, какой режим выбран.
Для экономии энергии светодиоды зажигаются только при нажатии тактовой кнопки.
Зарядка внешняя (TP4056 слегка переделанный на зарядку низким током)
Схема:
За основу взят скетч Гайвера для простого автополива. Т.к. таймер вотчдога кривой, во временные интервалы внесены поправки. Сейчас погрешность примерно +/-30 секунд, что меня в целом устраивает.
Скетч:
C++:
long PERIOD;
int sensorValue = 0;
uint32_t mainTimer, myTimer;
#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
void setup() {
pinMode(0,OUTPUT); // P0
pinMode(1, INPUT); // P1
sensorValue = digitalRead(1);
PERIOD = 2100;
if (sensorValue == 1) {
PERIOD = 530;
}
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 ((long)mainTimer - myTimer > PERIOD) { // таймер периода
myTimer = mainTimer; // сброс таймера
digitalWrite(0, HIGH); // врубить
}
sleep_enable(); // разрешаем сон
sleep_cpu(); // спать!
}
ISR (WDT_vect) {
WDTCR |= _BV(WDIE); // разрешаем прерывания по ватчдогу. Иначе будет реcет.
}