ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP THÁI NGUYÊN
KHOA ĐIỆN TỬ
----------------
BÀI TIỂU LUẬN CUỐI KỲ
MÔN HỌC: HỆ THỐNG NHÚNG
ĐỀ TÀI: ĐÈN GIAO THÔNG
THÁI NGUYÊN – 7/2021
MỤC LỤC
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI......................................................................1
1.1. Tổng quan hệ thống..........................................................................................1
1.2. Mục đích của đề tài..........................................................................................2
1.3. Giới hạn của đề tài............................................................................................2
CHƯƠNG 2: THIẾT KẾ HỆ THỐNG..........................................................................3
2.1. Khảo sát sơ đồ khối của hệ thống.....................................................................3
2.2. Mô phỏng hệ thống...........................................................................................4
2.2.1
Lựa chọn các linh kiện cần sử dụng...........................................................5
2.2.2 Đấu nối các linh kiện và hiệu chỉnh..............................................................6
2.3 Lập trình cho hệ thống.........................................................................................6
2.4
Mơ phỏng.........................................................................................................8
2.5 Đánh giá hệ thống................................................................................................9
CHƯƠNG 3: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN TRONG TƯƠNG LAI.........10
3.1 Kết luận.............................................................................................................. 10
3.2 Hướng phát triển trong tương lai........................................................................10
TÀI LIỆU THAM KHẢO............................................................................................10
DANH MỤC HÌNH ẢNH
Hình 1.1 Đèn giao thơng................................................................................................1
Hình 1.2 Tín hiệu đèn thay đổi theo thời gian thực........................................................2
Hình 2.1 Sơ đồ khối của hệ thống..................................................................................3
Hình 2.2 Giao diện chính của Proteus 8.9......................................................................4
Hình 2.3 Tap Pick Diviecs.............................................................................................5
Hình 2.4 Các linh kiện cần sử dụng...............................................................................5
Hình 2.5 Hệ thống sau khi được đấu nối hồn chỉnh.....................................................6
Hình 2.6 Giao diện chính phần mềm CCS.....................................................................6
Hình 2.7 Tạo project mới cho CCS................................................................................7
Hình 2.8 Lựa chọn VĐK sử dụng và chọn tần số thạnh anh..........................................7
Hình 2.9 Nạp file .hex và chọn tần số thạnh anh cho hệ thống......................................8
Hình 2.10 Hệ thống sau khi được mơ phỏng..................................................................8
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
1.1.
Tổng quan hệ thống
Ngày nay, cùng với sự phát triển vô cùng nhanh của đất nước, các cơng trình
hạ tầng giao thơng dày đặc được được đầu tư xây dựng ở khắp mọi nơi. Nhưng
vấn đề bất cập xảy ra khi những cơng trình giao thơng này vẫn cịn nhiều thiếu sót
trong việc quy hoạch, tính tốn lưu lượng giao thơng,… Tình trạng kẹt xe và tai
nạn giao thông xảy ra liên tục, đặc biệt là tại các ngã 4 giao lộ. Điều này đặt ra
một yêu cầu cấp thiết về việc ứng dụng cơng nghệ kỹ thuật vào điều phối giao
thơng. Có rất nhiều phương án để giải quyết bài tốn giao thơng nan giải này, một
trong những phương án phổ biến và hiệu quả nhất chính là lắp đặt những cột đèn
giao thông tại các giao lộ.
Đề tài “ Đèn giao thông” mà chúng em thực hiện sẽ giải quyết đáng kể các
vấn đề đã được nêu ở trên. Đồng thời đây cũng là cơ hội để chúng em được thực
hành những kiến thức đã học vào thực tế, từ đó ơn luyện và phát triển thêm những
kiến thức được học.
Hình 1.1 Đèn giao thông
Đèn giao thông tại ngã tư tự thay đổi chế độ hoạt động tuỳ theo các khung giờ
trong ngày, giúp điều phối giao thông tốt hơn giảm thiểu hiện tượng ùn tắc trong các
khung giờ cao điểm.
Ý tưởng:
Trang 1
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
Sử dụng DS1307 để đọc tín hiệu thời gian thực rồi chuyền vào PIC từ đó
điều khiển đếm ngược thời gian của đèn LED theo thời gian thực và làm thay
đổi tín hiệu các đèn đỏ, vàng, xanh để điều phối giao thơng.
Hình 1.2 Tín hiệu đèn thay đổi theo thời gian thực
1.2.
1.3.
Mục đích của đề tài
Thiết kế được hệ thống đèn giao thông hoạt động theo thời gian thực.
Hệ thống đèn có các chế độ giờ cao điểm, thấp điểm.
Có thể dễ dàng thay đổi thời của gian đèn tín hiệu.
Tăng khả năng tự tìm hiểu nghiên cứu học tập tự lập.
Tiếp cận gần hơn với công nghệ điện tử trong đời sống.
Vận dụng những kiến thức đã có đồng thời tìm tịi những kiến thức mới để hiểu
sâu sắc hơn trong lĩnh vực này.
Giới hạn của đề tài
Các thơng số giới hạn của đề tài:
o Linh kiện chính sử dụng: PIC16F877A, DS1307,.
o Phần hiển thị: Sử dụng 4 Led 7 thanh và 2 traffic lights.
o Đầu vào: 3 button để cài đặt thời gian cho tín hiệu đèn.
Trang 2
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
CHƯƠNG 2: THIẾT KẾ HỆ THỐNG
2.1.
Khảo sát sơ đồ khối của hệ thống
Theo u cầu của đề tài thì nhóm chúng em tiến hành thiết kế sơ đồ khối của hệ
thống.
Hình 2.1 Sơ đồ khối của hệ thống
Từ ý tưởng đã nêu trên, chúng ta dễ dàng xác định được sơ đồ khối cho hệ
thống, từ sơ đồ khối này chúng ta có thể phân chia nhiệm vụ, chọn linh kiện cho từng
khối chức năng.
Chức năng từng khối:
o Bộ xử lý trung tâm: có chức năng xử lý các yêu cầu đầu vào để cho ra
đầu ra như đã lập trình.
o IC thời gian thực: Đọc tín hiệu thời gian thực rồi chuyền vào Pic.
o Bộ reset: xóa dữ liệu và chạy lại chương trình.
o Bộ dao động: tạo tiến hiệu điện có tần số chính xác và ổn định cao.
o Khối nguồn: cấp nguồn điện cho hệ thống.
o Khối hiển thị: hiển thị tín hiệu đèn giao thơng, và đếm ngược thời gian
của mỗi chu kỳ đèn tín hiệu.
o Nút nhấn: Cài đặt thời gian đếm ngược của đèn đỏ và đèn vàng.
Khi hoạt động thực tế, các khối chức năng phối hợp với nhau theo một quy luật
nhất định, bất kỳ khối nào xảy ra lỗi đều khiến hệ thống hoạt động khơng chính xác.
Trang 3
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
Linh kiện sử dụng cho các khối
o Khối nguồn: sử dụng nguồn DC 5V
o Bộ xử lý : sử dụng Pic 16F877A
o Khối hiển thị: 4 Led 7 thanh và 2 traffic lights
o Nút nhấn: 3 Button
o IC thời gian thực: DS1307
2.2.
Mơ phỏng hệ thống
Nhóm em đã sử dụng phần mềm Proteus để vẽ mạch và mô phỏng hệ thống.
Đây là cơng cụ hữu ích cho các bạn sinh viên có thể tiếp cận, làm quen với các vi xử
lý, vi điều khiển,.. trước khi làm sản phẩm thật.
Hình 2.2 Giao diện chính của Proteus 8.9
Q trình vẽ mô phỏng tên Proteus
o Lựa chọn linh kiện cần dùng
o Đấu nối các linh kiện vừa chọn với nhau
o Hiệu chỉnh, bố trí mạch cho phù hợp
o Nạp chương trình cho Vi điều khiển và tiến hành mô phỏng
Trang 4
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
2.2.1 Lựa chọn các linh kiện cần sử dụng
Tất cả các linh kiện được chọn đều phổ biến và tìm hiểu dễ dàng.
Hình 2.3 Tap Pick Diviecs
Để có thể tìm chính xác linh kiện cần sử dụng thì ta nên cài đầy đủ thư viện của
linh kiện đó.
Hình 2.4 Các linh kiện cần sử dụng
Trang 5
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
2.2.2 Đấu nối các linh kiện và hiệu chỉnh
Tiến hành tìm hiểu các linh kiện và đấu nối sao cho chính xác.
Hình 2.5 Hệ thống sau khi được đấu nối hồn chỉnh
Khi đấu nối trong Proteus ta có thể đánh nhãn cho dây dẫn để cho mạch nhìn
gọn gàng hơn. Bố trí các linh kiện sao cho phù hợp và đẹp mắt nhất có thể. Sau khi
hồn thành mơ phỏng ta tiến hành lập trình cho hệ thống trên phần mềm CCS.
2.3 Lập trình cho hệ thống
Với việc sử dụng Vi điều khiển PIC cho hệ thống nên phần mềm lập trình sẽ là
phần mềm CCS.
Trang 6
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Ngun
Hình 2.6 Giao diện chính phần mềm CCS
Các bước để lập trình cho PIC
1. Tạo một Project Wizard mới.
2. Viết chương trình.
3. Build (kiểm tra lỗi) Compile để tạo file .hex.
Hình 2.7 Tạo project mới cho CCS
Trang 7
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
Hình 2.8 Lựa chọn VĐK sử dụng và chọn tần số thạnh anh
2.4
Mô phỏng
Quay lại Proteus để mô phỏng hệ thống.
Hình 2.9 Nạp file .hex và chọn tần số thạnh anh cho hệ thống
Trang 8
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
Chọn file .hex đã tạo từ CCS vì PIC chỉ nhận file .hex.
Hình 2.10 Hệ thống sau khi được mơ phỏng
Sau khi chạy mô phỏng ta kiểm tra hết tất cả các yêu cầu đề tài đề ra, hệ thống
hoạt động chính xác hồn thành đề tài.
2.5 Đánh giá hệ thống
Các vấn đề đã nghiên cứu:
o Tìm hiểu vi điều khiển PIC 16F877A.
o Tìm hiểu IC thời gian thực DS1307
o Tìm hiểu ngơn ngữ lập trình CCS.
Các vấn đề đã thực hiện:
o Lập trình điều khiển vi điều khiển PIC 16F877A bằng ngơn ngữ
CCS.
o Lập trình điều khiển Led đếm theo thời gian thực
o Lập trình đèn giao thông
Trang 9
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
CHƯƠNG 3: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN TRONG
TƯƠNG LAI
3.1 Kết luận
Đề tài: “Đèn giao thơng” đã có thể chạy đúng theo yêu cầu đặt ra. Chạy
đúng theo thời gian thực và tự thay đổi các chế độ giờ cao điểm, thấp điểm theo
khung giờ cài đặt.
Nhóm chúng em xin chân thành cảm ơn quý thầy cô cùng các bạn sinh viên,
đã đóng góp rất nhiều ý kiến, cơng sức q báu trong q trình nhóm thực hiện đề
tài này.
Đặc biệt, chúng em xin cảm ơn cô Tăng Cẩm Nhung đã nhiệt tình hướng
dẫn, chỉ bảo những kinh nghiệm, kiến thức thực tế để đề tài được hoàn thành đúng
thời gian quy định.
Tuy nhiên, do còn hạn chế về thời gian và trình độ nên đề tài khơng tránh
khỏi nhiều sai sót, nhóm rất mong nhận được sự đóng góp ý kiến chân tình của q
thầy cơ và các bạn để đề tài được hoàn chỉnh hơn.
3.2 Hướng phát triển trong tương lai
Từ kiến thức học hỏi được và kinh nghiệm rút ra trong khi thực hiện đề tài
này, chúng em sẽ cố gắng phát triển hệ thống đèn giao thơng cho các giao lộ
có u cầu phức tạp hơn.
TÀI LIỆU THAM KHẢO
o Giáo trình Hệ thống nhúng – TNUT
o Giáo trình vi điều khiển PIC ( />o />o Datasheet Pic 16F877A/ 74HC595/ 74HC165
Trang 10
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
Code Pic C:
#include <main.h>
// Bien va Ham Con Chuong Trinh Led Giao Thong
#define RED RA0
#define YELLOW RA1
#define GREEN RA2
#define LED_chuc RA4
#define LED_donvi RA5
#define RED2 RE0
#define YELLOW2 RE1
#define GREEN2 RE2
#define LED_chuc2 RA4
#define LED_donvi2 RA5
int time_Red = 10;
int time_Yellow = 2;
int time_Green = 12;
int time_Red2 = time_Yellow + time_Green;
int time_Yellow2 = time_Yellow;
int time_Green2 = time_Red - time_Yellow;
int time_RedCD, time_YellowCD, time_GreenCD;
int time_Red2CD, time_Yellow2CD, time_Green2CD;
int scan;
Trang 11
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
int scan_led2;
int Gio_CaoDiem = 12;
int Phut_CaoDiem = 30;
int turn;
int isSet = 0;
// Bien va Ham Con Chuong Trinh LED 7 doan
const unsigned int8 maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90};
void HienThi(int so_led1, int so_led2)
{
portD = 0xFF;
portB = 0xFF;
LED_chuc = 1; LED_donvi = 0;
portD = maled[so_led1/10];
portB = maled[so_led2/10];
delay_ms(10);
portD = 0xFF;
portB = 0xFF;
LED_chuc = 0; LED_donvi = 1;
portD = maled[so_led1%10];
portB = maled[so_led2%10];
delay_ms(2);
}
Trang 12
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
// Bien va Ham Con Chuong Trinh DS1307
#include <ds1307.c>
int gio,phut,giay,mode;
int luu;
// Bien va Ham Con Chuong Trinh Cai Dat
#define CaiDat RC0
#define Tang RC1
#define Giam RC2
void Check_Button(void)
{
if(!CaiDat)
{
delay_ms(5);
while(!CaiDat);
RED2 = 0; YELLOW2 = 0; GREEN2 = 0;
while(CaiDat)
{
RED = 1; YELLOW = 0; GREEN = 0;
HienThi(time_Red,0);
if(!Tang)
{
time_Red++;
if(time_Red > 99) time_Red = 0;
while(!Tang);
}
if(!Giam)
{
Trang 13
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
time_Red--;
if(time_Red < 0) time_Red = 99;
while(!Giam);
}
}
while(!CaiDat);
while(CaiDat)
{
RED = 0; YELLOW = 1; GREEN = 0;
HienThi(time_Yellow,0);
if(!Tang)
{
time_Yellow++;
if(time_Yellow > 99) time_Yellow = 0;
while(!Tang);
}
if(!Giam)
{
time_Yellow--;
if(time_Yellow < 0) time_Yellow = 99;
while(!Giam);
}
}
while(!CaiDat);
while(CaiDat)
{
Trang 14
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
RED = 0; YELLOW = 0; GREEN = 1;
HienThi(time_Green,0);
if(!Tang)
{
time_Green++;
if(time_Green > 99) time_Green = 0;
while(!Tang);
}
if(!Giam)
{
time_Green--;
if(time_Green < 0) time_Green = 99;
while(!Giam);
}
}
while(!CaiDat);
scan = 0;
scan_led2 = 0;
turn = 4;
isSet = 1;
}
}
void main() {
luu = giay;
trisB = 0x00;
Trang 15
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
trisD = 0x00;
TRISA0 = 0; TRISA1 = 0; TRISA2 = 0;
TRISE0 = 0; TRISE1 = 0; TRISE2 = 0;
TRISA4 = 0; TRISA5 = 0;
ds1307_init();
ds1307_read_time(&gio,&phut,&giay,&mode);
while(TRUE)
{
ds1307_read_time(&gio,&phut,&giay,&mode);
if(gio > Gio_CaoDiem && isSet == 0)
{
time_RedCD = time_Red;
time_YellowCD = time_Yellow;
time_GreenCD = time_Green;
time_Red2CD = time_Yellow + time_Green;
time_Yellow2CD = time_Yellow;
time_Green2CD = time_Red - time_Yellow;
time_RedCD = time_Red + 0;
time_YellowCD = time_Yellow + 0;
time_GreenCD = time_Green + 8;
time_Red2CD = time_YellowCD + time_GreenCD;
time_Yellow2CD = time_YellowCD;
time_Green2CD = time_RedCD - time_YellowCD;
isSet = 1;
for(turn = 0; turn < 2; turn++)
Trang 16
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
{
switch(turn)
{
case 0:
scan = time_RedCD;
scan_led2 = time_Green2CD;
RED = 1; YELLOW = 0; GREEN = 0;
RED2 = 0; YELLOW2 = 0; GREEN2 = 1;
ds1307_read_time(&gio,&phut,&giay,&mode);
luu = giay;
while(scan)
{
if(scan_led2 <= 0)
{
RED2 = 0; YELLOW2 = 1; GREEN2 = 0;
scan_led2 = time_Yellow2CD;
}
HienThi(scan,scan_led2);
ds1307_read_time(&gio,&phut,&giay,&mode);
if(luu != giay)
{
luu = giay;
scan--;
scan_led2--;
}
Check_Button();
}
break;
Trang 17
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
case 1:
scan_led2 = time_Red2CD;
scan = time_GreenCD;
RED2 = 1; YELLOW2 = 0; GREEN2 = 0;
RED = 0; YELLOW = 0; GREEN = 1;
ds1307_read_time(&gio,&phut,&giay,&mode);
luu = giay;
while(scan_led2)
{
if(scan <= 0)
{
RED = 0; YELLOW = 1; GREEN = 0;
scan = time_YellowCD;
}
HienThi(scan,scan_led2);
ds1307_read_time(&gio,&phut,&giay,&mode);
if(luu != giay)
{
luu = giay;
scan--;
scan_led2--;
}
Check_Button();
}
break;
}
}
}
Trang 18
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
else
{
if(gio == Gio_CaoDiem && phut >= Phut_CaoDiem && isSet == 0)
{
time_RedCD = time_Red;
time_YellowCD = time_Yellow;
time_GreenCD = time_Green;
time_Red2CD = time_Yellow + time_Green;
time_Yellow2CD = time_Yellow;
time_Green2CD = time_Red - time_Yellow;
time_RedCD = time_Red + 0;
time_YellowCD = time_Yellow + 0;
time_GreenCD = time_Green + 8;
time_Red2CD = time_YellowCD + time_GreenCD;
time_Yellow2CD = time_YellowCD;
time_Green2CD = time_RedCD - time_YellowCD;
isSet = 1;
for(turn = 0; turn < 2; turn++)
{
switch(turn)
{
case 0:
scan = time_RedCD;
scan_led2 = time_Green2CD;
RED = 1; YELLOW = 0; GREEN = 0;
RED2 = 0; YELLOW2 = 0; GREEN2 = 1;
ds1307_read_time(&gio,&phut,&giay,&mode);
luu = giay;
Trang 19
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
while(scan)
{
if(scan_led2 <= 0)
{
RED2 = 0; YELLOW2 = 1; GREEN2 = 0;
scan_led2 = time_Yellow2CD;
}
HienThi(scan,scan_led2);
ds1307_read_time(&gio,&phut,&giay,&mode);
if(luu != giay)
{
luu = giay;
scan--;
scan_led2--;
}
Check_Button();
}
break;
case 1:
scan_led2 = time_Red2CD;
scan = time_GreenCD;
RED2 = 1; YELLOW2 = 0; GREEN2 = 0;
RED = 0; YELLOW = 0; GREEN = 1;
ds1307_read_time(&gio,&phut,&giay,&mode);
luu = giay;
while(scan_led2)
{
if(scan <= 0)
Trang 20
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
{
RED = 0; YELLOW = 1; GREEN = 0;
scan = time_YellowCD;
}
HienThi(scan,scan_led2);
ds1307_read_time(&gio,&phut,&giay,&mode);
if(luu != giay)
{
luu = giay;
scan--;
scan_led2--;
}
Check_Button();
}
break;
}
}
}
if(gio == Gio_CaoDiem && phut < Phut_CaoDiem && isSet == 0)
{
isSet = 1;
for(turn = 0; turn < 2; turn++)
{
switch(turn)
{
case 0:
scan = time_Red;
scan_led2 = time_Green2;
Trang 21
Tiểu luận hệ thống nhúng
Khoa Điện Tử - Trường DHKTCN Thái
Nguyên
RED = 1; YELLOW = 0; GREEN = 0;
RED2 = 0; YELLOW2 = 0; GREEN2 = 1;
ds1307_read_time(&gio,&phut,&giay,&mode);
luu = giay;
while(scan)
{
if(scan_led2 <= 0)
{
RED2 = 0; YELLOW2 = 1; GREEN2 = 0;
scan_led2 = time_Yellow2;
}
HienThi(scan,scan_led2);
ds1307_read_time(&gio,&phut,&giay,&mode);
if(luu != giay)
{
luu = giay;
scan--;
scan_led2--;
}
Check_Button();
}
break;
case 1:
scan_led2 = time_Red2;
scan = time_Green;
RED2 = 1; YELLOW2 = 0; GREEN2 = 0;
RED = 0; YELLOW = 0; GREEN = 1;
ds1307_read_time(&gio,&phut,&giay,&mode);
Trang 22