Báo cáo đồ án Lập trình hệ thống Vi điều khiển. Đề tài : điều khiển các thiết bị điện trong gia đình bằng bluetooth điện thoại AndroidĐây là tài liệu báo cáo đồ án của nhóm sinh viên khoa Công nghệ thông tin, đại học bách khoa Đà Nẵng nội dung chủ yếu xoay quanh quy trình lập trình trên bo mạch Arduino , kết hợp với lập trình ứng dụng điều khiển trên điện thoại android, thông qua sóng bluetooth điều khiển bật tắt hệ thống đèn điện 220V, tăng giảm tốc độ quạt, đóng mở cửa ra vào.
Trang 1Để hoàn thành được đề tài này, chúng em xin được gửi lời cảm ơn tới thầy giáo TS.Trần Thế Vũ và TS.Huỳnh Hữu Hưng, hai thầy đã tận tình giúp đỡ và chỉ bảo cho chúng em trong suốt thời gian làm đề tài vừa qua Em cũng gửi lời cảm ơn tới các thầy
cô giáo trong khoa Công nghệ thông tin – Trường Đại học Bách Khoa –Đại Học Đà Nẵng Các thầy cô đã tạo điều kiện cho chúng em học tập và nghiên cứu trong suốt quá trình làm đồ án cũng như học tập
Trang 2MỤC LỤC
MỤC LỤC 2
I MỤC ĐÍCH VÀ CHỨC NĂNG 3
1.Mục đích : 3
2.Chức năng : 3
II.DANH SÁCH THIẾT BỊ VÀ SƠ ĐỒ MẠCH 3
1.Danh sách thiết bị : 3
2.Sơ đồ mạch : 6
III.CODE ARDUINO VÀ ANDROID 6
1 Code Arduino : 6
2 Code Android : 10
IV QUÁ TRÌNH THỰC HIỆN 10
1.Phân công công việc : 10
2.Các giai đoạn hoàn thiện : 10
a) Giai đoạn thu thập phần cứng : 10
Giai đoạn thiết lập phần cứng : 10
Viết code và cải thiện : 19
b) Giai đoạn cải tiến các module : 21
Giai đoạn hoàn tất sản phẩm : 26
V TÀI LIỆU THAM KHẢO 27
LỜI KẾT 27
Trang 3- Điều khiển tốc độ quạt
- Điều khiển đóng mở cửa Các chức năng này đều được thực hiện thông qua thiết bị android
II.DANH SÁCH THIẾT BỊ VÀ SƠ ĐỒ MẠCH
1.Danh sách thiết bị :
1) Mạch Arduino
2) Module Bluetooth HC05
Trang 43) Module Relay ( 4 rơle )
4) Led màu
5) Quạt tản nhiệt PC
Trang 10}
}
2 Code Android :
Nhóm gửi kèm code Android cùng với bản mềm
IV QUÁ TRÌNH THỰC HIỆN
1.Phân công công việc :
1 Phân tích thết kế, chuẩn bị tài liệu, linh kiện phần cứng : Nguyên, Huy, Kiệt
2 Tìm hiểu android, xây dựng phần mềm kết nối với Arduino thông qua tín hiệu Bluetooth : Kiệt
3 Tìm hiểu ngôn ngữ C lập trình trên mạch điều khiển Arduino, xây dựng mô hình mạch điện, thiết kế mô hình phần cứng : Nguyên , Huy
2.Các giai đoạn hoàn thiện :
a) Giai đoạn thu thập phần cứng :
Các linh kiện bao gồm :
- 1 Transistor NPN ( N2222), 1 Diode(N4007), 1 Pin 9V, 1 tụ gốm 101( 100nF )
Nhóm thiết kế lắp các linh kiện trong một hộp gỗ 25 *25 cm
Giai đoạn thiết lập phần cứng :
Bản này là bản demo trên điện một chiều, thời gian thực hiện vào tháng 10/2015:
Trang 11-Mục tiêu của nhóm trong thời gian này là có thể mô phỏng điều khiển được các đèn led bằng bluetooth trên điện thoại Android ở mức độ bật tắt và chưa kết hợp với rơ le , chỉ kích các chân ra của Arduino
- Sau khi có được các linh kiện, nhóm thực hiện thử nghiệm kết nối module HC-05 với điện thoại có cài phần mềm tham khảo tải từ trên mạng Khó khăn lúc này là có app không kết nối được blutooth , liên tục bị error đóng áp , cuối cùng nhóm chọn được phần mềm tên : Arduino Bluetooth Control Pro của tác giả người Thái Lan và đã điều khiển sáng tắt được các led khi kết hợp với code trên Arduino
- Dự định của nhóm là việt hóa app này và phát triển tiếp các module phần cứng còn lại
- Tiếp tục thử nghiệm trong tháng 10 , thêm module relay vào trước các led , giai đoạn này gặp nhiều khó khăn về phần cứng, chưa hiểu hết nguyên lý Ro le nên mắc dây điện rắc rối , các rơ le đóng ngắt không theo ý muốn, nhấn nút mở lại tắt và ngược lại , có lúc role nhảy liên tục , và còn khó khăn nữa đó là sau khi nạp code cho arduino, đèn tín hiệu trên HC-05 nhảy liên tục- nghĩa là hoàn toàn mất kết nối, sau nhiều lần tìm hiểu phát hiện lỗi này xảy ra do khi nạp code Arduino không rút kết nối hai chân tín hiệu TX, RX trên board mạch thực hiện sửa lỗi này mạch kết nối ổn định
- Nhóm tiếp tục thảo luận, thấy trên app có tới 8 module đóng ngắt , các nút và các chức năng không phù hợp với các module , lắp vào mạch thực tế đèn sáng không theo thứ tự , nên sẽ nghiên cứu viết phần mềm android , tìm cách giải nén file APK, đọc mã nguồn và tham khảo các nguồn trên mạng khác , nhóm muốn xây dựng phần mềm
Android riêng theo ý muốn của mình
- Thực tế trong giai đoạn này chưa nghiên cứu kỹ, chưa hiểu code, cũng như nguyên lý hoạt động của phần mềm điều khiển trên Android , chỉ dừng lại ở mức độ thử nghiệm kết nối
Một số hình ảnh trong giai đoạn này :
Trang 13Code trong giai đoạn này :
Code trên mạch điều khiển Arduino:
int firstSensor = 0; // first analog sensor
int secondSensor = 0; // second analog sensor
int thirdSensor = 0; // digital sensor
int inByte = 0; // incoming serial byte
Trang 14boolean status_unlock;
boolean status_bluetooth;
long interval = 1000; // interval at which to blink (milliseconds)
long previousMillis = 0; // will store last time LED was update
//pinMode(2, INPUT); // digital sensor is on digital pin 2
//establishContact(); // send a byte to establish contact until receiver
digitalWrite(LED_PIN1, LOW); // switch off LED
digitalWrite(LED_PIN2, LOW); // switch off LED
digitalWrite(LED_PIN3, LOW); // switch off LED
digitalWrite(LED_PIN4, LOW); // switch off LED
Trang 15
digitalWrite(LED_PIN5, LOW); // switch off LED
digitalWrite(LED_PIN6, LOW); // switch off LED
digitalWrite(LED_PIN7, LOW); // switch off LED
digitalWrite(LED_PIN8, LOW); // switch off LED
digitalWrite(LED_PIN1, HIGH); // switch on LED
Serial.print('A', BYTE); // send a char
digitalWrite(LED_PIN2, HIGH); // switch on LED
Serial.print('a', BYTE); // send a char
//delay(800);
digitalWrite(LED_PIN2, LOW); // switch off LED
Trang 16digitalWrite(LED_PIN3, HIGH); // switch on LED
Serial.print('B', BYTE); // send a char
inByte = 0;
}
if(inByte == 'b'){
digitalWrite(LED_PIN3, LOW); // switch off LED
Serial.print('b', BYTE); // send a char
inByte = 0;
}
if(inByte == 'C'){
digitalWrite(LED_PIN4, HIGH); // switch on LED
Serial.print('C', BYTE); // send a char
inByte = 0;
}
if(inByte == 'c'){
digitalWrite(LED_PIN4, LOW); // switch off LED
Serial.print('c', BYTE); // send a char
Trang 17Serial.print('D', BYTE); // send a char
inByte = 0;
}
if(inByte == 'd'){
digitalWrite(LED_PIN5, LOW); // switch off LED
Serial.print('d', BYTE); // send a char
inByte = 0;
}
if(inByte == 'E'){
digitalWrite(LED_PIN6, HIGH); // switch on LED
Serial.print('E', BYTE); // send a char
inByte = 0;
}
if(inByte == 'e'){
digitalWrite(LED_PIN6, LOW); // switch off LED
Serial.print('e', BYTE); // send a char
inByte = 0;
}
if(inByte == 'F'){
digitalWrite(LED_PIN7, HIGH); // switch on LED
Serial.print('F', BYTE); // send a char
inByte = 0;
}
if(inByte == 'f'){
digitalWrite(LED_PIN7, LOW); // switch off LED
Serial.print('f', BYTE); // send a char
Trang 18inByte = 0;
}
if(inByte == 'G'){
digitalWrite(LED_PIN8, HIGH); // switch on LED
Serial.print('G', BYTE); // send a char
inByte = 0;
}
if(inByte == 'g'){
digitalWrite(LED_PIN8, LOW); // switch off LED
Serial.print('g', BYTE); // send a char
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis; // save the last time you blinked the LED
sec++;
Trang 19if(status_unlock==true){
if(sec== 11){
digitalWrite(LED_PIN1, HIGH); // switch on LED delay(800); digitalWrite(LED_PIN1, LOW); // switch off LED status_unlock = false;
sec = 0; }
}
else sec = 0;
}
*/
} //Loop void establishContact() { while (Serial.available() <= 0) { Serial.print('.', BYTE); // send a capital A delay(500); } } Viết code và cải thiện :
Thực hiện vào cuối tháng 10 đầu 11/2015
- Các công việc đã thực hiện :
- Mục tiêu của nhóm là thực hiện 3 module :
+ Bật tắt điện 220V
Trang 20+ Điều khiển tốc độ quay của quạt tản nhiệt theo ý muốn
+ Đóng mở cửa theo ý tưởng môtơ quay nửa vòng sau đó đảo chiều quay và thực hiện thao tác đóng cửa
* Module bật tắt điện 220V:
- Tìm hiểu module Role và biết được nguyên lý làm việc , đây là loại module role kích mức thấp , nhảy tiếp điểm khi chân tín hiệu Arduino cấp là LOW, và sẽ ngắt khi nhận tín hiệu HIGH , điều này giải thích khi nhấn nút bật trên Android đèn lại tắt và khi lắp mạch không cần dùng cả 3 chân COM, ON ,OFF chỉ dùng 2/3 chân nên việc mắc mạch sẽ đơn giản hơn và loại Role này dùng được cho cả điện 1 chiều lẫn xoay chiều
- Phần mềm trên Android : khó khăn nhất là cách kết nối bluetooth giữa hai thiết bị , làm sao để kết nối ổn định nhất
- Cuối cùng nhóm tự thiết kế được 6 nút bấm trên giao diện phần mềm trong đó có những chức năng cần thiết nhất :
+ Nút Link và Unlink :dùng để kết nối và ngắt kết nối Bluetooth
+ Hai nút ON, OFF dùng cho đèn thứ nhất
+ Hai nút ON, OFF dùng cho đèn thứ hai
- Thực hiện kết nối như đã demo trên điện một chiều, kết quả nhóm đã thành công
- Tiếp tục nảy sinh ý tưởng khi đã làm chủ code java trên phần mềm android , ý tưởng
là thay vì nhấn nút để điều khiển thì thay thế bằng thao tác lắc điện thoại , khi lắc đèn sẽ sáng , lắc thêm lần nữa đèn sẽ tắc
- Thay đổi code java và tiếp tục thảo luận khi nảy sinh vấn đề đó là việc lắc sẽ gửi tín hiệu đồng bộ tới tất cả cả các đèn , như vậy các đèn sẽ sáng, tắc cùng lúc , không theo ý muốn trong thực tế hoặc sẽ lãng phí điện nếu có nhiều đèn
- Để giải quyết vấn đề nhóm thực hiện cả hai cách bật tắt song song : vừa lắc được điện thoại, vừa có thể bấm nút để điều chỉnh
-Sau nhiều lần thay đổi code nhóm cũng đã điều khiển được đèn theo ý muốn
Một số hình ảnh trong giai đoạn này :
Trang 21b) Giai đoạn cải tiến các module :
Trang 22+ 1 điện trở 330 Ôm
+ Dây nối
/* Module này không sử dụng đến chức năng của rơ le */
-Ý tưởng : trên điện thoại di động có chức năng thay đổi độ sáng của màn hình bằng cách kéo tăng giảm một thanh trượt, nhóm đã tìm hiểu và làm theo mô hình này
Một số hình ảnh trong giai đoạn này :
Trang 23Code trong giai đoạn này :
int b = 0;
Trang 27V TÀI LIỆU THAM KHẢO
1 Series bài giảng Lập Trình Vi Điều Khiển trên kênh YouTube của Thạc Sĩ Huỳnh Minh Phú , WebSite Arduino.vn và các tài liệu trên mạng khác
2 Wikipedia.org tìm hiểu các khái niệm về lập trình Vi Điều Khiển và lập trình Android
3 Tham khảo sách “ The process of andruino engineering “
LỜI KẾT
Trong khoản thời gian ngắn được sự hướng dẫn cũng như giúp đỡ tận tình của thầy cô, chúng em đã nhận được rất nhiều kiến thức bổ ích Đặc biệt là đối với những sinh viên sắp ra trường Một lần nữa em xin cảm ơn các thầy đã hỗ trợ để chúng em có thể hoàn thành đề tài này
Trang 28Do hạn chế về mặt thời gian và khả năng còn hạn hẹp nên bài báo cáo của nhóm không tránh khỏi những sai sót Nhóm em xin ghi nhận sự góp ý cũng như nhận xét của thầy để có thể rút được nhiều kinh nghiệm cho bản thân hơn
Em xin chân thành cảm ơn !
Đà Nẵng, ngày 3 tháng 12 năm 2015