Tải bản đầy đủ (.docx) (29 trang)

THIẾT KẾ MẠCH ĐIỀU KHIỂN THIẾT BỊ TRONG NHÀ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.45 MB, 29 trang )

THIẾT KẾ MẠCH ĐIỀU KHIỂN THIẾT BỊ TRONG
NHÀ
MỤC LỤC
Contents


DANH MỤC HÌNH VẼ

2


DANH MỤC BẢNG BIỂU

3


LỜI NÓI ĐẦU
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 của chúng ta đã
và đang một ngày thay đổi, văn minh và hiện đại hơn. 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 các đặc điểm nổi bật như sự chính xác cao, tốc độ nhanh,
gọn nhẹ là những yếu tố rất cần thiết góp phần cho hoạt động của con người đạt hiệu quả.
Điện tử đang trở thành một ngành khoa học đa nhiệm vụ.Nó đã đáp ứng được những nhu
cầu cần thiết trong hoạt động đời sống hằng ngày.Một trong những nhu cầu đó là vấn đề xây
dựng ngôi nhà an toàn và thông minh . Các gia đình trên Thành phố hiện nay hầu hết là
những ngôi nhà ống, biệt thự khép kín, với mong muốn ngôi nhà đẹp, thẩm mĩ, tiện nghi, an
toàn, tiết kiệm năng lượng thì hệ thống điều khiển thiết bị trong nhà là một giải pháp tối ưu
và hiện đại. Hệ thống sẽ làm ngôi nhà trở nên thông minh hơn và giúp gia chủ kiểm soát tốt
ngôi nhà của mình.
Sau một thời gian học tập và nghiên cứu, với sự chỉ bảo của thầy giáo Hàn Huy Dũng
cùng sự trợ giúp của các bạn trong nhóm và các tài liệu có liên quan,chúng em đã hoàn
thành xong đề tài.


Bài tập lớn cơ bản đã hoàn thành xong, nhưng không thể tránh nhiều thiếu sót mong
thầy cô giáo thông cảm và chỉ bảo thêm để đề tài có thể ứng dụng rộng rãi trong thực tế.

CHƯƠNG 1: MÔ TẢ ĐỀ TÀI
1.1 Yêu cầu chức năng
1. Đăng nhập password vào nhà thông qua hệ thống keypad và hiển thị trên LCD.
4


Nếu đúng thì trả về “Đăng nhập thành công”, nếu sai thì trả về “Đăng nhập lỗi” .
2. Báo hiệu chuông cảnh báo khi đăng nhập sai 3 lần.
3. Có thể chỉnh sửa, thay đổi password.
4. Khi không đăng nhập thì hiện thị trên LCD ngày, tháng, năm và giờ hiện tại.
5. Hiển thị nhiệt độ hiện thời trên Led 7 thanh.
6. Điều khiển bật hoặc tắt đèn phụ thuộc vào ánh sáng trong phòng.
7. Hẹn giờ tắt đèn theo thời gian qua keypad.

1.2 Yêu cầu phi chức năng
1. Sử dụng Pic 16f877a làm trung tâm điều khiển mạch.
2. Dùng keypad dán 4x4.
3. Thiết kế module cảm biến ánh sáng của phòng.
4. Code viết bằng cả ASM và C.
5. PCB có tên nhóm và tên thành viên.
6. Mạch nhỏ gọn, sắp xếp linh kiện hợp lý.
7. Chức năng tương tác người dùng dễ sử dụng.

5


1.3 Sơ đồ khối hệ thống


CHƯƠNG 2: THIẾT KẾ HỆ THỐNG
2.1 Khối xử lý trung tâm
Pic16f877A
 Ngôn ngữ lập trình đơn giản với 35 lệnh có độ dài 14 bit.
 Tất cả các câu lệnh thực hiện trong 1 chu kì lệnh ngoại trừ 1 số câu lệnh rẽ nhánh
