Đọc dữ liệu Analog
Ở phần trước chúng ta đã hiểu các khái niệm cơ bản về Analog, phần này chúng ta sẽ bắt tay vào làm 1 ứng dụng thực tế là “đọc cường độ ánh sáng của môi trường” để hiểu rõ hơn về cách hoạt động của nó.
Giới thiệu module cảm biến ánh sáng
Hình ảnh
Nguyên lí hoạt động
Chúng ta cùng tìm hiểu sơ đồ nguyên lí của module cảm biến ánh sáng để hiểu rõ hơn về cách nó hoạt động.
Module cảm biến ánh sáng hoạt dựa vào sự thay đổi của cường độ của ánh sáng môi trường. Nếu trời tối thì cường độ ánh sáng yếu, điện trở của cảm biến ánh sáng trên module tăng lên (cường độ ánh sáng 0 Lux tương ứng với giá trị điện trở khoảng 1MΩ) và ngược lại, nếu cường độ ánh sáng tăng thì điện trở của cảm biến ánh sáng sẽ giảm (cường độ ánh sáng 10 Lux tương ứng với giá trị điện trở trong khoảng 8 – 20KΩ). Điện trở của sensor thay đổi dẫn đến giá trị điện áp tại điểm P1 sẽ thay đổi theo. Điều này kéo theo 2 sự thay đổi :
-
Thay đổi giá trị điện áp tại chân AO (Analog output), bằng cách kết nối các chân analog của vi điều khiển đến điểm này, ta có thể đọc giá trị điện áp analog và điều khiển được các thiết bị dựa theo cường độ ánh sáng.
-
Thay đổi giá trị điện áp tại chân INA+ của IC LM393, IC này là 1 op-amp có chức năng so sánh điện áp giữa 2 chân INA+ và INA-, chân OUTA là kết quả so sánh của 2 chân INA+ và INA-, nó có 2 trạng thái là mức cao (HIGH) và mức thấp (LOW). Biến trở được nối với chân INA- giúp người dùng có thể điều chỉnh điện áp tại chân INA- nhằm cài đặt trạng thái ngõ ra cho chân OUTA.
Trên module có thêm 2 LED, LED PWR để báo trạng nguồn (có nguồn điện cung cấp cho module, LED này sẽ sáng) và LED OUT để báo chân trạng thái của chân OUTA.
Điều khiển LED RGB theo cường độ ánh sáng của môi trường
Yêu cầu
Nếu trời tối thì LED sáng màu đỏ (Red), trời sáng vừa thì LED sáng màu xanh lá (Green), trời sáng mạnh LED sẽ sáng màu xanh dương (Blue).
Chuẩn bị
-
Board Arduino Uno
-
Module cảm biến cường độ ánh sáng
-
Module LED RGB
-
Breadboard
-
Dây kết nối
Đấu nối
Số thứ tự | Chân trên module LED RGB | Chân trên board Arduino Uno |
---|---|---|
1 |
R |
9 |
2 |
G |
10 |
3 |
B |
11 |
4 |
V/G |
5V hoặc GND |
Số thứ tự | Chân trên cảm biến ánh sáng | Chân trên board Arduino Uno |
---|---|---|
1 |
A0 |
A0 |
2 |
VCC |
5V |
3 |
GND |
GND |
Source code
#define pinLedRed 9 // Chân kết nối với pin R của module LED-RGB
#define pinLedGreen 10 // Chân kết nối với pin G của module LED-RGB
#define pinLedBlue 11 // Chân kết nối với pin B của module LED-RGB
#define pinAnaLight A0 // Chân kết nối với A0 của module cảm biến ánh sáng
void setup()
{
// Cài đặt hướng cho các chân
pinMode(pinLedRed, OUTPUT);
pinMode(pinLedGreen, OUTPUT);
pinMode(pinLedBlue, OUTPUT);
// LED RGB OFF
digitalWrite(pinLedRed, LOW);
digitalWrite(pinLedGreen, LOW);
digitalWrite(pinLedBlue, LOW);
pinMode(pinAnaLight, INPUT);
// Khởi tạo serial
Serial.begin(115200);
Serial.println("Initial serial");
}
void loop()
{
unsigned int AnalogValue;
AnalogValue = analogRead(pinAnaLight); // Đọc trạng thái chân A0 của module cảm biến ánh sáng
Serial.println(AnalogValue); // In ra giá trị điện áp Analog
if (AnalogValue < 350) {
digitalWrite(pinLedRed, HIGH);
digitalWrite(pinLedGreen, LOW);
digitalWrite(pinLedBlue, LOW);
Serial.println("The light intensity: HIGH");
} else if (AnalogValue > 350 && AnalogValue < 800) {
digitalWrite(pinLedRed, LOW);
digitalWrite(pinLedGreen, HIGH);
digitalWrite(pinLedBlue, LOW);
Serial.println("The light intensity: MEDIUM");
} else if (AnalogValue > 800) {
digitalWrite(pinLedRed, LOW);
digitalWrite(pinLedGreen, LOW);
digitalWrite(pinLedBlue, HIGH);
Serial.println("The light intensity: LOW");
}
delay(100);
}
Giải thích source code
-
Lệnh
Serial.begin(115200)
nhằm khởi tạo Serial nhằm hiển thị giá trị Analog đọc được ra màn hình Serial của Arduino,Serial.println("Initial serial")
in ra chữ “Initial serial” và xuống dòng. -
Hàm
analogRead(pinAnaLight)
sẽ đọc điện áp từ chân A0 của module cảm biến ánh sáng, để đưa vào bộ chuyển đổi ADC của vi điều khiển Atmega328P. Bộ ADC này là bộ ADC 10 bit, tương ứng với giá trị Analog nhỏ nhất là 0 và lớn nhất là 210 = 1024. -
Các câu lệnh điều kiện
if- else if
ở phía dưới nhằm setup giá trị cường độ ánh sáng để điều khiển LED RGB sáng các màu đỏ, xanh lá, và xanh dương. Cụ thể : -
Nếu giá trị Analog đọc được nhỏ hơn 350 (biểu thị cường độ ánh sánh mạnh), LED RGB sáng màu đỏ.
-
Nếu giá trị Analog đọc được lớn hơn 350 và nhỏ hơn 800 (biểu thị cường độ ánh sáng vừa), LED RGB sáng màu xanh lá.
-
Nếu giá trị Analog đọc được lớn hơn 800 (biểu thị cường độ ánh sánh yếu) LED RGB sáng màu xanh dương.