Arduino - Đọ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 |
Bảng đấu nối chân của module LED RGB và board Arduino Uno
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 |
Bảng đấu nối chân của module cảm biến ánh sáng và board Arduino Uno
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.
Oldest comments (0)