Điện tử đang trở thành một ngành khoa học đa nhiệm vụ.Sự phát triển của kỹ thuật điện tử đã tạo ra hàng loạt những thiết bị với sự chính xác cao, tốc độ nhanh và gọn nhẹ.Và kỹ thuật vi điều khiển là một trong những ngành then chốt của ngành kỹ thuật điện tử mà chúng ta có thể thấy những ứng dụng của nó trong đời sống hằng ngày.Chẳng hạn như: ti vi, máy tính, laptop, điện thoại hay thậm chí là những dây chuyền sản xuất trong các nhà máy, xí nghiệp. Chính vì vây, với mong muốn có thể bắt kịp thời đại, và ứng dụng cho chính gia đình mình và xã hội nên em đã lựa chọn đề tài: THIẾT KẾ HỆ THỐNG MỞ CỬA TỰ ĐỘNG BẰNG MÃ VÀ BLUETOOTH sử dụng ARDUINO hiển thị thông báo và cả nhiệt độ phòng trên LCD.
Trang 1I.TỔNG QUAN VỀ ĐỀ TÀI
Ngày nay, với những ứng dụng của khoa học kỹ thuật tiên tiến, thế giới chúng ta đã và đang thay đổi từng ngày, ngày càng văn minh và hiện đại hơn.Sự phát triển của khoa học
kỹ thuật đã đưa chúng ta đến với một thời đại mới, thời đại của công nghiệp hóa và hiện đại hóa
Điện tử đang trở thành một ngành khoa học đa nhiệm vụ.Sự phát triển của kỹ thuật điện
tử đã tạo ra hàng loạt những thiết bị với sự chính xác cao, tốc độ nhanh và gọn nhẹ.Và kỹthuật vi điều khiển là một trong những ngành then chốt của ngành kỹ thuật điện tử mà chúng ta có thể thấy những ứng dụng của nó trong đời sống hằng ngày.Chẳng hạn như: ti
vi, máy tính, laptop, điện thoại hay thậm chí là những dây chuyền sản xuất trong các nhà máy, xí nghiệp Chính vì vây, với mong muốn có thể bắt kịp thời đại, và ứng dụng cho chính gia đình mình và xã hội nên em đã lựa chọn đề tài: THIẾT KẾ HỆ THỐNG MỞ CỬA TỰ ĐỘNG BẰNG MÃ VÀ BLUETOOTH sử dụng ARDUINO hiển thị thông báo
và cả nhiệt độ phòng trên LCD
II.THIẾT BỊ PHẦN CỨNG VÀ PHẦN MỀM 2.1 THIẾT BỊ PHẦN CỨNG
1.BOARD ARDUINO UNO R3
a) CẤU TRÚC:
SƠ ĐỒ NGUYÊN LÝ ARDUINO R3
Trang 2Một vài thông số của Arduino UNO R3
Điện áp hoạt động 5V DC (chỉ được cấp qua cổng USB)
Điện áp vào khuyên dùng 7-12V DC
Điện áp vào giới hạn 6-20V DC
Số chân Digital I/O 14 (6 chân hardware PWM)
Số chân Analog 6 (độ phân giải 10bit)
Dòng tối đa trên mỗi chân I/O 40 mA
ẩm và hiển thị lên màn hình LCD,…
Trang 3b) NGUYÊN LÝ HOẠT ĐỘNG
GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO Khi dùng các
thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với nhau
3.3V: cấp điện áp 3.3V đầu ra Imax = 500mA
Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, nối cực dương của
nguồn với chân này và cực âm của nguồn với chân GND
IOREF: điện áp tham chiếu của vi điều khiển trên Arduino UNO có thể được đo ở
chân này(luôn là 5V) Mặc dù vậy nhưng không được lấy nguồn 5V từ chân này để sử dụng bởi chức năng của nó không phải là cấp nguồn
RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với
việc chân RESET được nối với GND qua 1 điện trở 10KΩ Dùng kết nối với chân reset của các Shield
Trang 4Một số chân digital có các chức năng đặc biệt như sau:
2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive –
RX) dữ liệu TTL Serial Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây Nếu không cần giao tiếp Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết
Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép xuất ra xung PWM với độ phân
giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite() Nói một cách đơn giản, có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác
Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) Ngoài các chức
năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác
LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L) Khi bấm nút
Reset, sẽ thấy đèn này nhấp nháy để báo hiệu Nó được nối với chân số 13 Khi chân này được người dùng sử dụng, LED sẽ sáng
Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0 →
210-1) để đọc giá trị điện áp trong khoảng 0V → 5V Với chân AREF trên board,chúng ta
có thể để đưa vào điện áp tham chiếu khi sử dụng các chân analog Tức là nếu chúng ta cấp điện áp 2.5V vào chân này thì chúng ta có thể dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân giải vẫn là 10bit Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác
2.MA TRẬN PHÍM
a) CẤU TRÚC:
_Về cơ bản thì ma trận phím dựa trên một ma trânh hàng và cột.Sự kiện một phím được nhấn hoặc thả có thể được ghi lại bằng cách điều khiển và đọc trạng thái của các hàng và các cột trong ma trận phím
b) NGUYÊN LÝ QUÉT PHÍM:
_Thuật toán quét phím được sử dụng là lần lượt tìm hàng và tìm cột ( hoặc ngược
lại ).Khi tìm hàng, các hàng sẽ được đặt làm đầu vào, các cột sẽ được đặt làm đầu ra ở mức thấp Sau đó kiểm tra các hàng xem có hàng nào ở mức thấp hay không( có phím nào bấm, gây ra nối cột với cột hay không?) Sau khi xác định được hàng sẽ đặt cột làm đầu vào, hàng vừa tìm được làm đầu ra mức thấp.Việc kiểm tra được tiến hành với các cột.Sau khi xác định được hàng và cột sẽ suy ra phím được bấm
Trang 5Ta có thể hiểu đơn giản như sau:
+) Đầu tiên cho các hàng ở mức 1 và các cột ở mức 0
+) Kiểm tra xem hàng nào được nhấn (khi nút được nhấn) tức là được nhận tín hiệu từ các cột
+) Nếu có 1 hàng bất kì được nhấn, sau đó ta lại chuyển giá trị 0 vào hàng được nhấn và giá trị 1 vào các cột.Khí đó cột lại nhận nhiệm vụ làm tín hiệu vào.Nếu mà 1 trong các cột được nhấn( khi nút được nhấn) trong các trường hợp này thi cho ra các giá trị tương ứng
SƠ ĐỒ NGUYÊN LÝ MA TRẬN PHÍM 4X4
Trang 6Tổng Quát Về LCD HD44780
1) Hình dáng và kích thước:
Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên hình 1 là loại LCD thông dụng
Hình 1 : Hình dáng của loại LCD thông dụng
Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780) bên trong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết Các chân này được đánh số thứ tự và đặt tên như hình 2 :
Hình 2 : Sơ đồ chân của LCD
Trang 7* Chức năng các chân :
Chân Ký
hiệu Mô tả
1 Vss Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND
của mạch điều khiển
2 VDD Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với
VCC=5V của mạch điều khiển
3 VEE Điều chỉnh độ tương phản của LCD
4 RS Chân chọn thanh ghi (Register select) Nối chân RS với logic “0”
(GND) hoặc logic “1” (VCC) để chọn thanh ghi
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD
5 R/W Chân chọn chế độ đọc/ghi (Read/Write) Nối chân R/W với logic
“0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc
6 E Chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus
DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ ởbus đến khi nào chân E xuống mức thấp
7 - 14 DB0 -
DB7
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU
Có 2 chế độ sử dụng 8 đường bus này :+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB
Bảng 1 : Chức năng các chân của LCD
* Ghi chú : Ở chế độ “đọc”, nghĩa là MPU sẽ đọc thông tin từ LCD thông qua các chân DBx
Trang 8Còn khi ở chế độ “ghi”, nghĩa là MPU xuất thông tin điều khiển cho LCD thông qua các chân DBx
2 Nguyên lý hoạt động LCD16X2.
LCD16x2 là một màn hình hiển thị bao gồm nhiều ma trận nhỏ, khi hoạt động thì LCD 16x2 sẽ hiển thị các kí tự trong bảng mã ASCII Vi điều khiển gửi các tín hiệu khởi tạo cho LCD16X2, sau đó hiển thị các được kí tự lên màn hình hiển thị
* Trình tự giao tiếp Text LCD.
Trình tự giao tiếp với LCD được trình bày trong flowchart ở hình 6
Hình 6 Trình tự giao tiếp với Text LCD
Để sử dụng LCD chúng ta cần khởi động LCD, sau khi được khởi động LCD đã sẵn sàng để hiển thị Quá trình khởi động chỉ cần thực hiện 1 lần ở đầu chương trình Trong bài này, quá trình khởi động được viết trong 1 chương trình con tên int_LCD, khởi động LCD thường bao gồm xác lập cách giao tiếp, kích thước font, số dòng LCD (funcstion set), cho phép hiển thị LCD, sursor…(Display control), chế độ hiển thị tăng/giảm, shift (Entry mode set) Các thủ tục khác như xóa LCD, viết ký tự lên LCD, di chuyển con trỏ…được sử dụng liên tục trong quá trình hiển thị LCD và sẽ được trình bày trong các đoạn chương trình con riêng
Trang 93) Sơ đồ khối của HD44780:
Hình 3 : Sơ đồ khối của HD44780
4.Động cơ Servo
Servo là một dạng động cơ điện đặc biệt Không giống như động cơ thông thường cứ cắmđiện vào là quay liên tục, servo chỉ quay khi được điều khiển (bằng xung PPM) với gócquay nằm trong khoảng bất kì từ 0o - 180o Mỗi loại servo có kích thước, khối lượng và
Trang 10cấu tạo khác nhau Có loại thì nặng chỉ 9g (chủ yếu dùng trên máy bay mô hình), có loạithì sở hữu một momen lực (vài chục Newton/m), hoặc có loại thì khỏe và nhông sắc chắcchắn Trong đề tài này em sử dụng Tower Pro Micro Servo 9g
Thông số kỹ thuật:
Điện áp cung cấp: 4.8 ~ 6V
Torque: 1.8kg/cm cho 4.8V, 2.2kg/cm cho 6V
Dải nhiệt độ hoạt động: - 30 đến 60oC
Trang 11Số chân: 6 ( STATE , RXD, TXD, GND , VCC, KEY)
b) sơ đồ kết nối:
Hướng nối chân bluetooth hc-05 với board arduino:
Trang 121.1 Giao diện
1.2 Vùng lệnh
Bao gồm các nút lệnh menu (File, Edit, Sketch, Tools, Help) Phía dưới là các icon chophép sử dụng nhanh các chức năng thường dùng của IDE được miêu tả như sau:
Trang 131.3 Vùng viết chương trình
Bạn sẽ viết các đoạn mã của mình tại đây Tên chương trình của bạn được hiển thị ngay
dưới dãy các Icon, ở đây nó tên là “Blink” Để ý rằng phía sau tên chương trình có một dấu “§” Điều đó có nghĩa là đoạn chương trình của bạn chưa được lưu lại.
1.4 Vùng thông báo (debug)
Những thông báo từ IDE sẽ được hiển thị tại đây Để ý rằng góc dưới cùng bên phải hiểnthị loại board Arduino và cổng COM được sử dụng Luôn chú ý tới mục này bởi nếuchọn sai loại board hoặc cổng COM, bạn sẽ không thể upload được code của mình
Trang 142 công cụ lập trình MIT APP INVENTOR:
Để lập trình cho điện thoại android ta sử dụng trang web lập trình
http://ai2.appinventor.mit.edu/
Đây là công rất hiệu quả cho người mới bắt đầu lập trình trên điện thoại
Trang 15“ * ” tại vị trí đã định sẵn trong chương trình.
+ Nếu nhấn A: LCD hiển thị đo nhiệt độ phòng
+ Nếu nhấn B : Xóa màn hình LCD và hiển thị yêu cầu nhập Pass
+ Nếu nhấn C: Thay đổi Password Trong khi thay đổi nếu muốn làm các việc khác hay muốn thoát ra vẫn có thể được
BIẾN
KHỐI HIỂNTHỊ
BỘ XỬ LÝ
BỘ ĐIỀUKHIỂNKHỐI NGUỒN
Trang 16 Nhập Password hiện tại
Nếu đúng thì nhập Pass mới 1 lần và chờ thông báo xong Lúc này Password
sẽ được ghi lại trong EEPROM và trở về việc yêu cầu nhập Password ban đầu
và password là pass chúng ta vừa thay đổi
Nếu sai, thoát khỏi việc đồi Pass và hiển thị yêu cầu nhập Pass ban đầu
+ Nếu nhấn D: Khi nhập đủ 4 kí tự, nhấn D sẽ kiểm tra Pass vừa nhập với Pass đã ghi trong EEPROM Nếu đúng sẽ khóa cửa và hiển thị thông báo trên LCD và trở về việc hiển thị yêu cầu nhập pass ban đầu Nếu sai trở về hiển thị nhập Pass ban đầu
+ Nếu nhấn “ * ” : Khi nhập đủ 4 kí tự, nhấn * sẽ kiểm tra Pass và mở cửa.Nếu sai sẽ hiển thị thông báo và yêu cầu nhập lại pass Nếu sai 3 lần sẽ hiển thị thông báo và yêu cầu chờ 10s Nếu đúng mở cửa và trở về hiển thị nhập Pass ban đầu
+ Nếu nhấn “ # ” : Trong trường hợp nếu ta đổi Pass có sai sót hay quên Pass, ta có thể đặt lại Password là 2345 nếu nhấn “ # ”
3.2 Sơ đồ kết nối chi tiết hệ thống
Trang 17IV.Giải thuật và chương trình điều khiển
ClearScreen
LCD: SET PASS AGAIN
NHẤN B HOẶC D,*,#
NHẤN B
NHẤN A
Đ ClearScreen
LCD : ENTER YOUR PASS
S
ClearScreen LCD : ENTER YOUR
PASS
LCD: HIỂN THỊ NHIỆT ĐỘ Đ
S
S NHẤN B
Đ
S
ClearScreen LCD : ENTER YOUR PASS
Trang 18NHẤNPHÍM 1-9
Đ
S
pass[i++]=myKey LCD: *
Trang 19kp=7 kp=8
LCD: ** ACCESS**
LOCK DOORmyservo.write(0)
Trang 20S
ClearScreen LCD : ENTER YOUR PASS
Đ LCD: WRONG PASS GOODLUCK AGAIN
Trang 21Đ
S
ClearScreen LCD : ENTER YOUR PASS
key=0 LCD: DONE…
Trang 22const byte ROWS = 4;
const byte COLS = 4;
// Define the Keymap
char Keys[ROWS][COLS] = { {'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Trang 24if (myKey=='B') { clearScreen(); displayLCD();Currentposition=6; i=0; myKey=0; k=0;
} else {myKey=0; Donhietdo();}
}
}
if(myKey=='B') { clearScreen(); displayLCD(); Currentposition=6; i=0; myKey=0; } if(myKey=='D') { checkPassword_lock_door(); displayLCD(); Currentposition=6; i=0; myKey=0; a=0 pass[0]=0;
pass[1]=0;
pass[2]=0;
pass[3]=0;
}
if(myKey=='*') { checkPassword(); clearScreen(); displayLCD(); myKey=0;
Currentposition=6; i=0; myKey=0;
pass[0]=0;
pass[1]=0;
pass[2]=0;
pass[3]=0;
}
if(myKey=='#') { clearScreen();
Trang 25for(int j=0;j<4;j++) EEPROM.write(j, j+50);
Trang 28lcd.setCursor(6,1); lcd.print(" 6 "); delay(1000);
lcd.setCursor(6,1); lcd.print(" 5 "); delay(1000);
lcd.setCursor(6,1); lcd.print(" 4 "); delay(1000);
lcd.setCursor(6,1); lcd.print(" 3 "); delay(1000);
lcd.setCursor(6,1); lcd.print(" 2 "); delay(1000);
lcd.setCursor(6,1); lcd.print(" 1 "); delay(1000);
Trang 29if ((key)&& (j<4))
{
Trang 31if (myKey=='B') { clearScreen(); displayLCD();
Currentposition=6; i=0; myKey=0; k=0;}
else {myKey=0; Donhietdo();}
Trang 32lcd.print(key);
Currentposition++;
EEPROM.write(j,key); j++;
lcd.print(" ");
Trang 34lcd.print("** LOCK DOOR **"); delay(700);
myservo.write(0); }
if(kp==7){
clearScreen();
lcd.setCursor(2,0);
lcd.print("** ACCESS **");
Trang 35lcd.setCursor(4,1);
lcd.print(" WELCOME!! "); delay(700);
myservo.write(160); //160deg }
}
}