- Các thành phần bắt buộc:
- Sơ đồ mạch và giải thích:
- Giải thích làm việc:
- Giải thích mã:
- "; webpage + =" Chất lượng không khí là "; trang web + = air_quality; trang web + =" PPM "; trang web + ="
";
Đoạn mã sau sẽ gọi một hàm có tên sendData và sẽ gửi các chuỗi dữ liệu và tin nhắn đến trang web để hiển thị.
sendData (cipSend, 1000, DEBUG); sendData (trang web, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Đoạn mã sau sẽ in dữ liệu trên màn hình LCD. Chúng tôi đã áp dụng các điều kiện khác nhau để kiểm tra chất lượng không khí và màn hình LCD sẽ in thông báo tùy theo điều kiện và còi cũng sẽ phát ra tiếng bíp nếu ô nhiễm vượt quá 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Chất lượng không khí là"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Không khí trong lành"); digitalWrite (8, THẤP);
Cuối cùng, chức năng bên dưới sẽ gửi và hiển thị dữ liệu trên trang web. Dữ liệu chúng tôi đã lưu trữ trong chuỗi có tên 'trang web' sẽ được lưu trong chuỗi có tên 'lệnh' . Sau đó, ESP sẽ đọc từng ký tự một từ 'lệnh' và sẽ in nó trên trang web.
String sendData (String command, const int timeout, boolean debug) {String response = ""; esp8266.print (lệnh); // gửi ký tự đã đọc tới esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// Máy esp có dữ liệu nên hiển thị đầu ra của nó ra cửa sổ nối tiếp char c = esp8266.read (); // đọc ký tự tiếp theo. phản ứng + = c; }} if (gỡ lỗi) {Serial.print (phản hồi); } trả về phản hồi; }
- Kiểm tra và Đầu ra của Dự án:
Trong dự án này, chúng tôi sẽ tạo ra một Hệ thống giám sát ô nhiễm không khí dựa trên IoT, trong đó chúng tôi sẽ theo dõi Chất lượng không khí qua máy chủ web sử dụng internet và sẽ kích hoạt cảnh báo khi chất lượng không khí giảm quá mức nhất định, nghĩa là khi có đủ lượng các khí độc hại có trong không khí như CO2, khói, rượu, benzen và NH3. Nó sẽ hiển thị chất lượng không khí bằng PPM trên màn hình LCD và cũng như trên trang web để chúng ta có thể theo dõi rất dễ dàng.
Trước đây chúng tôi đã chế tạo máy dò LPG sử dụng cảm biến MQ6 và máy dò khói sử dụng cảm biến MQ2 nhưng lần này chúng tôi đã sử dụng cảm biến MQ135 làm cảm biến chất lượng không khí, đây là lựa chọn tốt nhất để theo dõi chất lượng không khí vì nó có thể phát hiện hầu hết các khí độc hại và có thể đo lượng của chúng một cách chính xác. Trong dự án IOT này, bạn có thể theo dõi mức độ ô nhiễm từ bất kỳ đâu bằng máy tính hoặc điện thoại di động của mình. Chúng tôi có thể cài đặt hệ thống này ở bất cứ đâu và cũng có thể kích hoạt một số thiết bị khi ô nhiễm vượt quá mức nào đó, chẳng hạn như chúng tôi có thể bật quạt hút hoặc có thể gửi SMS / mail cảnh báo cho người dùng.
Các thành phần bắt buộc:
- Cảm biến khí MQ135
- Arduino Uno
- Mô-đun Wi-Fi ESP8266
- LCD 16X2
- Breadboard
- Chiết áp 10K
- Điện trở 1K ohm
- Điện trở 220 ohm
- Buzzer
Bạn có thể mua tất cả các thành phần trên từ đây.
Sơ đồ mạch và giải thích:
Trước hết, chúng tôi sẽ kết nối ESP8266 với Arduino. ESP8266 chạy trên 3.3V và nếu bạn cấp nguồn 5V từ Arduino thì nó sẽ không hoạt động bình thường và có thể bị hỏng. Kết nối VCC và CH_PD với chân 3,3V của Arduino. Chân RX của ESP8266 hoạt động trên 3.3V và nó sẽ không giao tiếp với Arduino khi chúng ta kết nối trực tiếp với Arduino. Vì vậy, chúng ta sẽ phải tạo một bộ chia điện áp cho nó để chuyển đổi 5V thành 3.3V. Điều này có thể được thực hiện bằng cách kết nối ba điện trở trong chuỗi như chúng tôi đã làm trong mạch. Kết nối chân TX của ESP8266 với chân 10 của Arduino và chân RX của esp8266 với chân 9 của Arduino thông qua các điện trở.
Mô-đun Wi-Fi ESP8266 cung cấp cho các dự án của bạn quyền truy cập vào Wi-Fi hoặc internet. Nó là một thiết bị rất rẻ và làm cho các dự án của bạn rất mạnh mẽ. Nó có thể giao tiếp với bất kỳ bộ vi điều khiển nào và nó là thiết bị hàng đầu nhất trong nền tảng IOT. Tìm hiểu thêm về cách sử dụng ESP8266 với Arduino tại đây.
Sau đó, chúng tôi sẽ kết nối cảm biến MQ135 với Arduino. Kết nối VCC và chân nối đất của cảm biến với 5V và chân nối đất của Arduino và chân Analog của cảm biến với A0 của Arduino.
Kết nối bộ rung vào chân 8 của Arduino, chân cắm này sẽ bắt đầu phát ra tiếng bíp khi điều kiện trở thành sự thật.
Cuối cùng, chúng tôi sẽ kết nối LCD với Arduino. Các kết nối của màn hình LCD như sau
- Kết nối chân 1 (VEE) với đất.
- Kết nối chân 2 (VDD hoặc VCC) với 5V.
- Nối chân 3 (V0) vào chân giữa của chiết áp 10K và nối hai đầu còn lại của chiết áp với VCC và GND. Chiết áp được sử dụng để kiểm soát độ tương phản của màn hình LCD. Chiết áp của các giá trị khác 10K cũng sẽ hoạt động.
- Kết nối chân 4 (RS) với chân 12 của Arduino.
- Kết nối chân 5 (Đọc / Ghi) với mặt đất của Arduino. Chốt này không thường xuyên được sử dụng nên chúng tôi sẽ kết nối nó với đất.
- Kết nối chân 6 (E) với chân 11 của Arduino. Chân RS và E là các chân điều khiển được sử dụng để gửi dữ liệu và ký tự.
- Bốn chân sau là chân dữ liệu được sử dụng để giao tiếp với Arduino.
Kết nối chân 11 (D4) với chân 5 của Arduino.
Kết nối chân 12 (D5) với chân 4 của Arduino.
Kết nối chân 13 (D6) với chân 3 của Arduino.
Kết nối chân 14 (D7) với chân 2 của Arduino.
- Kết nối chân 15 với VCC thông qua điện trở 220 ohm. Điện trở sẽ được sử dụng để thiết lập độ sáng đèn nền. Giá trị lớn hơn sẽ làm cho ánh sáng phía sau tối hơn nhiều.
- Kết nối chân 16 với đất.
Giải thích làm việc:
Cảm biến MQ135 có thể cảm nhận NH3, NOx, cồn, Benzen, khói, CO2 và một số khí khác, vì vậy nó là cảm biến khí hoàn hảo cho Dự án Giám sát Chất lượng Không khí của chúng tôi. Khi chúng ta kết nối nó với Arduino thì nó sẽ cảm nhận được các loại khí và chúng ta sẽ nhận được Mức độ ô nhiễm tính bằng PPM (phần triệu). Cảm biến khí MQ135 cho đầu ra ở dạng mức điện áp và chúng ta cần chuyển đổi nó thành PPM. Vì vậy, để chuyển đổi đầu ra trong PPM, ở đây chúng tôi đã sử dụng thư viện cho cảm biến MQ135, nó được giải thích chi tiết trong phần “Giải thích mã” bên dưới.
Cảm biến đã cho chúng tôi giá trị 90 khi không có khí gần nó và mức chất lượng không khí an toàn là 350 PPM và nó không được vượt quá 1000 PPM. Khi vượt quá giới hạn 1000 PPM, nó bắt đầu gây ra Nhức đầu, buồn ngủ và không khí tù đọng, hôi thối, ngột ngạt và nếu vượt quá 2000 PPM thì có thể gây tăng nhịp tim và nhiều bệnh khác.
Khi giá trị nhỏ hơn 1000 PPM, thì màn hình LCD và trang web sẽ hiển thị “Không khí trong lành”. Bất cứ khi nào giá trị tăng 1000 PPM, thì bộ rung sẽ bắt đầu phát ra tiếng bíp và màn hình LCD và trang web sẽ hiển thị “Không khí kém, đang mở Windows”. Nếu nó tăng lên 2000 thì còi sẽ tiếp tục kêu bíp và màn hình LCD và trang web sẽ hiển thị “Nguy hiểm! Di chuyển đến không khí trong lành ”.
Giải thích mã:
Trước khi bắt đầu viết mã cho dự án này, trước tiên chúng ta cần Hiệu chỉnh cảm biến Khí MQ135. Có rất nhiều phép tính liên quan đến việc chuyển đổi đầu ra của cảm biến thành giá trị PPM, chúng tôi đã thực hiện phép tính này trước đây trong dự án Máy dò khói trước đây của chúng tôi. Nhưng ở đây chúng tôi đang sử dụng Thư viện cho MQ135, bạn có thể tải xuống và cài đặt thư viện MQ135 này từ đây:
Sử dụng thư viện này, bạn có thể nhận trực tiếp các giá trị PPM, chỉ bằng cách sử dụng hai dòng dưới đây:
MQ135 gasSensor = MQ135 (A0); float air_quality = gasSensor.getPPM ();
Nhưng trước đó, chúng ta cần hiệu chỉnh cảm biến MQ135, để hiệu chỉnh cảm biến, hãy tải lên mã cho sẵn bên dưới và để nó chạy trong 12 đến 24 giờ và sau đó nhận giá trị RZERO .
#include "MQ135.h" void setup () {Serial.begin (9600); } void loop () {MQ135 gasSensor = MQ135 (A0); // Gắn cảm biến vào chân A0 float rzero = gasSensor.getRZero (); Serial.println (rzero); chậm trễ (1000); }
Sau khi nhận được giá trị RZERO . Đặt giá trị RZERO vào tệp thư viện bạn đã tải xuống "MQ135.h": #define RZERO 494.63
Bây giờ chúng ta có thể bắt đầu mã thực tế cho dự án giám sát chất lượng không khí của mình.
Trong đoạn mã, trước hết chúng ta đã xác định các thư viện và các biến cho cảm biến Gas và màn hình LCD. Bằng cách sử dụng Thư viện nối tiếp phần mềm, chúng tôi có thể tạo bất kỳ chân kỹ thuật số nào làm chân TX và RX. Trong mã này, chúng tôi đã tạo Pin 9 làm chân RX và chân 10 làm chân TX cho ESP8266. Sau đó, chúng tôi đã bao gồm thư viện cho màn hình LCD và đã xác định các chân cho cùng. Chúng tôi cũng đã xác định thêm hai biến: một cho chân analog của cảm biến và một biến khác để lưu trữ giá trị air_quality .
#include
Sau đó, chúng tôi sẽ khai báo chân 8 là chân đầu ra mà chúng tôi đã kết nối bộ rung. Lệnh l cd.begin (16,2) sẽ khởi động màn hình LCD để nhận dữ liệu và sau đó chúng ta sẽ đặt con trỏ ở dòng đầu tiên và sẽ in 'chỉ số mạch' . Sau đó, chúng tôi sẽ đặt con trỏ trên dòng thứ hai và sẽ in 'Làm ấm cảm biến' .
pinMode (8, OUTPUT); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("chỉ số mạch"); lcd.setCursor (0,1); lcd.print ("Làm ấm cảm biến"); chậm trễ (1000);
Sau đó, chúng tôi sẽ đặt tốc độ truyền cho giao tiếp nối tiếp. Các ESP khác nhau có tốc độ truyền khác nhau, vì vậy hãy viết nó theo tốc độ truyền của ESP của bạn. Sau đó, chúng tôi sẽ gửi các lệnh để thiết lập ESP để giao tiếp với Arduino và hiển thị địa chỉ IP trên màn hình nối tiếp.
Serial.begin (115200); esp8266.begin (115200); sendData ("AT + RST \ r \ n", 2000, GỠ LỖI); sendData ("AT + CWMODE = 2 \ r \ n", 1000, DEBUG); sendData ("AT + CIFSR \ r \ n", 1000, GỠ LỖI); sendData ("AT + CIPMUair_quality = 1 \ r \ n", 1000, DEBUG); sendData ("AT + CIPSERVER = 1,80 \ r \ n", 1000, DEBUG); pinMode (sensorPin, INPUT); lcd.clear ();
Để in đầu ra trên trang web trong trình duyệt web, chúng ta sẽ phải sử dụng lập trình HTML. Vì vậy, chúng tôi đã tạo một trang web có tên chuỗi và lưu trữ kết quả đầu ra trong đó. Chúng tôi đang trừ 48 khỏi đầu ra vì hàm read () trả về giá trị thập phân ASCII và số thập phân đầu tiên là 0 bắt đầu từ 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {delay (1000); int connectId = esp8266.read () - 48; Chuỗi trang web = "
Hệ thống giám sát ô nhiễm không khí IOT
"; trang web + =""; webpage + =" Chất lượng không khí là "; trang web + = air_quality; trang web + =" PPM "; trang web + ="
";
Đoạn mã sau sẽ gọi một hàm có tên sendData và sẽ gửi các chuỗi dữ liệu và tin nhắn đến trang web để hiển thị.
sendData (cipSend, 1000, DEBUG); sendData (trang web, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Đoạn mã sau sẽ in dữ liệu trên màn hình LCD. Chúng tôi đã áp dụng các điều kiện khác nhau để kiểm tra chất lượng không khí và màn hình LCD sẽ in thông báo tùy theo điều kiện và còi cũng sẽ phát ra tiếng bíp nếu ô nhiễm vượt quá 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Chất lượng không khí là"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Không khí trong lành"); digitalWrite (8, THẤP);
Cuối cùng, chức năng bên dưới sẽ gửi và hiển thị dữ liệu trên trang web. Dữ liệu chúng tôi đã lưu trữ trong chuỗi có tên 'trang web' sẽ được lưu trong chuỗi có tên 'lệnh' . Sau đó, ESP sẽ đọc từng ký tự một từ 'lệnh' và sẽ in nó trên trang web.
String sendData (String command, const int timeout, boolean debug) {String response = ""; esp8266.print (lệnh); // gửi ký tự đã đọc tới esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// Máy esp có dữ liệu nên hiển thị đầu ra của nó ra cửa sổ nối tiếp char c = esp8266.read (); // đọc ký tự tiếp theo. phản ứng + = c; }} if (gỡ lỗi) {Serial.print (phản hồi); } trả về phản hồi; }
Kiểm tra và Đầu ra của Dự án:
Trước khi tải mã lên, hãy đảm bảo rằng bạn đã kết nối với Wi-Fi của thiết bị ESP8266 của mình. Sau khi tải lên, mở màn hình nối tiếp và nó sẽ hiển thị địa chỉ IP như hình dưới đây.
Gõ địa chỉ IP này vào trình duyệt của bạn, nó sẽ hiển thị cho bạn kết quả như hình bên dưới. Bạn sẽ phải làm mới trang một lần nữa nếu bạn muốn xem Giá trị chất lượng không khí hiện tại trong PPM.
Chúng tôi đã thiết lập một máy chủ cục bộ để chứng minh nó hoạt động, bạn có thể xem Video bên dưới. Tuy nhiên, để theo dõi chất lượng không khí từ mọi nơi trên thế giới, bạn cần chuyển tiếp cổng 80 (được sử dụng cho HTTP hoặc internet) đến địa chỉ IP cục bộ hoặc riêng (192.168 *) của thiết bị. Sau khi chuyển tiếp cổng, tất cả các kết nối đến sẽ được chuyển tiếp đến địa chỉ cục bộ này và bạn có thể mở trang web hiển thị ở trên bằng cách chỉ cần nhập địa chỉ IP công cộng của internet từ bất kỳ đâu. Bạn có thể chuyển tiếp cổng bằng cách đăng nhập vào bộ định tuyến của mình (192.168.1.1) và tìm tùy chọn để thiết lập chuyển tiếp cổng.