Lựa chọn giải pháp
Giải pháp công nghệ
Nhóm chúng em đề xuất giải pháp xây dựng hệ thống kiểm soát lượng người ra vào phòng, bao gồm việc thu nhận và xử lý tín hiệu Khi có người vào, hệ thống sẽ giữ đèn bật nếu đã sáng, hoặc bật đèn nếu chưa sáng Khi tất cả mọi người ra khỏi phòng, đèn sẽ tự động tắt Hệ thống cũng liên tục hiển thị số người còn lại trong phòng, thuận tiện cho việc kiểm tra và theo dõi.
Giải pháp thiết kế
Để phát hiện người ra ta dùng 2 bộ thu phát hồng ngoại mắc gần nhau đặt ở cửa ra vào.
Lập trình vi điều khiển PIC để nhận tín hiệu từ hai bộ đèn LED hồng ngoại, từ đó thực hiện tính toán và xử lý nhằm đưa ra lệnh bật tắt đèn.
Để hiển thị ta dùng Led 7 thanh: lấy tín hiệu ra từ Pic để thông báo xem trong phòng có bao nhiêu người
Điều khiển tắt/mở bóng đèn nhờ transistor cấp dòng cho rơ le.
Các yêu cầu
Hệ thống điều khiển đèn thông minh này áp dụng cho các phòng họp:
Số lượng người trong phòng tối đa không quá 99 người.
Phòng chỉ có một cửa ra vào.
Ở một thời điểm chỉ có 1 người qua cửa.
Có người đi vào thì bật đèn và đi ra hết thì tắt đèn
Hệ thống có 2 chế độ làm việc tự động và bằng tay.
Làm việc với điện áp 220V/50Hz.
Sensor và công nghệ tùy chọn.
Có khả năng nâng cấp, cải tiến.
Giới hạn hạn định
Làm việc cả ban ngày lẫn ban đêm.
Thu nhận tín hiệu liên tục khi có người ra vào.
Nhiệt độ môi trường: trong nhà 10 0 C đến 40 0 C.
Hệ thống cấp điện mới từ đầu.
THIẾT KẾ HỆ THỐNG
Sơ đồ tổng quát
Hệ thống điều khiển đèn thông minh gồm có 5 khối chính.
Hình 2.1: Sơ đồ tổng quát hệ thống bật tắt đèn thông minh
Khối Nguồn: Cung cấp nguồn cho hệ thống.
Khối cảm biến sử dụng sensor hồng ngoại để thu nhận tín hiệu khi có người ra vào phòng Tín hiệu này được truyền vào chân Pic để xử lý Để phân biệt người vào hay ra, hệ thống sử dụng hai bộ thu phát hồng ngoại được lắp đặt gần nhau.
Khối Xử lý: Dùng VDK Pic 16F877A để lấy tín hiệu từ cảm biến, tính toán, lưu trữ và đưa ra khối hiển thị và khối chấp hành.
Khối Hiển thị hiển thị số lượng người hiện có trong phòng thông qua tín hiệu từ chân Pic trên Led 7 thanh Khối Chấp hành nhận tín hiệu từ khối xử lý để thực hiện việc đóng cắt tiếp điểm của mạch động lực.
Sơ đồ Callgraph
Hình 2.2: Sơ đồ Callgraph của hệ thống bật tắt đèn thông minh
Sơ đồ đặc tả
Hình 2.3: Sơ đồ đặc tả của hệ thống bật tắt đèn thông minh
Chương trình điều khiển chính
Cảm biến Chấp hành Hiển thị
Phân lượng người trong phòng
Các module trong hệ thống
Module này chuyển đổi điện áp xoay chiều 220V thành điện áp một chiều để cung cấp cho các linh kiện trong hệ thống Đầu tiên, biến áp hạ điện áp xoay chiều 220V xuống 12V, sau đó sử dụng mạch chỉnh lưu để chuyển đổi 12V xoay chiều thành 12V một chiều Cuối cùng, IC 7805 được sử dụng để ổn định điện áp đầu ra ở mức 5V.
Hệ thống cảm biến sử dụng mạch thu phát hồng ngoại với Led phát hồng ngoại kết nối qua điện trở R1, R2, phát ra ánh sáng hồng ngoại tới Led thu Led thu có ba chân, trong đó chân 2 truyền tín hiệu vào vi xử lý Khi không có người, tín hiệu hồng ngoại ở mức cao; khi có người cắt qua, tín hiệu giảm xuống mức thấp Để phân biệt hướng đi của người, hai bộ thu-phát được lắp song song và kết nối với vi xử lý để thực hiện các thao tác tính toán, kiểm tra và lưu trữ tín hiệu.
Hình 2.5: Module thu phát hồng ngoại
2.4.3 Module điều khiển trung tâm
Khối điều khiển trung tâm sử dụng vi điều khiển Pic 16F877A để tiếp nhận tín hiệu ngắt từ bộ thu hồng ngoại qua các chân RB4 và RB5 của cổng B Khi tín hiệu ngắt được kích hoạt, vi điều khiển sẽ kích hoạt ngắt cổng B từ RB4 đến RB7 Qua thuật toán đã được nạp vào Pic, chương trình điều khiển sẽ gửi tín hiệu tới các cổng A, C, D để điều khiển khối hiển thị (Led 7 thanh) và khối chấp hành (module động lực).
Bộ tạo dao động dùng thạch anh 20M cung cấp ngồn dao động cho Pic
Bộ Reset cấp nguồn 5V và xác lập trạng thái ban đầu cho Pic.
Hình 2.6: Module điều khiển trung tâm
2.4.4 Module tương tác điều khiển (hiển thị) Để tiện cho việc kiểm tra theo dõi số người hiện đang ở trong phòng, ta sử dụng 2 Led 7 thanh mắc chung Anot với số người hiển thị tối đa là 99 người Tín hiệu điều khiển từ Vi xử lý đưa ra cổng C để bật tắt các thanh Led từ 1 đến hiển thị cả hai Led ta dùng thuật toán quét Led với tín hiệu đưa ra từ cổng D quyết định Led 1 hay Led 2 được bật.
Bộ phận chấp hành kết nối với thiết bị điện thông qua Role, trong đó vi xử lý sẽ gửi lệnh điều khiển để đóng mở Transistor, cung cấp nguồn cho cuộn dây của Role Đèn điện được kết nối với nguồn 220V xoay chiều qua tiếp điểm của Role, cho phép đèn bật lên khi Role tác động và tắt khi Role không hoạt động Để hệ thống có thể hoạt động ở cả hai chế độ tay và tự động, sử dụng công tắc 3 vị trí: vị trí 1 cho chế độ tự động, còn vị trí 2 và 3 tương ứng với tắt/bật đèn.
Hình 2.8 : Module chấp hành của hệ thống bật tắt đèn thông minh
Lựa chọn linh kiện
3 Sơ đồ chân vi điều khiển PIC 16F877A
Hình 2.9: Sơ đồ chân PIC 16F877A
Vi điều khiển PIC 16F877A thuộc họ PIC16Fxxx, sở hữu tập lệnh 35 lệnh dài 14 bit, với khả năng thực thi mỗi lệnh trong một chu kỳ xung clock Tốc độ tối đa đạt được là 20 MHz, tương ứng với chu kỳ lệnh 200ns Bộ nhớ chương trình có dung lượng 8Kx14 bit, bộ nhớ dữ liệu RAM là 368x8 byte và bộ nhớ EEPROM là 256x8 byte Vi điều khiển này có 5 PORT I/O với tổng cộng 33 pin I/O, cùng với các đặc tính ngoại vi đa dạng.
Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit.
Timer1: bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm dựa
Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler Hai bộ Capture/so sánh/điều chế độ rộng xung.
Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ.
Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển RD, WR, CS bên ngoài.
Các đặc tính Analog: 8 kênh chuyển đổi ADC 10 bit Hai bộ so sánh
Bộ nhớ flash có khả năng ghi xóa lên đến 100.000 lần, trong khi bộ nhớ EEPROM cho phép ghi xóa tới 1.000.000 lần và có thể lưu trữ dữ liệu trong hơn 40 năm Hệ thống hỗ trợ tự nạp chương trình qua phần mềm và cho phép nạp chương trình trực tiếp trên mạch điện ICSP thông qua 2 chân Ngoài ra, thiết bị còn tích hợp Watchdog Timer với bộ dao động bên trong, chức năng bảo mật mã chương trình, chế độ Sleep, và khả năng hoạt động với nhiều dạng Oscillator khác nhau.
5 Sơ đồ khối vi điều khiển PIC 16F877A
Hình 2.10 : Sơ đồ khối vi điều khiển PIC16F877A
6 Tổ chức bộ nhớ Cấu trúc bộ nhớ của vi điều khiển PIC16F877A bao gồm bộ nhớ chương trình (program memory) và bộ nhớ dữ liệu (data memory)
Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ flash, bao gồm từ page 0 đến page 3, với khả năng chứa 8*1024 lệnh (mỗi lệnh mã hóa có dung lượng 1 word 14 bit) Để mã hóa địa chỉ của 8k word bộ nhớ chương trình, bộ đếm chương trình có dung lượng 13 bit (PC) Khi vi điều khiển được reset, bộ đếm chương trình sẽ trỏ đến địa chỉ 0000h (reset vector), và khi có ngắt xảy ra, nó sẽ trỏ đến địa chỉ 0004h (interrupt vector) Lưu ý rằng bộ nhớ chương trình không bao gồm bộ nhớ stack, sẽ được đề cập trong phần sau.
Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank Đối với PIC16F877A bộ nhớ dữ liệu được chia ra làm 4 bank.
Mỗi bank trong bộ nhớ dữ liệu có dung lượng 128 byte, bao gồm các thanh ghi chức năng đặc biệt (SFR) nằm ở các địa chỉ thấp và các thanh ghi mục đích chung (GPR) ở các địa chỉ còn lại Các thanh ghi SFR thường xuyên sử dụng, như thanh ghi STATUS, được đặt ở tất cả các bank, giúp thuận tiện cho việc truy xuất và giảm thiểu số lượng lệnh trong chương trình.
Stack là một vùng nhớ đặc biệt không cho phép đọc hay ghi, nằm ngoài bộ nhớ chương trình và bộ nhớ dữ liệu Khi lệnh CALL được thực hiện hoặc khi có ngắt xảy ra, giá trị của bộ đếm chương trình (PC) sẽ được lưu trữ trong stack Khi lệnh RETURN, RETLW hoặc RETFIE được thực thi, giá trị PC sẽ được lấy ra từ stack, cho phép vi điều khiển tiếp tục thực hiện chương trình theo đúng quy trình đã định.
Bộ nhớ Stack trong vi điều khiển PIC họ 16F87xA có khả năng chứa được
Bài viết đề cập đến cơ chế hoạt động của bộ nhớ Stack, trong đó giá trị được lưu trữ theo cơ chế xoay vòng Cụ thể, giá trị lưu vào Stack lần thứ 9 sẽ ghi đè lên giá trị của lần đầu tiên, và giá trị tại lần thứ 10 sẽ ghi đè lên giá trị của lần thứ hai Điều quan trọng là không có tín hiệu nào báo hiệu trạng thái của Stack, do đó không thể xác định khi nào Stack sẽ tràn Thêm vào đó, các vi điều khiển dòng PIC không hỗ trợ lệnh POP hay PUSH, khiến cho mọi thao tác với bộ nhớ Stack hoàn toàn phụ thuộc vào CPU.
7 Các cổng xuất nhập của PIC16F877A
Cổng xuất nhập (I/O port) là phương tiện quan trọng giúp vi điều khiển tương tác với môi trường bên ngoài Qua các hoạt động tương tác đa dạng này, chức năng của vi điều khiển được thể hiện rõ ràng và hiệu quả.
Cổng xuất nhập của vi điều khiển bao gồm nhiều chân (I/O pin) và số lượng chân cũng như cổng có thể khác nhau tùy theo cấu hình và chức năng của từng loại vi điều khiển Ngoài chức năng xuất nhập thông thường, một số chân còn tích hợp các đặc tính giao tiếp ngoại vi, cho phép chúng thực hiện nhiều chức năng khác nhau Chức năng của từng chân trong mỗi cổng có thể được thiết lập và điều khiển thông qua các thanh ghi SFR liên quan.
Port A Port A (RPA) bao gồm 6 I/O pin Đây là các chân “hai chiều”
Chân pin hai chiều (bidirectional pin) cho phép thực hiện cả chức năng xuất và nhập dữ liệu Chức năng I/O này được quản lý thông qua thanh ghi TRISA tại địa chỉ 85h Để thiết lập một chân trong PortA thành chế độ nhập (input), cần "set" bit điều khiển tương ứng trong thanh ghi TRISA; ngược lại, để chuyển đổi chân đó sang chế độ xuất (output), ta thực hiện thao tác tương tự.
Để điều khiển chân tương ứng trong thanh ghi TRISA, ta cần "clear" bit điều khiển Thao tác này cũng áp dụng cho các PORT khác Ngoài ra, Port A còn đóng vai trò là ngõ ra cho bộ ADC, bộ so sánh, ngõ vào analog, ngõ vào xung clock của Timer0, và ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port).
Các thanh ghi SFR liên quan đến Port A bao gồm:
Port A (địa chỉ 05h) : chứa giá trị các pin trong Port A TRISA (địa chỉ 85h) : điều khiển xuất nhập.
CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh.
CVRCON (địa chỉ 9Dh) : thanh ghi điều khiển bộ so sánh điện áp.
ADCON1 (địa chỉ 9Fh) : thanh ghi điều khiển bộ ADC
Port B (RPB) có 8 chân I/O, với thanh ghi điều khiển xuất nhập là TRISB Một số chân của Port B được sử dụng trong quá trình nạp chương trình cho vi điều khiển qua các chế độ nạp khác nhau Ngoài ra, Port B còn liên quan đến ngắt ngoại vi và bộ Timer0, đồng thời tích hợp chức năng điện trở kéo lên có thể được điều khiển bởi chương trình.
Các thanh ghi SFR liên quan đến Port B bao gồm:
Port B (địa chỉ 06h,106h) : chứa giá trị các pin trong Port B TRISB (địa chỉ 86h,186h) : điều khiển xuất nhập OPTION_REG(địa chỉ 81h,181h): điều khiển ngắt ngoại vi và bộ Timer0
Port C (RPC) bao gồm 8 chân I/O và được điều khiển bởi thanh ghi TRISC Ngoài chức năng xuất nhập, Port C còn tích hợp các chân cho bộ so sánh, Timer1, PWM, cũng như các chuẩn giao tiếp nối tiếp như I2C, SPI, SSP và USART.
Các thanh ghi điều khiển liên quan đến Port C:
Port C (địa chỉ 07h) : chứa giá trị các pin trong Port C TRISC (địa chỉ 87h) : điều khiển xuất nhập.
Port D (RPD) có 8 chân I/O và được điều khiển thông qua thanh ghi TRISD Ngoài ra, Port D còn hoạt động như cổng xuất dữ liệu cho chuẩn giao tiếp PSP (Parallel Slave Port).
Các thanh ghi liên quan đến Port D bao gồm:
Thanh ghi Port D : chứa giá trị các pin trong Port D.
Thanh ghi TRISD : điều khiển xuất nhập.
Thanh ghi TRISE : điều khiển xuất nhập Port E và chuẩn giao tiếp PSP
Port E (RPE) bao gồm 3 chân I/O, với thanh ghi điều khiển xuất nhập tương ứng là TRISE Các chân của Port E hỗ trợ ngõ vào analog và đồng thời cũng là các chân điều khiển cho chuẩn giao tiếp PSP.
Các thanh ghi liên quan đến Port E bao gồm:
Port E : chứa giá trị các chân trong PortE.
PSP ADCON1: thanh ghi điều khiển khối ADC.
PIC16F877A có 15 nguồn ngắt được điều khiển bởi thanh ghi INTCON (bit GIE), với mỗi ngắt có bit điều khiển và cờ ngắt riêng Các cờ ngắt được thiết lập khi điều kiện ngắt xảy ra, bất chấp trạng thái của bit GIE, nhưng hoạt động ngắt vẫn phụ thuộc vào bit GIE và các bit điều khiển khác Bit điều khiển ngắt RB0/INT và TMR0 nằm trong thanh ghi INTCON, đồng thời thanh ghi này cũng chứa bit cho phép các ngắt ngoại vi PEIE Ngoài ra, các bit điều khiển ngắt được lưu trữ trong thanh ghi PIE1 và PIE2.
Cờ ngắt của các ngắt nằm trong thanh ghi PIR1 và PIR2.
Sơ đồ nguyên lý của mạch
Các module được kết nối với nhau theo sơ đồ hình vẽ.
Hình 3.1 Sơ đồ mạch nguyên lý
Thuật toán điều khiển
Chương trình có nhiệm vụ:
Kiểm tra xem người đi vào phòng hay đi ra khỏi phòng
Vi điều khiển thực hiện ngắt cổng B để chuơng trình điều khiển thực hiện
Chương trình điều khiển sử dụng ngắt INTERRUPT của vi điều khiển, cho phép cổng B thực hiện điều khiển mà không cần sự can thiệp của chương trình chính Việc xử lý ngắt cho cổng B bắt đầu từ B4, đảm bảo hiệu quả trong quá trình điều khiển.
Để bắt đầu, cần bố trí hai bộ thu phát hồng ngoại gần nhau, tạo thành mặt phẳng song song với mặt đất Bộ thu phát đầu tiên được kết nối với cổng B4 của vi xử lý, trong khi bộ thu phát thứ hai nối với cổng B5 của vi xử lý.
Để xác định xem một người đi vào hay ra khỏi phòng, ta cần phân tích tín hiệu từ hai bộ thu phát hồng ngoại Nếu tín hiệu từ bộ thu phát thứ nhất bị gián đoạn trước, điều đó cho thấy người đó đang đi vào phòng Ngược lại, nếu tín hiệu từ bộ thu phát thứ hai bị gián đoạn trước, người đó đang ra khỏi phòng Vi xử lý sẽ kích hoạt ngắt cổng B để thực hiện chương trình xử lý tương ứng.
Hình 3.2: Sơ đồ thuật toán
Chương trình nạp vào Vi điều khiển Pic 16F877A được viết bằng ngôn ngữ C trên phần mềm CCS và mô phỏng trong Proteus Chương trình bao gồm các hàm con như 'void den(ng)' để bật tắt đèn, 'void led(ng)' để hiển thị LED, 'int dauvao()' để đếm số người vào, và chương trình con để đếm số người ra.
’int daura()’, chương trình con Ngắt thay đổi trạng thái các chân B4->B7 và chương trình Chính.
Các hằng số và biến trong chương trình : Mảng LED7[10] gồm 10 phần tử, mỗi phần tử tương ứng với 1 con số từ 0 đến 9 mà Led 7 đoạn sẽ hiển thị.
Biến chạy 'i' được sử dụng trong vòng lặp để quét đèn LED, trong khi biến 'ng' thể hiện số người hiện có trong phòng Các biến 'L1' và 'L2' hiển thị các LED 7 đoạn 1 và 2, tương ứng với chữ số hàng chục và hàng đơn vị của số người Hai biến 'vao' và 'ra' nhận tín hiệu từ đầu ra của hai LED thu 1 và 2; bình thường 'vao=ra=1', nhưng khi có người cắt qua bộ thu phát 1, 'vao' sẽ trở thành 0, và khi người cắt qua bộ thu phát 2, 'ra' sẽ trở thành 0.
Trong quá trình xác nhận tín hiệu qua hai bộ thu phát, ban đầu thiết lập x và y đều bằng 0 Khi người đi qua Led thu 1, x được cập nhật thành 1; khi người đi qua Led thu 2, y được cập nhật thành 1 Sau khi người đã đi qua cả hai bộ thu phát 1 và 2, hệ thống sẽ cài đặt lại x và y về 0 để chuẩn bị cho lượt tiếp theo.
Chương trình sử dụng ngắt để theo dõi sự thay đổi trạng thái trên các chân B4 đến B7 của cổng B Khi có sự thay đổi trạng thái, ngắt sẽ được kích hoạt Dựa vào tín hiệu thu được từ các chân B4 và B5, chương trình sẽ gọi các chương trình con 'dauvao' hoặc các chương trình con khác tương ứng.
‘daura’ Chương trình ngắt sẽ trả về giá trị là số người trong phòng ’ng’.
Chương trình chính hoạt động với vòng lặp vô hạn, cho phép hệ thống hoạt động liên tục Từ giá trị ‘ng’ nhận được từ chương trình ngắt, chương trình chính sẽ gọi các hàm ‘den(ng)’ và ‘Led(ng)’ để thực hiện việc điều khiển nguồn điện và hiển thị thông tin.
B4=input_pin(B4): tín hiệu từ Led thu 1 B5=input_pin(B5):tín hiệu từ Led thu 2
Số ng: số lượng người đang ở trong phòng
XÂY DỰNG HỆ THỐNG
Kết quả mô phỏng
Khi phòng không có người, công tắc 3 vị trí ở chế độ 1 sẽ tự động bật tắt đèn Led 7 thanh sẽ hiển thị số lượng người có mặt trong phòng.
00, rơ le chưa tác động, đèn chưa sáng.
Hình 3.1 : Trạng thái ban đầu của hệ thống
Khi có người vào phòng, senso 1 có tín hiệu trước, Led 7 thanh hiển thị số người trong phòng là 01, rơ le tác động, đèn được bật.
Hình 3.2 : Khi có người vào phòng
Khi có thêm người vào phòng, senso 1 lại có tín hiệu trước, Led 7 thanh hiển thị số người trong phòng là 02, rơ le vẫn tác động, đèn vẫn sáng.
Hình 3.3 : Khi có thêm người vào phòng
Khi có người ra khỏi phòng, senso 2 có tín hiệu trước, Led 7 thanh hiển thị số người trong phòng là 01, rơ le vẫn tác động, đèn vẫn sáng.
Hình 3.4 : Khi có người ra khỏi phòng
Khi có người trong phòng, Led 7 sẽ hiển thị số lượng người là 01, rơ le hoạt động và đèn sáng Để tắt đèn, chỉ cần gạt công tắc sang vị trí số 2.
Hình 3.5 : Khống chế tắt đèn khi đang có người
Khi phòng không có người, Led 7 hiển thị số người là 00, rơ le chưa hoạt động và đèn chưa sáng Để bật đèn, chỉ cần gạt công tắc sang vị trí số 3, đèn sẽ sáng lên.
Hình 3.1 : Khống chế bật đèn khi không có người ĐÁNH GIÁ VÀ KẾT LUẬN
Hệ thống điều khiển đèn thông minh cho phòng họp sử dụng công nghệ thu phát hồng ngoại và vi xử lý Pic, đáp ứng đầy đủ yêu cầu học tập Hệ thống này hoạt động ổn định và có khả năng nâng cấp, mở rộng cho các ứng dụng khác như chiếu sáng cầu thang, hành lang, và hệ thống chống trộm.
Hệ thống hiện tại vẫn tồn tại một số khuyết điểm, như việc chỉ nhận diện được một người khi có nhiều người đi vào hoặc ra cùng lúc, và gặp lỗi khi người dùng chưa vào hẳn hoặc đã quay ra Để ứng dụng hiệu quả trong thực tiễn, cần khắc phục các lỗi nhận diện, cải thiện khả năng chống nhiễu cho cảm biến, và đảm bảo khả năng đóng cắt nguồn điện xoay chiều 220V hoặc cao hơn Nếu những vấn đề này được giải quyết, hệ thống sẽ có khả năng ứng dụng lớn, đáp ứng yêu cầu tự động hóa ngày càng cao và góp phần tiết kiệm điện trong bối cảnh thiếu hụt nguồn điện hiện nay.