Trong bài viết này, tôi sẽ hướng dẫn bạn cách lập trình Arduino để điều khiển đèn LED trên board mạch bằng nút nhấn. Tôi cũng sẽ cho bạn thấy một chương trình thay đổi tốc độ nhấp nháy của đèn LED tùy thuộc vào lượng ánh sáng chiếu vào quang trở. Ở cuối bài hướng dẫn này, tôi sẽ chỉ cho bạn cách sử dụng quang trở để thay đổi độ cao của âm thanh ra loa.
Điều khiển đèn LED bằng nút nhấn
Mỗi chân GPIO (General Purpose Input/Output) của Arduino có thể được lập trình để hoạt động như ngõ vào hoặc ngõ ra. Khi là ngõ vào, các chân đọc tín hiệu điện được gửi từ các thiết bị khác, và khi là ngõ ra chúng gửi tín hiệu đến các thiết bị khác.
Trong dự án này, tôi sẽ viết một chương trình xác định một chân là ngõ vào. Sau đó, tôi sẽ kết nối một nút nhấn với nó. Khi nhấn nút, Arduino sẽ gửi tín hiệu đến một chân ngõ ra để bật và tắt đèn LED.
Khá dễ dàng để thực hiện khi bạn xem sơ đồ mạch và chương trình bên dưới.
Đầu tiên, kết nối một điện trở 1KΩ và một nút nhấn đển Arduino như thế này:
Bây giờ, viết chương trình này vào Arduino IDE và nạp vào board Arduino:
3 void setup() {
4 pinMode(ledPin, OUTPUT);
5 pinMode(inputPin, INPUT);
6 }
7 void loop(){
8 int val = digitalRead(inputPin);
9 if (val == HIGH)
10 {
11 digitalWrite(ledPin, HIGH);
12 }
13 else
14 {
15 digitalWrite(ledPin, LOW);
16 }
17 }
18
Đèn LED của Arduino sẽ sáng lên khi nhấn nút nhấn và tắt khi nút nhấn được nhả ra.
Giải thích chương trình
Lệnh pinMode (ledPin, OUTPUT); ở dòng 4 thiết lập chân 13 là chân ngõ ra và cho nó tên “ledPin”.
Lệnh pinMode (inputPin, INPUT); ở dòng 5 thiết lập chân 2 là chân ngõ vào và cho nó tên “inputPin”.
Bạn có thể thay đổi các chân ngõ vào và ngõ ra cho bất kỳ chân GPIO có sẵn khác bằng cách thay đổi số chân ở dòng 1 và 2 của chương trình trên.
Lệnh digitalRead (inputPin) ở dòng 8 cho Arduino biết theo dõi inputPin (chân 2) bất kỳ tín hiệu nào có thể được gửi đến nó.
Dòng 9 yêu cầu Arduino nghe tín hiệu HIGH ở inputPin, điều này sẽ xảy ra khi nhấn nút ấn. Nếu phát hiện tín hiệu HIGH, dòng 11 sẽ hướng dẫn Arduino gửi tín hiệu đầu ra tới ledPin (chân 13), làm cho đèn LED sáng lên.
Các dòng từ 13 đến 16 yêu cầu Arduino giữ tín hiệu ở mức ledPin LOW (không có dòng điện chạy qua đèn LED) nếu tín hiệu tại inputPin là LOW. Tín hiệu tại inputPin sẽ LOW khi nút này không được nhấn.
Điều khiển đèn LED với quang trở
Quang trở là một điện trở nhạy với ánh sáng. Giá trị điện trở của nó có thể thay đổi tùy thuộc vào cường độ ánh sáng chiếu vào. Điện trở của quang trở giảm khi có nhiều ánh sáng chiếu vào và ngược lại.
Chúng ta có thể sử dụng Arduino để phát hiện điện trở của quang trở và sử dụng giá trị đó để điều khiển tốc độ chớp tắt của đèn LED. Bắt đầu bằng cách kết nối quang trở và điện trở 1KΩ với Arduino như sau:
Nhập chương trình này vào Arduino IDE và nạp vào Arduino.
5 const int maxDuration = 1000;
6
9 pinMode(ledPin, OUTPUT);
10 }
11
12 void loop()
13 {
14 int rate = analogRead(sensorPin);
15 rate = map(rate, 200,800,minDuration, maxDuration);
14 {
15 digitalWrite(ledPin, LOW);
16 digitalWrite(ledPin, HIGH);
17 delay(rate);
18 digitalWrite(ledPin, LOW);
19 delay(rate);
20 }
21
Bây giờ vẫy tay qua quang trở, và bạn sẽ thấy đèn LED nhấp nháy nhanh hơn khi tay bạn che phủ quang trở.
Giải thích chương trình
Đầu tiên chúng ta thiết lập chân ngõ ra (chân 13) và chân ngõ vào (chân analog 0) ở các dòng 1 và 2 với hai câu lệnh sau:
const int ledPin = 13;
const int sensorPin = 0;
Chúng tôi muốn mỗi nhấp nhấp riêng lẻ của đèn LED dài khi nhiều ánh sáng chiếu vào quang trở. Khi không có ánh sáng chiếu vào quang trở, tôi muốn đèn LED nhấp nháy ngắn. Tôi xác định thời lượng nhấp nháy tối thiểu và tối đa ở dòng 4 và 5. Dòng 4 đặt thời lượng tối thiểu (minDuration) ở 100 ms và dòng 5 đặt thời lượng tối đa (maxDuration) ở 1000 mili giây.
Dòng 14 cho Arduino biết đọc điện trở của quang trở tại sensorPin (chân 0) và cho giá trị đọc được tên gọi là “rate”.
Arduino đọc điện trở của quang trở và gán cho nó một giá trị từ 200 đến 800. Điện trở thấp nhất có giá trị 200, và điện trở tối đa có giá trị 800.
Dòng 15 xác định một khoảng các giá trị điện trở (từ 200 đến 800) và “ánh xạ” chúng tới phạm vi của các giá trị minDuration và maxDuration (từ 100 mili giây đến 1000 mili giây). Bằng cách đó, khi điện trở đọc được có giá trị là 200, giá trị tỷ lệ sẽ tương ứng với giá trị minDuration là 100. Khi điện trở được phát hiện có giá trị 800, giá trị tỷ lệ sẽ tương ứng với giá trị maxDuration là 1000 ms. Tất cả các giá trị của điện trở từ 200 đến 800 sẽ được ánh xạ tới giá trị thời lượng từ 100 ms đến 1000 ms.
Hàm delay (rate) trong phần void loop () đầu tiên báo cho Arduino gửi tín hiệu HIGH tới ledPin trong suốt thời gian của giá trị rate. Tiếp theo, một tín hiệu LOW được gửi tới ledPin trong suốt thời gian của giá trị tỷ lệ (rate). Điều này tạo ra hiệu ứng nhấp nháy bật / tắt.
Điều khiển độ cao âm thanh với quang trở
Dự án này tương tự như dự án trước, tôi đã sử dụng quang trở để điều khiển tốc độ nhấp nháy đèn LED của Arduino. Tuy nhiên, bây giờ chúng ta sẽ sử dụng quang trở để điều khiển tần số âm thanh phát ra từ một loa thụ động. Sự khác biệt duy nhất trong chương trình ở đây là chúng ta sẽ thay đổi tốc độ tín hiệu ngõ ra.
Đầu tiên, kết nối điện trở 1KΩ và loa thụ động với Arduino như sau:
Sau đó, nhập chương trình này vào Arduino IDE và nạp vào board:
2 const int sensorPin = 0;
3 const int minDuration = 100;
4 const int maxDuration = 1000;
5
6 void setup()
7 {
8 pinMode(ledPin, OUTPUT);
9 }
10
11 void loop()
12 {
13 int sensorReading = analogRead(sensorPin);
14 int rate = map(sensorReading, 200,800,minDuration, maxDuration);
15 rate = rate / 100;
16 digitalWrite(ledPin, HIGH);
17 delay(rate);
18 digitalWrite(ledPin, LOW);
19 delay(rate);
20 }
21
Bây giờ hãy vẫy tay qua quang trở và chú ý âm thanh phát ra loa tăng lên khi ánh sáng chiếu vào quang trở giảm.
Hãy để lại bình luận dưới đây nếu bạn cần giúp đỡ thiết lập mạch hoặc nếu bạn có bất kỳ câu hỏi nào! Và đừng quên đăng ký nhận thông báo qua email để cập nhật những bài hướng dẫn mới nhất nhé