Arduino – Đọc dữ liệu Analog

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

module light sensor
Hình 1. Hình ảnh của module cảm biến cường độ ánh sáng

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.

light sensor schema
Hình 2. Hình ảnh sơ đồ nguyên lí của module cảm biến cường độ ánh sá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

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

led rgb light sensor
Hình 3. Hình ảnh kết nối module LED RGB và cảm biến ánh sáng với 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.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *