зумер на открытую дверцу холодильника

viktorflam
Offline
Зарегистрирован: 09.09.2016

Добрый день!

В семье маленькие детки стали дотягиваться до дверцы холодильника, открывают ее и так оставляют. Прикрутил к холодильники не хитрую приблуду. Как только дверца открывается зумер начинает наигрывать мелодию, ее слышно с любого уголка квартиры. Мелодия начинает играть сразу как только открывается дверца, а нам с женой хотелось бы что бы она начинала играть секунд через 10 после открытия. Помогите допилить скеч.

// выбор выводов
int gerkon = 6; // Геркон на 6-ый вывод
int soundPin = 5; // зуммер на  5-ый вывод
int gerkonStatus = 1; // первоначальный статус геркона - замкнут.

void setup ()
{
  pinMode (gerkon , INPUT); // вывод геркона настраиваем как "вход"
  pinMode (soundPin, OUTPUT); // вывод зуммера настраиваем как "выход"
  digitalWrite(soundPin, LOW); // сначала зуммер молчит
}

//выполение основной программы
void loop()
{
  gerkonStatus = digitalRead(gerkon);  // считываем уровень на входе 6 и обновляем статус геркона
  if (gerkonStatus == HIGH) // если геркон разомкнут играет мелодия
  {
    tone(soundPin, 830, 42.96875);
    delay(47.7430555556);
    tone(soundPin, 207, 3.90625);
    delay(4.34027777778);
    delay(52.0833333333);
    tone(soundPin, 932, 42.96875);
    delay(47.7430555556);
    delay(56.4236111111);
    tone(soundPin, 830, 39.0625);
    delay(43.4027777778);
    delay(60.7638888889);
    tone(soundPin, 783, 42.96875);
    delay(47.7430555556);
    delay(56.4236111111);
    tone(soundPin, 830, 46.875);
    delay(52.0833333333);
    delay(52.0833333333);
    tone(soundPin, 932, 46.875);
    delay(52.0833333333);
    delay(52.0833333333);
    tone(soundPin, 1046, 42.96875);
    delay(47.7430555556);
    delay(56.4236111111);
    tone(soundPin, 1108, 50.78125);
    delay(56.4236111111);
    delay(47.7430555556);
    tone(soundPin, 1244, 50.78125);
    delay(56.4236111111);
    delay(151.909722222);
    tone(soundPin, 1046, 39.0625);
    delay(43.4027777778);
    delay(164.930555556);
    tone(soundPin, 1046, 15.625);
    delay(17.3611111111);
    delay(34.7222222222);
    tone(soundPin, 207, 7.8125);
    delay(8.68055555556);
    tone(soundPin, 1046, 11.71875);
    delay(13.0208333333);
    delay(30.3819444444);
    tone(soundPin, 1046, 19.53125);
    delay(21.7013888889);
    delay(30.3819444444);
    tone(soundPin, 1046, 27.34375);
    delay(30.3819444444);
    delay(230.034722222);
    tone(soundPin, 1396, 42.96875);
    delay(47.7430555556);
    tone(soundPin, 138, 11.71875);
    delay(13.0208333333);
    delay(147.569444444);
    tone(soundPin, 1108, 35.15625);
    delay(39.0625);
    delay(169.270833333);
    tone(soundPin, 1108, 11.71875);
    delay(13.0208333333);
    tone(soundPin, 207, 31.25);
    delay(34.7222222222);
    delay(4.34027777778);
    tone(soundPin, 1108, 23.4375);
    delay(26.0416666667);
    delay(26.0416666667);
    tone(soundPin, 1108, 23.4375);
    delay(26.0416666667);
    delay(26.0416666667);
    tone(soundPin, 1108, 31.25);
    delay(34.7222222222);
    delay(225.694444444);
    tone(soundPin, 1244, 31.25);
    delay(34.7222222222);
    tone(soundPin, 207, 11.71875);
    delay(13.0208333333);
    delay(160.590277778);
    tone(soundPin, 1046, 27.34375);
    delay(30.3819444444);
    tone(soundPin, 195, 11.71875);
    delay(13.0208333333);
    delay(164.930555556);
    tone(soundPin, 1046, 11.71875);
    delay(13.0208333333);
    tone(soundPin, 174, 35.15625);
    delay(39.0625);
    tone(soundPin, 1046, 15.625);
    delay(17.3611111111);
    delay(34.7222222222);
    tone(soundPin, 1046, 23.4375);
    delay(26.0416666667);
    delay(26.0416666667);
    tone(soundPin, 1046, 35.15625);
    delay(39.0625);
    delay(13.0208333333);
    tone(soundPin, 155, 39.0625);
    delay(43.4027777778);
    delay(164.930555556);
  }
  else //если геркон замкнут - тишина
  {
    digitalWrite(soundPin, HIGH);  // зуммер молчит
  }

}
Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

