Báo cáo đồ án Đèn giao thông ngã tư là một báo cáo về việc nghiên cứu, thiết kế và triển khai hệ thống đèn giao thông cho ngã tư, nhằm tăng cường an toàn giao thông và giảm thiểu tai nạn giao thông. Báo cáo được chia thành các phần sau: Giới thiệu: Báo cáo giới thiệu về đồ án và mô tả sơ lược về vấn đề an toàn giao thông tại ngã tư. Ngoài ra, phần giới thiệu cũng trình bày một số nghiên cứu liên quan đến đề tài và mục tiêu của đồ án. Thiết kế: Phần này mô tả về cách thiết kế hệ thống đèn giao thông cho ngã tư, bao gồm cách sắp xếp các đèn, màu sắc của đèn và phương pháp điều khiển. Cài đặt: Phần này mô tả về cách triển khai hệ thống đèn giao thông cho ngã tư, bao gồm các bước lắp đặt và cài đặt phần mềm. Kiểm tra và đánh giá: Phần này mô tả về kết quả kiểm tra và đánh giá hiệu suất của hệ thống đèn giao thông cho ngã tư, bao gồm thời gian phản hồi và tính ổn định của hệ thống. Kết luận: Báo cáo kết thúc với các kết luận và đánh giá về đồ án, đưa ra các lợi ích và ứng dụng của hệ thống đèn giao thông trong việc tăng cường an toàn giao thông và giảm thiểu tai nạn giao thông. Trong báo cáo này, mô tả chi tiết về cách xây dựng một hệ thống đèn giao thông hiệu quả cho ngã tư. Báo cáo cũng giải thích các bước để thiết kế và triển khai hệ thống, đánh giá hiệu suất của hệ thống và đưa ra các lợi ích của việc sử dụng hệ thống đèn giao thông trong việc tăng cường an toàn giao thông và giảm thiểu tai nạn giao thông.
Trang 1ĐỒ ÁN 2
Đề tài: Thiết kế hệ thống điều khiển tín hiệu đèn ngã tư giao
thông sử dụng vi điều khiển
Lớp : K23D
Hà Nội 2023
Trang 2MỤC LỤC
LỜI MỞ ĐẦU 2
NỘI DUNG 3
I Tổng quan đồ án 3
1 Yêu cầu 3
II Tổng quan board Arduino Uno, IC ghi dịch 74HC595 và 1 số linh kiện 3
1 Board arduino uno R3 3
1.1 Giới thiệu vi điều khiển AVR 3
1.2 Tổng quát vi điều khiển ATmega328P Thông số kỹ thuật của Tmega328P 5
1.3 Phần cứng cơ bản và ngoại vi trên board 11
1.4 Công cụ phát triển cho board 13
2 IC ghi dịch 74HC595 13
2.1 Cấu tạo, đặc tính kỹ thuật IC 74HC595: 13
2.2 Nguyên lý hoạt động của IC ghi dịch 74HC595: 15
2.3 Giao tiếp giữa 74HC595 với arduino 17
3 Các linh kiện khác 17
3.1 Modun 2 led 7 đoạn anot chung hàn sẵn IC74HC595 17
3.2 LED 5mm 5v 3 màu và dây nối 18
III Thiết kế mạch và quá trình thực hiện 18
1 Nguyên lý hoạt động của mạch đèn giao thông 18
2 Lưu đồ thuật toán 20
3 Sơ đồ mạch trên proteus và hình ảnh sản phẩm 21
4 Lập trình cho boar arduino uno R3 bằng phần mền arduino IDE 22
IV Tổng kế và hướng phát triển 27
V Lời kết 28
Trang 3LỜI MỞ ĐẦU
Sống trong những năm đầu của “Cuộc các mạng Công nghiệp 4.0”, rất nhiềucông nghệ mới được phát triển mạnh mẽ Chúng ta càng thấy được sức mạnh từnhững bộ vi xử lí, nó là đầu não, là trái tim của mọi cỗ máy trong cuộc cách mạng4.0 Các vi xử lí ngày càng được trang bị, tích hợp nhiều tính năng, và đặc biệtngày càng nhỏ gọn Các vị xử lý được hoàn thiện để sử dụng rộng rãi trong côngnghiệp, khoa học kĩ thuật, khoa học, sinh học,
Để tìm hiểu, học tập về vi xử lý, đưa các tính năng của vi xử lý vào cuộcsống, nhóm em quyết định tìm hiểu về vi xử lý ATMEGA 328P do hãng Atmel sảnxuất
Với đề tài tìm hiểu : “Đèn tín hiệu giao thông tại ngã tư sử dụng vi xử líATmega 328P” sau một thời gian tìm hiểu và thực hiện đề tài dưới sự hướng dẫncủa Thầy Hoàng Anh Dũng, nhóm chúng em đã hoàn thành đồ án Mặc dù nhóm đã
cố gắng trong quá trình làm nhưng do trình độ còn hạn chế nên chắc chắn đồ ánkhông tránh khỏi những sai sót Nhóm chúng em xin được các thầy sửa chữa, chỉbảo hướng dẫn thêm để đồ án hoàn thiện hơn
Với mô hình một ngã tư, nhóm em hướng đến hiểu được cách thức hoạt độngcủa vi xử lý ATmega 328P, xây dựng một mạch điện đầu tiên trong nghành điện tửcủa mình Bước đầu đến với thế giới vi điều khiển để phát triển sau này
Chúng em xin chân thành cảm ơn !
Hà nội, ngày tháng năm 2023
Trang 53 Thiết kế mạch phải đảm bảo tính hiệu quả và tiết kiệm năng lượng.
4 Thực hiện việc lập trình và kiểm tra mạch đảm bảo hoạt động chính xác vàđáp ứng các yêu cầu kỹ thuật cần thiết
5 Đảm bảo đúng các quy định về mạch điện và an toàn lao động
6 Thiết kế mạch phải đảm bảo tính tiện dụng trong việc sửa chữa và bảo trì
7 Kiểm tra kỹ trước khi đưa vào sử dụng để đảm bảo tính tin cậy của mạch
II Tổng quan board Arduino Uno, IC ghi dịch 74HC595 và 1 số linh kiện
1 Board arduino uno R3
1.1 Giới thiệu vi điều khiển AVR
Vi điều khiển AVR do hãng Atmel sản xuất được giới thiệu lần đầu năm
1996 AVR có rất nhiều dòng khác nhau bao gồn dòng Tiny (AT tiny 13, ATtiny 22, …) có kích thước nhỏ, ít bộ phận ngoại vi, rồi đến dòng AVR(AT90S8535, AT90S8513, …) có kích thước bộ nhớ vào loại trùng bình vàmạnh hơn là dòng Mega (Atmega32, Atmega128, …) với bộ nhớ có kích thước
Trang 6vài Kbyte đến vài trăng Kbyte cùng với các bộ phận ngoại vi đa dạng được tíchhợp trên chip…
Bộ nhớ dữ liệu (data memory) : đây là phần chứa các thanh ghi quan trọngnhất của chip Bộ nhớ dữ liệu trên các chip AVR có độ lớn khác nhau tùy theomỗi chip Tuy nhiên về cơ bản bộ nhớ này được chia làm các phần :
Tệp thanh ghi (Register file) : gồm 32 thanh ghi 8bit có địa chỉ tuyệt đối
từ 0x0000 đến 0x001F Các thanh ghi này được đặt tên là từ R0 đến R31.Chúng có đặc điểm :
Được truy cập trực tiếp trong các instruction
Các toán tử, phép toán thực hiện trên các thanh ghi này chỉ cần một xungClock
Tệp thanh ghi được kết nối trực tiếp với bộ xử lý trung tâm, CPU chip
Chúng là nguồn chứa các số hạng trong các phép toán và cũng là đích chứakết quả
Các thanh ghi vào ra (thanh ghi I/O hay còn gọi là vùng nhớ I/O) là cổnggiao tiếp giữa CPU với thiết bị ngoại vi Tất cả các 24 thanh ghi điều khiển,trạng thái … của thiết bị ngoại vi đều nằm ở đây
RAM ngoại (External RAM) : các chip vi điều khiển AVR cho phépngười dùng có thể gắn thêm RAM ngoài để chứa biến, vùng này thực chất chỉtồn tại khi nào người sử dụng gắn thêm bộ nhớ ngoài vào chip
EEPROM (Electrical Erasable Programmable ROM) là một phần quantrọng của các chip AVR mới, vì là ROM nên bộ nhớ này không bị xóa ngay cảkhi không cấp nguồn nuôi chip, rất thích hợp cho các ứng dụng lưu trữ dữ liệu
Trang 71.2 Tổng quát vi điều khiển ATmega328P Thông số kỹ thuật của Tmega328P
+ Kiến trúc: AVR 8bit
+ Nhiệt độ tối thiểu và tối đa -40 độ C đến 105 độ C
+ Số timer: 3 timer gồm 2 timer 8-bit và 1 timer 16-bit
+ Số chân I/O digital: 14 kênh
+ Số kênh xung PWM: 6 kênh (1timer 2 kênh)
+ Số ngõ vào Analog: 6 kênh
Trang 8Số thứ
tự chân
Mô tả Chức năng Mô tả chứ năng
1 PC6 Reset Khi chân reset ở mức thấp, bộ vi điều
khiển và chương trình của nó sẽ được reset
Chân đầu vào cho giao tiếp nối tiếp
4 PD2 Chân kĩ thuật số Chân 4 được sử dụng làm ngắt
ngoài 0
5 PD3 Chân kĩ thuật số Chân 5 được sử dụng làm ngắt
Trang 9(PWM) ngoài 1
6 PD4 Chân kĩ thuật số Chân 6 được sử dụng cho nguồn bộ
đếm bên ngoài Timer 0
7 Vcc Điện áp dương Nguồn dương của hệ thống
8 GND Nối đất Nối đất của hệ thống
9 XTAL Dao động tinh
thể
Chân này nối với một chân của bộ dao động tinh thể để cung cấp xung nhịp bênngoài cho chip
10 XTAL Dao động tinh
thể
Chân này nối với một chân của bộ dao động tinh thể để cung cấp xung nhịp bên ngoài cho chip
Bộ so sánh analog dương i/ps
13 PD7 Chân kĩ thuật số Bộ so sánh analog âm i/ps
14 PB0 Chân kĩ thuật số Nguồn đầu vào bộ đếm hoặc bộ hẹn
giờ
15 PB1 Chân kĩ thuật
số(PWM)
Bộ đếm hoặc bộ hẹn giờ so sánh khớp A
18 PB4 Chân kĩ thuật Chân này hoạt động như một đầu vào
Trang 10số xung nhịp master và đầu ra xung nhịp
20 AVcc Điện áp dương Điện áp dương cho ADC(nguồn)
21 AREF Tham chiếu
analog
Điện ấp thma chiếu cho analog cho ADC(Bộ chuyển đổi analog sang kĩ thuật số)
22 GND Nối đất Nối đất của hệ thống
23 PC0 Đầu vào analog Đầu vào analog giá trị kĩ thuật số kênh 0
24 PC1 Đầu vào
analog
Đầu vào analog giá trị kĩ thuật số kênh 1
25 PC2 Đầu vào analog Đầu vào analog giá trị kĩ thuật số kênh 2
26 PC3 Đầu vào analog Đầu vào analog giá trị kĩ thuật số kênh 3
28 PC5 Đầu vào analog Đầu vào analog giá trị kĩ thuật số kênh
5 Chân này cũng được sử dụng như dong xung nhịp giao diện nối tiếp
Trang 11Tùy thuộc vào cài đặt cầu chì chọn đồng hồ, PB6 có thể được sử dụng làmđầu vào cho bộ khuếch đại dao động đảo ngược và đầu vào cho mạch hoạt độngcủa đồng hồ bên trong.
Tùy thuộc vào cài đặt cầu chì lựa chọn đồng hồ, PB7 có thể được sử dụnglàm đầu ra từ bộ khuếch đại dao động đảo ngược
- Port C (PC5:0)
Cổng C là cổng I / O hai chiều 7 bit với các điện trở kéo lên bên trong (đượcchọn cho mỗi bit) Bộ đệm đầu ra PC5 0 có đặc tính ổ đĩa đối xứng với cả khảnăng chìm và nguồn cao Là đầu vào, chân C được kéo ra bên ngoài dòng điện sẽthấp nếu điện trở kéo lên được kích hoạt Các chân cổng C được điều kiện đặt lạitrở thành hoạt động, ngay cả khi đồng hồ không chạy
- PC6/Reset
Trang 12Nếu Cầu chì RSTDISBL được lập trình, PC6 được sử dụng làm chân I / O.Lưu ý rằng các đặc tính điện của PC6 khác với các đặc tính điện của các chânkhác của Cổng C
Nếu Cầu chì RSTDISBL không được lập trình, PC6 được sử dụng làm đầuvào Reset Mức thấp trên chân này lâu hơn độ dài xung tối thiểu sẽ tạo ra Reset,ngay cả khi đồng hồ không chạy Các xung ngắn hơn không được đảm bảo đểtạo ra một Reset
- PortD (PD7:0)
Cổng D là cổng I / O 8 bit hai chiều với các điện trở kéo lên bên trong (đượcchọn cho mỗi bit) Bộ đệm đầu ra cổng D có đặc tính ổ đĩa đối xứng với cả khảnăng chìm và nguồn cao Là đầu vào, chân cổng D được kéo ra bên ngoài dòngđiện sẽ ở mức thấp nếu điện trở kéo lên được kích hoạt Các chân cổng D đượcxác định ba lần khi điều kiện đặt lại trở thành hoạt động, ngay cả khi đồng hồkhông chạy
AVCC là chân điện áp cung cấp cho Bộ chuyển đổi A/D, PC[3: 0] Nó phảiđược kết nối bên ngoài với VCC, ngay cả khi ADC không được sử dụng NếuADC được sử dụng, nó phải được kết nối với VCC thông qua bộ lọc thông thấp.Lưu ý rằng PC[6: 4] sử dụng kỹ thuật số cung cấp điện áp VCC
- ADC7:6
ADC7:6 đóng vai trò là đầu vào analog cho bộ chuyển đổi A /D Các chân này được cấp nguồn từ cung cấp tương tự và phục vụ như các kênh ADC 10 bit
Trang 13Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng:
+ 32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ trong bộnhớ Flash của vi điều khiển Thường thì sẽ có khoảng vài KB trong số này sẽđược dùng cho bootloader nhưng đừng lo, bạn hiếm khi nào cần quá 20KB bộnhớ này đâu
+ 2KB cho SRAM (Static Random Access Memory): giá trị các biến bạn khaibáo khi lập trình sẽ lưu ở đây Bạn khai báo càng nhiều biến thì càng cần nhiều
bộ nhớ RAM Tuy vậy, thực sự thì cũng hiếm khi nào bộ nhớ RAM lại trở thànhthứ mà bạn phải bận tâm Khi mất điện, dữ liệu trên SRAM sẽ bị mất
+ 1KB cho EEPROM (Electrically Eraseble Programmable Read OnlyMemory): đây giống như một chiếc ổ cứng mini nơi bạn có thể đọc và ghi dữliệu của mình vào đây mà không phải lo bị mất khi cúp điện giống như dữ liệutrên SRAM
Trang 14b) Ngoại vi trên bo
- Các chân 1(TX) và 0(RX): dùng để nhận và gửi dữ liệu TTL Serial
- Các chân I/O : từ chân 2-13
- Các chân ngặt ngoài Chân : 2,3
- Các chân PWM 8bit của Arduino :3, 5, 6, 9, 10, 11
- Các chân giao tiếp SPI (Serial Peripheral Bus) 10 - 13
- Chân AREF là chân tham chiếu điện áp khi sử dụng analogReference
- SCL, SDA là 2 chân giao tiếp I2C
- Các chân Analog : A0 đến A5
- Vin là chân có thể cung cấp điện áp cho arduino bằng nguồn ngoài
- GND : nối đất
Trang 15- 5v, 3.3v là các chân cung cấp điện áp cho các ngoại vi khác
- RES là chân reset, vi điều khiển sẽ reset khi chân này ở mức LOW
1.4 Công cụ phát triển cho board
- Arduino IDE là một phần mềm mã nguồn mở chủ yếu được sử dụng để viết
và biên dịch mã vào module Arduino
- Có các phiên bản cho các hệ điều hành như MAC, Windows, Linux và chạytrên nền tảng Java đi kèm với các chức năng và lệnh có sẵn đóng vai trò quantrọng để gỡ lỗi, chỉnh sửa và biên dịch mã trong môi trường
- Hỗ trợ nhiều các module Arduino như Arduino Uno, Arduino Mega, ArduinoLeonardo, Arduino Micro và nhiều module khác…
- Là một phần mềm Arduino chính thức, giúp cho việc biên dịch mã trở nên dễdàng
- Môi trường này hỗ trợ cả ngôn ngữ C và C ++
2 IC ghi dịch 74HC595
2.1 Cấu tạo, đặc tính kỹ thuật IC 74HC595:
Thanh ghi dịch (Shift Register) về cơ bản là một vi mạch chuyển đổi nối tiếpsong song Về cơ bản nó nhận dữ liều đầu vào nối tiếp thông qua một chân vàchuyển đổi dữ liệu vào nối tiếp thành đầu ra song song 8 bit, do đó làm giảm sốchân giao diện giữa vi điều khiển và các thiết bị đầu ra
74HC595 là IC ghi dịch (shift register) 8 bit kết hợp chốt dữ liệu, đầu vàonối tiếp, đầu ra song song IC này thường dùng trong các mạch quét led 7, led
ma trận …để tiết kiệm số chân cho vi điều khiển Có thể mở rộng số chân viđiều khiển bao nhiêu tùy thích mà không IC nào có thể làm được bằng cách mắcnối tiếp ngõ vào dữ liệu các IC với nhau
Trang 16Đặc tính thông số kỹ thuật 74HC595
• Điện áp hoạt động: 2V đến 6V
• Mức tiêu thụ điện: 80uA
• Source ra/dòng sink: 35mA
• Điện áp đầu ra bằng điện áp hoạt động
• Điện áp đầu vào mức cao tối thiểu: 3,15V @ (Vcc = 4,5V)
• Điện áp đầu vào mức thấp tối đa: 1.35V @ (Vcc = 4.5V)
• Có thể dễ dàng xếp tầng với nhiều IC hơn để có nhiều đầu ra hơn
• Tần số đồng hồ tối đa: 25Mhz @ 4.5V
• Có các gói PDIP, GDIP, PDSO 16 chân
Trang 179 QH' (QH-bar): Đầu ra phụ, đảo ngược của đầu ra thứ tám.
10.MR (Master Reset): Chân reset cho IC
11.SH_CP (Shift Register Clock Input): Chân xung đồng hồ cho việc chuyển đổi dữ liệu
12.ST_CP (Storage Register Clock Input): Chân xung đồng hồ cho việc lưu dữ liệu vào đăng ký lưu trữ
13.OE (Output Enable): Chân kích hoạt đầu ra, khi ở mức thấp sẽ kích hoạt đầura
14.DS (Serial Data Input): Chân đầu vào cho dữ liệu chuỗi
15.Q7S (Serial Data Output): Đầu ra dữ liệu chuỗi
16.VCC: Nguồn cấp cho IC
2.2 Nguyên lý hoạt động của IC ghi dịch 74HC595:
IC47HC595 có hai thanh ghi ,mỗi thanh ghi chỉ có 8 bit dữ liệu Cái
đầu tiên được gọi là Thanh ghi dịch Thanh ghi dịch nằm sâu trong các
mạch IC
Bất cứ khi nào đặt một xung clock cho 74HC595, hai điều xảy ra:
Trang 18 Các bit trong Thanh ghi dịch di chuyển sang trái (MSBFIRST)hoặc(LSBFIRST)một bước mỗi khi xung clock xuất hiện sườn lên
Ví dụ: Bit 7 nhận giá trị trước đó ở bit 6, bit 6 nhận giá trị của bit 5,…
Bit 0 trong thanh ghi dịch chấp nhận giá trị hiện tại trên chân DATA.Tại cạnh lên của xung, nếu chân dữ liệu ở mức cao, thì giá trị 1 sẽđược đẩy vào thanh ghi dịch Nếu không, nó là 0
Khi chân latch được chuyển lệ mức cao trong thời gian 1 xung clock,nội dung của thanh ghi dịch(thanh ghi thứ 1) được sao chép vào thanhghi thứ hai Mỗi bit của thanh ghi lưu trữ(thanh ghi thứ 2) được kếtnối với một trong các chân đầu ra QA - QH của vi mạch, vì vậy nóichung, khi giá trị trong thanh ghi lưu trữ thay đổi, các đầu ra cũngvậy
Có thể hiểu rõ hơn điều này với hình minh họa bên dưới
Trang 192.3 Giao tiếp giữa 74HC595 với arduino
Sử dụng lệnh shiftout để truyền dữ liệu lên thanh ghi của IC74HC595: Cú pháp câu lệnh:
Latchpin là chân chốt được kết nối với chân 12 của IC
Datapin là chân chuyền dữ liệu được kết nối với chân 14 của IC
Clockpin là chân cấp xung mẫu được kế nối với chân 11 của IC
MSFIRST (hoặc LSFIRST) là chọn bắt đầu từ bit bên phải nhất trước hoặcbit bên trái nhất trước
m(c) là mảng dữ liệu để truyền lên 74HC595
3 Các linh kiện khác
3.1 Modun 2 led 7 đoạn anot chung hàn sẵn IC74HC595
Mạch hiển thị 2 led 7 đoạn 74HC595 được thiết kế có thể dễ dàng điều khiển
và hiển thị thông tin lên 2 led 7 đoạn chỉ với 3 chân giao tiếp thông qua IC ghidịch 74HC595, ngoài ra mạch còn có khả năng mở rộng thêm các led tiếp theoqua cổng đầu ra nối tiếp
Thông số kỹ thuật:
Nguồn sử dụng: 3 ~ 6VDC
Dòng điện sử dụng: 50mA
IC Driver: 74HC595
3 chân giao tiếp: SCLK, RCLK, DIO
Hiển thị 2 led 7 đoạn cỡ 0.5''
Kích thước: 25 x 38mm
Trang 203.2 LED 5mm 5v 3 màu và dây nối
III Thiết kế mạch và quá trình thực hiện
1 Nguyên lý hoạt động của mạch đèn giao thông
Trang 21Khi đv1 tắt thì đđ2 mới tắt cùng lúc đó đèn xanh của làn đường 2, đèn đỏ làn đường 1 sáng.
Lúc đèn vàng làn đường 2(đv2) được bật lên cũng là lúc đx2 tắt, đđ2 tắt chu kì được lập lại với đđ2,đx1…
Trang 22Bắt Đầu
Chế độ hoạt động
Đỏ 30s Xanh 25s Vàng 5s
Cột 1: đèn đỏ Cột 2: đèn xanh
Cột 1: đèn xanh Cột 2: đèn đỏ
Cột 1: đèn vàng Cột 2: đèn đỏ
Sai
Sai Sai Sai
Đúng Đúng Đúng
Đúng
Trang 233 Sơ đồ mạch trên proteus và hình ảnh sản phẩm
Sơ đồ mạch mô phỏng trên proteus :
22
Trang 244 Lập trình cho boar arduino uno R3 bằng phần mền arduino IDE
Mặc định khi cấp nguồn sẽ hoạt động ở chế độ (30s đỏ,5s vàng,25s xanh).//hướng đi 1
Trang 26shiftOOut(dataPin1, clockPin1, MSBFIRST,m[c]);
shiftOOut(dataPin1, clockPin1, MSBFIRST,m[b]);
digitalWrite(latchPin1,HIGH);
digitalWrite(latchPin2,LOW);
shiftOOut(dataPin2, clockPin2, MSBFIRST,m[c2]);
shiftOOut(dataPin2, clockPin2, MSBFIRST,m[b2]);
shiftOOut(dataPin2, clockPin2, MSBFIRST,m[a]);
shiftOOut(dataPin2, clockPin2, MSBFIRST,m[0]);