thực hiện trong 2 chu kì lệnh. Chu kì lệnh bằng 4 lần chu kì dao động của thạch anh.
 Bộ nhớ chương trình Flash 8Kx14 words, với khả năng ghi xoá khoảng 100 ngàn lần.
 Bộ nhớ Ram 368x8bytes.
 Bộ nhớ EFPROM 256x8 bytes.
 Khả năng ngắt (lên tới 14 nguồn cả ngắt trong và ngắt ngoài).
 Ngăn nhớ Stack được chia làm 8 mức.

6


 Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián tiếp.
 Dải điện thế hoạt động rộng: 2.0V đến 5.5V.
 Nguồn sử dụng 25mA.
 Công suất tiêu thụ thấp:
<0.6mA với 5V, 4MHz
20uA với nguồn 3V, 32 kHz.
 Có 3 timer: timer0, 8 bit chức năng định thời và bộ đếm với hệ số tỷ lệ trước.Timer1,
16 bit chức năng bộ định thời, bộ đếm với hệ số tỷ lệ trước, kích hoạt chế độ
Sleep.Timer2, 8 bit chức năng định thời và bộ đếm với hệ số tỷ lệ trước và sau.
 Có 2 kênh Capture/ so sánh điện áp (Compare)/điều chế độ rộng xung PWM 10 bit /
(CCP).
 Có 8 kênh chuyển đổi ADC 10 bit.
 Cổng truyền thong nối tiếp SSP với SPI phương thức chủ và I 2C (chủ/phụ).Bộ truyền
nhận thông tin đồng bộ, dị bộ (USART/SCL) có khả năng phát hiện 9 bit địa chỉ.

 Cổng phụ song song (PSP) với 8 bít mở rộng, với RD, WR và CS điều khiển.

2.2 Khối cảm biến: cảm biến ánh sáng và nhiệt độ
a) LDR:
 LDR là từ viết tắt của “Light Dependent Resistor”,nghĩa là quang điện trở.
 Là 1 thiết bị cảm biến ánh sang dựa theo nguyên tắc hoạt động của quan trở . khi thay
đổi nguồn ánh sáng chiếu vào,LDR có thể có giá trị điện trở như sau:
+ ánh sáng ban ngày : 5000 ohm
+ tối

: 20000000 ohm

7


 Khi có ánh sáng (thích hợp) vào LDR,nó có thể mất 10ms để hạ điện trở của nó và
mất 1s để điện trở có thể tăng trở lại khi không có ánh sáng (thích hợp).
b) LM35

LM35 có 3 chân :chân 1(+Vs) là chân nối với nguồn dương Vcc,chân 2 là chân nối
mass GND,chân 3 là chân đầu ra Vout xuất điện áp sau khi chuyển đổi từ nhiệt độ sang.
Cảm biến LM35 là bộ cảm biến nhiệt mạch tích hợp chính xác cao mà điện áp đầu ra
của nó tỷ lệ tuyến tính với nhiệt độ theo thang độ Celsius.Chúng cũng không yêu cầu cân
chỉnh ngoài vì vốn chúng đã được cân chỉnh
* LM35 có độ biến thiên theo nhiệt độ : 10mV/1(0C)

8


* Độ chính xác cao, tính năng cảm biến nhiệt độ rất nhạy, ở nhiệt độ 25(0C) nó có sai số

