(Trang 28)
Sau khi học xong bài này, em sẽ:
- Triển khai những nội dung của một dự án thuộc lĩnh vực hệ thống nhúng.
- Báo cáo kết quả nghiên cứu dự án.
Sau khi đã lập được các kế hoạch cho dự án ở Bài 5, trong bài này chúng ta sẽ tìm hiểu hai bước cuối cùng trong quy trình thực hiện dự án nghiên cứu thuộc lĩnh vực hệ thống nhúng là triển khai nghiên cứu và báo cáo kết quả.
I - TRIỂN KHAI NGHIÊN CỨU
Triển khai dự án nghiên cứu là quá trình thực hiện các hoạt động nghiên cứu đã đề ra trong kế hoạch. Số liệu và tiền độ và chất lượng công việc phải được lưu trữ đầy đủ, chính xác và báo cáo thường xuyên.
Bên cạnh đó, các hoạt động giám sát cũng được tiến hành liên tục thông qua việc so sánh kết quả nghiên cứu thực tế với báo cáo của các mốc chuẩn của kế hoạch. Qua đó, trưởng nhóm có thể làm những điều chỉnh phụ hợp để giảm thiểu rủi ro, đảm bảo hoàn thành các công việc và mục tiêu dự án. Ví dụ, nếu báo cáo cho thấy việc lắp ráp phần cứng theo hệ thống trên Bảng 5.2 không thể hoàn thành trong ngày 10, do sự cố liên quan đến yêu cầu phần cứng, thì trưởng nhóm có thể xem xét lại thời gian cần thiết cho những công việc đã hoàn thành để sau này rút ngắn thời gian hoàn thành hồ sơ xuống chỉ còn 1 ngày, đảm bảo kết thúc đúng hạn vào ngày 15.
Sau khi dự án kết thúc, ngoài các hoạt động thông thường như thống kê tài chính, giải phóng nguồn lực, bàn giao sản phẩm... trưởng nhóm cần đánh giá kết quả triển khai dự án so với mục tiêu và kế hoạch, từ đó rút ra bài học kinh nghiệm cho các dự án trong tương lai.
II - BÁO CÁO KẾT QUẢ NGHIÊN CỨU
1. Viết báo cáo triển khai dự án
Báo cáo kết quả triển khai dự án trong lĩnh vực hệ thống nhúng cần chứa toàn bộ thông tin về quá trình triển khai của dự án, từ khi hình thành cho đến khi kết thúc. Các nội dung chính bao gồm:
- Mục tiêu và bối cảnh của dự án:
+ Nội dung và ý nghĩa của nghiên cứu ứng dụng vi điều khiển vào thiết bị phát hiện người bấm chuông trước.
+ Các kết quả nghiên cứu có liên quan, như các giải pháp phát hiện sự kiện xảy ra theo thời gian thực sử dụng vi điều khiển.
+ Các mục tiêu cụ thể của dự án.
(Trang 29)
- Báo cáo kết quả nghiên cứu:
+ Phương pháp và phạm vi nghiên cứu: chỉ rõ phương pháp nghiên cứu tiến hành trong dự án (lí thuyết, thực nghiệm hay kết hợp nghiên cứu lí thuyết với thực nghiệm) và các giới hạn của nghiên cứu (ví dụ số lượng người chơi tối đa).
+ Kết quả nghiên cứu: thiết kế và kết quả, các thông số, số liệu đã thu thập (qua mô phỏng hoặc thực nghiệm) và đánh giá sự đáp số liệu thu được.
- Kết luận:
+ Chỉ rõ kết quả triển khai có đạt được các mục tiêu đã đề ra ban đầu về chất lượng và số lượng sản phẩm cũng như thời gian và kinh phí thực hiện.
+ Có thể nêu nguyên nhân của những tồn tại và hướng phát triển tiếp theo cho dự án.
- Các phụ lục: bao gồm các kế hoạch trong quá trình triển khai, các sơ đồ thiết kế, lưu đồ thuật toán, mã nguồn phần mềm...
- Danh mục tài liệu tham khảo: Một list đầy đủ các công trình nghiên cứu đã trích dẫn trong báo cáo.
2. Báo cáo kết quả dự án
Hai hình thức phổ biến nhất dùng để báo cáo kết quả triển khai một dự án là trình bày poster và thuyết trình theo slide.
a) Chuẩn bị poster
Poster là một tài liệu, thường gói gọn trong một giấy khổ lớn, chủ yếu sử dụng hình ảnh, đồ họa, bảng biểu kết hợp cùng các dòng văn bản súc tích nhằm thu hút và cung cấp thông tin cho người xem. Nội dung của một poster được minh họa trong Hình 6.1.
Hình 6.1. Một ví dụ về cách trình bày poster cho dự án
Chế tạo thiết bị phát hiện người bấm chuông trước sử dụng bo mạch lập trình Arduino Uno
Nguyễn Thị Y, Lê Văn Z
GIỚI THIỆU
Tổng quan: Một trong những ứng dụng thú vị của hệ thống nhúng là phát hiện người chơi nào bấm chuông nhanh nhất để giành quyền trả lời trong một cuộc thi.
Mục tiêu nghiên cứu: Thiết kế và lắp ráp thành công thiết bị phát hiện người bấm chuông trước sử dụng bo mạch Arduino Uno.
Phương pháp và phạm vi nghiên cứu: nghiên cứu lí thuyết, đề xuất giải pháp, thiết kế và chế tạo thử nghiệm.
KẾT QUẢ
Sơ đồ mạch điện
Lắp ráp thử nghiệm
KẾT LUẬN
Kết quả đạt được: thiết kế và chế tạo thành thiết bị phát hiện người bấm chuông trước sử dụng bo mạch Arduino Uno. Thiết bị gọn, nhẹ, giá thành thấp, hoạt động ổn định trong điều kiện thử nghiệm.
Hướng phát triển:
Tăng số lượng người chơi.
Sử dụng kết nối không dây giữa nút bấm và bo mạch điều khiển.
(Trang 30)
b) Chuẩn bị các slide và thuyết trình dự án
Các slide được tạo ra bằng các phần mềm chuyên dụng và là một trong những công cụ truyền thống hữu hiệu nhất để thu hút người nghe và trình diễn kết quả triển khai dự án.
III - CÁC KIẾN THỨC CÓ LIÊN QUAN
1. Nút bấm 4 chân
a) Cấu tạo và cơ chế hoạt động
a) Hình dáng thực tế | b) Sơ đồ nguyên lí |
Hình 6.2. Nút bấm 4 chân
Nút bấm trên Hình 6.2a là một công tắc có 4 chân, chia làm hai cặp theo chiều dọc trong đó các chân tín hiệu trong cùng một cặp được nối với nhau như Hình 6.2b. Khi người chơi bấm nút, công tắc đóng lại và tất cả các chân sẽ được nối với nhau.
b) Các phương pháp chống rung
Trên lí thuyết, khi người chơi nhấn vào nút bấm thì theo sơ đồ Hình 6.3a, tín hiệu lỗi ra sẽ chuyển từ mức điện áp thấp lên mức điện áp cao. Khi người chơi nhả nút bấm, tín hiệu lỗi ra sẽ chuyển từ mức điện áp cao xuống mức điện áp thấp.
Tuy nhiên, do tính chất chống nhiễu tự nhiên của các bộ phận do được dùng để chế tạo nút bấm, trên thực tế tín hiệu ra sẽ dao động liên tục giữa mức thấp và mức cao trong một thời gian ngắn trước khi đóng/nhả nút bấm như minh họa trên Hình 6.3b. Hiện tượng này gọi là nhiễu rung (bouncing), nếu không được khắc phục sẽ gây ra nhầm lẫn trong việc xác định thời điểm bấm nút của người chơi.
a) Nút bấm mắc trong mạch điện theo kiểu kéo xuống
b) Tín hiệu lối ra khi đóng và nhả nút bấm
Hình 6.3. Sơ đồ mạch điện và dạng tín hiệu ra của nút bấm
Mức điện áp thấp
Mức điện áp cao
Nhiễu rung
Mức điện áp thấp
(Trang 31)
Hiện tượng nhiễu rung thường được khắc phục theo một trong 2 cách sau:
- Dựa trên phần cứng: sử dụng một số mạch điện trên Hình 6.4 để loại bỏ nhiễu trong tín hiệu ra của nút bấm trước khi đưa vào vi điều khiển.
- Dựa trên phần mềm: bổ sung một khoảng thời gian trễ dội lớn (khoảng từ 10 ms – 100 ms, tùy loại nút bấm) sau khi phát hiện sự chuyển đổi trạng thái của tín hiệu vào thuật toán của chương trình.
2. Thực thi hệ thống nhúng trên bo mạch lập trình vi điều khiển
a) Sơ đồ nguyên lí và danh mục linh kiện
Bo mạch lập trình vi điều khiển Arduino Uno là nền tảng những thích hợp cho việc chế tạo mẫu thiết bị phát hiện người bấm chuông trước. Hình 6.5 với bo mạch Arduino Uno đóng vai trò xử lí trung tâm để kết nối với các thiết bị ngoại vi là 2 nút bấm và 2 LED. Danh mục linh kiện để thực hiện hệ thống phát hiện người bấm chuông trước với cơ chế chống rung cho nút bấm bằng phần mềm được cho trong Bảng 6.1.
a) Triệt nhiễu bằng mạch lọc RC | b) Triệt nhiễu bằng mạch Flip - Flop |
Hình 6.4. Một số mạch điện tử dùng để loại bỏ nhiễu rung
Hình 6.5. Sơ đồ chức năng của hệ thống
Tín hiệu vào
Nút bấm
Bộ xử lí
Bo mạch Arduino Uno
Hiển thị kết quả
LED
(Trang 32)
Bảng 6.1. Các linh kiện cần sử dụng
Kí hiệu | Linh kiện | Số lượng |
R1, R2 | Điện trở 470 Ω | 2 |
R3, R4 | Điện trở 10 kΩ | 2 |
D1, D2 | LED | 2 |
S1, S2 | Nút bấm | 2 |
U1 | Bo mạch lập trình Arduino Uno | 1 |
b) Thuật toán khử nhiễu rung và phát hiện người bấm chuông trước
Về nguyên tắc, vi điều khiển cần liên tục đọc các giá trị từ hai cổng vào nối với lỗi ra của hai nút bấm để phát hiện sự thay đổi trạng thái của các cổng này. Khi phát hiện có sự thay đổi trạng thái và xác nhận nút bấm đã đóng, vi điều khiển sẽ bật sáng LED tương ứng cho tới khi được yêu cầu khởi động lại cho lượt chơi tiếp theo. Lưu đồ thuật toán và mã nguồn tham khảo được thể hiện lần lượt trên Hình 6.6a và 6.6b.
c) Lắp ráp mạch điện tử và kiểm tra hoạt động của hệ thống
Các bước lắp ráp và kiểm tra hoạt động của hệ thống:
Bước 1. Lựa chọn, chuẩn bị sẵn các linh kiện theo Bảng 6.1.
Bước 2. Lắp ráp mạch điện và kết nối với bo mạch Arduino Uno theo sơ đồ Hình 6.7 và Bảng 6.2. Sau khi hoàn thành, mạch điện có dạng như Hình 6.8. Chú ý không bật nguồn trong quá trình lắp ráp, chỉ bật nguồn sau khi đảm bảo mạch đã được hoàn thiện theo đúng thiết kế.
Bước 3. Dùng cáp nối cổng USB của máy tính đã được cài đặt Arduino IDE và bo mạch Arduino Uno.
Bước 4. Mở phần mềm Arduino IDE, soạn thảo tập tin sketch cho vi điều khiển theo chương trình mẫu ở Hình 6.6b.
Bước 5. Biên dịch và nạp chương trình.
Bước 6. Kiểm tra hoạt động của hệ thống:
- Cho hai người chơi cùng chơi trò chơi bấm nút, hệ thống có phát hiện chính xác người chơi bấm nút trước hay không? Ánh sáng của LED có bị nhấp nháy không?
- Hệ thống có sẵn sàng cho lượt chơi tiếp theo sau khi được khởi động lại hay không?
(Trang 33)
a) Lưu đồ thuật toán | b) Mã nguồn tham khảo
|
Hình 6.6. Phát triển phần mềm phát hiện người bấm chuông trước cho bo mạch Arduino Uno
Bắt đầu
Đặt D6, D9 ở mức thấp
Đọc trạng thái mới của D7, D8
Kiểm tra: D6 ở mức thấp và D8 chuyển trạng thái?
Có: Đổi trạng thái D9
Không: Trở về bước 2
Kiểm tra: D9 ở mức thấp và D7 chuyển trạng thái?
Có: Đổi trạng thái D6
Không: Trở về bước 2
Lưu trạng thái D7, D8; Trễ một khoảng thời gian thích hợp
Xuất trạng thái ra các cổng D6, D9
// Khởi tạo các hằng số
const int S1pin = 8; // Chân đọc trạng thái nút bấm S1
const int D1pin = 9; // Chân cấp nguồn nuôi LED D1
const int S2pin = 7; // Chân đọc trạng thái nút bấm S2
const int D2pin = 6; // Chân cấp nguồn nuôi LED D2
const int DB_delay = 10; // Thời gian trễ để khử nhiễu rung
// Khai báo các biến số
int S1state=0; // Dùng để lưu trạng thái chân S1
int S1old=0; // Dùng để lưu trạng thái trước đó của S1state
int S2state=0; // Dùng để lưu trạng thái chân S2
int S2old=0; // Dùng để lưu trạng thái trước đó của S2state
int D1state; // 0 = tắt D1 và 1 = bật D1
int D2state; // 0 = tắt D2 và 1 = bật D2
// Thiết lập các cổng vào ra cho các nút bấm và LED
void setup() {
pinMode(D1pin, OUTPUT); // Cổng điều khiển LED D1 ở chế độ ghi
pinMode(S1pin, INPUT); // Cổng trạng thái S1 ở chế độ đọc
pinMode(D2pin, OUTPUT); // Cổng điều khiển LED D2 ở chế độ ghi
pinMode(S2pin, INPUT); // Cổng trạng thái S2 ở chế độ đọc
}
// Chương trình chính
void loop() {
S1state=digitalRead(S1pin); // Đọc trạng thái của S1
S2state=digitalRead(S2pin); // Đọc trạng thái của S2
//S1 có chuyển trạng thái trong khi S2 chưa nhấn không?
if ((D2state==0) && (S1state==HIGH) && (S1old==LOW))
{D1state=1-D1state;} // Chuyển trạng thái D1 tương ứng
S1old=S1state; // Trạng thái S1 giờ đã cũ
//S2 có chuyển trạng thái trong khi S1 chưa nhấn không?
if ((D1state==0) && (S2state==HIGH) && (S2old==LOW))
{D2state=1-D2state;} // Chuyển trạng thái D2 tương ứng
S2old=S2state; // Trạng thái S2 giờ đã cũ
delay(DB_delay); // Trễ trước khi lặp lại vòng kiểm tra mới
// Điều khiển LED
if (D1state==1)
{ digitalWrite(D1pin,HIGH);}
else
{ digitalWrite(D1pin,LOW);}
if (D2state==1)
{ digitalWrite(D2pin,HIGH);}
else
{ digitalWrite(D2pin,LOW);}
}
(Trang 34)
Bảng 6.2. Bảng kết nối chân Arduino Uno với các linh kiện
STT | Tên chân trên Arduino Uno | Chân của linh kiện khác |
1 | 5 V | Các lối vào của 2 nút bấm S1, S2 |
2 | GND | Các chân của 4 điện trở R1 – R4 |
3 | 6 | Chân anode của LED D2 |
4 | 7 | Chân chung giữa điện trở R3 và nút bấm S1 |
5 | 8 | Chân chung giữa điện trở R4 và nút bấm S2 |
6 | 9 | Chân anode của LED D1 |
Hình 6.7. Sơ đồ mạch điện
Hình 6.8. Sơ đồ lắp ráp phần cứng theo giải pháp chống rung bằng phần mềm