Дымящаяся урна — достаточно частое явление на улицах любого города. В результате это может привести к пожару. Как говорится в русской пословице «Нет дыма без огня». Причиной такого возгорания часто является безответственное отношение людей, не погасивших свой окурок. Да и в конце концов, такая урна просто воняет.
Бороться с этим может интерактивная урна, которая кашляет каждому, кто кинул в неё непогашенную сигарету.
A0
; VCC
плеера к рельсе питания и пин GND
к рельсе земли. RX
и TX
плеера через резисторы 1 кОм с пинами 11
и 10
Arduino.DAC_R
; DAC_L
; GND
.A0
. В результате должна получиться схема, как на рисунке ниже.previous_mq2
.previous_mq2
плюс погрешность 20. previous_mq2
.#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 и т.д.