không quá1%.Với tầm đo từ 0(0C) đến 128(0C) , tín hiệu ngõ ra tuyến tính liên tục với
những thay đổi của tínhiệu nhõ vào.
* Thông số kỹ thuật:
- Tiêu tán công suất thấp .
- Dòng làm việc từ 400µA đến 5mA.
- Dòng ngược 15mA.
- Dòng thuận 10mA.
- Độ chính xác: khi làm việc ở nhiệt độ 25(0C) với dòng làm việc 1mA thì điện áp ngõ ra từ
2,94V đến3,04V.
* Đặc tính điện:- Theo thông số của nhà sản xuất LM35, quan hệ giữa điện áp và ngõ ra như
sau:Vout =0.01*T(0K)=2,73+0,01*T(0C).
Vậy ứng với tầm hoạt động từ 0(0C) đến 100(0C) ta có sự biến thiên điện áp ngõ ra là
+Ở 0(0C) thì điện áp ngõ ra Vout = 2,73V
+Ở 5(0C) thì điện áp ngõ ra Vout = 2,78VỞ 100(0C) thì điện áp ngõ ra Vout = 3,71V
Tầm biến thiên điện áp tương ứng với nhiệt độ từ 0(0C) đến 100(0C) là 1V
Tính toán nhiệt độ đầu ra và sai số của hệ thống:
Ta có hàm truyền đạt sau:

9


Từ hàm truyền đạt trên ta có : U=t.K
Với K là điện áp đầu ra của LM35 : K=10mV/℃
t là nhiệt độ môi trường [K]
U= t. 10mV/℃
Có ADC=11bit n=11
Dải đo :A= [0-5]V
Bước thay đổi n=5/2023 =2,44mV
Giá trị ADC đo được từ giá trị điện áp đầu vào :
ADC_Value = U/n= (t*10mV)/2,44mV

Giá trị nhiệt độ đo được :
T=ADC_Value*2,44/10 (℃)
Sai số của hệ thống đo:
+tại 0℃ thì điện áp của LM35 là 10mV
+ tại 150℃ thì điện áp của LM35 là 1,5V
 Giải điện áp ADC biến đổi là 1,5-0,01=1,49 (V)
+ADC 11 bit nên bước thay đổi của ADC là :n=2,44mV
10


Vậy sai số của hệ thống đo là

Y=0,00244/1,49=0,164%

2.3 Khối chấp hành
a) Keypad
Keypad là một "thiết bị nhập" chứa các nút nhấn cho phép người dùng nhập các chữ
số, chữ cái hoặc ký hiệu vào bộ điều khiển. Keypad không chứa tất cả bảng mã ASCII như
keyboard và vì thế keypad thường được tìm thấy trong các thiết bị chuyên dụng. Các nút
nhấn trên các máy tính điện tử cầm tay là một ví dụ về keypad. Số lượng nút nhấn của một
keypad thay đổi phụ thuộc vào yêu cầu ứng dụng. Trong bài này tôi giới thiệu cách điều
khiển của một loại keypad đơn giản, keypad 4x4.
Gọi là keypad 4x4 vì keypad này có 16 nút nhấn được bố trí dạng ma trận 4 hàng và 4
cột. Cách bố trí ma trận hàng và cột là cách chung mà các keypad sử dụng. Cũng giống như
các ma trận LED, các nút nhấn cùng hàng và cùng cột được nối với nhau, vì thế với keypad
4x4 sẽ có tổng cộng 8 ngõ ra (4 hàng và 4 cột). Mô hình Keypad 4x4 được thể hiện trong

hình 1.

a)


b)

Hình 1. Keypad 4x4.
Hình 1b là mô hình thật của 1 keypad 4x4 và hình 1a là cấu hình bên trong của nó.
Bốn hàng của keypad được đánh dấu là A, B, C và D trong khi 4 cột được gọi là 1, 2, 3 và 4.

11


b) DS1302

2.4 Khối hiển thị
a) LCD

