- רכיבים נדרשים
- חיישן PM נובה PM011 למדידת PM2.5 ו- PM10
- יסודות מודול תצוגת OLED של 0.96 '
- הכנת חיישן MQ-7 למדידת פחמן חד חמצני (CO)
- חישוב מדד איכות האוויר
- תרשים מעגל
- בניית מעגל מערכת ניטור איכות האוויר על לוח Perf
- התקנת IO של Adafruit
- הסבר קוד ל
- מעטפת מודפסת תלת ממדית למערכת ניטור AQI
- בדיקת מערכת הניטור AQI
ככל שהחורף מתקרב, האוויר התלוי מעלינו מתעבה עם עשן ופליטת גזים משדות בוערים, מפעלים תעשייתיים ותנועת כלי רכב, חוסם את השמש ומקשה על הנשימה. מומחים אומרים כי הרמות הגבוהות של זיהום אוויר ומגפת COVID-19 יכולות להיות תערובת מסוכנת שיכולה להיות לה השלכות חמורות. הצורך במעקב בזמן אמת אחר איכות האוויר הוא בולט מאוד.
אז בפרויקט זה אנו הולכים לבנות מערכת ניטור איכות אוויר ESP32 באמצעות חיישן נובה PM SDS011, חיישן MQ-7 וחיישן DHT11. אנו נשתמש גם במודול תצוגת OLED להצגת ערכי איכות האוויר. אינדקס איכות האוויר (AQI) בהודו מתבסס על שמונה מזהמים, PM10, PM2.5, SO2 ו NO2, CO, אוזון, NH3, ו Pb. עם זאת, אין צורך למדוד את כל המזהמים. אז אנחנו הולכים למדוד את הריכוז של PM2.5, PM10 ופחמן חד חמצני כדי לחשב את מדד איכות האוויר. ערכי ה- AQI יפורסמו ב- Adafruit IO כדי שנוכל לפקח עליו מכל מקום. בעבר מדדנו גם את הריכוז של גז גפ"מ, עשן ואמוניה באמצעות ארדואינו.
רכיבים נדרשים
- ESP32
- חיישן ראש הממשלה נובה SDS011
- 0.96 'מודול תצוגת SPI OLED
- חיישן DHT11
- חיישן MQ-7
- חוטי מגשר
חיישן PM נובה PM011 למדידת PM2.5 ו- PM10
חיישן ה- SDS011 הוא חיישן איכות אוויר עדכני שפותח על ידי Nova Fitness. זה עובד על פי העיקרון של פיזור לייזר ויכול לקבל את ריכוז החלקיקים בין 0.3 ל -10 מיקרומטר באוויר. חיישן זה מורכב ממאוורר קטן, שסתום כניסת אוויר, דיודת לייזר ופוטודיודה. האוויר נכנס דרך כניסת האוויר שם מקור אור (לייזר) מאיר את החלקיקים והאור המפוזר הופך לאות על ידי גלאי פוטו. אז אותות אלה מוגברים ומעובדים כדי לקבל את ריכוז החלקיקים של PM2.5 ו- PM10. השתמשנו בעבר ב- Nova PM חיישן עם Arduino לחישוב הריכוז של PM10 ו- PM2.5.
מפרט חיישן SDS011:
- פלט: PM2.5, PM10
- טווח מדידה: 0.0-999.9μg / m3
- מתח כניסה: 4.7V עד 5.3V
- זרם מרבי: 100mA
- זרם שינה: 2mA
- זמן תגובה: שנייה אחת
- תדר פלט נתונים סידורי: פעם / שנייה
- רזולוציית קוטר החלקיקים: ≤0.3μm
- שגיאה יחסית: 10%
- טווח טמפרטורות: -20 ~ 50 ° C
יסודות מודול תצוגת OLED של 0.96 '
OLED (דיודה פולטת אור אורגנית) היא מעין דיודה פולטת אור שמיוצרת באמצעות תרכובות אורגניות המלהיבות כאשר מותר לזרם החשמלי לזרום דרכן. לתרכובות אורגניות אלה יש אור משלהן ולכן הם אינם דורשים שום מעגל תאורה אחורית כמו מסכי LCD רגילים. מסיבה זו, טכנולוגיית תצוגת OLED חסכונית בחשמל ונמצאת בשימוש נרחב בטלוויזיות ובמוצרי תצוגה אחרים.
סוגים שונים של OLED זמינים בשוק בהתבסס על צבע התצוגה, מספר הפינים, הגודל ו- IC הבקר. במדריך זה נשתמש במודול OLED כחול 7 פינים SSD1306 0.96 ”OLED שאורכו 128 פיקסלים ואורכו 64 פיקסלים. OLED 7 פינים זה תומך בפרוטוקול SPI ובקר IC SSD1306 עוזר ל- OLED להציג את התווים שהתקבלו. למידע נוסף על OLED והתממשקותו עם מיקרו-בקרים שונים על ידי לחיצה על הקישור.
הכנת חיישן MQ-7 למדידת פחמן חד חמצני (CO)
MQ-7 CO מודול חיישן גז פחמן חד חמצני מזהה את ריכוזי CO באוויר. החיישן יכול למדוד ריכוזים של 10 עד 10,000 עמודים לדקה. ניתן לרכוש חיישן 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. סיכת ה- Analog Out של חיישן MQ-7 מחוברת ל- GPIO 25 וסיכת הנתונים של חיישן DHT11 מחוברת לחיישן GPIO27. מכיוון שמודול ה- OLED Display משתמש בתקשורת SPI, הקמנו תקשורת SPI בין מודול ה- OLED ל- ESP32. החיבורים מוצגים בטבלה שלהלן:
S.No |
סיכת מודול OLED |
פין ESP32 |
1 |
GND |
קרקע, אדמה |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
זֶרֶם יָשָׁר |
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
כפי שניתן לראות מהתמונה הראשית, הרעיון היה להשתמש במעגל זה בתוך מעטפת מודפסת בתלת מימד. אז המעגל השלם שמוצג לעיל מולחם על לוח perf. הקפד להשתמש בחוטים כדי להשאיר מספיק מרחק להתקנת ה- OLED והחיישנים. הלוח המושלם שלי מולחם ל- OLED ומודול החיישן מוצג להלן.
התקנת IO של Adafruit
Adafruit IO היא פלטפורמת נתונים פתוחה המאפשרת לכם לצבור, לדמיין ולנתח נתונים חיים בענן. באמצעות Adafruit IO תוכלו להעלות, להציג ולפקח על הנתונים שלכם דרך האינטרנט ולהפוך את ה- IoT של הפרויקט שלכם למופעל. באפשרותך לשלוט במנועים, לקרוא נתוני חיישנים וליצור יישומי IoT מגניבים דרך האינטרנט באמצעות Adafruit IO.
כדי להשתמש ב- Adafruit IO, ראשית צור חשבון ב- Adafruit IO. לשם כך היכנסו לאתר IO של Adafruit ולחצו על 'התחל בחינם' בפינה השמאלית העליונה של המסך.
לאחר סיום תהליך יצירת החשבון, היכנס לחשבון ולחץ על 'הצג מפתח AIO' בפינה השמאלית העליונה כדי לקבל את שם המשתמש של החשבון ומפתח ה- AIO.
כאשר תלחץ על 'מפתח AIO', יופיע חלון עם מפתח ה- AIO של Adafruit ושם המשתמש. העתק את המפתח ואת שם המשתמש הזה, הוא ישמש בקוד.
כעת, לאחר קבלת מקשי ה- AIO, צור עדכון לאחסון נתוני חיישני DHT. ליצירת פיד לחץ על 'פיד'. לאחר מכן לחץ על 'פעולות' ולאחר מכן בחר 'צור פיד חדש' מבין האפשרויות הזמינות.
לאחר מכן, ייפתח חלון חדש שבו עליך להזין את שם התיאור של העדכון. כתיבת תיאור היא לא חובה.
לחץ על 'צור', לאחר מכן; תועבר לעדכון החדש שנוצר.
עבור פרויקט זה, יצרנו בסך הכל שישה הזנות לערכי PM10, PM2.5, CO, טמפרטורה, לחות ו- AQI. בצע את אותו ההליך שלמעלה כדי ליצור את שאר העדכונים.
לאחר יצירת הזנות, כעת ניצור תכונת לוח מחוונים של Adafruit IO כדי להמחיש את נתוני החיישן בעמוד יחיד. לשם כך, ראשית, צור לוח מחוונים ואז הוסף את כל העדכונים האלה במרכז השליטה.
ליצירת לוח מחוונים, לחץ על אפשרות לוח המחוונים ואז לחץ על 'פעולה', ולאחר מכן לחץ על 'צור לוח מחוונים חדש'.
בחלון הבא, הזן את שם לוח המחוונים ולחץ על 'צור'.
כאשר לוח המחוונים נוצר, כעת נשתמש בלוקים של Adafruit IO כמו Gauge ו- Slider כדי לדמיין את הנתונים. כדי להוסיף בלוק, לחץ על '+' בפינה השמאלית העליונה.
לאחר מכן בחר בלוק 'מד'.
בחלון הבא בחר את נתוני העדכון שברצונך לדמיין.
בשלב האחרון, שנה את הגדרות החסימה להתאמה אישית.
עכשיו בצע את אותו ההליך כמו לעיל כדי להוסיף בלוקים להדמיה לשאר העדכונים. לוח המחוונים שלי ל- Adafruit IO נראה כך:
הסבר קוד ל
הקוד השלם לפרויקט זה ניתן בסוף המסמך. כאן אנו מסבירים כמה חלקים חשובים בקוד.
קוד משתמש SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, ו DHT.h ספריות. ניתן להוריד את ספריות ה- SDS011, Adafruit_GFX ו- Adafruit_SSD1306 ממנהל הספרייה ב- Arduino IDE ולהתקין משם. לשם כך, פתח את ה- Arduino IDE ועבור אל סקיצה <כלול ספרייה <נהל ספריות . עכשיו חפש את SDS011 והתקן את ספריית ה- SDS Sensor על ידי R. Zschiegner.
באופן דומה, התקן את ספריות Adafruit GFX ו- Adafruit SSD1306 על ידי Adafruit. ניתן להוריד את Adafruit_MQTT.h ו- DHT11.h מהקישורים הנתונים.
לאחר התקנת הספריות ל- Arduino IDE, התחל את הקוד על ידי הכללת קבצי הספריות הדרושים.
#לִכלוֹל
בשורות הבאות, הגדר את רוחב וגובה תצוגת OLED. בפרויקט זה השתמשתי בתצוגת SPI OLED 128 × 64. אתה יכול לשנות את המשתנים SCREEN_WIDTH ו- SCREEN_HEIGHT בהתאם לתצוגה שלך.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
ואז הגדירו את סיכות התקשורת של SPI בהן מחובר OLED Display.
#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 שהעתקת משרת Adafruit IO. אלה יכללו את שרת 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"
לאחר מכן הגדר את עדכוני IO של Adafruit לאחסון נתוני החיישן. במקרה שלי, הגדרתי שישה הזנות לאחסון נתוני חיישנים שונים, כלומר: AirQuality, טמפרטורה, לחות, PM10, PM25 ו- CO.
Adafruit_MQTT_Client mqtt (& client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / AirQuality"); Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Temperature"); 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 () , אתחל את צג הסידורי בקצב שידור של 9600 למטרות ניפוי באגים. גם אתחל את תצוגת OLED, חיישן DHT וחיישן SDS011 באמצעות פונקציית התחל () .
הגדרת חלל () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
לולאת ה- for בתוך פונקציית ההתקנה משמשת לאיסוף הערכים עד למספר מוגדר ואז להגדרת המונה לאפס.
עבור (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
קריאת ערכי החיישן:
כעת בתוך פונקציית הלולאה, השתמש בשיטת millis () כדי לקרוא את ערכי החיישן בכל שעה. כל אחד מחיישני הגז מפיק ערך אנלוגי בין 0 ל- 4095. כדי להמיר ערך זה למתח, השתמש במשוואה הבאה: RvRo = MQ7Raw * (3.3 / 4095); כאשר MQ7Raw הוא הערך האנלוגי מהסיכה האנלוגית של החיישן. כמו כן, קרא את קריאות PM2.5 ו- PM10 מחיישן SDS011.
אם ((לא חתום ארוך) (currentMillis - previousMillis)> = מרווח) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3.3 / 4095); MQ7ppm = 3.027 * exp (1.0698 * (RvRo)); Serial.println (MQ7ppm); error = my_sds.read (& p25, & p10); אם (! שגיאה) {Serial.println ("P2.5:" + מחרוזת (p25)); Serial.println ("P10:" + מחרוזת (p10)); }}
המרת הערכים:
הערכים של PM2.5 PM10 כבר נמצאים מיקרוגרם / מ ' 3 אבל אנחנו צריכים להמיר את ערכי פחמן חד-חמצני מן PPM כדי מ"ג / מ' 3. נוסחת ההמרה מובאת להלן:
ריכוז (מ"ג / מ"ג 3) = ריכוז (PPM) × (מסה מולקולרית (g / mol) / נפח טוחן (L))
איפה: המסה המולקולרית של CO היא 28.06 גרם למול ונפח הטוחנת הוא 24.45 ליטר ב 25 0 צלזיוס
ריכוז INNGM3 = MQ7ppm * (28.06 / 24.45); Serial.println (ConcentrationINmgm3);
חישוב ממוצע של 24 שעות:
ואז בשורות הבאות, חישב את הממוצע של 24 שעות לקריאת PM10, PM2.5, וממוצע של 8 שעות עבור קריאות פחמן חד חמצני. בשורת הקוד הראשונה, קח את הסכום הנוכחי וחסר את האלמנט הראשון במערך, כעת שמור את זה בתור הסכום החדש. בתחילה זה יהיה אפס. ואז קבל את ערכי החיישן והוסף את הקריאה הנוכחית לסך הכל והעלה את מדד המספרים. אם ערך האינדקס שווה או גדול מ- numReadings, הגדר את האינדקס לאפס.
totalPM10 = totalPM10 - קריאות PM10; קריאות PM10 = p10; totalPM10 = totalPM10 + קריאות PM10; readIndexPM10 = readIndexPM10 + 1; אם (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
ואז, סוף סוף, פרסם ערכים אלה ב- Adafruit IO.
אם (! Temperature.publish (temperature)) {עיכוב (30000); } אם (! לחות.פרסום (לחות)) {עיכוב (30000); …………………………………………………………. ………………………………………………………….
מעטפת מודפסת תלת ממדית למערכת ניטור AQI
לאחר מכן מדדתי את ממדי ההתקנה באמצעות ה- Vernier שלי וגם מדדתי את מידות החיישנים ו- 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 לחישוב מדד איכות האוויר. את העבודה המלאה של הפרויקט ניתן למצוא גם בסרטון המקושר למטה. מקווה שנהניתם מהפרויקט ומצאתם שזה מעניין לבנות משלכם. אם יש לך שאלות, השאיר אותן בסעיף ההערות למטה.