Sau khi tham khảo ý kiến của GVHD, cùng với ý tưởng của nhóm, nhóm chúng em đã lên phương án xây dựng mô hình hệ thống bao gồm những phần chính sau:
1. Vi điều khiển trung tâm (Arduino).
2. Bộ phận điều khiển và cơ cấu chấp hành (Công tắc chỉnh ghế và mô tơ). 3. Bộ phận gửi tín hiệu (Pan, test Pan, cảm biến Hall).
4. Bộ phận xuất tín hiệu (Màn hình LCD, led tín hiệu).
Hệ thống mô hình giảng dạy ghế điện của nhóm sẽ cung cấp các ứng dụng vào bài thực hành cho sinh viên và giảng viên như:
• Đèn led đỏ sáng và hiển thị thông báo lên màn LCD nếu có lỗi đánh pan. • Đèn led vàng sáng lên 3 giây với mỗi pan được sửa đúng.
• Đèn led xanh sáng và điển thị thông báo lên màn LCD nếu lỗi được sửa đúng hết bằng pan test.
• Đánh nhiều pan cùng lúc đều được.
• Mỗi lần sửa sai lỗi bằng pan test, đèn vàng sẽ không sáng.
• Kết hợp các pan test gây nhiễu khác để tăng độ khó cho sinh viên lúc thực hành. • Hỗ trợ nhớ được 2 vị trí ghế.
52
3.2. Lập trình và mô phỏng hệ thống đánh pan 3.2.1. Sơ đồ khối hệ thống
Hình 3.9. Sơ đồ khối hệ thống đánh pan
3.2.2. Sơ đồ nguyên lí của hệ thống
Nhìn vào sơ đồ hệ thống (hình 3.9) và sơ đồ nguyên lí (hình 3.10), ta có thể thấy được: • Nguồn chính là ắc quy 12V.
• Nguồn được đi tách biệt qua 2 công tắc để cấp nguồn riêng cho Arduino và công tắc ghế điện.
• Nguồn 12V được hạ áp xuống 5V thông qua mạch nguồn LM2596 để cấp vào Arduino, khoá K để cấp riêng cho công tắc. Mục đích có khóa K để khi đo kiểm các mô tơ ghế thì chỉ cần đóng khóa K để ngắt nguồn vô hệ thống ghế, mặt khác nguồn vẫn được cấp cho Arduino hoạt động để kích hoặc nhả các relay lúc đánh pan hoặc pan test. Để khi đo kiểm các chân bộ phận bên không bị ảnh hưởng tới nguồn điện cấp vào chìa khoá cũng như các bộ phận khác trên ghế điện.
• Đèn L1 để báo tín hiệu có điện qua chìa khoá ở chế độ ST. • Arduino đóng vai trò là mạch xử lí trung tâm.
53 • Các pan và pan test là các công tắc gạt 2 chân, sử dụng Arduino để đọc tín hiệu 5V ở
2 công tắc.
• Tín hiệu từ pan và pan test được gửi về Arduino qua các chân từ 1 tới 10, trong đó các chân 1/3/5/7/9 là các pan và 2/4/6/8/10 là các pan test.
• Arduino nhận tín hiệu và xuất tín hiệu mức cao ra các chân A4 và A5 vào LCD thông qua I2C, xuất tín hiệu mức cao ra các led xanh (L3), led đỏ (L3) và led vàng (L4) lần lượt thông qua các chân 12/13/0.
• Khi có lệch xuất tín hiệu relay 5V từ tín hiệu pan hoặc pan test, Arduino sẽ xuất tín hiệu mức cao để kích module relay 5V thông qua chân A0/A1/A2/A3/A4/11.
• Các module relay sẽ đóng vai đó đóng nhả relay để nối kín hoặc làm hở các đoạn dây khi đánh pan hoặc pan test tương ứng.
54
3.2.3. Lưu đồ thuật toán
Hình 3.11. Lưu đồ thuật toán sử dụng cho hệ thống đánh pan
Hình trên là lưu đồ thuật toán của hệ thống điều khiển đánh pan và sửa pan (pan test) của nhóm chúng em được sử dụng trên mô hình ghế điện ô tô. Nhìn vào sơ đồ ta có thể thấy được ban đầu thuật toán khai báo các biến đầu vào (IN) và đầu ra (OUT) tín hiệu từ các chân Arduino và thực hiện gán các giá trị cần thiết. Tiếp đến ta khởi tạo các chương trình con. Ở “void setup”, Arduino đọc tín hiệu từ các chân digital và thiết lập xuất tín hiệu ra màn hình LCD.
Ở vòng lặp “void loop”, chương trình thực hiện kiểm tra mạch điện hệ thống có lỗi hay không. Nếu không có lỗi thì chương trình cho hiển thị LCD và đèn báo, kết thúc vòng lặp. Ngược lại, nếu chương trình có lỗi, Arduino sẽ thực hiện xuất tín hiệu hiển thị LCD và đèn báo. Lúc này người dùng sẽ tiến hành sửa lỗi cho đến khi hệ thống không còn lỗi thì chương trình kết thúc.
55
3.2.4. Lập trình thuật toán 3.2.4.1. Khai báo 3.2.4.1. Khai báo
Hình 3.12. Thuật toán khai báo và gán lệnh
• Khai báo thư viện I2C và đặt địa chỉ LCD là 0x27 (dòng 1-4).
• Khai báo các chân led, công tắc pan, pan test, chân kích relay, biến trạng thái (dòng 6-13).
• Gán tên cho trạng thái “HIGH – LOW” của các chân kích relay (dòng 15-25).
3.2.4.2. Thiết lập chương trình con
56
Hình 3.14. Thiết lập hiển thị LCD, các chân INPUT, OUTPUT
3.2.4.3. Thuật toán chương trình chính
57
Hình 3.16. Thiết lập trường hợp hệ thống có lỗi và không có lỗi.
Hình 3.17. Thiết lập trường hợp đánh pan test đúng và sai cho cặp pan và pan test thứ nhất
Trường hợp đánh pan test đúng và sai cho các cặp pan và pan test thứ 2,3,4,5 tương tự như cặp pan và pan test thứ nhất ở trên.
58
3.2.5. Mô phỏng hệ thống đánh pan bằng Proteus 8 3.2.5.1. Sơ đồ tổng quan mạch mô phỏng
Hình 3.18. Sơ đồ cơ bản hệ thống đánh pan
Hệ thống mô phỏng điều khiển đánh pan ghế của nhóm chúng em gồm: • Arduino
• 5 công tắc đánh pan • 5 công tắc test đúng
• 10 công tắc test gây nhiễu cho sinh viên (không nối điện với công tắc) • 3 đèn led hiển thị:
+ Đèn xanh: ghế hiện không có lỗi
+ Đèn đỏ: ghế đang còn lỗi
+ Đèn vàng: có lỗi vừa được sửa đúng
+ 1 màn hình LCD 20x4
59
3.2.5.2. Trình tự hoạt động của thuật toán trên mô phỏng
1. Khi ghế bình thường, tắt công tắc:
Lúc này chưa có dòng điện để cấp nguồn cho Arduino nên hệ thống đánh pan chưa hoạt động: đèn led tắt, LCD tắt.
Hình 3.19. Khi ghế bình thường, tắt công tắc 2. Khi ghế bình thường, đã nối dây:
60 Khi nối dây thì sẽ có dòng điện cấp tới Arduino: LCD bật, hiển thị “Welcome!”
Hình 3.21. LCD hiển thị “Welcome!”
Lúc này ghế chưa có lỗi, Arduino nhận tín hiệu tất cả mạch điện trên chiếc ghế điện đều kín, phát tín hiệu LCD sẽ tiếp tục hiển thị “SEAT HAS NO FAULT” và đồng thời đèn led màu xanh cũng sẽ sáng để báo hiệu ghế không có lỗi (hình 3.21).
Hình 3.22. Ghế không có lỗi 3. Khi đánh 1 pan bất kỳ
61 Lúc này Arduino nhận được tín hiệu từ sau công tắc pan, nhận thấy mạch điện sau công tắc pan hở, xuất tín hiệu đến LCD hiển thị “SEAT HAS FAULT”, đồng thời đèn đỏ cũng sẽ sáng báo hiệu ghế đang có lỗi.
Sau khi gạt đúng pan test:
Hình 3.24. Gạt đúng pan test
Sau khi gạt đúng pan test, LCD hiện “SEAT HAS FAULT”, đèn vàng sáng lên 3s rồi tắt báo cho sinh viên biết là mình đã đánh đúng pan, đèn xanh sáng lên tức là không còn lỗi nào nữa. Kèm theo đó Arduino cũng sẽ kích relay ở các chân tương ứng với cặp pan và pan test đúng để nối mạch đang hở, hệ thống ghế sẽ hoạt động bình thường.
4. Khi đánh nhiều pan cùng một lúc:
Hình 3.25. Đánh nhiều pan cùng một lúc
Trường hợp này giống như cũng giống như lúc đánh 1 pan bất kỳ, Arduino nhận tín hiệu từ 1 chân tín hiệu của pan đó nhận thấy mạch điện hở, xuất tín hiệu đến LCD hiển thị “SEAT HAS FAULT, đồng thời đèn đỏ cũng sẽ sáng báo hiệu ghế đã có lỗi, đèn vàng tắt.
62 Sau khi gạt đúng 1 pan test:
Hình 3.26. Gạt lại không hết các pan
Sau khi gạt LCD hiển thị “SEAT HAS FAULT”, đồng thời đèn đỏ cũng vẫn sẽ sáng như thường bởi vì còn có lỗi, chỉ có đèn vàng sáng lên 3 giây để cho sinh viên biết được mình vừa gạt đúng pan test sau khi đo kiểm. Arduino cũng sẽ kích relay tương ứng với cặp pan và pan test vừa sửa đúng.
Sau khi gạt hết các pan test:
Nếu gạt lại hết các pan thì ghế mới hiểu là đã hết lỗi: LCD hiển thị “SEAT HAS NO FAULT” và đồng thời đèn led màu xanh cũng sẽ sáng báo lỗi đã hết.
Hình 3.27. Gạt lại hết các pan
Nếu đánh đúng hết các pan test: Arduino nhận tín hiệu từ từng pan test được đánh đúng, lập tức tín hiệu 5V của các pan lỗi đó, kích relay đóng lại và mạch điện sẽ được nối kín, đồng thời phát tín hiệu cho đèn vàng sáng 3 giây mỗi khi đánh đúng được 1 pan test. Khi đã đánh đúng hết các pan, LCD hiển thị “SEAT HAS NO FAULT” và đồng thời đèn led màu xanh cũng sẽ sáng.
63
Hình 3.28. Mạch điện kích relay.
Mạch điện kích relay (hình 3.28) sử dụng mô phỏng cơ bản theo module relay thực tế. Dòng vào kích 5V từ Arduino, sử dụng transitor khuếch đại dòng từ Arduino là loại NPN, các thông số điện trở như hình.
3.3. Lập trình và mô phỏng hệ thống nhớ vị trí ghế 3.3.1. Sơ đồ khối hệ thống
64
3.3.2. Sơ đồ nguyên lí hệ thống
Nhìn vào sơ đồ hệ thống (hình 3.28) và sơ đồ nguyên lí (hình 3.29), ta có thể thấy được: • Nguồn chính là ắc quy 12V.
• Ngoài việc cấp nguồn cho hệ thống đánh pan từ ắc quy, ắc quy còn cấp cho hệ thống điều khiển nhớ ghế.
• Nguồn 12V qua mạch nguồn hạ áp 5V cấp vào cho Arduino,
• Sau khi Arduino nhận tín hiệu vị trí ghế thông qua cảm biến Hall được đặt trên trục quay của mô tơ, đọc tín hiệu xung vuông gửi vào Arduino. Sau đó, Arduino nhận tín hiệu vị trí ghế và tín hiệu công tắc nhớ ghế để nhớ vị trí hiện tại.
• Sau khi thay đổi vị trí hiện tại để điều chỉnh ghế tới vị trí mới. Việc nhận biết vị trí ghế và nhớ vị trí mới được lặp đi lặp lại nếu người dùng nhấn nút nhớ vị trí 2 hoặc nhớ đè lên vị trí 1 ở lần đầu tiên
• Mỗi lần ghế di chuyển và nhớ, thông tin vị trí ghế và hiển thị vị trí được lưu đều được thể hiện lên màn hình LCD.
65
3.3.3. Lưu đồ thuật toán
Hình 3.31. Lưu đồ thuật toán hệ thống nhớ vị trí ghế
Dựa trên lưu đồ thuật toán ở trên, chúng ta có thể thấy sau khi khởi động, khai báo và khởi tạo chương trình con, cảm biến sẽ tiến hành đọc vị trí ghế. Sau đó chúng ta sẽ điều chỉnh ghế đến vị trí phù hợp thông qua công tắc điều khiển ghế và tiến hành lưu lại vị trí ghế đó hay còn gọi là nhớ vị trí ghế. Tiếp theo chúng ta điều chỉnh ghế đến một vị trí mới và tiến hành bấm công tắc gọi lại vị trí ghế đã lưu. Lúc này chúng ta sẽ xét theo 3 trường hợp:
• Nếu vị trí mới < vị trí đã nhớ: ghế tiến đến vị trí đã nhớ -> chương trình kết thúc. • Nếu vị trí mới > vị trí đã nhớ: ghế lùi lại vị trí đã nhớ -> chương trình kết thúc. • Nếu vị trí mới = vị trí đã nhớ: ghế không di chuyển -> chương trình kết thúc.
66
3.3.4. Lập trình thuật toán 3.3.4.1. Khai báo 3.3.4.1. Khai báo
Hình 3.32. Thuật toán khai báo và gán lệnh
67
3.3.4.2. Thiết lập chương trình con
Hình 3.34. Thuật toán hiển thị vị trí hiện tại
68
Hình 3.36. Thuật toán gọi vị trí ghế tiến hoặc lùi
3.3.4.3. Thuật toán chương trình chính
69
Hình 3.38. Thuật toán nhớ vị trí ghế
70
3.3.5. Mô phỏng hệ thống bằng Proteus 8
3.3.5.1. Sơ đồ tổng quan mạch mô phỏng hệ thống
Hình 3.40. Sơ đồ tổng quan mạch mô phỏng hệ thống
Hệ thống mô phỏng nhớ vị trí ghế của nhóm chúng em gồm: • Board Arduino Mega 2560
• 2 công tắc TIEN – LUI mô phỏng lại công tắc tiến lùi của ghế • 2 công tắc nhớ 2 nhớ vị trí ghế
• 2 công tắc gọi lại 2 vị trí ghế đã nhớ
• 1 mô tơ mô phỏng lại mô tơ tiến lùi của ghế • LCD 20x4 và I2C
• Bộ phận tạo xung mô phỏng cho cảm biến Hall
3.3.5.2. Trình tự hoạt động của thuật toán trên mô phỏng
1. Khi chưa bật công tắc ghế
71
Hình 3.41. Chưa bật công tắc ghế 2. Khi vừa bật công tắc ghế
Lúc này có điện cấp đến Arduino, LCD nhận tín hiệu từ Arduino và hiển thị “Vi tri hien tai: 0”, mô tơ ghế vẫn chưa hoạt động.
Hình 3.42. Vừa bật công tắc ghế 3. Khi bấm công tắc tiến hoặc lùi
*Trường hợp bấm công tắc tiến*
Lúc này cảm biến Hall sẽ nhận được tín hiệu quay từ mô tơ, relay cảm biến đóng và gửi tín hiệu vị trí về Arduino, Arduino nhận tín hiệu và xuất lên màn hình LCD hiển thị “Vi tri hien tai: xxx” (xxx là vị trí hiện tại của mô tơ tiến lùi).
Trường hợp bấm công tắc lùi tương tự bấm công tắc tiến, chỉ đổi chiều quay mô tơ.
72
4. Khi bấm công tắc nhớ vị trí ghế
Lúc này Arduino sẽ nhận tín hiệu từ công tắc nhớ vị trí ghế, xuất tín hiệu lên LCD hiển thị vị trí nhớ ghế bằng vị trí hiện tại, cụ thể là “Vi tri 1 = xxx” (xxx là vị trí nhớ ghế), đồng thời vị trí hiện tại và trạng thái mô tơ không thay đổi.
Hình 3.44. Khi bấm công tắc nhớ vị trí ghế 5. Khi bấm công tắc gọi nhớ vị trí ghế
Trước khi bấm công tắc gọi nhớ vị trí ghế, chúng ta sẽ dùng công tắc TIEN – LUI của ghế để di chuyển ghế tới vị trí mới sao cho khác vị trí ban đầu. Tương tự phần bấm công tắc tiến lùi, LCD sẽ hiển thị vị trí mới được di chuyển tới, lúc này vị trí mới này chính là vị trí hiện tại, cụ thể LCD sẽ hiển thị “Vi tri hien tai: xxx” (xxx là vị trí hiện tại).
Hình 3.45. LCD hiển thị vị trí hiện tại và vị trí đã lưu
Khi bấm công tắc gọi vị trí nhớ ghế, Arduino sẽ nhận được tín hiệu gọi vị trí và xuất tín hiệu kích relay điều khiển mô tơ quay tới vị trí ghế đã được nhớ, đồng thời cũng xuất tín hiệu đến LCD để hiển thị vị trí hiện tại (“Vi tri hien tai: xxx), vị trí hiện tại sẽ tăng dần hoặc giảm dần phụ thuộc vào vị trí hiện tại và và vị trí đã nhớ trước đó.
73
Hình 3.46. Mô tô đang quay tới vị trí đã nhớ khi bấm công tắc gọi vị trí nhớ
Sau đó mô tơ sẽ tiếp tục quay cho tới khi vị trí hiện tại bằng vị trí đã nhớ, lúc này LCD sẽ hiển thị vị trí hiện tại và vị trí nhớ bằng nhau, relay kích mô tơ tiến lùi quay cũng được mở trở lại, mô tơ dừng quay.
Hình 3.47. Mô tơ quay lại đúng vị trí ghế đã nhớ
74 Sau khi mô phỏng xong riêng 2 hệ thống đánh pan và hệ thống nhớ vị trí ghế, nhóm chúng em đã kết hợp 2 hệ thống vào một mạch điện mô phỏng chung dùng chung board Arduino và màn hình LCD. Đây cũng chính là mạch điện nhóm sẽ thực hiện thi công trên mô hình hệ thống ghế.
75
3.3.6. So sánh hệ thống nhớ vị trí ghế trên xe Toyota Camry với hệ thống nhớ vị trí ghế qua lập trình Arduino và mô phỏng Proteus ghế qua lập trình Arduino và mô phỏng Proteus
3.3.6.1. Hệ thống nhớ vị trí ghế trên xe Toyota Camry
Hình 3.49. Sơ đồ hệ thống điều khiển ghế và nhớ ghế trên xe Toyota Camry
3.3.6.2. So sánh hệ thống nhớ vị trí ghế