Text LCD là các loại màn hình tinh thể lỏng nhỏ dùng để hiển thị các dòng chữ hoặc số
trong bảng mã ASCII. Không giống các loại LCD lớn, Text LCD được chia sẵn thành từng ô
và ứng với mỗi ô chỉ có thể hiển thị một ký tự ASCII. Cũng vì lý do chỉ hiện thị được ký tự
ASCII nên loại LCD này được gọi là Text LCD (để phân biệt với Graphic LCD có thể hiển
thị hình ảnh). Mỗi ô của Text LCD bao gồm các “chấm” tinh thể lỏng, việc kết hợp “ẩn” và
“hiện” các chấm này sẽ tạo thành một ký tự cần hiển thị. Trong các Text LCD, các mẫu ký
tự được định nghĩa sẵn. Kích thước của Text LCD được định nghĩa bằng số ký tự có thể
hiển thị trên 1 dòng và tổng số dòng mà LCD có. Ví dụ LCD 16x2 là loại có 2 dòng và mỗi
dòng có thể hiển thị tối đa 16 ký tự. Một số kích thước Text LCD thông thường gồm 16x1,
16x2, 16x4, 20x2, 20x4… Ở đây em chọn LCD 16x2 phù hợp với yêu cầu đề tài.
Text LCD có 2 cách giao tiếp cơ bản là nối tiếp (như I2C) và song song.

12



Các chân điều khiển LCD.
Các chân điều khiển việc đọc và ghi LCD bao gồm RS, R/W và EN.
RS (chân số 3): Chân lựa chọn thanh ghi (Select Register), chân này cho phép lựa chọn
1 trong 2 thanh ghi IR hoặc DR để làm việc. Vì cả 2 thanh ghi này đều được kết nối với các
chân Data của LCD nên cần 1 bit để lựa chọn giữa chúng. Nếu RS=0, thanh ghi IR được
chọn và nếu RS=1 thanh ghi DR được chọn. Chúng ta đều biết thanh ghi IR là thanh ghi
chứa mã lệnh cho LCD, vì thế nếu muốn gởi 1 mã lệnh đến LCD thì chân RS phải được
reset về 0. Ngược lại, khi muốn ghi mã ASCII của ký tự cần hiển thị lên LCD thì chúng ta
sẽ set RS=1 để chọn thanh ghi DR. Hoạt động của chân RS được mô tả trong hình 5.

Hình 5. Hoạt động của chân RS.
R/W (chân số 4): Chân lựa chọn giữa việc đọc và ghi. Nếu R/W=0 thì dữ liệu sẽ được
ghi từ bộ điều khiển ngoài (vi điều khiển AVR chẳng hạn) vào LCD. Nếu R/W=1 thì dữ liệu
sẽ được đọc từ LCD ra ngoài. Tuy nhiên, chỉ có duy nhất 1 trường hợp mà dữ liệu có thể
đọc từ LCD ra, đó là đọc trạng thái LCD để biết LCD có đang bận hay không (cờ Busy Flag
- BF). Do LCD là một thiết bị hoạt động tương đối chậm (so với vi điều khiển), vì thế một
cờ BF được dùng để báo LCD đang bận, nếu BF=1 thì chúng ta phải chờ cho LCD xử lí
xong nhiệm vụ hiện tại, đến khi nào BF=0 một thao tác mới sẽ được gán cho LCD. Vì thế,
khi làm việc với Text LCD chúng ta nhất thiết phải có một chương trình con tạm gọi là
wait_LCD để chờ cho đến khi LCD rảnh. Có 2 cách để viết chương trình wait_LCD. Cách 1
là đọc bit BF về kiểm tra và chờ BF=0, cách này đòi hỏi lệnh đọc từ LCD về bộ điều khiển
ngoài, do đó chân R/W cần được nối với bộ điều khiển ngoài. Cách 2 là viết một hàm delay
một khoảng thời gian cố định nào đó (tốt nhất là trên 1ms). Ưu điểm của cách 2 là sự đơn
13


giản vì không cần đọc LCD, do đó chân R/W không cần sử dụng và luôn được nối với
GND. Tuy nhiên, nhược điểm của cách 2 là khoảng thời gian delay cố định nếu quá lớn sẽ
làm chậm quá trình thao tác LCD, nếu quá nhỏ sẽ gây ra lỗi hiển thị. Trong bài này tôi
hướng dẫn bạn cách tổng quát là cách 1, để sử dụng cách 2 bạn chỉ cần một thay đổi nhỏ

