Монитор качества воздуха Arduino с датчиком DSM501A
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 5 | ||||
| × | 1 | ||||
| × | 1 |
Необходимые инструменты и машины
|
Приложения и онлайн-сервисы
|
Об этом проекте
Мониторинг качества воздуха - это хорошо известная и устоявшаяся наука, которая началась еще в 80-х годах. В то время технология была довольно ограниченной, а решение, используемое для количественной оценки загрязнения воздуха, было громоздким и очень дорогим.
К счастью, в настоящее время, благодаря новейшим и современным технологиям, решения, используемые для мониторинга качества воздуха, становятся не только более точными, но и более быстрыми при измерениях. Устройства становятся меньше и стоят намного доступнее, чем когда-либо прежде. В представленном устройстве используется датчик пыли Samyoung "DSM501A", который является одним из самых дешевых на рынке и может быть куплен на AliExpress за несколько долларов. Этот датчик способен обнаруживать частицы PM2,5, а также PM10.
На рисунке ниже вы можете увидеть расположение контактов, но не обращайте внимания на цвет проводов, так как они могут быть разными.
Схема очень проста:
Vout1 (PM2.5) от датчика подключен к D2 Arduino, Vout2 (PM10) к D3, Vcc к Arduino + 5V и GND к выводу Arduino Gnd. Светодиодные диоды подключаются к аналоговым контактам с A1 по A5 Arduino, которые определены как выходы в коде. ЖК-дисплей с 61x2 символами совместим с Hitachi HD44780. Он показывает концентрацию частиц PM10 в шт. / 0,01 куб.футов и 5 состояний качества воздуха:
- Чистый
- Хорошо
- Допустимо
- Тяжелый
- Опасность
Концентрацию PM10 и PM2,5 можно контролировать на последовательном мониторе Arduino. В зависимости от степени загрязнения (PM10), соответствующий светодиод определенного цвета будет гореть, чтобы обеспечить быстрое и легкое считывание результата. У меня нет большого опыта написания кодов, так что, возможно, код можно улучшить. Очень важно подчеркнуть, что, установив вентилятор, вытягивающий воздух из выходного отверстия датчика, значительно улучшатся характеристики в области нежелательных пиковых значений. Все устройство собрано в пластиковом ящике для электромонтажа.
В будущем я планирую протестировать еще несколько дешевых датчиков пыли, чтобы вы могли найти результаты в одном из моих следующих проектов.
Код
- код
код Arduino
#includeLiquidCrystal lcd (8, 9, 4, 5, 6, 7); int pin2 =3; int pin1 =2; unsigned long duration1; unsigned long duration2; unsigned long starttime; unsigned long sampletime_ms =3000; // sampe 1s; unsigned long lowpulseoccupancy1 =0; unsigned long lowpulseoccupancy2 =0; float ratio1 =0; float ratio2 =0; float density1 =0; float configuration2 =0; int wLed =A1; int gLed =A2; int yLed =A3; int rLed =A4; int bLed =A5; void setup () {Serial.begin (9600); pinMode (2, ВХОД); pinMode (3, ВХОД); pinMode (wLed, ВЫХОД); pinMode (gLed, ВЫХОД); pinMode (yLed, ВЫХОД); pinMode (rLed, ВЫХОД); pinMode (bLed, ВЫХОД); starttime =millis (); // получаем текущее время; lcd.begin (16, 2);} цикл void () {duration1 =pulseIn (pin1, LOW); duration2 =pulseIn (pin2, LOW); lowpulseoccupancy1 =lowpulseoccupancy1 + duration1; lowpulseoccupancy2 =lowpulseoccupancy2 + duration2; if ((millis () - starttime)> sampletime_ms) // если время выборки ==30 с {ratio1 =lowpulseoccupancy1 / (sampletime_ms * 10.0); // Целочисленный процент 0 => 100 концентрация1 =1,1 * pow (ratio1,3) -3,8 * pow (ratio1,2) + 520 * ratio1 + 0,62; // с использованием спецификации кривой ratio2 =lowpulseoccupancy2 / (sampletime_ms * 10.0); // Целочисленный процент 0 => 100 концентрация2 =1,1 * pow (ratio2,3) -3,8 * pow (ratio2,2) + 520 * ratio2 + 0,62; // lcd.setCursor (0, 0); lcd.print («PM10»); lcd.setCursor (6, 0); lcd.print (концентрация1,3); Серийный принт ("концентрация1 ="); Серийный принт (концентрация1); Serial.print («шт / 0,01cf -»); Серийный принт ("концентрация2 ="); Серийный принт (концентрация2); Serial.print («шт / 0,01cf -»); если (концентрация1 <1000) {lcd.setCursor (0, 1); для (int я =0; я <16; ++ я) {lcd.write (''); } lcd.setCursor (4, 1); lcd.print («ЧИСТЫЙ»); digitalWrite (wLed, HIGH); digitalWrite (gLed, LOW); digitalWrite (yLed, LOW); digitalWrite (rLed, LOW); digitalWrite (bLed, LOW); } если (концентрация1> 1000 &&концентрация1 <10000) {lcd.setCursor (0, 1); для (int я =0; я <16; ++ я) {lcd.write (''); } lcd.setCursor (4, 1); lcd.print («ХОРОШО»); digitalWrite (wLed, LOW); digitalWrite (gLed, HIGH); digitalWrite (yLed, LOW); digitalWrite (rLed, LOW); digitalWrite (bLed, LOW); } если (концентрация1> 10000 &&концентрация1 <20000) {lcd.setCursor (0, 1); для (int я =0; я <16; ++ я) {lcd.write (''); } lcd.setCursor (4, 1); lcd.print («ДОПУСТИМО»); digitalWrite (wLed, LOW); digitalWrite (gLed, LOW); digitalWrite (желтый, высокий); digitalWrite (rLed, LOW); digitalWrite (bLed, LOW); } если (концентрация1> 20000 &&концентрация1 <50000) {lcd.setCursor (0, 1); для (int я =0; я <16; ++ я) {lcd.write (''); } lcd.setCursor (4, 1); lcd.print («ТЯЖЕЛЫЙ»); digitalWrite (wLed, LOW); digitalWrite (gLed, LOW); digitalWrite (yLed, LOW); digitalWrite (rLed, HIGH); digitalWrite (bLed, LOW); } if (configuration1> 50000) {lcd.setCursor (0, 1); for (int i =0; i <16; ++ i) {lcd.write ('');} lcd.setCursor (4, 1); lcd.print («ОПАСНОСТЬ»); digitalWrite (wLed, LOW); digitalWrite (gLed, LOW); digitalWrite (yLed, LOW); digitalWrite (rLed, LOW); digitalWrite (bLed, HIGH); } lowpulseoccupancy1 =0; lowpulseoccupancy2 =0; время начала =миллис (); }}
Схема
Производственный процесс
- Как измерить качество воздуха на OpenSensors
- Датчик качества воздуха с гелием
- Игра с гироскопом Arduino с MPU-6050
- Многотемпературный датчик
- Мониторинг CO2 с помощью датчика K30
- Простой датчик препятствий с Arduino
- Емкостной датчик отпечатков пальцев с Arduino или ESP8266
- Датчик Интернета вещей с Arduino, Yaler и IFTTT
- Отталкивающая электромагнитная левитация Arduino
- Датчик качества воздуха на основе углерода