I. Mục đích, yêu cầu
Giúp người dùng:
II. Nội dung
2.1. Cơ sở lý thuyết
2.1.1. Tìm hiểu về dạng tín hiệu, ứng dụng trong đầu vào tương tự
Tín hiệu tương tự là gì?
Tín hiệu tương tự (Analog / ADC) là một dạng tín hiệu liên tục, đồ thị biểu diễn tín hiệu là một đường liên tục (ví dụ như sin, cos hoặc đường cong lên xuống bất kỳ). Tín hiệu sẽ tương tự về bản chất, nhưng sẽ khác nhau về cường độ tín hiệu lúc sau so với lúc trước.
Hình ảnh biểu diễn về dạng tín hiệu tương tự:
Ứng dụng trong đầu vào tương tự
Dạng tín hiệu tương tự giúp ta đọc được giá trị điện áp từ các loại cảm biến để biết được sự thay đổi của ánh sáng, độ ẩm đất, âm thanh… đọc được trong dải từ 0V đến 5V (tương ứng từ 0 đến 1023 giá trị), ứng dụng nhiều trong cuộc sống như làm các hệ thống kiểm soát nhiệt độ môi trường hay vườn trồng rau thông minh tưới nước tự động… Trong tài nguyên mạch C88 được tích hợp sẵn 2 đầu vào tương tự.
2.1.2. Địa chỉ phần cứng đầu vào tương tự mạch C88
2.1.3. Một số câu lệnh sử dụng trong bài
/* Lưu ý cho người mới tiếp cận với lập trình: ngôn ngữ lập trình cho mạch C88 là C/C++ nên chúng ta cần lưu ý phân biệt chữ hoa chữ thường và các dấu chấm, dấu phẩy, dấu chấm phẩy... */
a. Hàm define
Cấu trúc: #define [đặt tên hằng số] [giá trị của hằng số]
Ý nghĩa: Cho phép bạn đặt tên cho một hằng số nguyên hoặc hằng số thực.
Ứng dụng: Gán tên cho chân mong muốn.
Ví dụ: Khai báo tên P0 địa chỉ chân số 5
b. Hàm setup()
Cấu trúc: void setup() { // viết chương trình }
Ý nghĩa: Chương trình trong setup chỉ chạy 1 lần (khi khởi động hoặc reset mạch).
Ứng dụng: Khai báo, cấu hình các chân…
Ví dụ: Cấu hình chiều vào / ra cho đầu ra rơ le R0 (D4)
c. Hàm loop ()
Cấu trúc: void loop () { // viết chương trình }
Ý nghĩa: Chương trình đã viết nó sẽ chạy và lặp lại liên tục.
Ứng dụng: Chứa dữ liệu, chương trình đã viết.
Ví dụ: Viết chương trình bật đầu ra rơ le R0 (D4)
d. Hàm pinMode()
Cấu trúc: pinMode (chân, cấu hình);
Trong đó:
+) chân: Địa chỉ chân mà bạn muốn thiết lặp.
+) cấu hình: INPUT (Chiều vào) hoặc OUTPUT (Chiều ra).
Ý nghĩa: Cấu hình, thiết lập chân là đầu vào INPUT hoặc đầu ra OUTPUT.
Ứng dụng:
+) Đầu vào có thể là nút nhấn, công tắc, cảm biến…
+) Đầu ra có thể là led, bóng đèn, các thiết bị cần điều khiển…
Ví dụ: Cấu hình đầu ra rơ le R1 (D3) có chiều ra
e. Hàm analoglRead ()
Cấu trúc: analogRead(chân);
Trong đó: chân là chân đầu vào tương tự analog muốn đọc giá trị điện áp.
Lưu ý: Trên mạch C88 có kí hiệu “A” đứng trước số của chân, có thể đọc được tín hiệu tương tự.
Ý nghĩa: Luôn trả về 1 số nguyên nằm trong khoảng từ 0 đến 1023 tương ứng với thang điện áp mặc định từ 0 đến 5V tại chân muốn đọc.
Ứng dụng: Đọc giá trị điện áp đầu vào có thể là biến trở, cảm biến…
Ví dụ: Đọc giá trị điện áp đầu vào tương tự ADC0 (A6)
e. Hàm delay()
Cấu trúc: delay(ms);
Trong đó: ms là thời gian (Sử dụng ở đây là mili giây).
Ý nghĩa: Dừng chương trình trong 1 khoảng thời gian (1000 mili giây = 1 giây).
Ứng dụng: Tạo trễ.
Ví dụ: Tạo trễ 5 giây
2.2. Thực hiện
Bài 1.
Thiết kế, viết chương trình đọc giá trị biến trở sử dụng đầu vào A0 và hiển thị lên Serial Monitor.
a. Chuẩn bị
Biến trở (bạn có thể chọn loại bất kì).
b. Sơ đồ lắp ráp
c. Mã lệnh
#define ADC0 A6 // định nghĩa địa chỉ chân A6 tên là ADC0
void setup ()
{
pinMode(ADC0, INPUT); // thiết lập chân A6 là đầu vào
Serial.begin(9600); // Khởi tạo bật cổng Serial Monitor với tốc độ 9600
}
void loop ()
{
int a = analogRead(ADC0); // gắn biến a đọc giá trị biến trở
// hiển thị giá trị biến trở ra cổng Serial Monitor
Serial.print(" Bien tro = ");
Serial.println(a);
delay(100); // tạo trễ 100ms
}
d. Kết quả (Mạch hoạt động thế nào)
Giá trị của biến trở được hiển thị lên màn hình.
Bài 2.
Thiết kế, viết chương trình đọc giá trị ánh sáng từ quang trở sử dụng đầu vào A1 và hiển thị lên Serial Monitor.
a. Chuẩn bị
+) 1 Quang trở.
+) 1 Tụ 101 hoặc 104.
+) 1 điện trở 10K.
b. Sơ đồ lắp ráp
c. Mã lệnh
#define ADC1 A7 // định nghĩa địa chỉ chân A7 tên là ADC1
void setup()
{
pinMode(ADC1, INPUT); // thiết lập ADC1 có chiều vào
Serial.begin(9600); // Khởi tạo bật cổng Serial Monitor với tốc độ 9600
}
void loop()
{
int a = analogRead(ADC1); // gắn biến a đọc giá trị ánh sáng từ quang trở trả về
// hiển thị giá trị ánh sáng từ quang trở lên cổng Serial Monitor
Serial.print("GIA TRI: ");
Serial.println(a);
delay(100); // tạo trễ 100ms
}
d. Kết quả (Mạch hoạt động thế nào)
Giá trị ánh sáng từ quang trở thu được từ môi trường được hiển thị lên màn hình.