trong chương trình wait_LCD (sẽ trình bày chi tiết sau) và kết nối chân R/W của LCD
xuống GND.
EN (chân số 5): Chân cho phép LCD hoạt động (Enable), chân này cần được kết nối với
bộ điều khiển để cho phép thao tác LCD. Để đọc và ghi data từ LCD chúng ta cần tạo một
“xung cạnh xuống” trên chân EN, nói theo cách khác, muốn ghi dữ liệu vào LCD trước hết
cần đảm bảo rằng chân EN=0, tiếp đến xuất dữ liệu đến các chân D0:7, sau đó set chân EN
lên 1 và cuối cùng là xóa EN về 0 để tạo 1 xung cạnh xuống.
b) LED 7 thanh
LED 7 đoạn hay LED 7 thanh (Seven Segment display) là 1 linh kiện rất phổ dụng ,
được dùng như là 1 công cụ hiển thị đơn giản nhất .
Trong LED 7 thanh bao gồm ít nhất là 7 con LED mắc lại với nhau , vì vậy mà có tên là
LED 7 đoạn là vậy ,7 LED đơn được mắc sao cho nó có thể hiển thị được các số từ 0 - 9 , và
1 vài chữ cái thông dụng, để phân cách thì người ta còn dùng thêm 1 led đơn để hiển thị dấu
chấm (dot) .

14


Các led đơn lần lượt được gọi tên theo chữ cái A- B -C-D-E-F-G, và dấu chấm dot .
Như vậy nếu như muốn hiển thị ký tự nào thì ta chỉ cần cấp nguồn vào chân đó là led sẽ
sáng như mong muốn .

2 . Thông số :
LED 7 thanh dù có nhiều biến thể nhưng tựu chung thì cũng chỉ vẫn có 2 loại đó là :
+ Chân Anode chung (chân + các led mắc chung lại với nhau .)
+ Chân Catode chung (Chân - các led được mắc chung với nhau .)
* Đối với loại Anode chung :

15



+ Chân 3 và 8 là 2 chân Vcc(nối ngắn mạch lại với nhau , sau đó nối chung với chân anode
của 8 led đơn .), vậy muốn led nào đó sáng thì chỉ việc nối chân catot xuống mass .
Điện áp giữa Vcc và mass phải lớn hơn 1.3 V mới cung cấp đủ led sáng, tuy nhiên không
được cao quá 3V .
Cathode chung :

3 . Trở hạn dòng :
Trong các mạch thì thường dùng nguồn 5V nên để tránh việc đót cháy led thì cách đơn giản
nhất là mắc thêm trở hạn dòng .
Thông số làm việc của LED :
Điện áp = 2V .

16


Dòng = 20mA .
Vậy nếu dùng nguồn 5V , thì áp rơi trên trở = 5 -2 = 3 V.
R = U / I = 3/(20*10^-3) = 150 ôm .

2.5 Hoàn thiện sản phẩm

17


2.6 Sơ đồ nguyên lý toàn mạch

2.7 Sơ đồ Layout mạch

18



2.8 Hình ảnh thật sản phẩm

CHƯƠNG 3: KÊT LUẬN
Sản phẩm chạy ổn định nhưng có một vài thiếu sót chức năng thời gian thực và bật tắt
đèn.

19


TÀI LIỆU THAM KHẢO
1. Kỹ thuật vi xử lí - Văn thế Minh
2. Tài liệu tham khảo trên các trang web : picvietnam.com, dientuvietnam.net,

tailieu.vn….

20


