Mục lục:
- Quân nhu
- Bước 1: Kết nối các thành phần
- Bước 2: Thư viện và chương trình Arduino
- Bước 3: Chương trình MIT App Inventor 2
- Bước 4: KẾT QUẢ
Video: Hệ thống giám sát chất lượng không khí đối với ô nhiễm hạt: 4 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
GIỚI THIỆU:
1 Trong dự án này, tôi trình bày cách chế tạo một máy dò hạt có hiển thị dữ liệu, sao lưu dữ liệu trên thẻ SD và IOT. Hiển thị vòng neopixels trực quan cho biết chất lượng không khí.
2 Chất lượng không khí là một mối quan tâm ngày càng được quan tâm ngày nay. có hệ thống đo tốc độ bụi nhưng chúng rất đắt. Có những máy dò hạt giá rẻ, chất lượng cao trên thị trường, như một số nghiên cứu đã chỉ ra.
Ví dụ:
www.atmos-meas-tech.net/11/4823/2018/amt-1…
3 Do đó, tôi quyết định chế tạo một thiết bị có khả năng đo số lượng hạt theo các loại kích thước (0,5µm đến 10 µm), trực quan với màn hình đơn giản của kết quả (vòng điểm ảnh mới), hiển thị chi tiết hơn trên màn hình TFT và sao lưu có dấu thời gian trên thẻ SD.
4 Ngoài ra, tôi đã thêm một mô-đun giao tiếp bluetooth để có thể giao tiếp với ứng dụng Android và do đó xuất bản kết quả trên máy chủ IOT.
5 Chi phí chung của toàn bộ không vượt quá 60 €
Quân nhu
-Arduino una R3
-Arduino proto khiên
-TFT màn hình ST7735
-Neopixel vòng 24 dẫn
-Plantower PMS5003
-HC-06 mô-đun bluetooth
Bước 1: Kết nối các thành phần
các thành phần khác nhau được kết nối theo sơ đồ trên
Bước 2: Thư viện và chương trình Arduino
1 thư viện
cho màn hình TFT
github.com/adafruit/Adafruit-GFX-Library
cho vòng pixel neo
github.com/adafruit/Adafruit_NeoPixel
cho thẻ sd
github.com/arduino-libraries/SD
2 bản phác thảo arduino
#include #include // Bibliothèque pour l'I2C #include "RTClib.h" // Bibliothèque pour le mô-đun RTC RTC_DS1307 RTC; #bao gồm
// Chân nào trên Arduino được kết nối với NeoPixels?
#define PIN 6 // Trên Trinket hoặc Gemma, đề xuất thay đổi mã này thành 1
// Có bao nhiêu NeoPixel được gắn vào Arduino?
#define NUMPIXELS 24 // Kích thước vòng NeoPixel phổ biến Adafruit_NeoPixel pixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t vert = pixel. Color (0, 250, 0); uint32_t orange = pixel. Color (250, 250, 0); uint32_t rouge = pixel. Color (255, 0, 0);
SoftwareSerial pmsSerial (2, 3);
#define cs 10 #define dc 9 #define rst 8 // bạn cũng có thể kết nối cái này với thiết lập lại Arduino
#include // Thư viện đồ họa cốt lõi
#include // Thư viện dành riêng cho phần cứng #include #include const int cs_sd = 4; int temps; // temps d'acquisition double tempsInit; // khởi tạo du timer au démarrage du loop ()
# nếu được xác định (_ SAM3X8E_)
#undef _FlashStringHelper:: F (string_literal) #define F (string_literal) string_literal #endif
// Tùy chọn 1: sử dụng bất kỳ chân nào nhưng chậm hơn một chút
// Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, mosi, sclk, rst);
// Tùy chọn 2: phải sử dụng các chân SPI phần cứng
// (đối với UNO mà sclk = 13 và sid = 11) và chân 10 phải là // một đầu ra. Điều này nhanh hơn nhiều - cũng bắt buộc nếu bạn muốn // sử dụng thẻ microSD (xem ví dụ vẽ hình ảnh) Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst); float nombre_leds = 0; void setup () {Serial.begin (9600); // Khởi tạo la liên lạc I2C Wire.begin (); // Khởi tạo le module RTC RTC.begin (); Serial.print ("init SD"); chậm trễ (1000); if (! SD.begin (cs_sd)) // Điều kiện đặt vé si la carte SD est présente dans l'appareil {Serial.print ("Defaut SD"); trở lại; } Serial.print ("Carte SD OK");
Dữ liệu tệp = SD.open ("donnees.txt", FILE_WRITE); // Ouvre le fichier "donnees.txt"
data.println (""); data.println ("Mua lại Démarrage"); // Ecrit dans ce fichier data.close (); tft.initR (INITR_GREENTAB); // khởi tạo chip ST7735S, tab đen Serial.println ("init"); // đầu ra gỡ lỗi của chúng tôi tft.fillScreen (ST7735_BLACK); // tốc độ truyền của cảm biến là 9600 pmsSerial.begin (9600);
pixel.begin (); // BẮT ĐẦU đối tượng dải NeoPixel (BẮT BUỘC)
pixel.setBrightness (2);
}
struct pms5003data {
uint16_t framelen; uint16_t pm10_ tiêu chuẩn, pm25_ tiêu chuẩn, pm100_ tiêu chuẩn; uint16_t pm10_env, pm25_env, pm100_env; uint16_t hạt_03um, hạt_05um, hạt_10um, hạt_25um, hạt_50um, hạt_100um; uint16_t không sử dụng; uint16_t tổng kiểm tra; };
dữ liệu struct pms5003data; void loop () {pixel.clear (); // Đặt tất cả các màu pixel thành 'off' DateTime now = RTC.now (); // Récupère l'heure et le date courante // affiche_date_heure (now);
temps = ((millis () - tempsInit)) / 1000; // Démarrage du chrono
if (readPMSdata (& pmsSerial)) {// tft.fillScreen (ST7735_BLACK); tft.setCursor (10, 5); tft.setTextColor (ST7735_WHITE); tft.println ("phần nbre / 0,1 l");
tft.setCursor (10, 17); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.setCursor (10, 17); tft.print ("0,3 um"); tft.print (data.particles_03um); tft.print ("");
tft.setCursor (10, 29);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("0,5 um"); tft.print (data.particles_05um); tft.print ("");
tft.setCursor (10, 41);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("1,0 um"); tft.print (data.particles_10um); tft.print ("");
tft.setCursor (10, 53);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("2,5 um"); tft.print (data.particles_25um); tft.print ("");
tft.setCursor (10, 65);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("5,0 um"); tft.print (data.particles_50um); tft.print ("");
tft.setCursor (10, 77);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("10 um"); tft.print (data.particles_100um); tft.print ("");
tft.setCursor (2, 89);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("PM 1.0"); tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); tft.print (data.pm10_standard); tft.print (""); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.print (" microg / m3 ");
tft.setCursor (2, 100); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("PM 2.5"); tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); tft.print (data.pm25_standard); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.print ("microg / m3");
tft.setCursor (2, 110);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("PM 10"); tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); tft.print (data.pm100_standard); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.print ("microg / m3");
tft.setCursor (10, 5);
tft.setTextColor (ST7735_WHITE, ST7735_BLACK); tft.setTextSize (1); tft.println ("phần nbre / 0,1 l");
// Serial.print (temps);
// Serial.print (""); Serial.print ("#"); Serial.print ("03µm"); Serial.print (data.particles_03um); Serial.print (""); Serial.print ("05µm"); Serial.print (data.particles_05um); Serial.print (""); Serial.print ("1µm"); Serial.print (data.particles_10um); Serial.print (""); Serial.print ("25µm"); Serial.print (data.particles_25um); Serial.print (""); Serial.print ("50µm"); Serial.print (data.particles_50um); Serial.print (""); Serial.print ("100µm"); Serial.print (data.particles_100um); Serial.println (""); nombre_leds = int (((float (data.particles_03um) / 65535) * 24)); // nombre_leds = (8); Serial.println (nombre_leds);
if ((nombre_leds = 1)) {
pixel.fill (vert, 0, nombre_leds); } else if ((nombre_leds = 8)) {pixel.fill (vert, 0, 8); pixel.fill (cam, 8, ((nombre_leds) -8)); } else if (nombre_leds> 16) {
pixel.fill (vert, 0, 8); pixel.fill (màu cam, 8, 8); pixel.fill (rouge, 16, ((nombre_leds) -16)); } else if (nombre_leds <= 1) {pixel.fill (vert, 0, 1); } pixel.show (); // Gửi các màu pixel đã cập nhật tới phần cứng.
// Định nghĩa données String PM03 = String (data.particles_03um); String PM05 = String (data.particles_05um); String PM10 = String (data.particles_10um); String PM25 = String (data.particles_25um); String PM50 = String (data.particles_50um); String PM100 = String (data.particles_100um); String PMS10 = String (data.pm10_standard); String PMS25 = String (data.pm25_standard); String PMS100 = String (data.pm100_standard); String Temps = Chuỗi (tạm thời);
// Ecriture des données dans le fichier texte
Dữ liệu tệp = SD.open ("donnees.txt", FILE_WRITE); data.println (Temps + "" + PM03 + "" + PM05 + "" + PM10 + "" + PM25 + "" + PM50 + "" + PM100 + "" + PMS10 + "" + PMS25 + "" + PMS100 + ""); data.close (); }
}
boolean readPMSdata (Stream * s) {
if (! s-> available ()) {return false; } // Đọc từng byte một cho đến khi chúng ta đến byte bắt đầu '0x42' đặc biệt if (s-> peek ()! = 0x42) {s-> read (); trả về sai; }
// Bây giờ đọc tất cả 32 byte
if (s-> available () readBytes (đệm, 32);
// chuẩn bị sẵn sàng tổng kiểm tra
for (uint8_t i = 0; i <30; i ++) {sum + = buffer ; }
/ * gỡ lỗi
for (uint8_t i = 2; i <32; i ++) {Serial.print ("0x"); Serial.print (đệm , HEX); Serial.print (","); } Serial.println (); * / // Dữ liệu có trong endian'd, điều này giải quyết nó để nó hoạt động trên tất cả các nền tảng uint16_t buffer_u16 [15]; for (uint8_t i = 0; i <15; i ++) {buffer_u16 = buffer [2 + i * 2 + 1]; buffer_u16 + = (buffer [2 + i * 2] << 8); }
// đặt nó vào một cấu trúc đẹp:)
memcpy ((void *) & data, (void *) buffer_u16, 30);
if (sum! = data.checksum) {
Serial.println ("Kiểm tra thất bại"); trả về sai; } // sự thành công! trả về true; }
// Converti le numéro de jour en jour /! / La semaine bắt đầu un dimanche
Chuỗi donne_jour_semaine (uint8_t j) {switch (j) {case 0: return "DIM"; trường hợp 1: return "LUN"; trường hợp 2: trả về "MAR"; trường hợp 3: trả về "MER"; trường hợp 4: trả về "JEU"; trường hợp 5: return "VEN"; trường hợp 6: return "SAM"; default: return ""; }}
// affiche la date et l'heure sur l'écran
void affiche_date_heure (DateTime datetime) {// Chuỗi ngày tháng. + Chuỗi (datetime.year (), DEC); // heure String heure = ""; heure = Vers2Chiffres (datetime.hour ()) + ":" + Vers2Chiffres (datetime.minute ()) + ":" + Vers2Chiffres (datetime.second ());
Serial.print (tạp chí); Serial.print (""); Serial.print (heure); //Serial.print (""); Dữ liệu tệp = SD.open ("donnees.txt", FILE_WRITE); data.print (jour + "" + heure + ""); data.close ();
tft.setCursor (2, 120);
tft.setTextColor (ST7735_GREEN); tft.setTextSize (1); tft.print ("date"); tft.setTextColor (ST7735_YELLOW); tft.print (jour); tft.setTextColor (ST7735_GREEN); tft.setCursor (2, 130); tft.print ("heure"); tft. setTextColor (ST7735_YELLOW); tft.print (heure);
chậm trễ (500);
}
// permet d'afficher les nombres sur deux chiffres
String Vers2Chiffres (byte nombre) {String resultat = ""; if (nombre <10) resultat = "0"; trả về resultat + = String (nombre, DEC); }
Bước 3: Chương trình MIT App Inventor 2
đây là khối mã nhà phát minh ứng dụng MIT
Bước 4: KẾT QUẢ
đây là video kết quả
Đề xuất:
Giám sát chất lượng không khí đơn giản với màn hình LCD TFT - Ameba Arduino: 3 bước
Giám sát chất lượng không khí đơn giản với màn hình TFT LCD - Ameba Arduino: Giới thiệu Hiện nay hầu hết mọi người ở nhà để tránh tiếp xúc gần với người mang vi rút COVID-19 tiềm ẩn, chất lượng không khí trở thành một yếu tố quan trọng đối với sức khỏe của mọi người, đặc biệt là ở các nước nhiệt đới nơi sử dụng máy lạnh là điều bắt buộc trong thời kỳ da
Giám sát chất lượng không khí với MQ135 và cảm biến nhiệt độ và độ ẩm bên ngoài qua MQTT: 4 bước
Màn hình chất lượng không khí với MQ135 và cảm biến nhiệt độ và độ ẩm bên ngoài qua MQTT: Đây là mục đích thử nghiệm
Giám sát chất lượng không khí với DSM501A Với Nokia LCD: 7 bước
Giám sát chất lượng không khí với DSM501A Với Nokia LCD: Xin chào các bạn! Trong bài hướng dẫn ngắn này, tôi sẽ hướng dẫn các bạn cách theo dõi tình trạng không khí tại nhà hoặc bất cứ đâu
Giám sát chất lượng không khí sử dụng hạt Photon: 11 bước (có hình ảnh)
Giám sát chất lượng không khí sử dụng hạt Photon: Trong dự án này, cảm biến hạt PPD42NJ được sử dụng để đo chất lượng không khí (PM 2.5) có trong không khí với hạt Photon. Nó không chỉ hiển thị dữ liệu trên bảng điều khiển Particle và dweet.io mà còn cho biết chất lượng không khí bằng cách sử dụng đèn LED RGB bằng cách thay đổi nó
Giám sát chất lượng không khí được cung cấp năng lượng bằng hạt: 7 bước
Giám sát chất lượng không khí được cung cấp năng lượng bằng hạt: Chất lượng không khí. Bạn có thể nghĩ về nó nhiều hơn bây giờ khi không khí sạch của chúng ta đã biến thành một đám mây vĩnh viễn trên bầu trời. Kinh quá. Một điều bạn có thể kiểm soát là chất lượng không khí bên trong nhà của bạn. Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách tạo ra một không khí