- Необходими компоненти
- Nova PM Sensor SDS011 за измерване на PM2.5 и PM10
- Основи на 0.96 'OLED дисплейния модул
- Подготовка на сензора MQ-7 за измерване на въглероден окис (CO)
- Изчисляване на индекса за качество на въздуха
- Електрическа схема
- Изграждане на верига за система за наблюдение на качеството на въздуха на Perf Board
- Настройка на Adafruit IO
- Обяснение на кода за
- 3D отпечатан корпус за система за наблюдение AQI
- Тестване на системата за наблюдение AQI
С настъпването на зимата въздухът, надвиснал над нас, се сгъстява с дим и газообразни емисии от горящи полета, индустриални фабрики и автомобилен трафик, блокирайки слънцето и затруднявайки дишането. Експертите казват, че високите нива на замърсяване на въздуха и пандемията на COVID-19 могат да бъдат опасна комбинация, която може да има сериозни последици. Необходимостта от мониторинг на качеството на въздуха в реално време е много очевидна.
Така че в този проект ще изградим система за наблюдение на качеството на въздуха ESP32, използваща сензор Nova PM SDS011, сензор MQ-7 и сензор DHT11. Също така ще използваме OLED дисплеен модул за показване на стойностите на качеството на въздуха. Индексът на качеството на въздуха (AQI) в Индия се основава на осем замърсители, PM10, PM2.5, SO2 и NO2, CO, озон, NH3 и Pb. Не е необходимо обаче да се измерват всички замърсители. Така че ще измерим концентрацията на PM2,5, PM10 и въглероден окис, за да изчислим индекса за качество на въздуха. Стойностите на AQI ще бъдат публикувани на Adafruit IO, за да можем да ги наблюдаваме отвсякъде. Преди сме измервали и концентрацията на пропан-бутан, дим и амоняк, използвайки Arduino.
Необходими компоненти
- ESP32
- Nova PM сензор SDS011
- 0.96 'SPI OLED дисплеен модул
- DHT11 сензор
- MQ-7 сензор
- Джъмперни проводници
Nova PM Sensor SDS011 за измерване на PM2.5 и PM10
Сензорът SDS011 е съвсем нов сензор за качество на въздуха, разработен от Nova Fitness. Той работи на принципа на лазерното разсейване и може да достигне концентрацията на частиците между 0,3 до 10 μm във въздуха. Този сензор се състои от малък вентилатор, входящ клапан за въздух, лазерен диод и фотодиод. Въздухът влиза през входа на въздуха, където източник на светлина (лазер) осветява частиците и разсеяната светлина се преобразува в сигнал от фотодетектор. След това тези сигнали се усилват и обработват, за да се получи концентрацията на частиците на PM2.5 и PM10. Преди това използвахме Nova PM Sensor с Arduino, за да изчислим концентрацията на PM10 и PM2.5.
Спецификации на сензора SDS011:
- Изход: PM2.5, PM10
- Обхват на измерване: 0.0-999.9μg / m3
- Входно напрежение: 4.7V до 5.3V
- Максимален ток: 100mA
- Ток на заспиване: 2mA
- Време за реакция: 1 секунда
- Честота на изходящите серийни данни: 1 път / секунда
- Разделителна способност на диаметъра на частиците: ≤0,3μm
- Относителна грешка: 10%
- Температурен обхват: -20 ~ 50 ° C
Основи на 0.96 'OLED дисплейния модул
OLED (Organic Light Emitting Diode) е вид светодиод, който е направен с помощта на органични съединения, които се възбуждат, когато електрическият ток е разрешен да тече през тях. Тези органични съединения имат своя собствена светлина, поради което не се нуждаят от никакви схеми за подсветка като нормалните LCD екрани. Поради тази причина OLED технологията на дисплея е енергийно ефективна и широко използвана в телевизори и други дисплейни продукти.
На пазара се предлагат различни видове OLED, базирани на цвета на дисплея, броя на изводите, размера и IC на контролера. В този урок ще използваме монохромния син 7-пинов SSD1306 0.96 ”OLED модул, който е широк 128 пиксела и дълъг 64 пиксела. Този 7-пинов OLED поддържа протокол SPI, а контролерът IC SSD1306 помага на OLED да показва получените символи. Научете повече за OLED и неговото взаимодействие с различни микроконтролери, като следвате връзката.
Подготовка на сензора MQ-7 за измерване на въглероден окис (CO)
MQ-7 CO Сензорен модул за въглероден окис на газ открива концентрациите на CO във въздуха. Сензорът може да измерва концентрации от 10 до 10 000 ppm. MQ-7 сензорът може да бъде закупен като модул или просто като сензор сам. Преди това използвахме много различни видове газови сензори за откриване и измерване на различен газ, можете също да ги проверите, ако се интересувате. В този проект използваме сензорния модул MQ-7 за измерване на концентрацията на въглероден окис в PPM. Схемата на платката MQ-7 е дадена по-долу:
Натоварващият резистор RL играе много важна роля за работа на сензора. Този резистор променя стойността на съпротивлението си в зависимост от концентрацията на газ. Сензорната платка MQ-7 се предлага с товароустойчивост от 1KΩ, което е безполезно и влияе на показанията на сензора. Така че, за да измерите подходящите стойности на концентрацията на CO, трябва да замените резистора 1KΩ с резистор 10KΩ.
Изчисляване на индекса за качество на въздуха
AQI в Индия се изчислява въз основа на средната концентрация на определен замърсител, измерена през стандартен интервал от време (24 часа за повечето замърсители, 8 часа за въглероден оксид и озон). Например AQI за PM2.5 и PM10 се основава на 24-часова средна концентрация, а AQI за въглероден оксид се основава на 8-часова средна концентрация). Изчисленията на AQI включват осемте замърсители, които са PM10, PM2.5, азотен диоксид (NO 2), серен диоксид (SO 2), въглероден оксид (CO), приземен озон (O 3), амоняк (NH 3), и олово (Pb). Всички замърсители обаче не се измерват на всяко място.
Въз основа на измерените 24-часови околни концентрации на замърсител се изчислява подиндекс, който е линейна функция на концентрацията (напр. Подиндексът за PM2,5 ще бъде 51 при концентрация 31 µg / m3, 100 при концентрация 60 µg / m3 и 75 при концентрация 45 µg / m3). Най-лошият подиндекс (или максимумът от всички параметри) определя общия AQI.
Електрическа схема
Схемата на веригата за система за наблюдение на качеството на въздуха, базирана на IoT, е много проста и е дадена по-долу:
Сензорът SDS011, DHT11 и сензорът MQ-7 се захранват с + 5V, докато модулът OLED дисплей се захранва с 3.3V. Щифтовете на предавателя и приемника на SDS011 са свързани към GPIO16 и 17 на ESP32. Аналоговият изход на сензора MQ-7 е свързан към GPIO 25, а щифтът за данни на сензора DHT11 е свързан към сензора GPIO27. Тъй като OLED дисплейният модул използва SPI комуникация, ние установихме SPI комуникация между OLED модула и ESP32. Връзките са показани в таблицата по-долу:
S.No |
ПИН на модула OLED |
ESP32 ПИН |
1 |
GND |
Земя |
2 |
VCC |
5V |
3 |
D0 |
18. |
4 |
D1 |
23. |
5 |
ВЕИ |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S.No |
SDS011 ПИН |
ESP32 ПИН |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16. |
S.No |
DHT щифт |
ESP32 ПИН |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Данни |
27 |
S.No |
MQ-7 ПИН |
ESP32 ПИН |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Изграждане на верига за система за наблюдение на качеството на въздуха на Perf Board
Както можете да видите от основното изображение, идеята беше да се използва тази схема в 3D отпечатан корпус. Така че пълната схема, показана по-горе, е запоена върху перфектна дъска. Уверете се, че използвате кабели, за да оставите достатъчно разстояние, за да монтирате OLED и сензорите. Моята перфектна платка е споена с OLED и сензорният модул е показан по-долу.
Настройка на Adafruit IO
Adafruit IO е отворена платформа за данни, която ви позволява да обобщавате, визуализирате и анализирате данни на живо в облака. Използвайки Adafruit IO, можете да качвате, показвате и наблюдавате данните си по интернет и да направите вашия IoT проект активиран. Можете да управлявате двигатели, да четете данни от сензори и да създавате страхотни приложения за IoT по интернет, като използвате Adafruit IO.
За да използвате Adafruit IO, първо създайте акаунт в Adafruit IO. За целта отидете на уебсайта на Adafruit IO и кликнете върху „Започнете безплатно“ в горния десен ъгъл на екрана.
След приключване на процеса на създаване на акаунт, влезте в акаунта и кликнете върху „Преглед на AIO ключ“ в горния десен ъгъл, за да получите потребителското име на акаунта и AIO ключа.
Когато кликнете върху „AIO Key“, ще се появи прозорец с Adafruit IO AIO Key и потребителско име. Копирайте този ключ и потребителско име, той ще бъде използван в кода.
Сега, след получаване на бутоните AIO, създайте емисия за съхраняване на данните от DHT сензора. За да създадете емисия, кликнете върху „Емисия“. След това кликнете върху „Действия“ и след това изберете „Създаване на нова емисия“ от наличните опции.
След това ще се отвори нов прозорец, където трябва да въведете името и описанието на емисията. Писането на описание не е задължително.
След това кликнете върху „Създаване“; ще бъдете пренасочени към новосъздадената емисия.
За този проект създадохме общо шест подавания за стойности PM10, PM2.5, CO, температура, влажност и AQI. Следвайте същата процедура, както по-горе, за да създадете останалите емисии.
След създаването на емисии, сега ще създадем функция на таблото за управление на Adafruit IO, за да визуализираме данните от сензора на една страница. За това първо създайте табло за управление и след това добавете всички тези емисии в това табло.
За да създадете табло за управление, щракнете върху опцията Dashboard и след това щракнете върху „Действие“ и след това щракнете върху „Създаване на ново табло за управление“.
В следващия прозорец въведете името на таблото и кликнете върху „Създаване“.
Тъй като таблото е създадено, сега ще използваме блоковете Adafruit IO като Gauge и Slider, за да визуализираме данните. За да добавите блок, кликнете върху „+“ в горния десен ъгъл.
След това изберете блока "Gauge".
В следващия прозорец изберете данните за емисията, които искате да визуализирате.
В последната стъпка променете настройките на блока, за да го персонализирате.
Сега следвайте същата процедура, както по-горе, за да добавите блокове за визуализация за останалите емисии. Моето табло за управление Adafruit IO изглеждаше така:
Обяснение на кода за
Пълният код за този проект е даден в края на документа. Тук обясняваме някои важни части от кода.
Кодът използва SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, и DHT.h библиотеки. Библиотеките SDS011, Adafruit_GFX и Adafruit_SSD1306 могат да бъдат изтеглени от Мениджъра на библиотеки в IDE на Arduino и инсталирани от там. За това отворете IDE на Arduino и отидете на Скица <Включване на библиотека <Управление на библиотеки . Сега потърсете SDS011 и инсталирайте библиотеката на SDS Sensor от R. Zschiegner.
По същия начин инсталирайте библиотеките Adafruit GFX и Adafruit SSD1306 от Adafruit. Adafruit_MQTT.h и DHT11.h могат да бъдат изтеглени от дадените връзки.
След като инсталирате библиотеките в Arduino IDE, стартирайте кода, като включите необходимите библиотечни файлове.
#include
В следващите редове определете ширината и височината на OLED дисплея. В този проект съм използвал 128 × 64 SPI OLED дисплей. Можете да промените променливите SCREEN_WIDTH и SCREEN_HEIGHT според дисплея си.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
След това дефинирайте връзките за комуникация SPI, където е свързан OLED дисплеят.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
След това създайте екземпляр за дисплея на Adafruit с ширината и височината и протокола за комуникация SPI, който е дефиниран по-рано.
Дисплей Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
След това включете идентификационните данни за WiFi и Adafruit IO, които сте копирали от IO сървъра на Adafruit. Те ще включват сървъра MQTT, номер на порт, потребителско име и AIO ключ.
const char * ssid = "Galaxy-M20"; const char * pass = "ac312124"; #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
След това настройте Adafruit IO емисии за съхраняване на данните от сензора. В моя случай съм дефинирал шест подавания за съхраняване на различни данни от сензора, а именно: AirQuality, температура, влажност, PM10, PM25 и CO.
Adafruit_MQTT_Client mqtt (& клиент, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / AirQuality"); Adafruit_MQTT_Publish Температура = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Температура"); Adafruit_MQTT_Publish Влажност = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Влажност"); Adafruit_MQTT_Publish PM10 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM10"); Adafruit_MQTT_Publish PM25 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM25"); Adafruit_MQTT_Publish CO = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / CO");
Сега във функцията setup () инициализирайте Serial Monitor със скорост на предаване 9600 за целите на отстраняване на грешки. Също така инициализирайте OLED дисплея, DHT сензора и сензора SDS011 с функцията start () .
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
В продължение на линия във вътрешността на настройка функция се използва за събиране на стойностите до определен брой и след това определя брояча на нула.
за (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Четене на стойностите на сензора:
Сега във функцията на контура използвайте метода millis () , за да четете стойностите на сензора на всеки един час. Всеки от газовите сензори извежда аналогова стойност от 0 до 4095. За да преобразувате тази стойност в напрежение, използвайте следното уравнение: RvRo = MQ7Raw * (3.3 / 4095); където MQ7Raw е аналоговата стойност от аналоговия щифт на сензора. Също така прочетете показанията PM2.5 и PM10 от сензора SDS011.
if ((неподписано дълго) (currentMillis - previousMillis)> = интервал) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3.3 / 4095); MQ7ppm = 3.027 * опит (1.0698 * (RvRo)); Serial.println (MQ7ppm); грешка = my_sds.read (& p25, & p10); ако (! грешка) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + String (p10)); }}
Преобразуване на стойностите:
Стойностите на PM2.5 и PM10 вече са в µg / m 3, но трябва да преобразуваме стойностите на въглеродния моноксид от PPM в mg / m 3. Формулата за преобразуване е дадена по-долу:
Концентрация (mg / m 3) = Концентрация (PPM) × (Молекулярна маса (g / mol) / Моларен обем (L))
Където: Молекулярна маса на CO е 28,06 g / mol и моларен обем е 24,45L при 25 0 C
КонцентрацияINmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (КонцентрацияINmgm3);
Изчисляване на 24-часова средна стойност:
След това в следващите редове изчислете 24-часовата средна стойност за PM10, PM2.5 отчитане и 8 часа средна стойност за отчитане на въглероден окис. В първия ред на кода вземете текущата сума и извадете първия елемент в масива, сега запазете това като новата сума. Първоначално ще бъде Zero. След това вземете стойностите на сензора и добавете текущото отчитане към общото и увеличете индекса на числата. Ако стойността на индекса е равна или по-голяма от numReadings, тогава задайте индекса обратно на нула.
totalPM10 = totalPM10 - показания PM10; показания PM10 = p10; totalPM10 = totalPM10 + показания PM10; readIndexPM10 = readIndexPM10 + 1; ако (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
След това най-накрая публикувайте тези стойности на Adafruit IO.
if (! Temperature.publish (temperature)) {delay (30000); } if (! Влажност.публикуване (влажност)) {забавяне (30000); ………………………………………………………. ……………………………………………………….
3D отпечатан корпус за система за наблюдение AQI
След това измерих размерите на настройката с помощта на нониуса си, а също така измерих размерите на сензорите и OLED, за да проектирам корпус. Моят дизайн изглеждаше по-долу по следния начин, след като беше направен.
След като бях доволен от дизайна, го експортирах като STL файл, нарязах го на базата на настройките на принтера и накрая го отпечатах. Отново STL файлът също е достъпен за изтегляне от Thingiverse и можете да отпечатате корпуса му, като го използвате.
След като отпечатването приключи, аз пристъпих към сглобяването на проекта, създаден в постоянно заграждение, за да го инсталирам в съоръжение. С направената пълна връзка сглобих веригата в корпуса си и всичко беше добре, както можете да видите тук.
Тестване на системата за наблюдение AQI
След като хардуерът и кодът са готови, е време да тествате устройството. Използвахме външен 12V 1A адаптер за захранване на устройството. Както можете да видите, устройството ще покаже концентрацията на PM10, PM2.5 и въглероден окис на OLED дисплей. Концентрацията на PM2.5 и PM10 са в µg / m 3, докато концентрацията на въглероден окис е в mg / m 3.
Тези показания ще бъдат публикувани и на таблото за управление на Adafruit IO. Максимумът на всички параметри (PM10, PM2.5 & CO) ще бъде AQI.
Стойностите на AQI от последните 30 дни ще бъдат показани като графика.
Ето как можете да използвате сензорите SDS011 и MQ-7 за изчисляване на индекса за качество на въздуха. Цялостната работа на проекта може да бъде намерена и във видеото, свързано по-долу. Надявам се, че проектът ви е харесал и ви е било интересно да създадете свой собствен. Ако имате някакви въпроси, моля, оставете ги в раздела за коментари по-долу.