Bài 9. Cảm biến ánh sáng

Bài 9. Cảm biến ánh sáng

Trong bài này, bạn sẽ học cách đo cường độ ánh sáng sử dụng ngõ vào Analog. Bạn sẽ dựa trên bài 8 nhưng sử dụng mức độ ánh sáng để điều khiển số LED sáng. Quang trở được sử dụng ở phía cuối của breadboard, nơi đặt biến trở trong bài 8.

Linh kiện cần thiết

Để thực hành bài tập này, chúng ta cần sử dụng một số linh kiện như sau

STTTên linh kiệnSLHình ảnh
1Đèn LED 5mm8

2Điện trở 270
Ω
8

3Điện trở 1
1

474HC5951
5Quang trở (hay tế bào quang điện)1
6Breadboard1
7Arduino UNO1
8Dây nối dạng cắm

Sơ đồ cắm chân breadboard

Sơ đồ cắm chân cho bài này tương tự như bài 8, ngoài trừ việc biến trở được thay thế bởi quang trở và 1 điện trở 1 kΩ.

Đây là sơ đồ của bài 8, đoạn gần biến trở:

Chúng ta chỉ đơn giản là gỡ bỏ biến trở và thay thế bằng một quang trở và điện trở như bên dưới:

Quang trở

Quang trở còn được gọi là tế bào quang điện hay LDR ( Light-dependent resistor). Như cái tên của nó vậy, linh kiện này đóng vai trò như một điện trở, tuy nhiên giá trị của nó lại phụ thuộc vào mức độ ánh sáng chiếu vào nó.

Thông thường nó có điện trở khoảng 50 kΩ khi đặt trong tối và 500 Ω khi đặt ngoài ánh sáng mạnh. Để chuyển đổi giá trị thay đổi của điện trở sang một đại lượng mà chúng ta có thể đo được tại ngõ vào Analog của Arduino, giá trị này phải được chuyển thành điện áp.

Cách đơn giản nhất là kết hợp nó với một điện trở cố định

Điện trở cùng với quang trở đóng vai trò như một biến trở. Khi ánh sáng mạnh, điện trở của quang trở thấp hơn so với giá trị của điện trở cố định, và khi đó giống như biến trở đang ở mức cực đại.

Khi quang trở gặp điều kiện ánh sáng thấp, điện trở tăng lên cao hơn so với điện trở cố định và khi đó giống như biến trở được chỉnh sang GND.

Nạp sketch được cho bên dưới và thử che quang trở bằng ngón tay, sau đó đưa nó gần nguồn sáng.

Code Arduino

Sketch trong bài 8 vẫn sẽ làm việc, nhưng bạn sẽ nhận thấy rằng sẽ không tìm được mức độ sáng nào có thể làm phát sáng tất cả LED. Đó là vì điện trở cố định, do đó chúng ta cần phải bù vì một lẽ thực tế rằng dù điện trở của quang trở có thấp như nào thì vẫn có điện trở cố định 1 kΩ bù vào.

Sketch được điều chỉnh từ bài 8 như bên dưới:

/*
Bài 9 – Cảm biến ánh sáng
*/

int lightPin = 0;
int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
int leds = 0;

void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}

void loop()
{
int reading = analogRead(lightPin);
int numLEDSLit = reading / 57; //1023 / 9 / 2
if (numLEDSLit > 8) numLEDSLit = 8;
leds = 0; // no LEDs lit to start
for (int i = 0; i < numLEDSLit; i++)
{
leds = leds + (1 << i); // sets the i'th bit
}
updateShiftRegister();
}

void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}

Điều đầu tiên cần chú ý là chúng ta đã thay đổi tên của chân analog từ thành ‘lightPin’ chứ không còn là ‘potPin’ bởi chúng ta không còn kết nối với biến trở.

Yếu tố thay đổi duy nhất trong sketch là dòng tính toán số đèn LED phải bật sáng:

int numLEDSLit = reading / 57; // all LEDs lit at 1k

Lần này chúng ta chia giá trị thô đọc được cho 57 chứ không phải 114 như bài 8. Nói cách khác chúng ta chia nó cho giá trị chỉ bằng một nửa đối với biến trở, để chia nhỏ nó thành chín vùng, từ không có LED nào sáng, đến tất cả 8 LED sáng. Hệ số thêm vào là kể đến giá trị điện trở cố định 1 kΩ . Điều này có nghĩa là khi quang trở có giá trị điện trở là 1 kΩ (bằng với điện trở cố định) thì giá trị thô đọc được sẽ là 1023 / 2 = 511. Khi đó tất cả các LED đều sáng (numLEDSLit sẽ bằng 9).

Chúng ta có thể làm gì thêm?

Để thay đổi độ nhạy của thang đo sáng bạn chỉ cần phải thay đổi giá trị của hệ số (57) mà bạn sử dụng để tính số đèn LED sáng.

Tăng giá trị này sẽ làm độ nhạy giảm. Một việc khác có thể thử là thay đổi sketch để trong khi đọc dưới mức nào đó, các đèn LED sáng, nhưng chúng sẽ tự động tắt khi vượt ngưỡng. Khi đó đặt ngón tay gần quang trở để cắt bớt nguồn sáng sẽ bật các LED.

Chia sẻ bài này

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 *