Sử dụng cảm biến bụi Sharp GP2Y1014AU0F đo chất lượng không khí : Ô nhiễm không khí là một vấn đề lớn ở nhiều thành phố và chỉ số chất lượng không khí đang trở nên tồi tệ hơn mỗi ngày. Theo báo cáo của Tổ chức Y tế Thế giới, nhiều người bị hư sớm do tác động của các hạt độc hại trong không khí hơn là do tai nạn xe hơi. Theo Cơ quan Bảo vệ Môi trường (EPA), không khí trong nhà có thể độc hại gấp 2 đến 5 lần không khí ngoài trời. Vì vậy ở đây mình xây dựng Project giám sát chất lượng không khí bằng cách đo mật độ hạt bụi trong không khí.
Vì vậy, để tiếp tục các Project trước đây của mình như máy dò LPG , máy dò khói và máy theo dõi chất lượng không khí , ở đây mình sẽ giao tiếp Cảm biến Sharp GP2Y1014AU0F với Arduino Nano để đo Mật độ bụi trong không khí . Ngoài cảm biến Bụi và Arduino Nano, màn hình OLED cũng được sử dụng để hiển thị các giá trị đo được. Cảm biến Bụi GP2Y1014AU0F của Sharp rất hiệu quả trong việc phát hiện các hạt rất mịn như khói thuốc lá. Nó được thiết kế để sử dụng trong Máy lọc không khí và Máy điều hòa không khí.
Linh kiện cần có
- Arduino Nano
- Cảm biến GP2Y1014AU0F sắc nét
- Mô-đun màn hình OLED 0,96 ‘SPI
- Dây nhảy
- Tụ điện 220 µf
- Điện trở 150 Ω
Cảm biến GP2Y1014AU0F
GP2Y1014AU0F của Sharp là cảm biến chất lượng không khí / bụi quang học đầu ra tương tự sáu chân cực nhỏ được thiết kế để cảm nhận các hạt bụi trong không khí. Nó hoạt động dựa trên nguyên lý tán xạ tia laser . Bên trong mô-đun cảm biến, một điốt phát tia hồng ngoại và một bộ cảm biến quang được bố trí theo đường chéo gần lỗ hút gió như thể hiện trong hình ảnh dưới đây:
Khi không khí có chứa các hạt bụi đi vào buồng cảm biến, các hạt bụi sẽ phân tán ánh sáng LED hồng ngoại về phía máy dò ảnh. Cường độ của ánh sáng tán xạ phụ thuộc vào các hạt bụi. Càng nhiều hạt bụi trong không khí, cường độ ánh sáng càng lớn. Điện áp đầu ra tại chân V OUT của cảm biến thay đổi theo cường độ ánh sáng tán xạ.
Sơ đồ chân cảm biến GP2Y1014AU0F:
Như đã đề cập trước đó, cảm biến GP2Y1014AU0F đi kèm với đầu nối 6 chân . Hình và bảng dưới đây cho thấy các chỉ định pin cho GP2Y1014AU0F:
S.NO | Tên PIN | Mô Tả Pin |
1 | V-LED | LED Vcc Pin. Kết nối với 5V thông qua Điện trở 150Ω |
2 | LED-GND | Chân nối đất LED. Kết nối với GND |
3 | Đèn LED | Được sử dụng để bật / tắt đèn LED. Kết nối với các chân kỹ thuật số nào của Arduino |
4 | S-GND | Chân nối đất của cảm biến. Kết nối với GND của Arduino |
5 | V RA | Chân đầu ra tương tự của cảm biến. Kết nối với các Pin tương tự nào |
6 | VCC | Pin cung cấp tích cực. Kết nối với 5V của Arduino |
Thông số kỹ thuật cảm biến GP2Y1014AU0F:
- Mức tiêu thụ hiện tại thấp: tối đa 20mA
- Điện áp hoạt động điển hình: 4,5V đến 5,5V
- Kích thước bụi tối thiểu có thể phát hiện: 0,5µm
- Phạm vi cảm biến mật độ bụi: Lên đến 580 ug / m 3
- Thời gian cảm biến: Ít hơn 1 giây
- Kích thước: 1,81 x 1,18 x 0,69 ” (46,0 x 30,0 x 17,6mm)
Mô-đun màn hình OLED
OLED (Điốt phát sáng hữu cơ) là công nghệ tự phát sáng, được cấu tạo bằng cách đặt một loạt các màng mỏng hữu cơ giữa hai dây dẫn. Khi có dòng điện chạy qua các tấm phim này sẽ tạo ra ánh sáng sáng. OLED đang sử dụng công nghệ tương tự như TV, nhưng có ít pixel hơn so với hầu hết các TV của mình.
Đối với Project này, mình đang sử dụng màn hình OLED đơn sắc 7 chân SSD1306 0,96 ”. Nó có thể hoạt động trên ba Giao thức truyền thông khác nhau: chế độ SPI 3 Wire, SPI bốn dây và chế độ I2C. Các chân và chức năng của nó được giải thích trong bảng dưới đây:
mình đã trình bày chi tiết về OLED và các loại của nó trong bài viết trước.
Tên PIN | TÊN KHÁC | Mô Tả |
Gnd | Đất | Chân nối đất của mô-đun |
Vdd | Vcc, 5V | Pin nguồn (3-5V có thể chịu được) |
SCK | D0, SCL, CLK | Hoạt động như kim đồng hồ. Được sử dụng cho cả I2C và SPI |
SDA | D1, MOSI | Chân dữ liệu của mô-đun. Được sử dụng cho cả IIC và SPI |
RES | RST, ĐẶT LẠI | Đặt lại mô-đun (hữu ích trong SPI) |
DC | A0 | Pin Lệnh dữ liệu. Được sử dụng cho giao thức SPI |
CS | Chọn chip | Hữu ích khi nhiều hơn một mô-đun được sử dụng theo giao thức SPI |
Thông số kỹ thuật OLED:
- IC trình điều khiển OLED: SSD1306
- Resolution: 128 x 64
- Góc nhìn:> 160 °
- Điện áp đầu vào: 3.3V ~ 6V
- Màu pixel: Xanh lam
- Nhiệt độ làm việc: -30 ° C ~ 70 ° C
Tìm hiểu thêm về OLED và giao diện của nó với các bộ vi điều khiển khác nhau bằng cách nhấp vào liên kết.
Sơ đồ Mạch sử dụng cảm biến bụi Sharp GP2Y1014AU0F đo chất lượng không khí
Sơ đồ mạch cho cảm biến Sharp GP2Y1014AU0F giao tiếp với Arduino được đưa ra dưới đây:
Mạch rất đơn giản vì mình chỉ kết nối Cảm biến GP2Y10 và mô-đun Màn hình OLED với Arduino Nano. Cảm biến GP2Y10 và mô-đun Màn hình OLED đều được cấp nguồn + 5V và GND. Chân V0 được kết nối với chân A5 của Arduino Nano. Chân LED của cảm biến được kết nối với chân kỹ thuật số 12 của Arduino. Vì mô-đun Màn hình OLED sử dụng giao tiếp SPI , mình đã thiết lập giao tiếp SPI giữa mô-đun OLED và Arduino Nano. Các kết nối được hiển thị trong bảng dưới đây:
S.No | Pin mô-đun OLED | Pin Arduino |
1 | GND | Đất |
2 | VCC | 5V |
3 | D0 | 10 |
4 | D1 | 9 |
5 | RES | 13 |
6 | DC | 11 |
7 | CS | 12 |
S.No | Chân cảm biến | Pin Arduino |
1 | Vcc | 5V |
2 | V O | A5 |
3 | S-GND | GND |
4 | Đèn LED | 7 |
5 | LED-GND | GND |
6 | V-LED | Điện trở 5V thông qua 150Ω |
Xây dựng mạch trên bảng Perf
Sau khi hàn tất cả các linh kiện trên bo mạch hoàn thiện, nó sẽ trông giống như bên dưới. Nhưng nó cũng có thể được xây dựng trên breadboard. mình đã hàn cảm biến GP2Y1014 trên cùng một bo mạch mà mình đã sử dụng để giao tiếp với cảm biến SDS011. Trong khi hàn, hãy đảm bảo rằng các dây hàn của bạn phải ở đủ khoảng cách với nhau.
Giải thích Code cho mạch phân tích chất lượng không khí Sử dụng cảm biến bụi Sharp GP2Y1014AU0F
Mã hoàn chỉnh cho Project này được đưa ra ở cuối tài liệu. Ở đây mình đang giải thích một số phần quan trọng của mã.
Mã này sử dụng Adafruit_GFX , và Adafruit_SSD1306 thư viện. Các thư viện này có thể được tải xuống từ Trình quản lý Thư viện trong Arduino IDE và cài đặt nó từ đó. Để làm điều đó, hãy mở Arduino IDE và đi tới Sketch <Bao gồm Thư viện <Quản lý Thư viện . Bây giờ hãy tìm kiếm Adafruit GFX và cài đặt thư viện Adafruit GFX của Adafruit .
Tương tự, cài đặt các thư viện Adafruit SSD1306 của Adafruit .
Sau khi cài đặt các thư viện vào Arduino IDE, hãy bắt đầu mã bằng cách bao gồm các tệp thư viện cần thiết. Cảm biến bụi không yêu cầu các thư viện nào vì mình đang đọc các giá trị điện áp trực tiếp từ chân analog của Arduino.
#include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>
Sau đó, xác định chiều rộng và chiều cao của OLED. Trong Project này, mình đang sử dụng màn hình OLED 128 × 64 SPI. Bạn có thể thay đổi SCREEN_WIDTH , và SCREEN_HEIGHT biến theo hiển thị của bạn.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Sau đó, xác định các chân giao tiếp SPI nơi Màn hình OLED được kết nối.
#define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13
Sau đó, tạo một phiên bản hiển thị Adafruit với chiều rộng và chiều cao được xác định trước đó bằng giao thức truyền thông SPI.
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Sau đó, xác định cảm biến Bụi và các chân dẫn. Chân cảm biến là chân đầu ra của cảm biến Bụi được sử dụng để đọc các giá trị điện áp trong khi chân led được sử dụng để bật / tắt IR Led.
int sensePin = A5; int ledPin = 7;
Bây giờ bên trong hàm setup () , hãy khởi tạo Serial Monitor ở tốc độ truyền 9600 cho mục đích gỡ lỗi. Ngoài ra, Khởi tạo màn hình OLED bằng hàm begin () .
Serial.begin (9600); display.begin (SSD1306_SWITCHCAPVCC);
Bên trong hàm loop () , đọc Giá trị điện áp từ chân 5 tương tự của Arduino Nano. Đầu tiên, bật đèn LED hồng ngoại và sau đó đợi 0,28ms trước khi đọc điện áp đầu ra. Sau đó, đọc các giá trị điện áp từ chân analog. Thao tác này mất khoảng 40 đến 50 micro giây, vì vậy hãy giới thiệu độ trễ 40 micro giây trước khi tắt đèn led cảm biến bụi. Theo thông số kỹ thuật, LED sẽ được phát xung sau 10ms một lần, vì vậy hãy đợi phần còn lại của chu kỳ 10ms = 10000 – 280 – 40 = 9680 micro giây .
digitalWrite (ledPin, LOW); delayMicroseconds (280); outVo = analogRead (sensePin); delayMicroseconds (40); digitalWrite (ledPin, HIGH); delayMicroseconds (9680);
Sau đó, trong các dòng tiếp theo, hãy tính toán Mật độ bụi bằng cách sử dụng điện áp đầu ra và giá trị tín hiệu.
sigVolt = outVo * (5/1024); DustLevel = 0,17 * sigVolt - 0,1;
Sau đó, đặt kích thước văn bản và màu văn bản bằng cách sử dụng setTextSize () và setTextColor () .
display.setTextSize(1); display.setTextColor(WHITE);
Sau đó, trong dòng tiếp theo, xác định vị trí mà văn bản bắt đầu bằng phương thức setCursor (x, y) . Và in Giá trị mật độ bụi trên Màn hình OLED bằng hàm display.println () .
display.println("Dust"); display.println("Density"); display.setTextSize(3); display.println(dustLevel);
Và cuối cùng, hãy gọi phương thức display () để hiển thị văn bản trên Màn hình OLED.
display.display (); display.clearDisplay ();
Kiểm tra Sử dụng cảm biến bụi Sharp GP2Y1014AU0F đo chất lượng không khí với Arduino
Khi phần cứng và mã đã sẵn sàng, đã đến lúc kiểm tra cảm biến. Để thực hiện điều đó, hãy kết nối Arduino với máy tính xách tay, chọn Bo mạch và Cổng và nhấn nút tải lên. Như bạn có thể thấy trong hình ảnh bên dưới, nó sẽ hiển thị Mật độ bụi trên Màn hình OLED.
Đoạn video và mã làm việc hoàn chỉnh được đưa ra bên dưới. Hy vọng bạn thích hướng dẫn và học được điều gì đó hữu ích. Nếu bạn có các câu hỏi nào, hãy để lại chúng trong phần bình luận hoặc sử dụng diễn đàn của mình cho các truy vấn kỹ thuật khác.
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
|
#include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for SSD1306 display connected using software SPI (default case): #define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); int measurePin = A5; int ledPower = 7; float voMeasured = 0; float calcVoltage = 0; float dustDensity = 0; void setup(){ Serial.begin(9600); pinMode(ledPower,OUTPUT); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay(); display.display(); } void loop(){ digitalWrite(ledPower,LOW); delayMicroseconds(280); voMeasured = analogRead(measurePin); delayMicroseconds(40); digitalWrite(ledPower,HIGH); delayMicroseconds(9680); calcVoltage = voMeasured*(5.0/1024); dustDensity = 0.17*calcVoltage-0.1; if ( dustDensity < 0) { dustDensity = 0.00; } Serial.println( "Raw Signal Value (0-1023):" ); Serial.println(voMeasured); Serial.println( "Voltage:" ); Serial.println(calcVoltage); Serial.println( "Dust Density:" ); Serial.println(dustDensity); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(85,22); display.println( "Dust" ); display.setCursor(85,38); display.println( "Density" ); display.setTextSize(3); display.setCursor(0,13); display.println(dustDensity); display.setCursor(6,43); display.setTextSize(2); display.println( "ug/m3" ); display.display(); display.clearDisplay(); delay(1000); } |