Последнее время я работаю на дому и нет острой острой необходимости вставать ежедневно ровно в определенное время. Из за чего я и расслабился, расслабился на столько сильно, что включаю себе от двух до десяти будильников на телефоне подряд, но когда телефон пытается разбудить меня своим звонком, я на автомате провожу пальцем по экрану и телефон вырубается. И так делаю несколько заходов т.к. будильники звонят с небольшим интервалом, и продолжаю спать. В общем толку от него нет.
Тогда я задумался над тем чтобы сделать из своей arduino будильник, который был бы более эффективным.

Сразу пришла в голову идея с бутылкой воды которая на меня выливается, но каждое утро просыпаться мокрым и в мокрой постели желания не было. Поэтому нужно было предусмотреть и обычную пищалку, если я ее не вырублю, то только тогда на меня должна вылиться вода. Но вырубить пищалку обычным нажатием на кнопку — плохой вариант т.к. это еще проще чем провести по экрану. Тогда было решено вырубать будильник из другой комнаты с помощью компьютера, который у меня всегда включен, через bluetooth (В итоге сделал без компа и bluetooth).
Первоначальная идея с вырубанием будильника через bluetooth потерпела не удачу, т.к. я случайно спалил свой bluetooth модуль, тем что нарушил полярность по неосторожности.
Тогда было решено сделать не зависящую от компьютера конструкцию с вырубанием через кнопку, но не простым нажатием, а таким чтоб успеть проснуться пока вырубаешь. В итоге получился такой принцип действия:
Сооружение достаточно простое и надежное, подробнее можно посмотреть на видео (смотреть с субтитрами):
Хотел это все перенести на TI LaunchPad MSP-EXP430G2 т.к. эта штука у меня тоже есть, и на ней бы дешевле вся конструкция обошлась, и можно бы было даже не выпаивать микроконтроллер, а так и оставить с платой, но с ним возникла проблема(серва не могла быть беззвучно на одном месте, постоянно звуки издавала, и на грудус туда-сюда ходила).
Потом хорошо бы было добавить сюда дисплейчик, и возможность менять время таймера без загрузки нового скетча, но это потом.
Тогда я задумался над тем чтобы сделать из своей arduino будильник, который был бы более эффективным.
Сразу пришла в голову идея с бутылкой воды которая на меня выливается, но каждое утро просыпаться мокрым и в мокрой постели желания не было. Поэтому нужно было предусмотреть и обычную пищалку, если я ее не вырублю, то только тогда на меня должна вылиться вода. Но вырубить пищалку обычным нажатием на кнопку — плохой вариант т.к. это еще проще чем провести по экрану. Тогда было решено вырубать будильник из другой комнаты с помощью компьютера, который у меня всегда включен, через bluetooth (В итоге сделал без компа и bluetooth).
Используется:
- Бутылка 0,5 л
- Баллончик из под краски (в него отлично входит бутылка)
- Небольшая доска
- Самый дешевый сервопривод
- Кнопка (достал из мышки не рабочей)
- Светодиод (тоже из мышки достал)
- Пъезо-пищалка
- Arduino UNO
- Sensor shield(для удобства)
Первоначальная идея с вырубанием будильника через bluetooth потерпела не удачу, т.к. я случайно спалил свой bluetooth модуль, тем что нарушил полярность по неосторожности.
Тогда было решено сделать не зависящую от компьютера конструкцию с вырубанием через кнопку, но не простым нажатием, а таким чтоб успеть проснуться пока вырубаешь. В итоге получился такой принцип действия:
- Нажимаем на кнопку перезагрузки arduino и она начинает обратный отсчет (6 часов например)
- По прошествии шести часов начинает звонить пищалка в течение 60 секунд
- За это время нужно успеть нажать и удерживать кнопку выключения, и считать количество миганий светодиода, на десятый раз нужно отпустить кнопку
- Если он моргнет меньше 10 раз, то по прошествии минуты вода выльется
- Если он моргнет больше 10 раз, то вода выльется сразу
Сооружение достаточно простое и надежное, подробнее можно посмотреть на видео (смотреть с субтитрами):
Смотреть скетч
#include <Servo.h>
int ledPin = 13; // сетодиод
int btnPin = 9; // кнопка
int val=0; //статус кнопки
int raz=0; // количество нажатий кнопки
int kol_raz = 10; //количество необходимых нажатий кнопки
Servo servo; // create servo object to control a servo
int time = 60*60*6; // время через которое просыпаться нужно
int beep_time = 60; // время сирены
int pos = 90; // начальная позиция сервы
void setup() {
// put your setup code here, to run once:
pinMode(ledPin, OUTPUT); // светодиод
pinMode(btnPin, INPUT); // кнопка
pinMode (8, OUTPUT); // пищалка
Serial.begin(9600);
servo.attach(9); // серва
// put your main
for (int i=1; i <= (time); i++){
Serial.println(i); // prints hello with ending line break
if(i==time){
for (int x=1; x <= (beep_time); x++){
if(x < beep_time){
if(raz==0){
knopka();
music();
}
else{
if(!knopka()){
Serial.println("11 times you lose");
break;
};
}
delay(1000);
}
else{
if(raz==10){
Serial.println("You WON");
}
else{
Serial.println("WATER you lose");
servo.write(150);
break;
}
}
}
}
delay(1000);
}
}
void music(){
tone (8,10,1000);
delay (500);
tone (8,15,100);
delay (500);
}
bool knopka()
{
val = digitalRead(btnPin); // узнаём состояние кнопки
if(val==HIGH) // кнопка нажата
{
raz=(raz+1);
digitalWrite(ledPin, HIGH); // зажигаем светодиод
}
else{
digitalWrite(ledPin, LOW);
}
if(raz>kol_raz){ //если нажали больше раз чем нужно выливаем воду
return false;
}
else{
return true;
}
}
void loop() {
}
Хотел это все перенести на TI LaunchPad MSP-EXP430G2 т.к. эта штука у меня тоже есть, и на ней бы дешевле вся конструкция обошлась, и можно бы было даже не выпаивать микроконтроллер, а так и оставить с платой, но с ним возникла проблема(серва не могла быть беззвучно на одном месте, постоянно звуки издавала, и на грудус туда-сюда ходила).
Потом хорошо бы было добавить сюда дисплейчик, и возможность менять время таймера без загрузки нового скетча, но это потом.