Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 18

SVTH: ……………………………………………….

Báo cáo bài thực hành số: 2

Họ & tên: Khoa CN Điện - Điện Tử


………………………………………… Thiết kế hệ thống nhúng
MSSV:
……………………………………………

BÀI 2: LẬP TRÌNH ĐỌC GIÁ TRỊ TƯƠNG TỰ

2.1. Lý thuyết
2.1.1. Cơ sở lý thuyết
Lập trình để đọc giá trị tương tự (analog) từ một cảm biến tương tự trên Arduino dựa
trên một số cơ sở lý thuyết quan trọng về lập trình và điện tử. Những kiến thức cơ bản
bạn có thể học từ việc lập trình này:

Đọc giá trị tương tự (Analog Read): Để đọc giá trị tương tự từ một cảm biến, bạn sử
dụng hàm `analogRead()`. Hàm này chuyển đổi giá trị điện áp từ cảm biến thành một
giá trị số trong phạm vi từ 0 đến 1023 (tùy thuộc vào độ phân giải ADC của Arduino).
Giá trị này phản ánh mức tín hiệu tương tự mà cảm biến đang cung cấp.

Biến và Gán Giá Trị: Bạn sử dụng biến để lưu trữ giá trị đọc từ cảm biến. Trong ví dụ
trên, `sensorValue` là một biến được khai báo để lưu trữ giá trị từ cảm biến. Bạn gán
giá trị từ `analogRead(sensorPin)` vào biến này để sau đó có thể sử dụng và xử lý.

Giao Tiếp Serial: Sử dụng `Serial.begin()` để khởi động giao tiếp serial, bạn có thể gửi
dữ liệu ra cổng serial để theo dõi và gỡ lỗi. Sử dụng `Serial.print()` và
`Serial.println()` để in giá trị hoặc thông báo ra cổng serial.

Vòng Lặp (`loop()`) và Tạm Dừng (`delay()`): Chương trình chạy trong vòng lặp
`loop()`, cho phép bạn thực hiện các hành động lặp đi lặp lại. Bằng cách sử dụng hàm
`delay()`, bạn có thể tạo ra một khoảng thời gian tạm dừng trong vòng lặp để kiểm tra
giá trị từ cảm biến định kỳ.

Quyết Định Dựa Trên Giá Trị Đọc: Trong chương trình của bạn, bạn có thể sử dụng
giá trị đọc từ cảm biến để thực hiện các hành động cụ thể. Ví dụ, bạn có thể kiểm tra
xem giá trị đọc có vượt quá một ngưỡng cụ thể và thực hiện hành động tương ứng.

Điều Khiển Thiết Bị Đầu Ra: Bạn sử dụng hàm `digitalWrite()` để điều khiển thiết bị
đầu ra như đèn LED, dựa trên giá trị đọc từ cảm biến. Trong ví dụ của bạn, đèn LED
được bật và tắt dựa trên giá trị đọc.

Tương Tác Với Môi Trường Thực Tế: Chương trình của bạn tạo ra một ứng dụng thực
tế sử dụng cảm biến và thiết bị đầu ra. Điều này có thể áp dụng vào nhiều ứng dụng
khác nhau như kiểm soát ánh sáng, nhiệt độ, hoặc thậm chí là ứng dụng liên quan đến
IoT (Internet of Things).

1
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

Tổng quan, việc lập trình đọc giá trị tương tự là một phần quan trọng của lập trình
Arduino và điện tử cơ bản, và nó cung cấp một nền tảng cho việc xây dựng các ứng
dụng tương tác với môi trường.
2.1.2. Ứng dụng
Các ứng dụng thực tế của việc đọc giá trị tương tự từ cảm biến và sử dụng chúng trong
lập trình Arduino rất đa dạng và có thể áp dụng vào nhiều lĩnh vực khác nhau:
1.Điều Khiển Ánh Sáng
2.Điều Khiển Nhiệt Độ
3. Theo Dõi Môi Trường
4.Kiểm Soát Động Cơ
5. Theo Dõi Sự Tương Tác
6. Ứng Dụng IoT
7. Giám Sát Điện Năng
Các ứng dụng này chỉ là một số ví dụ cơ bản. Sự kết hợp của các cảm biến tương tự và
việc lập trình Arduino mở ra rất nhiều cơ hội để tạo ra các ứng dụng thực tế và sáng
tạo trong nhiều lĩnh vực khác nhau.
2.2. Thực hành
Bài số 2.1: Cho sơ đồ kết nối biến trở với Arduino như hình 2.1. Viết chương trình
đọc giá trị Analo từ biến trở và hiển thị thông số lên Serial Monitor.
 Sơ đồ mạch kết nối

