Собираем светобудильник своими руками
Эта самоделка будет полезна тем, кто регулярно встает утром. Ведь впереди зима, а это значит, что просыпаться придется в темноте, а это довольно печально, да и небезопасно, если включатель света расположен довольно далеко. К тому же в темноте куда тяжелее проснуться и встать с кровати. Эта самоделка позволит решить такую проблему. Когда сработает будильник, в комнате засветиться лампа, что обеспечит комфортное пробуждение.
Работает все на микроконтроллере Arduino.
Материалы и инструменты для самоделки:
— разные светодиоды;
— часы реального времени типа MP1095;
— пъезопищалка (со встроенным генератором);
— прототип отладочной платы набора для изучения программирования Arduino (идет в наборе NR05), который рассчитан для подключения Arduino Nano;
— материал для создания светорассеивателя (если имеется 3D-принтер, то можно напечатать и что-то свое).
Процесс изготовления светильника:
Шаг первый. Начало сборки
Сперва автор начал с создания постамента светильника. На нем будет находиться светорассеиватель, а внутри установлено необходимо оборудование. Подставочка была быстренько нарисована в SketchUp. При желании можно напечатать также корпус для платы-прототипа, однако сам по себе прототип и так довольно красив. Помимо всего прочего его можно применять для разработки и других проектов, а что касается будильника, то в будущем его можно оформить и в более компактный вид, используя ту же плату Arduino Nano.
Лампа на максимальной яркости потребляет порядка 100 мА, в связи с этим напрямую к Arduino ее не подключить. Но на отладочной плате имеется усилитель тока, работающий на транзисторе, он выдает 200 мА.
Помимо всего прочего на плате есть куча кнопок, их в будущем можно использовать для экспериментов и настройки будильника.
Если говорить в общих чертах, то отладочная плата хороша тем, что имеет кучу разных разъемов, к которым можно подключать разнообразные датчики, сервомашинки, реле, устройства, работающие с интерфейсом I2C и другое. Чтобы подключить, нужно просто иметь провода с разъемами-розетками.
Шаг третий. Завершающий этап
Яркость лампы автор решил регулировать через ШИМ, используя девятый пин на микроконтроллере Arduino, который разведен на плате к усилителю. Пищалка подключается к разъему SOUND, к DAT подключается плюс, а минус к GND.
Часы реального времени нужно будет подключить к разъему I2C_5V, потому что для питания необходимо именно 5В.
Для настройки на самой плате находится двухстрочный LCD индикатор. Он довольно контрастный и имеет белые знаки на синем фоне, которые отлично видно. После того, как все необходимо оборудование будет подключено, можно переходить к настройке программного обеспечения.
Готовый скетч к самоделке можно скачать в конце статьи. Код имеет подробные комментарии, что позволит его отредактировать под любые потребности.
Вот и все, самоделка готова, можно приступать к испытаниям.
Источник
ГОВОРЯЩИЙ БУДИЛЬНИК
Существующие таймеры — это разные по конструкции и назначению приборы для приведения в действие соответствующих устройств, которые должны срабатывать в заранее заданный момент. В продаже они имеются, но стоят дорого. В то же время для бытовых нужд многие из них могут быть изготовлены своими силами, причем в простейшем варианте. Например, с использованием старых механических будильников. Ведь у них — очень выигрышная для этого особенность: заводной «барашек» при работе звонка вращается. Что само по себе уже готовый исполнительный механизм: «барашек», поворачиваясь, может надавить, скажем, на микропереключатель (например, МП-1), который заставит работать радио, свет, магнитофон или даже устройство для полива огорода.
В качестве основы такого таймера подойдет, например, механический будильник «Витязь». На его задней крышке на специальном кронштейне закреплен микропереключатель типа МП-1: он удобен тем, что имеет пару нормально разомкнутых контактов — значит, может работать в режиме «включателя». Для режима «выключатель» используются выводы 1,3.
Кронштейн под микропереключатель изготавливается из миллиметровой стали и крепится имеющимися винтами крышки будильника. На отогнутой полочке кронштейна — дополнительные резьбовые отверстия М2,5, которые размечаются по отверстиям микропереключателя и служат для его установки на кронштейн с таким расчетом, чтобы заводной «барашек» будильника мог надавить на кнопку МП-1 (положение Б). Перед установкой кронштейна с МП-1 будильник заводится почти до упора.
По завершении монтажа можно приступать к эксплуатации таймера, например, в качестве включателя радио. Подготовительная стадия: МП-1 в нажатом положении; уровень громкости приемника отрегулирован. Затем ушки заводного «барашка» переводятся в горизонтальное положение А, при этом радио выключится. Утром же в заданное время вы услышите короткий звонок (можно отключить и его) — и заговорит радио.
Будильник в роли таймера:
1 — крышка будильника; 2 — кронштейн (Ст.З); 3 — микропереключатель (МП-1); 4 — винт крепления кронштейна (2 шт.).
Кронштейн К будильнику «Севан».
Практичный совет для использования такого таймера на базе другого будильника — «Севана». Его «барашек», срабатывая, вращается в другую сторону (против часовой стрелки). Поэтому кронштейн будет несколько отличаться от описанного выше.
Теперь владельцы этих таймеров спят спокойно: говорящий будильник не испугает утром маленького ребенка.
П. СЕРЕБРЯКОВ, инженер-конструктор, г. Санкт-Петербург
Источник
Проснись с комфортом — делаем светобудильник своими руками
Вот и настала осень…
Впереди неумолимо маячит зима – утром темно, вечером темно.
Просыпаться по будильнику в полной темноте равносильно нырянию под лед. Стресс с утра – гарантированно унылый день.
Решение-то есть, светобудильник называется, но цена этой штуки от 5000 руб. Колется, однако. К тому же, алгоритм работы жестко запрограммирован, а ведь совершенно очевидно, что, по результатам просыпания, захочется что-то подкорректировать или расширить функционал.
А что, если на основе подручных средств соорудить что-то в этом духе? Хорошая задачка для DIY!
Для решения были использованы следующие материалы:
— прототип отладочной платы набора для изучения программирования Ардуино (входит в будущий набор NR05), рассчитанная на установку Arduino Nano;
— часы реального времени MP1095;
— светодиоды разные;
— пьезопищалка со встроенным генератором;
— белая полупрозрачная штука, когда-то напечатанная при отладке 3D-принтера (можно приспособить еще что-нибудь полупрозрачное в качестве рассеивателя, а у кого есть 3D принтер, то напечатать что нибудь свое);
— желание все это соединить и запрограммировать подходящий алгоритм работы.
Белую штуку захотелось взгромоздить на какой-нибудь постамент, чтобы смонтировать туда светодиод и подключить его кабелем к плате. Недолго думая, рисуем в SketchUp и печатаем на 3D принтере оранжевую подставочку. При сильном желании можно напечатать корпус для платы-прототипа, но прототип и так немыслимо красив!
К тому же, его можно использовать и под разработку других проектов, а будильничек, по результатам эксплуатации опытного образца, можно оформить в более компактную конструкцию на основе той же платы Arduino Nano.
Сначала воткнули один светодиод. Он был приклеен к основанию инновационным клеем, отверждающимся под воздействием ульрафиолета. Называется Bondic. Полезная в хозяйстве штучка, надо сказать! Держит крепко.
Тем же клеем приклеили разъем.
Посмотрели, как светиться. Не понравилось. В темноте, конечно, видно, но для активации мозга через оптические рецепторы не хватает. По сусекам набрали несколько ярких белых светодиодов. Объединенные параллельно в такую вот веточку, они дают вполне пробуждающий в максимуме яркости свет.
Потребляют в максимуме порядка 100 мА, напрямую к порту Ардуино не подсоединишь, но на отладочной плате имеется усилитель тока на транзисторе, обеспечивающий 200 мА.
Также на плате есть пять кнопок для всяких экспериментов, их задействуем для управления режимами и настройки будильника.
В целом, отладочная плата интересна наличием маркированных разъемов-штырей для подключения различных датчиков и исполнительных устройств, обеспечивая хороший функционал и дружелюбный интерфейс – можно, особо не задумываясь (разъемы подписаны) подключить датчики температуры, давления, сервомашинки, реле, устройства с интерфейсом I2C и т.п. Для подключение нужны только провода с разъемами-розетками.
Яркость будем регулировать ШИМом с девятого пина Ардуино, разведенного на плате к усилителю. Пищалку подсоединим к разъему SOUND, на DAT плюсом, на GND минусом. Часы реального времени – к разъему I2C_5V, поскольку 5В им и надо для питания. На плате уже установлен двухстрочный LCD индикатор, весьма контрастный, с приятными белыми знаками на синем фоне.
Собственно, все железо на месте, теперь дело за софтом.
Алгоритм был задуман так:
— при совпадении текущего времени с временем, на которое установлен будильник, яркость светильника должна медленно повышаться по полной;
— при этом несколько раз по нарастающей должны подаваться звуковые сигналы, не дающие wakeUp-объекту начихать на лампочку и уснуть при свете;
— надо дать возможность выключить в конце-концов надоедливый звук, а также включить полный свет вручную, или выключить его, уже будучи в полном сознании.
— должна быть возможность ставить время на часах и будильнике.
Получившийся скетч приведен в конце материала и снабжен подробными комментариями. Его несложно модифицировать под ваши желания и предпочтения.
Всем приятного пробуждения!
// Подключаем библиотеки вывода кириллицы на индикатор
#include
#include
// Подключаем библиотеку часов реального времени RTC
#include «RTClib.h»
// Подключаем библиотеку для использование встроенного таймера 2
// для управления временными интервалами сигнала
#include
int led13 = 13; // встроенный в Arduino Nano светодиод
int alarmPin = 3; // пин для управления сигналом будильника
int led = 9; // пин вывода ШИМ на светодиодную лампу
int brightness = 0; // начальная яркость
int riseAmount = 1; // шаг увеличения яркости 0-255
int timeAmount = 500; // шаг времени, мс
int beepCount = 0; // служебные переменные
int numberOfBeeps = 0;
unsigned long time_old;
unsigned long time_curr;
int alarm = 0; // флаг срабатывания будильника
int Step; // служебные переменные
unsigned long tSetOld;
unsigned long tTickOld;
// Создаем программный объект дисплей lcd, объясняя программе куда подключены линии RS,EN,DB4,DB5,DB6,DB7
LiquidCrystalRus lcd(A1, A2, A3, 2, 4, 7);
// Создаем программный объект RTC
RTC_DS1307 RTC;
int Year; // переменные для хранения данных с RTC
int Month;
int Day;
int Hour;
int Minute;
int Second;
int alarmHour = 0;
int alarmMinute = 0;
int setAlarm = 0; // будильник вкл./выкл.
int SetMode = 0; // режим установки часов/будильника вкл./выкл.
int AlarmOn; // сигнал вкл./выкл.
void setup() <
pinMode(led13, OUTPUT);
pinMode(3, OUTPUT);
lcd.begin(16, 2);
Wire.begin(); // инициализируем 1Wire (необходио для RTC)
RTC.begin(); // инициализируем RTC
RTC.writenvram(2, 0); // секунды сигнала устанавливаем в 00 (ячейка 2 постоянной памяти RTC)
tTickOld = millis(); // запомнаем число мс с момента запуска микроконтроллера для отсчета интервалов времени
// если нажата кнопка 5, установить текущее время из компьюьера на момент компиляции программы
// и сбросить будильник в 0
if (get_key() == 5) <
RTC.adjust(DateTime(__DATE__, __TIME__));
for (int i = 0; i 4) < // выход из режима установки
SetMode = 0;
lcd.noBlink();
lcd.noCursor();
>
switch (SetMode) < // установка мигающего курсора
case 1:
lcd.setCursor(12, 1); lcd.blink();
break;
case 2:
lcd.setCursor(9, 1); lcd.blink();
break;
case 3:
lcd.setCursor(12, 0); lcd.blink();
break;
case 4:
lcd.setCursor(9, 0); lcd.blink();
break;
>
if (get_key() == 1 or get_key() == 3) < // если нажата кнопка 1 или 3
tSetOld = millis(); // обнуляем счетчик нахождения в режиме установки
if (get_key() == 3) Step = 1; // если кнопка 3 — увеличиваем
if (get_key() == 1) Step = -1; // если кнопка 1 — уменьшаем
switch (SetMode) <
case 1:
SetMinuteAlarm(Step); // минуты будильника
break;
case 2:
SetHrAlarm(Step); // часы будильника
break;
case 3:
SetMinute(Step); // минуты текущего времени
break;
case 4:
SetHr(Step); // часы текущего времени
break;
if ((millis() — tTickOld) > 1000) <
displayTime(); // раз в секунду отображаем время на индикаторе в режиме установки
tTickOld = millis();
>
if ((millis() — tSetOld) > 10000) <
SetMode = 0; // автовыход из режима установки через 10 сек.
lcd.noBlink();
>
> // end SetMode
if (get_key() == 4) < // включаем/выключаем будильник
int alarm_ram = RTC.readnvram(3);
RTC.writenvram(3, !alarm_ram);
delay(50);
AlarmOn = alarm_ram;
delay(500);
>
if ((millis() — tTickOld) > 1000) <
displayTime(); // раз в секунду отображаем время на индикаторе
tTickOld = millis();
>
if (alarm == 1) // если будильник сработал
<
digitalWrite(led13, HIGH);
time_curr = millis();
if ((time_curr — time_old) > timeAmount) <
if (brightness 255) brightness = 255;
analogWrite(led, brightness); // медленно повышаем яркость с помощью ШИМ
switch (brightness) < // пищим пьезодинамиком по мере повышения яркости
case 60:
numberOfBeeps = 4;
alarmRun();
break;
case 120:
numberOfBeeps = 4;
alarmRun();
break;
case 180:
numberOfBeeps = 8;
alarmRun();
break;
case 220:
numberOfBeeps = 14;
alarmRun();
break;
>
if (brightness >= 255) <
numberOfBeeps = 32000; // пищим непрерывно (32000 раз)
alarmRun();
>
>
else digitalWrite(led13, LOW);
>
>
//———————————————-
int get_key() // функция считывания номера нажатой кнопки
<
int input = analogRead(A6);
int k;
for (k = 0; k 59) alarmMinute = 0;
if (alarmMinute 23) alarmHour = 0;
if (alarmHour 59) Minute = 0;
if (Minute 23) Hour = 0;
if (Hour 0) <
time_curr = millis();
if ((time_curr — time_old) > 10) <
if (brightness > 0) <
brightness = brightness — 1;
time_old = time_curr;
if (brightness 10) <
if (brightness 255) brightness = 255;
analogWrite(led, brightness);
>
>
>
>
void alarmRun() < // включение сигнала 1 раз (один бип)
digitalWrite(alarmPin, HIGH);
beepCount = 0;
MsTimer2::set(500, beep); // 500ms period
MsTimer2::start();
>
Источник