Trong thời đại ngày nay khi nhân loại đang có những bước tiến vượt bậc về khoa học công nghệ thì ngành điện tử cũng có nhiều bước tiến rất quan trọng, đặc biệt là lĩnh vực vi điều khiển. Các bộ vi xử lý ngày càng phát triển hoàn thiện hơn và được sử dụng phổ biến trong hầu hết các hệ thống điều khiển tự động trong công nghiệp, khoa học kĩ thuật cũng như các thiết bị dân dụng. Vi xử lý đã đem lại những ưu điểm, những chức năng đặc biệt đã hộ trợ con người trong những hệ thống phức tạp đòi hỏi yêu cầu kĩ thuật cao.Để ứng dụng những tính năng đặc biệt đó vào đời sống thực tiễn thì nhóm sinh viên chúng em đã tiến hành nghiên cứu đồ đề tài bài tập lớn: “Thiết kế mạch điều khiển đèn giao thông thông minh xử dụng chip vi xử lý ATmega32”Hệ thống này giúp chúng ta điều chỉnh thời gian của đèn giao thông theo hoàn cảnh cụ thể mà không cần sự giám sát thường xuyên của con người. Hệ thống xử dụng chip vi xử lý ATmega32 là IC điều khiển chính. Ngoài ra còn xử dụng một số linh kiện điện tử khác sẽ được đề cập trong phần sau của báo cáo.Do thời gian thực hiện có hạn. Đồng thời luôn có sự khác nhau giữa lý thuyết và thực tiễn nên trong quá trình làm việc nhóm em không tránh khỏi thiếu sót. Mong nhận được sự giúp đỡ, đóng góp nhiệt tình từ thầy để bản báo cáo có thể hoàn thiện hơn. Chúng em xin chân thành cảm ơn
Trang 2TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ VIỄN THÔNG
Trang 32 Điểm trừ
2.1 Không có sản phẩm
2.2 Không có báo cáo bản cứng
2.3 Thiếu chức năng: đăng nhập password bằng keypad
2.4 Thiếu chức năng: hiển thị password/tình trạng đăng nhập trên
LCD
2.5 Thiếu chức năng: cảnh báo khi nhập sai 2 lần
2.6 Thiếu chức năng: chỉnh sửa, thay đổi password
2.7 Thiếu chức năng: hiển thị ngày, giờ hiện tại trên LCD
2.8 Thiếu chức năng: hẹn giờ tắt đèn
2.9 Thiếu chức năng: đèn tự động bật tắt phụ thuộc vào cường độ
sang hiện tại
2.10 Thiếu chức năng: hiển thị nhiệt độ hiện thời lên LED 7 thanh
2.11 PCB không có tên nhóm và các thành viên
2.12 Báo cáo sơ sài/thiếu nội dung (tên để tài/nhóm/mục lục/yêu cầu
của đề tài/kế hoạch nhóm/thiết kế sơ đồ khối/code)
3 Điểm cộng
3.1 Mạch in và sắp xếp linh kiện đẹp
3.2 Các chức năng đã thực hiện có đáp ứng tốt (độ nhạy, tốc độ tính
toán, hiển thị)
3.3 Có chức năng: sử dụng mô hình nhà để demo hệ thống
3.4 Có chức năng: tự động bật đèn khi có người đi vào phòng, sử
dụng cảm biến hồng ngoại
3.5 Có thêm các chức năng sáng tạo khác
3.6 Có một đoạn code viết bằng mã ASM
3.7 Dễ sử dụng (bàn phím lớn, ghi chú rõ ràng, thao tác đơn giản)
3.8 Trình bày rõ ràng, trả lời được các câu hỏi chuyên môn
TỔNG ĐIỂM:
Trang 4MỤC LỤC
MỤC LỤC 4
DANH MỤC HÌNH VẼ 6
DANH MỤC BẢNG BIỂU 7
LỜI NÓI ĐẦU 8
CHƯƠNG 1: MÔ TẢ ĐỀ TÀI 9
1.1 Yêu cầu chức năng 9
1.2 Yêu cầu phi chức năng 10
1.3 Sơ đồ khối hệ thống 10
1.4 Kế hoạch thực hiện và phân chia công việc 12
CHƯƠNG 2: THIẾT KẾ HỆ THỐNG 13
2.1 Khối Nguồn 13
2.2 Khối tạo dao động 13
2.3 Khối cảm biến nhiệt độ 14
2.4 Khối cảm biến ánh sáng 15
2.5 Bàn phím 15
2.6 Thời gian thực 15
2.7 Vi điều khiển PIC 16f877a 16
2.8 Khối hiển thị LCD 18
2.9 Khối đèn 21
2.10 Khối Led 7 thanh 21
2.11 Khối chuông báo 22
CHƯƠNG 3: MẠCH THỰC TẾ 23
Trang 5a Sơ đồ nguyên lý toàn mạch 23
b Sơ đồ Layout mạch và hình ảnh thật sản phẩm 23
TÀI LIỆU THAM KHẢO 26
PHỤ LỤC A: ĐÓNG GÓP CÁC THÀNH VIÊN 27
PHỤ LỤC B: SOFTWARE CODE 28
PHỤ LỤC C: HƯỚNG DẪN SỬ DỤNG 37
Trang 6DANH MỤC HÌNH VẼ
Figure 1 Sơ đồ khối mạch điểu khiển thiết bị trong nhà 11
Figure 2: Sơ đồ nguyên lý mạch nguồn 13
Figure 3 Sơ đồ nguyên lý khối tạo dao động _14
Figure 4 Cảm biến nhiệt độ LM35 _15
Figure 16 LED _24
Figure 17 LCD 24 Figure 18 PIC _25
Trang 7DANH MỤC BẢNG BIỂU
Table 1: Bảng phân công công việc 12
Trang 8LỜI NÓI ĐẦU
Khoa học kĩ thuật ngàu càng phát triển mạnh mẽ, kỹ thuật điện tử cũng được chútrọng phát triển nhiều hơn Ngày nay, cũng với sự tiến bộ của khoa học kĩ thuật, đời sống xãhội ngày càng phát triển dựa trên những ứng dụng của khoa học vào đời sống Vì vậy màcông nghệ điện tử mang tính tự động ngày càng được ứng dụng rộng rãi Sự phát triển củamáy tính đã mở rộng các ứng dụng của vi điều khiển Các bộ vi điều khiển đa tính năngđang được ứng dụng rộng rãi và thâm nhập ngày càng nhiều trong các lĩnh vực kỹ thuật vàđời sống xã hội Hầu hết các thiết bị được điều khiển tự động, từ các thiết bị văn phòng đếncho đến các thiết bị trong gia đình đều dùng các bộ vi điều khiển nhằm đem lại sự tiện nghicho con người trong thời đại công nghiệp hóa, hiện đại hóa
Để ứng dụng môn kĩ thuật vi xử lí vào thực tế, dưới sự hướng dẫn của thầy Phạm Ngọc
Nam và các anh trợ giảng, chúng em đã thiết kế và hoàn thành đề tài : “Mạch điều khiển
thiết bị trong nhà “ Với sự nỗ lực của bản thân nhưng do thời gian kiến thức và kinh
nghiệm của chúng em còn hạn chế nên không thể tránh khỏi những sai sót Chúng em rấtmong nhận được sự giúp đỡ và đóng góp ý kiến của thầy cô cùng các bạn để đề tài hoànthiện hơn
Chúng em xin chân thành cảm ơn!
Hà Nội, tháng 5 năm 2014
Trang 9Nếu đúng thì trả về “ Đăng nhập thành công”, nếu sai thì trả về “ Đăng nhập lỗi ”.
Báo hiệu chuông cảnh báo khi đăng nhập sai 2 lần Chuông sẽ kêu 1 hồi để báo hiệucho người sử dụng biết rằng mật khẩu bị sai
Có thể thay đổi password Người dùng có thể ấn nút menu chọn chế độ thay đổi hoặcđăng nhập password Sau đó ấn nút ok Hệ thống sẽ yêu cầu nhập password cũ, nếuđúng thì mới được đổi password
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 ( Có thểthêm chức năng chỉnh lại giờ ngày tháng)
1 Hiển thị nhiệt độ hiện thời trên led 7 thanh Ta dùng 1 cảm biến nhiệt độ đo nhiệt độngoài trời, sau đó đưa tín hiệu vào pic để pic xử lý và đưa ra kết quả ra led 7 thanh
Điều khiển bật hoặc tắt đèn phụ thuộc vào ánh sáng trong phòng Sử dụng cảm biếnánh sáng kiểm tra điều kiện để có thể bật hoặc tắt đèn
Hẹn giờ tắt đèn theo thời gian Ở menu chọn chế độ hẹn giờ tắt đèn
Trang 101.2 Yêu cầu phi chức năng
Sử dụng vi điều khiển 16f877a để điều khiển hoạt động của hệ thống
Sử dụng keypad dán 4x4
Code viết bằng mã ASM và code C. Code viết bằng mã ASM và code C
Code viết bằng mã ASM và code C PCB có tên nhóm và các thành viên: Trong file pcb in tên các thành viên củanhóm
Group03_TC2051
Vu Ha NamTran Quoc HuyTran Tien Dat
Ha Duy Phu
Le Duy Tho
Kích thước mạch khoảng 12x15, đi dây 2 lớp, có phủ đồng, mối hàn đẹp, đi dây Code viết bằng mã ASM và code C
và xắp xếp linh kiện trên board hợp lý
Có chức năng menu cho người dùng sử dụng dễ dàng Code viết bằng mã ASM và code C
1.3 Sơ đồ khối hệ thống
Từ những mục tiêu đã Sắp xếp linh kiện hợp lý và đơn giản.đặt ra ở phần 1, phần 2đưa ra sơ đồ khối của hệ thống cũng như các giải pháp được sử dụng Đây là cơ sở chính đểthiết kế phần cứng cho toàn bộ hệ thống
Trang 11Figure 1 Sơ đồ khối mạch điểu khiển thiết bị trong nhà
Trang 121.4 Kế hoạch thực hiện và phân chia công việc
Phân chia công việc của các thành viên:
Vũ Hà Nam© Tổng hợp mach, thiết kế mạch in, đặt
mạch và hàn linh kiện
Hà Duy Phú Viết code chính, test mạch, viết báo cáo
Lê Duy Thọ Viết code chính, test mạch,viết báo cáo
Trần Tiến Đạt Viết code phần cảm biến hiển thị nhiệt độ,
thời gian thựcTrần Quốc Huy Viết code phần Giao tiếp đèn, thời gian
thực
Table 1: Bảng phân công công việc
Trang 13CHƯƠNG 2: THIẾT KẾ HỆ THỐNG 2.1 Khối Nguồn
Mạch gồm có các linh kiện sau:
- 1 cầu diode biến AC thành DC,
- tụ 1000µF và tụ gốm 104 để lọc nguồn
- IC ổn áp 7805 để tạo ra nguồn
Chức năng: Nguồn vào là nguồn xoay chiều, được đưa qua biến áp
sau đó cho qua cầu chỉnh lưu đưa vào chân IN của IC7805 để lấy ra
nguồn 5V cung cấp cho toàn mạch
Figure 2: Sơ đồ nguyên lý mạch nguồn
2.2 Khối tạo dao động
Tạo dao động cho Pic 16f877a ta sử dụng thạch anh tần số 20MHz và sử dụng 2 tụ33pf
Trang 14Cấu tạo mạch như sau
Figure 3: Sơ đồ nguyên lý khối tạo dao động
2.3 Khối cảm biến nhiệt độ
Chức năng: Xác định một cách chính xác nhất nhiệt độ trong phòng
Linh kiện sử dụng: cảm biến nhiệt độ LM35
LM35 là IC cảm biến nhiệt độ thayđổi 10mv sau 1 độ C
LM35 sẽ được kết nối với chân củavdk sau
đó vdk sẽ đọc giá trị thông qua ADC kết quả
sẽ được hiển thị qua 2 LED 7 thanh
Trang 15Figure 4 Cảm biến nhiệt độ LM35
2.4 Khối cảm biến ánh sáng
Chức năng: Xác định cường độ ánh sánghiện tại trong phòng
Linh kiện sử dụng: quang trở
Nguyên lý làm việc: Khi ánh sáng chiếu vào với một mức độ nhất định tín hiệu sẽđược đưa vào bằng cách đọc ADC VDK
sẽ quyết định đầu ra lên mức 1 hoặc xuống mức 0
Figure 5: Cảm biến ánh sáng
2.5 Bàn phím
-Nhập password trên keypad là các số từ 0->9-Nhấn nút Menu để mở menu(A)
-Nhấn nút ENTER để đăng nhập, clear để xóa
Trong quá trình nhập nếu có sai sót thì có thể sửdụng nút backspace(B) để điều chỉnh
Figure 6: Bàn phím
2.6 Thời gian thực
Chức năng: Cấp chính xác thời gian thực để hiển thị lên LCD
Linh kiện sử dụng: IC thời gian thực DS1307,thạch anh,pin,
Nguyên lý làm việc:
DS 1307 là một IC thời gian thực với nguồn cung cấp nhỏ, dùng để cập nhật thờigian và ngày tháng với 56 bytes SRAM Địa chỉ và dữ liệu được truyền nối tiếp qua 2đường bus 2 chiều Để không phải điều chỉnh lại thời gian vào những lúc bị mấtnguồn, ta nối thêm 1 pin 3.3V vào chân số 3 của IC DS1307 (sao cho chân + của pin
Trang 16nối vào IC và chân – của pin nối xuống đất) Hai chân 1 và 2 của DS1307 được nốivào bộ dao động thạch anh có tần số 32,768Hz để tạo dao động cho IC hoạt động
Figure 7: Khối thời gian thực DS1307
2.7 Vi điều khiển PIC 16f877a
Giới thiệu chung về vi điều khiển PIC 16F877A
PIC là họ vi điều khiển 8 bit theo công nghệ mới, với những tính năng rất mạnh đượctích hợp trong chip của hãng Microchip theo công nghệ RISC, mạnh ngang hàng với các họ
vi điều khiển 8 bit khác như AVR, Pisoc Do ra đời muộn hơn nên họ vi điều khiển PIC cónhiều tính năng mới đáp ứng tối đa nhu cầu của người sử dụng so với họ 8051, 89xx Nó ổnđịnh hơn, có khả năng tích hợp và mềm dẻo hơn trong việc lập trình
PIC 16F877A có đầy đủ tính năng của họ PIC, so với các loại khác thì giá thành là vừa phảikhi nghiên cứu và làm các công việc ứng dụng tới vi điều khiển
Tính năng:
Trang 17 Các chuẩn giao tiếp SPI, SSP I2C
Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ
Chuẩn giao tiếp song song với các chân điều khiển RD,WR và CS ở ngoài
Có 8 kênh ADC 10 bit Hai bộ so sánh Có 2 kênh PWM
Hai bộ timer/counter 8 bit, một bộ timer/counter 16 bit
1 bộ định thời Watchdog
…
Mô tả các chân
Figure 8 Sơ đồ chân của vi điều khiển PIC16F877A
Hai chân VDD cấp nguồn dương, 2 chân VSS cấp nguồn âm cho Vi điều khiển hoạt động
Chân 1 : master clear _ là chân reset cứng khởi động lại moij hoạt động của hệ thống
Trang 18vi, phù hợp với vai trò của một chip xử lý trung tâm.
Figure 9: Sơ đồ nguyên lý khối Vi điều khiển
2.8 Khối hiển thị LCD
Trang 19+)Sử dụng một LCD để hiện thịthông tin giờ,ngày, tháng,năm,password
Dùng LCD 16x2
Figure 10 LCD
a) Mô tả chi tiết hiển thị trên LCD:
Ban đầu khi chưa đăng nhập LCD hiển thị thời gian:
Khi đã đăng nhập thành công LCD hiển thị Menu:
Cài đặt thời gian
Thay đổi pass
Cài đặt thời gian bật đèn
Cài đặt thời gian tắt đèn
Bằng cách ấn A hoặc số trên bàn phím số tương ứng sẽ chon được chức năng mình cần
Dòng 1:Cài đặt thời gian
Dòng 1:Giờ-Phút-Giây
Dòng 2:Ngày-Tháng-Năm
Điều chỉnh các tham số:”Giờ,Phút,Giây,Ngày,Tháng,Năm”
Trang 20 =>Điều chỉnh các thông số của các tham số thông qua bàn phím số.Kết thúc mỗi tham số ấn A (Các tham sô trong quá trình điều chỉnh sẽ nháy)
Dòng 2: Đổi pass
Dòng 1:”nhập pass cũ”
Dòng 2:_con trỏ xuất hiện để nhập pass…
Sau khi ấn A nếu sai LCD chuyển về trạng thái “Đổi pass”.Nếu đúng LCD chuyển sang hiển thị kế tiếp:
Dòng 1:”nhập pass mới”
Dòng 2:_con trỏ xuất hiện để nhập pass mới
Sau khi ấn N5 LCD chuyển sang hiển thị kế tiếp:
Dòng 1:”bạn có lưu thay đổi không”
Thao tác điều chỉnh tưởng tự như thay đổi thời gian.Sau khi ấn
A LCD chuyển sang hiển thị
Dòng 1:”Ban có kích hoạt”
Dòng 2:1.Có………2.Không
Tác động lên khối bàn phím các sô 1 hoặc 2 để chọn “Có” hay
“Không”
Dòng 2:Cài đặt thời gian tắt đèn:
Tương tự cài đặt thời gian bật đèn
Trang 212.9 Khối đèn
Để điều khiển bật tắt đèn 12V ta sử dụng transistor và role
Khi VDK phát tín hiệu “1” ~5V Trans tắt Đèn sáng
Khi VDK phát tín hiệu “0” ~0V Trans thông Đèn tắt
Figure 11 Khối Đèn
2.10 Khối Led 7 thanh
Chức năng: Hiển thị nhiệt độtrong phòng
Linh kiện sử dụng: 2 Led 7 thanh để hiển thị nhiệt độ phòng, trasistor và các điện trở để tạo thành mạch khuếch đại
Sử dụng IC 74HC595 để chốt Led
Figure 12 LED 7 thanh
Trang 222.11 Khối chuông báo
Khi password nhập sai quá 2 lần, còi cảnhbáo sẽ được bật lên
Trang 23CHƯƠNG 3: MẠCH THỰC TẾ
a Sơ đồ nguyên lý toàn mạch
Figure 14 Sơ đồ nguyên lý
b Sơ đồ Layout mạch và hình ảnh thật sản phẩm
Figure 15 Mạch Nguồn
Trang 24Figure 16 LED
Figure 17 LCD
Trang 25Figure 18 PIC
Trang 26TÀI LIỆU THAM KHẢO
[1] Microchip: Datasheet PIC 16f877a
Trang 27PHỤ LỤC A: ĐÓNG GÓP CÁC THÀNH VIÊN
Trang 29set_tris_c(0); //thiet lap cac chan portB la output
set_tris_d(0); //thiet lap cac chan portD la output
set_tris_e(0); //thiet lap cac chan portE la output
set_tris_a(3); ; //thiet lap cac chan portA la input
set_tris_b(0);
//khoi tao ADC
setup_ADC(ADC_CLOCK_INTERNAL); //thiet lap thoi gian lay mau bang xung clock
setup_ADC_ports(AN0); //thiet lap chan AN0 la chan vao ADC
set_ADC_channel(0); //thiet lap chan A0 de doc gia tri analog
low=(int8)v%10; //chu so hang don vi
high=(int8)v/10; //chu so hang chuc
nhietdo(); //goi chuong trinh con hien thi led
}
Trang 30}
}
#define LCD_RS PIN_E0 //khai bao cac chan LCD
#define LCD_EN PIN_B1
void LCD_Gotoxy(unsigned char x, unsigned char y);
void LCD_Puts(unsigned char *x);
void LCD_Xoa();
void LCD_Cmd (unsigned char x);
void LCD_Char(unsigned char x);
void LCD_Pulse() //khoi tao LCD
output_bit(LCD_D4, Data & 0x01);
output_bit(LCD_D5, Data & 0x02);
output_bit(LCD_D6, Data & 0x04);
output_bit(LCD_D7, Data & 0x08);
Trang 31output_drive(LCD_RS);
LCD_Data(0x00);
delay_ms(20); //cho cho VDD len >> 15ms
output_low (lcd_RS); //mac dinh la viet lenh
LCD_Data(0x03); //che do 4 bit
Trang 32unsigned char ds1307_read(unsigned char addr);
void ds1307_write(unsigned char addr,unsigned char dat);
Trang 33BYTE BCD_Bin(BYTE bcd_value);
BYTE Bin_Bcd(BYTE binary_value);
void Update_time_1307()
{
i2c_start(); //Phat bit bat dau I2C
i2c_write(0xD0); //Gui dia chi cua Slave
i2c_write(0x00); //thiet lap con tro thanh ghi tai thanh ghi giay
i2c_stop(); //Phat bit dung I2C
i2C_start();
i2c_write(0xD1); //gui lenh doc du lieu
//Doc cac bien thoi gian roi chuyen sang ma nhi phan
sec = Bcd_Bin(i2c_read(1) & 0x7f); // doc giay
min = Bcd_Bin(i2c_read(1) & 0x7f); // doc phut
hour= Bcd_Bin(i2c_read(1) & 0x3f); // doc gio
day = Bcd_Bin(i2c_read(1) & 0x7f); // doc thu
date = Bcd_Bin(i2c_read(1) & 0x3f); // doc ngay
month = Bcd_Bin(i2c_read(1) & 0x1f); // doc thang
year = Bcd_Bin(i2c_read(0) & 0xFF); // doc nam
case 1: LCD_char("Sun "); break;
case 2: LCD_Char("Mon "); break;
case 3: LCD_Char("Tue "); break;
case 4: LCD_Char("Wed "); break;
case 5: LCD_Char("Thur "); break;
Trang 34case 6: LCD_Char("Fri "); break;
case 7: LCD_Char("Sat "); break;
LCD_Cmd(0x0C); //Bat hien thi, tat con tro
LCD_Cmd(0x80); //Ve dau dong 1
//Hien thi thoi gian
Switchday(); //Thu
LCD_Char(48+date/10); LCD_Char(48+date%10); LCD_Char("/"); //Ngay
LCD_Char(48+month/10); LCD_Char(48+month%10); LCD_Char("/20"); //Thang
LCD_Char(48+year/10); LCD_Char(48+year%10); LCD_Char(" "); //Nam
LCD_Cmd(0xC0); //Ve dau dong 2 LCD_Char(48+hour/10); LCD_Char(48+hour%10); LCD_Char(":"); //Gio
LCD_Char(48+min/10); LCD_Char(48+min%10); LCD_Char(":"); //Phut
LCD_Char(48+sec/10); LCD_Char(48+sec%10); //Giay
LCD_Char(" ");
}
// Ham ghi du lieu vao DS1307
void ds1307_write(unsigned char a,unsigned char data)