Hình 2.1: Sơ đồ mạch kết nối biến trở với Arduino


 Lưu đồ giải thuật
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
2
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………………
…………………………………………………………………………………………
………
…………………………………………………………………………………………
………
 Chương trình
int value, voltage;
void setup()
{
// đặt mã setup ở đây, chạy một lần:
Serial.begin(9600);
}
void loop()
{
// đặt mã chính ở đây, chạy lặp đi lặp lại:
value = analogRead(A0);
Serial.println(value);
voltage = map(value,0,1023,0,5000);
Serial.println(voltage);
Serial.println();
delay(200);
}

3
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

 Giải thích
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………
 Kết quả & nhận xét
Kết quả:

4
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………
Nhận xét:
…………………………………………………………………………………………
………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………Bài 2.2: Viết chương trình
đọc giá trị analog từ biến trở, giao tiếp và hiển thị LCD 2004 ở bảng 2.1.
Bảng 2.1: Thông tin hiển thị LCD 2004

5
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

 Sơ đồ mạch kết nối


………

Hình 2.2: Sơ đồ mạch giao tiếp biến trở - LCD 2004 với Arduino

 Lưu đồ giải thuật


…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………

6
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………………
…………………………………………………………………………………………
………
…………………………………………………………………………………………
………
 Chương trình
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………

7
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………

 Giải thích
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………

8
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………
 Kết quả & nhận xét
Kết quả:
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………
Nhận xét:

9
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

…………………………………………………………………………………………
………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………
Bài 2.3: Cho sơ đồ kết nối mạch như hình 2.3. Viết chương trình đọc giá trị analog từ
biến trở và cảnh báo ra Buzzer.

Hình 2.3: Sơ đồ mạch kết nối biến trở và Buzzer với Arduino
 Lưu đồ giải thuật
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
10
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………………
…………………………………………………………………………………………
………
………

…………………………………………………………………………………………
 Chương trình
int sensorPin = A0; // chọn chân đầu vào cho biến trở
int buzzerPin = 10; // chọn chân cho Còi
int sensorValue = 0; // biến để lưu trữ giá trị

