В этом уроке мы узнаем как подключить датчик качества воздуха (датчик пыли) PMS5003 к плате Arduino. Мы создадим простой код Arduino и измерим концентрацию частиц пыли в воздухе с размером и количеством для PM1.0, PM2.5 и PM10. PMS5003 — это своего рода цифровой и универсальный датчик концентрации частиц , который можно использовать для получения количества взвешенных частиц в воздухе, т. е. концентрации частиц, и вывода их с помощью цифрового интерфейса.
Ранее на нашем сайте мы рассматривали следующие похожие проекты:
- анализатор качества воздуха с определением частиц PM2.5 и PM10 на Arduino и Nova PM Sensor SDS011;
- анализатор качества воздуха с определением частиц PM2.5, PM10 и CO на ESP32.
Обзор проекта
PM2.5 и PM10 относятся к твердым частицам с диаметром частиц до 2,5 микрон и 10 микрон соответственно и являются одними из самых опасных загрязнителей воздуха. Из-за своего небольшого размера частицы PM2.5 могут проникать глубоко в легкие человека и вызывать различные проблемы со здоровьем; например, вызывая приступы астмы или способствуя сердечно-сосудистым заболеваниям.
Высокая концентрация пыли или PM представляет серьезную проблему для здоровья. PM2.5 имеет диаметр менее 2,5 микрон , а PM10 — менее 10 микрон . Это означает, что отчет о PM10 включает также PM2.5. Обе эти частицы намного меньше человеческого волоса, ширина которого составляет около 70 микрон.
PM10: Такие операции, как дробление камней, измельчение угля, вращающаяся печь в цементной промышленности, а также пыль на дороге, поднимаемая движущимися транспортными средствами, могут повышать уровень PM10. Предел PM10 для 24-часового среднего значения составляет 150 мкг/м3.
PM2.5: Это результат мелких частиц, образующихся в результате всех типов сгорания, включая автомобили, тепловые электростанции, сжигание древесины в жилых помещениях, лесные пожары, сжигание сельскохозяйственных отходов и другие промышленные процессы. Предел PM2.5 для среднего значения за 24 часа составляет 35 мкг/м3 .
Итак, для измерения размера твердых частиц PM1.0, PM2.5 и PM10 мы используем датчик пыли Plantpower PMS5003. Вы также можете использовать другие датчики Plantpower PMS x003, такие как PMS1003, PMS3003, PMS5003, PMS6003 и PMS7003. Приведенный ниже код поддерживает все эти модели с Arduino.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Датчик PM2.5/PM10 PMS5003 (купить на AliExpress).
- ЖК дисплей 20х4 (купить на AliExpress).
- Потенциометр 10 кОм (купить на AliExpress).
- Макетная плата
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Датчик качества воздуха PMS5003
Обзор
Plantower PMS5003 — это недорогой лазерный счетчик частиц, один из ряда датчиков Plantower, который также включает PMS1003, PMS3003 и PMS7003. PMS5003 — это своего рода цифровой и универсальный датчик концентрации частиц, который можно использовать для получения количества взвешенных частиц в воздухе, т. е. концентрации частиц, и выводить их значения с помощью цифрового интерфейса.
Принцип работы
Для такого датчика используется принцип лазерного рассеяния , т.е. производится рассеяние с помощью лазера, который излучает взвешенные частицы в воздухе, затем собирается рассеянный свет в определенной степени и, наконец, получается кривая изменения рассеянного света со временем. В конце концов, эквивалентный диаметр частиц и количество частиц с разными диаметрами в единице объема могут быть рассчитаны микропроцессором на основе теории MIE.
Распиновка датчика PMS5003
Некоторые из контактов PM2.5 пронумерованы слева направо как 1, 2, 3……8. Но в случае PM5003 контакты пронумерованы справа налево. Будьте осторожны при подключении контактов PM5003, так как вы можете подключить их наоборот.
Контакт | Функция | Описание | Примечание |
1 | VCC | Напряжение питания 5В | 4,5 – 5,5 В |
2 | GND | Земля | |
3 | SET | HIGH или SUSPENDED – рабочий режим LOW – режим сна |
3.3V logic |
4 | RXD | Прием данных UART/TTL | 3.3V logic |
5 | TXD | Передача данных UART/TTL | 3.3V logic |
6 | Reset | Сброс | 3.3V logic |
7 | NC | Не подключен | |
8 | NC | Не подключен |
Некоторые датчики PMSx003 поставляются с разъемами, как показано ниже:
Если у вас нет с собой разъема, то вы можете просто разрезать разъем ножницами и припаять жесткий провод, который можно легко вставить в плату Arduino или макетную плату.
Схема проекта
Схема подключения датчика качества воздуха PMS5003 PM2.5 к плате Arduino показана на рисунке ниже. Как можно увидеть, сопряжение PMS5003 с Arduino достаточноно простое. Вам нужно всего 4 соединения. Подключите PIN1 VCC PMS5003 к выводу Arduino 5V, а PIN2 GND к выводу GND Arduino. Вывод UART, т.е. PIN4 Rx и PIN5 Tx, подключен к выводам Arduino 3 и 4 соответственно.
Датчики Plantower выводят последовательные данные со скоростью 9600 бод , которые могут быть прочитаны многими компьютерами и могут быть подключены к ПК через USB-адаптер, такой как этот последовательный преобразователь USB 2.0 в TTL UART CP2102 .
Исходный код программы (без ЖК дисплея)
Исходный код для сопряжения PM2.5 PMS5003 с Arduino приведен ниже. Просто скопируйте код и загрузите его на плату Arduino UNO.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
#include <SoftwareSerial.h> SoftwareSerial pmsSerial(2, 3); void setup() { // our debugging output Serial.begin(115200); // sensor baud rate is 9600 pmsSerial.begin(9600); } struct pms5003data { uint16_t framelen; uint16_t pm10_standard, pm25_standard, pm100_standard; uint16_t pm10_env, pm25_env, pm100_env; uint16_t particles_03um, particles_05um, particles_10um, particles_25um, particles_50um, particles_100um; uint16_t unused; uint16_t checksum; }; struct pms5003data data; void loop() { if (readPMSdata(&pmsSerial)) { // reading data was successful! Serial.println(); Serial.println("---------------------------------------"); Serial.println("Concentration Units (standard)"); Serial.print("PM 1.0: "); Serial.print(data.pm10_standard); Serial.print("\t\tPM 2.5: "); Serial.print(data.pm25_standard); Serial.print("\t\tPM 10: "); Serial.println(data.pm100_standard); Serial.println("---------------------------------------"); Serial.println("Concentration Units (environmental)"); Serial.print("PM 1.0: "); Serial.print(data.pm10_env); Serial.print("\t\tPM 2.5: "); Serial.print(data.pm25_env); Serial.print("\t\tPM 10: "); Serial.println(data.pm100_env); Serial.println("---------------------------------------"); Serial.print("Particles > 0.3um / 0.1L air:"); Serial.println(data.particles_03um); Serial.print("Particles > 0.5um / 0.1L air:"); Serial.println(data.particles_05um); Serial.print("Particles > 1.0um / 0.1L air:"); Serial.println(data.particles_10um); Serial.print("Particles > 2.5um / 0.1L air:"); Serial.println(data.particles_25um); Serial.print("Particles > 5.0um / 0.1L air:"); Serial.println(data.particles_50um); Serial.print("Particles > 10.0 um / 0.1L air:"); Serial.println(data.particles_100um); Serial.println("---------------------------------------"); } } boolean readPMSdata(Stream *s) { if (! s->available()) { return false; } // Read a byte at a time until we get to the special '0x42' start-byte if (s->peek() != 0x42) { s->read(); return false; } // Now read all 32 bytes if (s->available() < 32) { return false; } uint8_t buffer[32]; uint16_t sum = 0; s->readBytes(buffer, 32); // get checksum ready for (uint8_t i=0; i<30; i++) { sum += buffer[i]; } /* debugging for (uint8_t i=2; i<32; i++) { Serial.print("0x"); Serial.print(buffer[i], HEX); Serial.print(", "); } Serial.println(); */ // The data comes in endian'd, this solves it so it works on all platforms uint16_t buffer_u16[15]; for (uint8_t i=0; i<15; i++) { buffer_u16[i] = buffer[2 + i*2 + 1]; buffer_u16[i] += (buffer[2 + i*2] << 8); } // put it into a nice struct :) memcpy((void *)&data, (void *)buffer_u16, 30); if (sum != data.checksum) { Serial.println("Checksum failure"); return false; } // success! return true; } |
После загрузки кода вы можете открыть последовательный монитор и установить скорость передачи данных 9600. Вы увидите, как датчик начнет собирать данные. Датчик начнет выдавать правильное значение через 30 секунд, так как ему требуется некоторое время, чтобы нагреться.
Взаимодействие датчика пыли PMS5003 PM2.5 с Arduino и ЖК-дисплеем
Сопряжение датчика PMS5003 с Arduino и ЖК-дисплеем достаточно простое. Вам нужно всего 4 соединения. Подключите PIN1 VCC PMS5003 к выводу Arduino 5 В, а PIN2 GND к выводу GND Arduino. Вывод UART, то есть PIN4 Rx и PIN5 Tx, подключен к выводам Arduino 3 и 4 соответственно, как показано на рисунке ниже. Для ЖК-дисплея 20×4 подключите выводы 1, 3, 16 к GND, а 2, 15 к VCC 5 В. Подключите выводы 4, 6, 11, 12, 13, 14 ЖК-дисплея к выводам Arduino 13, 12, 11, 10, 9, 8. Подключите потенциометр 10 кОм к выводу 3 ЖК-дисплея для регулировки контрастности.
Исходный код программы (с ЖК дисплеем)
Исходный код для сопряжения датчика качества воздуха PM2.5 PMS5003 с Arduino и ЖК-дисплеем приведен ниже. Просто скопируйте код и загрузите его на плату Arduino UNO.
Но перед этим вам нужно добавить библиотеку для датчика PMS5003. Поэтому просто установите следующую библиотеку из менеджера библиотек.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include "PMS.h" #include "SoftwareSerial.h" #include <LiquidCrystal.h> LiquidCrystal lcd(13, 12, 11, 10, 9, 8); SoftwareSerial Serial1(2, 3); // RX, TX PMS pms(Serial1); PMS::DATA data; void setup() { Serial1.begin(9600); lcd.begin(20,4); lcd.setCursor(0, 0); lcd.print("Warming up"); delay(4000); lcd.clear(); } void loop() { if (pms.read(data)) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Dust Concentration"); lcd.setCursor(0, 1); lcd.print("PM1.0 :" + String(data.PM_AE_UG_1_0) + "(ug/m3)"); lcd.setCursor(0, 2); lcd.print("PM2.5 :" + String(data.PM_AE_UG_2_5) + "(ug/m3)"); lcd.setCursor(0, 3); lcd.print("PM10 :" + String(data.PM_AE_UG_10_0) + "(ug/m3)"); delay(1000); } } |