а, зачем это всё, если продаются музыкальные дверные звонки?

Logik
Offline
Зарегистрирован: 05.08.2014

viktorflam пишет:

В семье маленькие детки стали дотягиваться до дверцы холодильника, открывают ее и так оставляют. 

Попробуйте их покормить.

viktorflam
Offline
Зарегистрирован: 09.09.2016

увидел бы, купил... а так есть из чего собрать, не  могу с задержкой разобратья...

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

viktorflam пишет:

увидел бы, купил... а так есть из чего собрать, не  могу с задержкой разобратья...

в Сургуте не продаются дверные звонки? http://prom.ua/Dvernye-zvonki

*кнопку на дверь холодильника - звонок в карман халата жены.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

viktorflam, формально - можно поставить delay(10000) перед 19-й строкой.

Но по-хорошему, тут надо переписывать все с нуля в соответствии с идеями из blink without delay.

vk007
Offline
Зарегистрирован: 16.06.2015

viktorflam пишет:

хотелось бы что бы она начинала играть секунд через 10 после открытия.

Мелодия?.. Ну, ну. Тут бы надо сирену ставить, чтобы отпугивала мелких. Они же только ради мелодии начнут еще чаще холодильник открывать. А вот пугающий звук быстро отобьет охоту лазить, куда не надо. И не только у детей. Некоторым взрослым "ночным охотникам на что-нибудь съедобное" тоже полезной будет.

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

Ноты занесите в массив. Воспроизводите их в цикле и в нем же проверяйте датчик. Двери закрыли - музыкантам спать.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

vk007 пишет:

Тут бы надо сирену ставить, чтобы отпугивала мелких.

нужно минировать, что бы мелких наверняка - в клочья

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

я бы сделал простой пужинный доводчик двери холодильника, вместо кретинизма с зуммерами.

*кстати, у меня холодильник-сука пищит, когда его держишь долго открытым.

vk007
Offline
Зарегистрирован: 16.06.2015

А можно вообще просто сделать. Если ардуина только играет мелодию и больше ни в чем не задействована, то подключите блок питания, что питает ардуину, к лампе, что включается в холодильнике при открывании двери. Не нужно будет никаких дополнительных герконов/кнопок/датчиков. Выбросьте из кода проверку геркона, оставьте только мелодию. А в setup() вставьте нужную вам задержку - delay() в таком деле ничем не помешает.

Открыли дверь - подалось питание на ардуину - ардуина при старте выждет паузу и дальше пойдет играть мелодия по кругу, пока не закроете дверь - закрыли дверь - ардуина обесточилась, мелодия утихла.

Logik
Offline
Зарегистрирован: 05.08.2014

непойдет. Дети быстро просекут тему. Будут топтать сосиски 9 сек, закрывать дверь, снова открывать и топтать.

ПС. Подойдите к проблеме с точки зрения социальной инженерии. Всыпать детям по жопе разик - другой для профилактики.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Logik пишет:

Всыпать детям по жопе разик - другой для профилактики.

только хардкор! пластиковая взрывчатка - нет детей, нет проблем.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Logik пишет:

Будут топтать сосиски 9 сек, закрывать дверь, снова открывать и топтать.

нужно повесить на холодильник с едой замок - пусть дети сдохнут с голоду.

Logik
Offline
Зарегистрирован: 05.08.2014

Это интересная мысль. Замок с RFID метками. И ардуина контролирует кол-во и время подходов. Каждому в семе свою личную метку, лучше кулончик на цепи на шею. У главы семейства мастер-ключ для неограниченого доступа с целью загрузки холодильника. Жену можна и на диету, доступ только по четным числам, можна и только по нечетным, но хуже т.к. за 31 идет 1, и два дня подряд жрать будет.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Logik пишет:

Это интересная мысль. Замок с RFID метками. И ардуина контролирует кол-во и время подходов. Каждому в семе свою личную метку, лучше кулончик на цепи на шею. У главы семейства мастер-ключ для неограниченого доступа с целью загрузки холодильника. Жену можна и на диету, доступ только по четным числам, можна и только по нечетным, но хуже т.к. за 31 идет 1, и два дня подряд жрать будет.