void setup()
{
Serial.begin(9600);
pinMode(buzzerPin, OUTPUT);
// khai báo chân Còi là ĐẦU RA:

void loop()
{
Serial.print("Giá trị Analog: ");
11
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

Serial.println(sensorValue);
// đọc giá trị từ cảm biến:
sensorValue = analogRead(sensorPin);
// bật chân Còi lên
digitalWrite(buzzerPin, HIGH);
// tạm dừng chương trình trong <sensorValue> mili giây:
delay(sensorValue);
// tắt chân Còi:
digitalWrite(buzzerPin, LOW);

// tạm dừng chương trình trong <sensorValue> mili giây:


delay(sensorValue);
}

 Giải thích
1. Khai báo các biến và chân kết nối:
- `int sensorPin = A0;`: Đây là chân đầu vào mà biến trở được kết nối.
- `int buzzerPin = 10;`: Đây là chân kết nối buzzer,
- `int sensorValue = 0;`: Biến này được sử dụng để lưu trữ giá trị analog đọc từ cảm
biến.

Hàm `setup()`:
- Hàm này chạy một lần khi Arduino khởi động.
- `Serial.begin(9600);`: Khởi động giao tiếp serial để bạn có thể sử dụng
`Serial.println()` để hiển thị thông tin ra cổng serial (một cổng dữ liệu ảo để giao tiếp
với máy tính).
- `pinMode(buzzerPin, OUTPUT);`: Khai báo chân `buzzerPin` là chân đầu ra để
điều khiển Còi

Hàm `loop()`:
- Hàm này chạy lặp đi lặp lại mã bên trong liên tục sau khi hàm `setup()` đã chạy
xong.

Trong vòng lặp `loop()`:


- `Serial.print("Giá trị Analog: ");` và `Serial.println(sensorValue);`: In giá trị đọc từ
biến trở ra cổng serial để theo dõi giá trị này trong môi trường phát triển (IDE)
Arduino.
- `sensorValue = analogRead(sensorPin);`: Đọc giá trị analog từ cảm biến và lưu trữ
nó trong biến `sensorValue`.
- `digitalWrite(buzzerPin, HIGH);`: Bật Còi bằng việc đặt chân `buzzerPin` thành
HIGH (tức là 5V hoặc logic HIGH).
- `delay(sensorValue);`: Tạm dừng chương trình trong thời gian bằng giá trị đọc từ
cảm biến. Thời gian này sẽ thay đổi tùy thuộc vào giá trị đọc từ cảm biến.
- `digitalWrite(buzzerPin, LOW);`: Tắt Còi bằng việc đặt chân `buzzerPin` thành
LOW (tức là 0V hoặc logic LOW).

12
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

- `delay(sensorValue);`: Tạo một khoảng tạm dừng thứ hai, cũng trong thời gian
bằng giá trị đọc từ cảm biến.

Chương trình này sẽ đọc giá trị từ biến trở và sử dụng nó để bật và tắt Còi dựa trên giá
trị đọc đó, tạo ra hiệu ứng bật tắt động dựa trên giá trị đọc từ cảm biến
Kết quả & nhận xét
Kết quả:

Khi tăng giá trị biến trợ tốc độ kêu của Còi chậm lại

…………………………………………………………………………………………
………

Khi giảm giá trị biến trợ tốc độ kêu của Còi liên tục

…………………………………………………………………………………………
………
Nhận xét:

13
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

Chương trình này thực hiện một nhiệm vụ cơ bản của việc đọc giá trị từ một cảm biến
analog (potentiometer) và điều khiển một đèn LED dựa trên giá trị đọc đó. Dưới đây
là một số nhận xét về chương trình:

Chức năng cơ bản: Chương trình hoạt động như mong đợi. Còi sẽ bật lên và tắt đi dựa
trên giá trị đọc từ biến trở. Nếu bạn quay biến trở, tốc độ bật/tắt của Còi sẽ thay đổi
tương ứng
Bài 2.4: Cho sơ đồ kết nối biến trở với Arduino như hình 2.4. Viết chương trình đọc
giá trị Analog từ biến trở.
 Sơ đồ mạch kết nối

Hình 2.4: Sơ đồ mạch kết nối biến trở và LED với Arduino
 Lưu đồ giải thuật
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………

14
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………………
…………………………………………………………………………………………
………
…………………………………………………………………………………………
………
 Chương trình
int sensorPin = A0; // chọn chân đầu vào cho cảm biến biến trở
int ledPin = 10; // chọn chân cho đèn LED
int sensorValue = 0; // biến để lưu trữ giá trị đến từ cảm biến

void setup()
{
// khai báo chân ledPin là ĐẦU RA:
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // bắt đầu giao tiếp serial với tốc độ 9600 baud
}

void loop()
{
Serial.print("Giá Trị Analog: ");
Serial.println(sensorValue);

// đọc giá trị từ cảm biến:


sensorValue = analogRead(sensorPin);
// bật chân ledPin lên
digitalWrite(ledPin, HIGH);
// tạm dừng chương trình trong <sensorValue> mili giây:
delay(sensorValue);
// tắt chân ledPin:
digitalWrite(ledPin, LOW);
// tạm dừng chương trình trong <sensorValue> mili giây:
delay(sensorValue);
}

 Giải thích
Giải thích chi tiết về cách chương trình hoạt động:

Khai báo biến và chân kết nối

15
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

- `int sensorPin = A0;`: Đây là chân đầu vào được sử dụng để kết nối với cảm biến
biến trở (
- `int ledPin = 10;`: Đây là chân được sử dụng để kết nối với đèn LED.
- `int sensorValue = 0;`: Biến này dùng để lưu trữ giá trị analog đọc từ cảm biến.

Hàm `setup()
- Hàm này chạy một lần sau khi Arduino được khởi động.
- `pinMode(ledPin, OUTPUT);`: Đây là khai báo chân `ledPin` là đầu ra, tức là sẽ
điều khiển đèn LED thông qua chân này.
- `Serial.begin(9600);`: Khởi động giao tiếp serial để bạn có thể sử dụng
`Serial.println()` để in thông tin ra cổng serial và theo dõi giá trị đọc từ cảm biến trong
môi trường phát triển Arduino.

Hàm `loop()`
- Hàm này chạy lặp đi lặp lại sau khi hàm `setup()` đã chạy xong.

Trong vòng lặp `loop()`


- `Serial.print("Giá Trị Analog: ");` và `Serial.println(sensorValue);`: In giá trị đọc
từ cảm biến lên cổng serial để theo dõi giá trị này trong thời gian thực.
- `sensorValue = analogRead(sensorPin);`: Đọc giá trị analog từ cảm biến và lưu trữ
nó trong biến `sensorValue`.
- `digitalWrite(ledPin, HIGH);`: Bật đèn LED bằng cách đặt chân `ledPin` thành
HIGH (tức là 5V hoặc logic HIGH).
- `delay(sensorValue);`: Tạm dừng chương trình trong một khoảng thời gian bằng
giá trị đọc từ cảm biến. Thời gian này sẽ thay đổi tùy thuộc vào giá trị đọc từ cảm
biến.
- `digitalWrite(ledPin, LOW);`: Tắt đèn LED bằng cách đặt chân `ledPin` thành
LOW (tức là 0V hoặc logic LOW).
- `delay(sensorValue);`: Tạo một khoảng tạm dừng khác, cũng trong thời gian bằng
giá trị đọc từ cảm biến.

Kết quả là đèn LED sẽ sáng lên và tắt đi dựa trên giá trị đọc từ cảm biến biến trở. Tốc
độ và thời gian sáng/tắt của đèn LED sẽ thay đổi tùy thuộc vào giá trị đọc từ cảm biến.
Điều này tạo ra một hiệu ứng sáng tắt động và giúp bạn theo dõi giá trị từ cảm biến
qua cổng serial
 Kết quả & nhận xét
Kết quả:

16
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

…………………………………………………………………………………………
………

…………………………………………………………………………………………
………
Nhận xét:
Chương trình này thực hiện một nhiệm vụ cơ bản của việc đọc giá trị từ một Biến trở
và điều khiển một đèn LED dựa trên giá trị đọc đó. Dưới đây là một số nhận xét về
chương trình:

Chức năng cơ bản: Chương trình hoạt động như mong đợi. Đèn LED sẽ sáng lên và tắt
đi dựa trên giá trị đọc từ biến trở. Nếu bạn quay biến trở, tốc độ sáng/tắt của đèn LED
sẽ thay đổi tương ứng.
17
SVTH: ………………………………………………. Báo cáo bài thực hành số: 2

Tốc độ và thời gian thay đổi: Tốc độ và thời gian sáng/tắt của đèn LED được điều
khiển bởi giá trị đọc từ cảm biến. Khi bạn thay đổi giá trị cảm biến, bạn sẽ thấy sự
thay đổi trong hiệu ứng sáng tắt của đèn LED.
Chương trình là một ví dụ đơn giản về sử dụng cảm biến và điều khiển đèn LED bằng
Arduino. Nó có thể làm việc cơ bản và là một nền tảng để bắt đầu tạo ra các ứng dụng
tương tác hơn sử dụng các cảm biến và đầu ra khác.

18

You might also like