Bài viết này ta sẽ tìm hiểu cách đọc một Điện trở quang (một loại biến trở nhạy sáng) bằng cách sử dụng đầu vào analog của Arduino. Linh kiện này còn được gọi là LDR (light-dependent resistor – điện trở phụ thuộc vào ánh sáng).
Các bài hướng dẫn trước đã chỉ ta cách Điều khiển đèn LED với đầu ra analog của Arduino và đọc biến trở (một loại điện trở khác). Chúng ta cũng sẽ thực hành lại các kỹ năng đó trong bài viết này. Hãy nhớ rằng đầu vào analog của Arduino (chân được đánh dấu từ A0-A6) có thể phát hiện tín hiệu điện thay đổi dần dần, và chuyển tín hiệu đó thành một giá trị từ 0 đến 1023.
Mạch mẫu Cảm biến ánh sáng (điện trở quang) với Arduino trên Tinkercad
Ở mạch mẫu trên, nhấp vào “ Start simulation” và nhấp vào điện trở quang (hình bầu dục màu nâu), sau đó kéo thanh trượt độ sáng để điều chỉnh lượng ánh sáng đầu vào.
Để thực hành xây dựng mạch thật giống với mẫu trên, bạn sẽ cần sử dụng:
- 1 Arduino Uno
- 1 cáp USB
- 1 breadboard và dây
- 1 đèn LED
- 1 điện trở 220 ohm
- 1 điện trở 4,7k ohm
- 1 điện trở quang
Tham khảo thêm: Sản phẩm Quang Trở GL5559
Bước 1: Xây dựng mạch
Hãy nhìn vào mạch breadboard trong hình 1 (hoặc mạch gọn hơn ở hình 2). Trong bước này, bạn sẽ xây dựng một bản mạch này của riêng mình (theo như mạch mẫu) trong bảng làm việc (workplane).
Trong bảng làm việc của Tinkercad Circuits, hãy xác định các linh kiện: điện trở quang, đèn LED, điện trở và dây nối với Arduino
Kéo Arduino Uno và breadboard từ bảng components vào bảng làm việc.
Nối đường ray nguồn (+) và đường ray đất (-) của bảng mạch đến Arduino 5V và đất (GND), bằng cách nhấp chuột để tạo dây.
Mở rộng đường ray nguồn và đường ray đất với cạnh đối diện của bảng mạch. Cắm đèn LED vào hai hàng breadboard khác nhau để cực âm (chân ngắn hơn) kết nối với một chân của điện trở (giá trị bất kỳ từ 100-1K ohms đều được). Điện trở có thể lắp theo một trong hai hướng vì điện trở không phân cực (khác với đèn LED, phải được nối theo một hướng nhất định để có thể hoạt động).
Nối chân điện trở còn lại với đất.
Nối dây cực dương của đèn LED (chân dài hơn) vào chân 9 của Arduino.
Kéo một điện trở quang từ bảng components vào bảng mạch, để các chân của nó cắm vào hai hàng khác nhau.
Nhấp chuột để tạo dây nối một chân điện trở quang với nguồn điện.
Kết nối chân còn lại (*) với chân analog A0 của Arduino.
Kéo một điện trở từ bảng components để nối chân điện trở quang (*) và điều chỉnh giá trị thành 4.7k ohms.
Bước 2: Lập trình với các khối code
Hãy sử dụng trình chỉnh sửa khối code để xem trạng thái của điện trở quang, sau đó đặt đèn LED ở độ sáng tương đối dựa trên lượng ánh sáng mà cảm biến nhìn thấy. Nếu cần, bạn có thể xem lại nội dung bài Hướng dẫn làm đèn LED thay đổi độ sáng.
Nhấp vào nút “Code” để mở trình chỉnh sửa. Các khối màu xám là chú thích và chúng sẽ không được thực thi khi chương trình chạy đâu nhé.
Nhấp vào danh mục Variables trong trình chỉnh sửa code.
Để lưu trữ giá trị điện trở của Điện trở quang, hãy tạo một biến có tên “sensorValue“.
Kéo ra một khối “set“. Chúng ta sẽ lưu trữ trạng thái của Điện trở quang trong biến sensorValue.
Nhấp vào danh mục Input, kéo ra khối “analog read pin” và đặt nó vào trong khối “set“, sau từ “to“
Vì biến trở được kết nối với Arduino ở chân A0, hãy thay đổi từ menu thành A0.
Nhấp vào danh mục Output và kéo ra khối “print to serial monitor“.
Chuyển đến đến danh mục Variables và kéo biến sensorValue vào khối “print to serial monitor“, đồng thời chỉnh từ Menu để thành “with newline”. Tại đây, bạn có thể mô phỏng thử (Start Simulation) và mở màn hình serial monitor để xem các số có hiển thị khi điều chỉnh cảm biến không nhé. Giá trị Analog input sẽ nằm trong khoảng từ 0-1023.
Hiện tại, ta muốn chuyển đến đèn LED một tín hiệu giá trị từ 0 (tắt hẳn) đến 255 (độ sáng cao nhất). Ta sử dụng khối “map” để thực hiện một số phép nhân chéo. Di chuyển chuột đến danh mục Math và kéo ra khối “map“.
Ở vị trí ô trống đầu tiên, hãy kéo biến sensorValue vào, sau đó đặt phạm vi từ 0 đến 255.
Quay lại danh mục Output, kéo ra khối “set pin” analog (mặc định sẽ có nội dung là “set pin 3 to 0.“) và điều chỉnh thành chân số 9.
Kéo khối map bạn đã thực hiện trước đó vào ô “to” của khối “set pin” để ghi giá trị đã điều chỉnh vào chân đèn LED.
Nhấp vào danh mục Control, kéo ra một khối wait và điều chỉnh để nó delay chương trình trong khoảng 0,1 giây.
Bước 3: Giải thích code Arduino của điện trở quang
Khi trình chỉnh sửa code mở, bạn có thể nhấp vào menu bên trái và chọn “Block + Text” để hiển thị code Arduino được tạo bởi các khối code này.
int sensorValue = 0;
Trước hàm setup(), ta tạo một biến để lưu trữ giá trị hiện tại đọc được từ biến trở. Nó được khai báo là int vì là một số nguyên.
void setup()
{
pinMode(A0, INPUT);
pinMode(9, OUTPUT);
Serial.begin(9600);
}
Bên trong setup, các chân được cấu hình bằng pinMode(). Chân A0 được cấu hình như một đầu vào (INPUT), để ta có thể xem trạng thái điện của biến trở. Chân 9 được cấu hình làm đầu ra (OUTPUT) để điều khiển đèn LED.
Để có thể gửi thông điệp giúp theo dõi, Arduino có một kênh giao tiếp là hàm Serial.begin(), với đối số là tốc độ giao tiếp (trong trường hợp này là 9600 bit mỗi giây).
void loop()
{
// read the value from the sensor
sensorValue = analogRead(A0);
// print the sensor reading so you know its range
Serial.println(sensorValue);
Các nội dung ghi sau hai dấu gạch chéo // đều là phần nhận xét, giúp ghi chú thông tin để người lập trình hiểu chương trình. Trong vòng lặp chính loop(), hàm analogRead(); sẽ kiểm tra trạng thái của chân A0 (là một số nguyên từ 0-1023) và lưu trữ giá trị đó trong biến sensorValue.
// map the sensor reading to a range for the LED analogWrite(9, map(sensorValue, 0, 1023, 0, 255)); delay(100); // Wait for 100 millisecond(s) }
Hãy nhớ hàm analogWrite() lấy hai đối số: số pin (trong trường hợp này là 9) và giá trị cần ghi (phải nằm trong khoảng từ 0 đến 255). Hàm map() bên trong nhận năm đối số: số để đánh giá (biến sensorValue luôn thay đổi), giá trị tối thiểu dự kiến, tối đa dự kiến, giá trị tối thiểu mong muốn và tối đa mong muốn. Vì vậy, hàm map() trong trường hợp này có chức năng là đánh giá giá trị cảm biến đưa vào, và thực hiện một số phép nhân chéo để chia tỷ lệ đầu ra giảm từ 0-1023 xuống còn 0-255. Kết quả được trả về đối số thứ hai của analogWrite(); và từ đó thiết lập độ sáng của đèn LED (được kết nối với chân 9).
Bước 4: Thực hành xây dựng mạch Arduino
Để lập trình Arduino Uno thực tế, cần cài đặt phần mềm Arduino Uno và mở nó lên. Các tế bào quang điện khác nhau có các giá trị khác nhau, vì vậy nếu mạch không hoạt động, có thể bạn sẽ cần thay đổi một điện trở khác.
Ta nối mạch Arduino Uno bằng cách cắm các linh kiện và dây sao cho khớp với mạch mẫu trong Tinkercad circuits. Sao chép code từ cửa sổ code Tinkercad circuits và dán vào một bản thảo trống trong phần mềm (hoặc nhấp tải xuống và mở tệp bằng phần mềm). Ngoài ra, bạn cũng có thể tìm thấy ví dụ này ở mục Tệp -> Ví dụ -> 03.Analog -> AnalogIn OutSerial.
Cắm cáp USB, chọn bo mạch và cổng trong Menu Tools của phần mềm.
Tải code lên, sau đó dùng tay che cảm biến hoặc chiếu sáng vào cảm biến).
Mở serial monitor để quan sát các giá trị được ghi nhận. Ngoài thực tế, có khả năng các giá trị này sẽ không đạt được đến mức 0 hoặc 1023, do tùy thuộc vào điều kiện ánh sáng. Hãy điều chỉnh phạm vi 0-1023 thành mức tối thiểu quan sát được và mức tối đa quan sát được, để có được phạm vi độ sáng tối đa trên đèn LED nhé.
Nguồn: instructables.com
Lượt dịch: Fuvitech.vn