====== Кашляющая пепельница ====== {{ :projects:coughbox:coughbox_overvew.jpg?nolink&700 |}} * Платформы: Arduino Uno * Языки программирования: Arduino (C++) * Тэги: газоанализатор, сигарета, дым, урна, кашель ===== Что это? ===== Дымящаяся урна — достаточно частое явление на улицах любого города. В результате это может привести к пожару. Как говорится в русской пословице «Нет дыма без огня». Причиной такого возгорания часто является безответственное отношение людей, не погасивших свой окурок. Да и в конце концов, такая урна просто воняет. Бороться с этим может интерактивная урна, которая кашляет каждому, кто кинул в неё непогашенную сигарету. ===== Что нам понадобится? ===== {{ :projects:coughbox:coughbox_parts.jpg?nolink&700 |}} - [[amp>product/arduino-uno?utm_source=proj&utm_campaign=coughbox&utm_medium=wiki | Arduino Uno]] - [[amp>product/gas-sensor-mq2?utm_source=proj&utm_campaign=coughbox&utm_medium=wiki | Датчик газа MQ2 ]] - [[amp>product/df-player-mp3-module?utm_source=proj&utm_campaign=coughbox&utm_medium=wiki | MP3-плеер]] - [[amp>product/breadboard-mini?utm_source=proj&utm_campaign=coughbox&utm_medium=wiki | Breadboard Mini]] - [[amp>product/arduino-box?utm_source=proj&utm_campaign=coughbox&utm_medium=wiki | Бокс для Arduino]] - [[amp>product/21mm-screw-jack?utm_source=proj&utm_campaign=hostmonitor&utm_medium=wiki | Штекер питания 2,1 мм с клеммником]] - [[amp>product/wire-mm?utm_source=proj&utm_campaign=coughbox&utm_medium=wiki | Соединительные провода «папа-папа»]] - [[amp>product/pin-headers?utm_source=proj&utm_campaign=coughbox&utm_medium=wiki | Штырьковые соединители (1×40)]] - [[amp>product/resistor?utm_source=proj&utm_campaign=coughbox&utm_medium=wiki|Резисторы на 1 кОм]] 2 шт - [[http://www.artlebedev.ru/everything/pepelkus2/?utm_source=proj&utm_campaign=coughbox&utm_medium=wiki | Уличная пепельница «Пепелкус»]] - NiMH-аккумулятор (подойдёт например от радиоуправляемой игрушки) - Карта памяти microSD - Аудио гнездо 3,5 мм - Миниатюрный активный динамик - Алюминиевая банка из под кваса ===== Как собрать? ===== - Установите MP3-плеер на breadboard mini. Запишите на microSD 7 композиций разновидности кашля с именами 001.mp3…007.mp3 и вставьте её MP3-модуль. Сделайте рельсы питания и земли на макетной плате, для этого соедините breadboard и Arduino Uno тремя проводами «папа-папа», где: * синий подключён к аналоговому входу ''A0''; * красный к питанию; * чёрный к земле. {{ :projects:coughbox:coughbox_build1.jpg?nolink&700 |}} - Подключите пин ''VCC'' плеера к рельсе питания и пин ''GND'' к рельсе земли. {{ :projects:coughbox:coughbox_build2.jpg?nolink&700 |}} - Соедините пины ''RX'' и ''TX'' плеера через резисторы 1 кОм с пинами ''11'' и ''10'' Arduino.{{ :projects:coughbox:coughbox_build3.jpg?nolink&700 |}} - Соедините аудио разъём тремя проводами «папа-папа» с MP3-плеером таким образом: * «правый канал» — к пину ''DAC_R''; * «левый канал» — к пину ''DAC_L''; * «общий» — к пину ''GND''.{{ :projects:coughbox:coughbox_build4.jpg?nolink&700 |}} - Подключите датчик газа MQ2 к макетной плате через 3-проводной шлейф и штырьковые соединители, так чтобы красный провод оказался на рельсе питания,чёрный на рельсе земли и выходной сигнал через макетную плату на аналоговом входе Arduino ''A0''. В результате должна получиться схема, как на рисунке ниже.{{ :projects:coughbox:coughbox_scheme.png?nolink&700 |}} - Так как датчик будет располагаться на некотором расстоянии от Arduino, удлините 3-проводной шлейф с помощью штырьковых соединителей и ещё одного 3-проводного шлейфа. Далее поместите Arduino и breadboard в специальный бокс для Arduino.{{ :projects:coughbox:coughbox_build5.jpg?nolink&700 |}} - Закройте верхнюю крышку бокса, выведя наружу аудио разъём и 3-проводной шлейф вместе с датчиком, и прошейте в Arduino Uno скетч, приведённый ниже.{{ :projects:coughbox:coughbox_build6.jpg?nolink&700 |}} - Теперь соедините NiMH-аккумулятор через штекер питания 2,1 мм и подключите через гнездо для внешнего питания в Arduino. Для защиты электроники от мусора и пепла, поместите бокс со всей электроникой и аккумулятор в алюминиевую банку, перемотайте всю конструкцию изолентой и подключите внешний динамик через аудио разъём. Осталось поместить всю конструкцию во внутрь пепельницы через открывающиеся дно, расположив элементы согласно рисунку приведённому ниже.{{ :projects:coughbox:coughbox_build7.jpg?nolink&700 |}} ===== Алгоритм ===== * Каждую секунду с газоанализатора мы считываем 10 значений и находим их среднее арифметическое (делим на 10). * Если этот цикл делался впервые, то записываем полученное значение в переменную ''previous_mq2''. * Сравниваем текущее полученное среднее арифметическое с переменной ''previous_mq2'' плюс погрешность 20. * Если их разность больше нуля, значит произошёл резкий скачок вредных газов и подаётся сигнал на mp3 плеер, включить трек. * Вывод результатов в Serial. * Запись текущего значения датчика в переменную ''previous_mq2''. ===== Исходный код ===== #include #include // даём разумное имя для пина к которому подключен датчик #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(); } } ===== Демонстрация работы устройства ===== {{youtube>W1QuqifWZfU?large}} ===== Что дальше? ===== На базе электроники из этой урны, можно не только привлекать внимания прохожих на улице тушить сигареты, также можно вычислить соседа, который курит и дымит на лестничной клетке либо в лифту. А сигнал тревоги можно получать не только MP3-плеером, заменив Arduino Uno на Arduino Yun вы можете получать сигнал в новостной ленте в Facebook, Twitter, сообщением GMail и т.д.