…Попытки уговорить его не курить на балконе провалились: два дня спокойной жизни, и снова в квартиру сквозняк несет удушливый смог. Закрывать окно тоже не помогает, дым уже в квартире; стали приходить разные мысли…

Решено. Делаем “анти-смокер” на базе ардуино!
Идею сбрасывать на курильщика этажом ниже пудовую гирю отверг как неконструктивную, да и как быть с ложными срабатываниями? Так что главным оружием будет окно балкона, которое, к счастью, довольно легко сдвигается вбок. Сразу же захотелось не открывать обратно окно, если на улице мороз, и пульт управления прикрутить.
Сначала думал, что получится определять курильщика с помощью датчика дыма, но оказалось, что чувствительность этих приборов сравнима с определением дыма “на глаз”. Детектор движения в этом плане гораздо лучше: на 17 этаже ложных срабатываний быть не должно, а просто так на балкон укурок мой курильщик обычно не выходит.
В целом проблем с подключением устройств не возникло. Только схема подключения четырехстрочного ЖК-дисплея отличается от аналогичной для двухстрочного, библиотека для работы с DHT-сенсором оказалась несовместима с библиотекой для работы с ИК-приемником, диапазон значений для сервопривода оказался шире чем в документации, и сервопривод категорически отказался останавливаться. Впрочем, решения быстро нашлись в интернете, а питание сервопривода было подключено через транзистор.
Гораздо больше пришлось повозиться с механикой, и если создание влагозащитного корпуса для датчика движения из бутылки от йогурта заняло от силы час, то привод окна потребовал нескольких дней. Принцип работы, думаю, понятен из картинки. Самым сложным оказалось предотвратить перехлест нитки, и, как ни странно, найти деревянную катушку.
Одновременно в “антисмокере” должны работать контроллер ИК приемника, 2 контроллера датчиков, контроллер дисплея, контроллеры светодиода, контроллер сервопривода и, собственно, основной контроллер которые это все слепляет воедино, код основного цикла выглядит примерно следующим образом:
Каждый датчик сам вычисляет в зависимости от значения таймера, когда ему проводить опрос, когда сбрасывать устаревшие значения. По той же схеме работает сервопривод:
Библиотека ИК-приемника внутри работает на прерываниях, но снаружи ее можно опрашивать в цикле на предмет появления новых команд с пульта.
Есть небольшая проблема с остановкой закрытия окна: необходим датчик приближения к “защелке”, без нее окно во-первых захлопнется, во-вторых заблокирует движение сервопривода на оставшееся по мнению программы время, что, как выяснилось, приводит к обрыву троса нитки. Выбор подходящего датчика еще впереди.
Подводя итоги, в плюсах “антисмокера” открытие окна с дивана, информация о погоде на дисплее и отсутствие дыма в квартире. Из минусов — шумновато работает сервопривод, ручное открытие окна возможно только после демонтажа присосок, да и оставлять эту штуку работающей на ночь страшновато пока. Впрочем, полномасштабное тестирование и “допиливание” еще впереди, а клиенты уже есть: двое коллег с такой же проблемой уже интересовались схемой и исходниками. Которые, естественно, на github-е.
Вопросы, инвайты и советы очень приветствуются.

Решено. Делаем “анти-смокер” на базе ардуино!
Концепция
Идею сбрасывать на курильщика этажом ниже пудовую гирю отверг как неконструктивную, да и как быть с ложными срабатываниями? Так что главным оружием будет окно балкона, которое, к счастью, довольно легко сдвигается вбок. Сразу же захотелось не открывать обратно окно, если на улице мороз, и пульт управления прикрутить.
само устройство

Сначала думал, что получится определять курильщика с помощью датчика дыма, но оказалось, что чувствительность этих приборов сравнима с определением дыма “на глаз”. Детектор движения в этом плане гораздо лучше: на 17 этаже ложных срабатываний быть не должно, а просто так на балкон укурок мой курильщик обычно не выходит.
Понадобились
- Arduino Uno
- Troika Shield (доступный в Москве аналог “IO shield”)
- Сервопривод постоянного вращения
- ЖК дисплей
- Датчик движения
- Датчик температуры и влажности (DHT)
- ИК-приемник
Сборка
В целом проблем с подключением устройств не возникло. Только схема подключения четырехстрочного ЖК-дисплея отличается от аналогичной для двухстрочного, библиотека для работы с DHT-сенсором оказалась несовместима с библиотекой для работы с ИК-приемником, диапазон значений для сервопривода оказался шире чем в документации, и сервопривод категорически отказался останавливаться. Впрочем, решения быстро нашлись в интернете, а питание сервопривода было подключено через транзистор.
корпус датчика движения

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

Софт
Одновременно в “антисмокере” должны работать контроллер ИК приемника, 2 контроллера датчиков, контроллер дисплея, контроллеры светодиода, контроллер сервопривода и, собственно, основной контроллер которые это все слепляет воедино, код основного цикла выглядит примерно следующим образом:
void MainController::loop() {
this->servo.loop();
this->dht_sensor.loop();
this->move_sensor.loop();
/**
* Вывод данных на дисплей и светодиоды
**/
this->process_window_state();
}
Каждый датчик сам вычисляет в зависимости от значения таймера, когда ему проводить опрос, когда сбрасывать устаревшие значения. По той же схеме работает сервопривод:
this->servo.move_forward(1000); // вперед в течение 1 секунды
Библиотека ИК-приемника внутри работает на прерываниях, но снаружи ее можно опрашивать в цикле на предмет появления новых команд с пульта.
Есть небольшая проблема с остановкой закрытия окна: необходим датчик приближения к “защелке”, без нее окно во-первых захлопнется, во-вторых заблокирует движение сервопривода на оставшееся по мнению программы время, что, как выяснилось, приводит к обрыву троса нитки. Выбор подходящего датчика еще впереди.
Подводя итоги, в плюсах “антисмокера” открытие окна с дивана, информация о погоде на дисплее и отсутствие дыма в квартире. Из минусов — шумновато работает сервопривод, ручное открытие окна возможно только после демонтажа присосок, да и оставлять эту штуку работающей на ночь страшновато пока. Впрочем, полномасштабное тестирование и “допиливание” еще впереди, а клиенты уже есть: двое коллег с такой же проблемой уже интересовались схемой и исходниками. Которые, естественно, на github-е.
Вопросы, инвайты и советы очень приветствуются.