Кашляющая пепельница
- Платформы: Arduino Uno
- Языки программирования: Arduino (C++)
- Тэги: газоанализатор, сигарета, дым, урна, кашель
Что это?
Дымящаяся урна — достаточно частое явление на улицах любого города. В результате это может привести к пожару. Как говорится в русской пословице «Нет дыма без огня». Причиной такого возгорания часто является безответственное отношение людей, не погасивших свой окурок. Да и в конце концов, такая урна просто воняет.
Бороться с этим может интерактивная урна, которая кашляет каждому, кто кинул в неё непогашенную сигарету.
Что нам понадобится?
- Резисторы на 1 кОм 2 шт
- NiMH-аккумулятор (подойдёт например от радиоуправляемой игрушки)
- Карта памяти microSD
- Аудио гнездо 3,5 мм
- Миниатюрный активный динамик
- Алюминиевая банка из под кваса
Как собрать?
- Установите MP3-плеер на breadboard mini. Запишите на microSD 7 композиций разновидности кашля с именами 001.mp3…007.mp3 и вставьте её MP3-модуль. Сделайте рельсы питания и земли на макетной плате, для этого соедините breadboard и Arduino Uno тремя проводами «папа-папа», где:
- синий подключён к аналоговому входу
A0
; - красный к питанию;
- чёрный к земле.
- Подключите пин
VCC
плеера к рельсе питания и пинGND
к рельсе земли. - Соедините пины
RX
иTX
плеера через резисторы 1 кОм с пинами11
и10
Arduino. - Соедините аудио разъём тремя проводами «папа-папа» с MP3-плеером таким образом:
- «правый канал» — к пину
DAC_R
; - «левый канал» — к пину
DAC_L
; - «общий» — к пину
GND
.
- Подключите датчик газа MQ2 к макетной плате через 3-проводной шлейф и штырьковые соединители, так чтобы красный провод оказался на рельсе питания,чёрный на рельсе земли и выходной сигнал через макетную плату на аналоговом входе Arduino
A0
. В результате должна получиться схема, как на рисунке ниже. - Так как датчик будет располагаться на некотором расстоянии от Arduino, удлините 3-проводной шлейф с помощью штырьковых соединителей и ещё одного 3-проводного шлейфа. Далее поместите Arduino и breadboard в специальный бокс для Arduino.
- Закройте верхнюю крышку бокса, выведя наружу аудио разъём и 3-проводной шлейф вместе с датчиком, и прошейте в Arduino Uno скетч, приведённый ниже.
- Теперь соедините NiMH-аккумулятор через штекер питания 2,1 мм и подключите через гнездо для внешнего питания в Arduino. Для защиты электроники от мусора и пепла, поместите бокс со всей электроникой и аккумулятор в алюминиевую банку, перемотайте всю конструкцию изолентой и подключите внешний динамик через аудио разъём. Осталось поместить всю конструкцию во внутрь пепельницы через открывающиеся дно, расположив элементы согласно рисунку приведённому ниже.
Алгоритм
- Каждую секунду с газоанализатора мы считываем 10 значений и находим их среднее арифметическое (делим на 10).
- Если этот цикл делался впервые, то записываем полученное значение в переменную
previous_mq2
.
- Сравниваем текущее полученное среднее арифметическое с переменной
previous_mq2
плюс погрешность 20.- Если их разность больше нуля, значит произошёл резкий скачок вредных газов и подаётся сигнал на mp3 плеер, включить трек.
- Вывод результатов в Serial.
- Запись текущего значения датчика в переменную
previous_mq2
.
Исходный код
- coughbox.ino
#include <SoftwareSerial.h> #include <DFPlayer_Mini_Mp3.h> // даём разумное имя для пина к которому подключен датчик #define MQ2_PIN A0 // длительность трека #define INTERVAL_PLAY 10000 // интервал вывода информации в Serial #define INTERVAL_SERIAL 1000 // погрешность на случайные наводки датчика #define DELTA 20 // инициализируем новый последовательный порт (RX 10, TX 11) SoftwareSerial mp3Serial(10, 11); int flag = 0; int mq2 = 0; int previous_mq2 = 0; // Массив 10 значений c датчика int mass_mq2[10] = {0}; // переменная для хранения текущего время работы программы в мс unsigned long currentMillis = 0; // переменная для хранения времени работы программы // с последнего резкого вверх скачка вредных газов long previousMillisPlay = 0; // переменная для хранения времени работы программы // с последнего вывода данных в Serial long previousMillisSerial = 0; void setup() { // начало связи через HardwareSerial Serial.begin(9600); // начало связи через SoftwareSerial mp3Serial.begin(9600); // для нормальной работы DFPlayer // требуется задержка от 5 до 15 секунд delay(5000); // выбор Serial для упрапвления DFPlayer mp3_set_serial(mp3Serial); // установка громкости и к ней задержка mp3_set_volume(30); delay(1000); } void loop() { // обнуляем текущее значение датчика mq2 = 0; // Считывание 10 значений с датчика for (int i = 0; i < 10; i++) { mass_mq2[i] = analogRead(MQ2_PIN); delay(100); mq2 = mq2 + mass_mq2[i]; } // считаем среднее арифметическое mq2 = mq2 / 10; // если программа выполняется впервые, то // запись текущего значения датчика if (flag == 0) { previous_mq2 = mq2; } flag = 1; // считываем текущее время работы программы currentMillis = millis() + INTERVAL_PLAY; // проверяем прошло ли 10 секунд с момента включения семпла if (currentMillis - previousMillisPlay > INTERVAL_PLAY) { // если текущее значение датчика // больше предыдущего включая погрешность // запись текущего времени для Play // и включаем случайный трек от 1 до 7 if (mq2 > previous_mq2 + DELTA) { previousMillisPlay = currentMillis; mp3_play(random(1, 8)); Serial.println("Play"); } else { previousMillisPlay = 0; } } // Вывод результатов в Serial: sensorPrint(); // запись текущего значения датчика previous_mq2 = mq2; } // Функция выводва значений в Serial void sensorPrint() { // значения будут выводиться каждую секунду if (currentMillis - previousMillisSerial > INTERVAL_SERIAL) { // запись текущего времени для Serial previousMillisSerial = currentMillis; Serial.print("Previous MQ2 = "); Serial.println(previous_mq2); Serial.print("Sensor MQ2 = "); Serial.println(mq2); Serial.println(); } }
Демонстрация работы устройства
Что дальше?
На базе электроники из этой урны, можно не только привлекать внимания прохожих на улице тушить сигареты, также можно вычислить соседа, который курит и дымит на лестничной клетке либо в лифту. А сигнал тревоги можно получать не только MP3-плеером, заменив Arduino Uno на Arduino Yun вы можете получать сигнал в новостной ленте в Facebook, Twitter, сообщением GMail и т.д.