три периметра вокруг холодильника, колючая проволока, пулемётные гнёзда.

Logik
Offline
Зарегистрирован: 05.08.2014

Клапауций 112 пишет:

Logik пишет:

Это интересная мысль. Замок с RFID метками. И ардуина контролирует кол-во и время подходов. Каждому в семе свою личную метку, лучше кулончик на цепи на шею. У главы семейства мастер-ключ для неограниченого доступа с целью загрузки холодильника. Жену можна и на диету, доступ только по четным числам, можна и только по нечетным, но хуже т.к. за 31 идет 1, и два дня подряд жрать будет.

три периметра вокруг холодильника, колючая проволока, пулемётные гнёзда.

непойдет. будут хавчик в гнезда таскать.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Logik пишет:

непойдет. будут хавчик в гнезда таскать.

не будут - им заградотряд не даст.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не, мужики, ну уж делать умный холодильник, так делать!

Клеем RFID-метки на все основные продукты, добавляем считыватель, часы и какой-нибудь Интернетный модуль.

Система контролирует остаток продуктов и вовремя оформляет заказ на доставку в этих ваших интернетах.

Общий набросок (идея) скетча выглядит примерно так:

//
//	Функция определена в отдельном файле,
//      оформляет заказ доставки продуктов с
//      сайта edu-domoi.ru или ему подобного
//      возвращает true, если заказ успешно размещён
//
extern bool groceriesOrder(const byte itemId, const byte amount);

//
//	Функция определена в отдельном файле,
//      возвращает количество оставшихся в холодильнике  
//      единиц товара itemId
//
exetrn byte ostalos(const byte itemId);


#define	WEEKDAY_LIMIT     4
#define	WEEKEND_LIMIT   12


void loop() {
	byte limit = rtc.dayOfWeek() == FRIDAY ? WEEKEND_LIMIT : WEEKDAY_LIMIT;
	if (ostalos(PIVO) < limit) {
		if (! groceriesOrder(PIVO, 20)) {
			// Включить состояние тревоги (мигание, сирену или смс-ку)
		}
	}
}

void setup() {
	// тут напишем всё, что надо
}

 

viktorflam
Offline
Зарегистрирован: 09.09.2016

Во дела..! Я и не думал, что столько разных решений можно предпринять... мне понравились

Клапауций 112 пишет:

vk007 пишет:

Тут бы надо сирену ставить, чтобы отпугивала мелких.

нужно минировать, что бы мелких наверняка - в клочья

и еще

Клапауций 112 пишет:

Logik пишет:

Всыпать детям по жопе разик - другой для профилактики.

только хардкор! пластиковая взрывчатка - нет детей, нет проблем.

Ну и самая мощная:

Клапауций 112 пишет:

Logik пишет:

Это интересная мысль. Замок с RFID метками. И ардуина контролирует кол-во и время подходов. Каждому в семе свою личную метку, лучше кулончик на цепи на шею. У главы семейства мастер-ключ для неограниченого доступа с целью загрузки холодильника. Жену можна и на диету, доступ только по четным числам, можна и только по нечетным, но хуже т.к. за 31 идет 1, и два дня подряд жрать будет.

три периметра вокруг холодильника, колючая проволока, пулемётные гнёзда.

Про RFID-метки тоже где-то читал, может даже и тут...

Мысль про то, что бы запитать ардуину от лампочки была, но я бы хотел еще прикрутить два датчика температуры и простенький дисплей по i2C что бы наблюдать время от времени за "погодой" в камерах, причем эта чатсть функционала уже реализована... короче запитка от лампочки не катит... и delay на 19 строкой тож не пойдет, потому что если открыть дверцу и сразу ее закрыть, мелодия все равно пропоет через 10 сек, даже если дверь будет уже закрыта... буду пробовать вариант с "blink without delay" или может кто нибудь еще чего умного подскажет...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

viktorflam пишет:

буду пробовать ...

Главное не забудьте про 

if (ostalos(PIVO) < limit) groceriesOrder(PIVO, 20);

 

Барон
Offline
Зарегистрирован: 17.11.2016

Пробуйте кормить детей.

Можно еще так: через 9 секунд заиграла музыка, через 12 отключается свет в холодильной камере, через 15 подается питание на детонатор. )

Logik
Offline
Зарегистрирован: 05.08.2014
Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Барон пишет:

Пробуйте кормить детей.

это непедагогично.

Logik
Offline
Зарегистрирован: 05.08.2014

Зато дёшево, надежно и практично )))