PHỤ LỤC B: SOFTWARE CODE
void main()
{
char gio,gioc,phut,phutc;
char a_a1[]="hen gio ";
char a_a2[]="da dat gio";
char a_1[]="mat khau";
char b_1[]="mat khau moi";
char c_1[]="nhap lai";
char d_1[]="da thay doi";

char e_1[]="co loi";
setup_adc_ports(AN0_AN1_AN3);

// TODO: USER CODE!!
DS1302_Init();
khoitao();
delay_ms(10);
//

delay_ms(1000);
LCD_Clear();
//DS1302_SetTime(0,0,0);
DS1302_SetTime(1,1,1);
DS1302_SetDate(1,1,1,14);

ghilenh(0xc0);
sdem=0;

set_tris_c(0);
output_d(0xff);
lcd_puts(a_1);

21


a=INPUT_c();
a&=(~0x01);
OUTPUT_C(a);
//P3OUT&=(~0x01);// starrt


a=0;
c=0;
solan=0;
for(e=0;e<16;e++){
mamatkhau[e]=EEPROM_read(e);
}
luuphim=0;
for(e=0;e<16;e++){
if( mamatkhau[e]==0xff) luuphim++;

if (luuphim==16)
mamatkhau[0]=0;

thanhpass=1;
g=5;
thanhlenh=1;
delay_ms(100);
readalltime();
set_tris_d(0x0f);
lcd_clear();
luuphim=0xff;
a=0xff;
output_bit(pin_E0,0);
output_bit(pin_E1,0);
output_bit(pin_E2,0);
while (1)

22

}



{

layanhsang();
laynhietdo();
// value_s= xacdinhnguoidi();
// if(value_as>value_s) tinh=value_as-value_s; else tinh=value_s-value_as;
// he so anh sang thay doi tam 1 m ?c giá tr? 50 coi nhu bat den
// if(value_as>50) BATDEN=1;
//value_as=value_s;

khaibaothanhghi();
//lcd_gotoxy(15,0);
if(a=0xff)

readalltime();

output_bit( pin_D7 ,1 );
Input(pin_D0);
output_bit( pin_D6 ,1 );
Input(pin_D1);
output_bit( pin_D5 ,1 );
Input(pin_D2);
output_bit( pin_D4 ,1 );
Input(pin_D3);

delay_ms(2);
nhap_phim();


// Place your code here

if (a==10) {
lcd_clear();

23

rallau:


lcd_puts(a_1);
ghilenh(0xc0);
e=0;

//open

while(a==10)

nhap_phim();

while(a!=30){
nhap_phim();
nhapbanphim();
//if (a==20){ e=0;

goto rallau;}

// if (a==50){ e=0;

goto rall; }


}
for(;e<16;e++){matkhau[e]=0xff;}
lcd_clear();
lcd_puts(a_1);
ghilenh(0xc0);

for (e=0;e<16;e++) { if(matkhau[e]!=0xff)
delay_ms(1000);
kiemtramatkhau();
}

rall:
if (a==40) {

sualai:

lcd_clear();
lcd_puts(a_1);
ghilenh(0xc0);
e=0;

//open

while(a==40)

nhap_phim();

while(a!=30){
nhap_phim();

nhapbanphim();

24

ghikt(matkhau[e]+48); else ghikt('x');}


// if (a==20) goto sualai;
// if (a==50){ e=0;

goto rall; }

}
for(;e<16;e++){matkhau[e]=0xff;}
kiemtramatkhau();
//thay doi pass
while(a==30){
nhap_phim(); }
if(f==16) {
ralla:
lcd_clear();
lcd_puts(b_1);
ghilenh(0xc0);
e=0;

//open

while(a!=30){
nhap_phim();
nhapbanphim();

}
for(;e<16;e++){matkhau[e]=0xff;}
for(e=0;e<16;e++)
{mamatkhau[e]=matkhau[e];}

rallab:
lcd_clear();
lcd_puts(c_1);
ghilenh(0xc0);
//open
while(a==30){nhap_phim(); }
e=0;
while(a!=30){

25


×