Будильник на Arduino с эффектом рассвета
Существует много доказанных преимуществ пробуждения при плавном увеличении света (как при рассвете), одно из которых включает в себя хорошее настроение, в отличие от разбивающего слух звукового сигнала будильника в темноте. Тем более у кого проблемы с пробуждением в пасмурные зимние дни, то им также помогло бы устройство для иммитации восхода солнца.
К таким можно отнести, например, лампу для пробуждения HF3520 от Philips. Но это довольно дорогая вещь, поэтому в случае отсутствия лишних денег лучше создать свой собственный будильник, который постепенно (и красиво) загорается по утрам. В качестве основы можно использовать Arduino.
Ключевое оборудование, требуемое в данном проекте – это Arduino Uno (или Nano) и модуль часов реального времени TinyRTC DS1307. Также необходима белая светодиодная лента и источник питания постоянного тока с достаточным выходным током.
Схема подключения для будильника на основе Arduino
Ниже показана схема подключения для будильника со световым эффектом рассвета на основе Arduino, TinyRTC DS1307 и светодиодной ленты.
Подключение оборудования довольно просто. Arduino Uno питается от внешнего источника напряжения постоянного тока (12 В) через входное гнездо, а регулируемый выход 5 В от платы Arduino используется в качестве источника питания модуля TinyRTC (5 В и GND). Интерфейс I2C модуля TinyRTC естественным образом подключен к интерфейсу I2C Arduino (SCL-A5 и SDA-A4). Цифровой контакт 2 (D2) Arduino – это вход переключателя, а цифровой контакт 3 (D3) - выход светодиода. Белая светодиодная лента также работает от того же внешнего источника 12 В постоянного тока. Следующая схема дает вам четкое представление о всей структуре оборудования.
Используемая здесь 5-метровая светодиодная лента теплого белого цвета с 300 светодиодами «SMD-3528» (60 светодиодов на метр) потребляет мощность 24 Вт при 12 В постоянного тока, то есть 4,8 Вт на метр. Исходя из этого, в качестве источника питания прототипа можно взять SMPS-адаптер 12 В постоянного тока / 3 A. Полевой транзистор MOSFET IRLZ44 (TO-220AB), используемый в качестве драйвера светодиодной ленты (T1), является универсально предпочтительным типом для всех коммерческих / промышленных применений при уровнях рассеиваемой мощности примерно до 50 Вт. MOSFET логического уровня используется здесь, потому что он полностью включается выходом логического уровня стандартного микроконтроллера.
Даже если вы можете управлять МОП-транзистором логического уровня непосредственно от входов/выходов Arduino, было бы лучше добавить резистор ограничителя тока (R1) на 100 Ом между ними, чтобы защитить входы/выходы. Кроме того, другой (дополнительный) резистор 10К (R2) между затвором и источником поможет полностью отключить MOSFET, когда вход/выход переходит в низкое состояние.
Код программы будильника с эффектом рассвета на Arduino
Сам скетч очень прост, так как устройство ждет времени «пробуждения», включает свет в нужное время и постепенно повышает уровень этого света. Здесь используется 5:40 в качестве времени пробуждения с 5 секундами между приращениями, чтобы свет достиг своего полного уровня яркости сразу после 6:00 (примерно через 20 минуту). Обратите внимание, что код включает в себя функцию переключения; следовательно, S1 должен быть в состоянии «включено», чтобы поддерживать систему в рабочем состоянии (с помощью тумблера вы сможете включать и выключать его).
#include <RTClib.h> // Библиотека часов реального времени
#include <Wire.h> // Библиотека I2C
#define LEDPIN 3 // Для светодиодов
#define SWITCHPIN 2 // Переключатель
#define HOUR 5 // Время пробуждения, часы
#define MINUTE 40 // Время пробуждения, минуты
#define FADESPEED 5000 // Скорость нарастания интенсивности света
RTC_DS1307 rtc;
bool wake_up_now = false;
void setup()
{
pinMode(LEDPIN, OUTPUT); // D3 навстройка на выход
pinMode(SWITCHPIN, INPUT); // D2 навстройка на вход
digitalWrite(SWITCHPIN, HIGH); // Активация внутреннего подтягивающего резистора
Serial.begin(57600); // Запуск последовательного монитора
if (!rtc.begin())
{
Serial.println("Couldn't find RTC"); // Сообщение об ошибке, отсутствие часов
while (1);
}
if (!rtc.isrunning())
{
Serial.println("RTC is NOT running!"); // Сообщение об ошибке сбоя часов
}
}
void loop()
{
DateTime now = rtc.now();
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
if (digitalRead(SWITCHPIN) == HIGH)
{
// Настройка пробуждения
// Выключим световой сигнал, если светодиодный переключатель находится в положении OFF
analogWrite(LEDPIN, 0);
}
if ((now.minute() == MINUTE) & (now.hour() == HOUR))
{
// Пробуждение
wake_up_now = true;
}
else
{
// Пауза на одну секунду
delay(1000);
}
// Включим световой сигнал, если светодиодный переключатель находится в положении ON
if (wake_up_now == true & digitalRead(SWITCHPIN) == LOW)
{
for (int i = 0; i < 256; i++)
{
analogWrite(LEDPIN, i);
delay(FADESPEED);
if (i == 254)
{
wake_up_now = false;
}
}
}
}
Работа будильника с эффектом рассвета на Arduino
Создание атмосферы – самая сложная часть этого проекта. Вы можете организовать систему как отдельную настольную лампу для пробуждения (с более короткой полосой света) или сложить более длинную полосу света, чтобы окно вашей спальни освещалось так, как если бы это был солнечный свет снаружи (разместив полосу света позади жалюзи, чтобы осветить жалюзи с мягким свечением, это действительно может создать красивую симуляцию восхода солнца).
© digitrode.ru