Arduino будильник поливающий водой
Последнее время я работаю на дому и нет острой необходимости вставать ежедневно ровно в определенное время. Из за чего я и расслабился, расслабился на столько сильно, что включаю себе от двух до десяти будильников на телефоне подряд, но когда телефон пытается разбудить меня своим звонком, я на автомате провожу пальцем по экрану и телефон вырубается. И так делаю несколько заходов т.к. будильники звонят с небольшим интервалом, и продолжаю спать. В общем толку от него нет. Тогда я задумался над тем чтобы сделать из своей arduino будильник, который был бы более эффективным.
Сразу пришла в голову идея с бутылкой воды которая на меня выливается, но каждое утро просыпаться мокрым и в мокрой постели желания не было. Поэтому нужно было предусмотреть и обычную пищалку, если я ее не вырублю, то только тогда на меня должна вылиться вода.Но вырубить пищалку обычным нажатием на кнопку - плохой вариант т.к. это еще проще чем провести по экрану. Тогда было решено вырубать будильник из другой комнаты с помощью компьютера, который у меня всегда включен, через bluetooth (В итоге сделал без компа и bluetooth).
Используется
- Бутылка 0,5 л
- Баллончик из под краски (в него отлично входит бутылка)
- Небольшая доска
- Самый дешевый сервопривод
- Кнопка (достал из мышки не рабочей)
- Светодиод (тоже из мышки достал)
- Пъезо-пищалка
- Arduino UNO
- Sensor shield(для удобства)
Первоначальная идея с вырубанием будильника через bluetooth потерпела не удачу, т.к. я случайно спалил свой bluetooth модуль, тем что нарушил полярность по неосторожности. Тогда было решено сделать не зависящую от компьютера конструкцию с вырубанием через кнопку, но не простым нажатием, а таким чтоб успеть проснуться пока вырубаешь. В итоге получился такой принцип действия:
- Нажимаем на кнопку перезагрузки arduino и она начинает обратный отсчет (6 часов например)
- По прошествии шести часов начинает звонить пищалка в течение 60 секунд
- За это время нужно успеть нажать и удерживать кнопку выключения, и считать количество миганий светодиода, на десятый раз нужно отпустить кнопку
- Если он моргнет меньше 10 раз, то по прошествии минуты вода выльется
- Если он моргнет больше 10 раз, то вода выльется сразу
Сооружение достаточно простое и надежное, подробнее можно посмотреть на видео (смотреть с субтитрами):
Скетч
#include <Servo.h> int ledPin = 13; // светодиод int btnPin = 7; // кнопка 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); } boolean 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 т.к. эта штука у меня тоже есть, и на ней бы дешевле вся конструкция обошлась, и можно бы было даже не выпаивать микроконтроллер, а так и оставить с платой, но с ним возникла проблема(серва не могла быть беззвучно на одном месте, постоянно звуки издавала, и на градус туда-сюда ходила). Потом хорошо бы было добавить сюда дисплейчик, и возможность менять время таймера без загрузки нового скетча, но это потом.
3 комментария
Вы можете оставить комментарий