3.3.1. Thiết kế phần cứng.
72
Hình 3.2. Sơ đồ khối tổng thể của nút trong mô hình hệ thống.
Khối thu phát vô tuyến: Khối này chính là module Xbee (xbee lấy nguồn
điện áp 3.3 VDC từ chân nguồn 3.3 VDC trên Arduino), khối này có chức năng là truyền tín hiệu đến các nút khác từ vi điều khiển và nhận tín hiệu từ các nút khác gửi đến cho vi điều khiển theo chuẩn Zigbee.
Khối điều khiển: sử dụng bo mạch Arduino, với chức năng để xử lý chƣơng
trình và tín hiệu truyền nhận.
Khối chấp hành: sử dụng LED. Với chức năng để chiếu sáng và thay đổi
cƣờng độ sáng.
Khối nguồn: Sử dụng một module nguồn 5VDC để cung cấp nguồn cho toàn
bộ nút hoạt động.
3.3.1.2. Sơ đồ nguyên lý của các nút trong mô hình hệ thống.
Dựa vào việc phân tích sơ đồ khối ta đƣa ra đƣợc thiết kế sơ đồ nguyên lý cho các nút cảm biến trong mô hình hệ thống nhƣ sau nhƣ sau:
73
Sơ đồ nguyên lý nút End Device:
Hình 3.3. Sơ đồ nguyên lý nút End Device.
Trong sơ đô: toàn bộ nút End Device đƣợc cung cấp nguồn điện bởi một module nguồn 5VDC bên ngoài. Module Xbee đƣợc cấp nguồn 3,3 VDC qua chân nguồn 3,3 VDC của Arduino nano. Chân Dout, Din của Xbee đƣợc kết nối với chân RX, TX của Arudino nano để thực hiện giao tiếp. LED đƣợc điều khiển bởi một Transistor, chân Bazơ của transistor đƣợc kết nối với chân PWM D2 của Arduino để thực hiện việc điều khiển Transistor. Chân A0 của Arduino kết nối với chân 2 của cảm biến ánh sáng để Arduino đọc tín hiệu từ cảm biến ánh sáng.
74
Hình 3.4. Hình ảnh phần cứng nút End Device.
Sơ đồ nguyên lý nút Router:
Hình 3.5. Sơ đồ nguyên lý nút Router.
Trong sơ đô: toàn bộ nút Router đƣợc cung cấp nguồn điện bởi một module nguồn 5VDC bên ngoài. Module Xbee đƣợc cấp nguồn 3,3 VDC qua chân nguồn 3,3 VDC của Arduino nano. Chân Dout, Din của Xbee đƣợc kết nối với chân RX, TX của Arudino nano để thực hiện giao tiếp. LED đƣợc điều khiển bởi một
75
Transistor, chân Bazơ của transistor đƣợc kết nối với chân PWM D2 của Arduino đê thực hiện việc điều khiển Transistor. Chân A0 của Arduino kết nối với chân 2 của cảm biến chuyển động để Arduino đọc tín hiệu từ cảm biến chuyển động.
Hình 3.6. Hình ảnh phần cứng nút Router.
Sơ đồ nguyên lý nút Coordinator:
76
Trong sơ đô: toàn bộ nút Coordinaotor đƣợc cung cấp nguồn điện bởi một module nguồn 5VDC bên ngoài. Module Xbee đƣợc cấp nguồn 3,3 VDC qua chân nguồn 3,3 VDC của Arduino nano. Chân Dout, Din của Xbee đƣợc kết nối với chân RX, TX của Arudino nano để thực hiện giao tiếp.
Hình 3.8. Hình ảnh phần cứng nút Coordinator.
3.3.1.3. Giới thiệu một số linh kiện đƣợc sử dụng. a) Module Xbee ZB.[10]
Thông số kỹ thuật của module Xbee series 2:
Module XBee ZB series 2 sử dụng một vi mạch từ Ember Networks cái mà cho phép vài tiêu chuẩn khác nhau dựa vào kết nối mạng lƣới ZigBee. Kết nối mạng lƣới là trung tâm của việc tạo ra các mạng lƣới mạnh mẽ, hệ thống cái mà có thể sinh ra rất nhiều bộ dữ liệu phong phú hoặc hỗ trợ tƣơng tác phúc tạp quy mô của con ngƣời. Trong đề tài này sẽ sử dụng độc phần cứng module XBee ZB series 2.
77
Hình 3.9. Module Xbee series 2.
Một số đặc điểm kỹ thuật của module XBee ZB series 2: + Cự ly truyền thông trong nhà lên tới 40m.
+ Cự ly truyền ngoài trời lên tới 120m. + Công suất truyền đi là 2mW.
+ Tốc độ truyền dữ liệu RF là 250.000 bps.
+ Tốc độ dữ liệu giao tiếp nhận nối tiếp lên tới 3500 bps. + Độ nhạy thu là -96dBm (1% tỷ lệ gói lỗi).
+ Nguồn cung cấp 2.1-3.6V. + ITruyền 40mA – 3.3V. + INhận 40mA – 3.3V. + Itrạng thái nghỉ: 15 mA.
+ Sử dụng băng tần: ISM 2.4 GHz.
+ Hỗ trợ cấu trúc liên kết mạng: Point to Point, Point to MultiPoint, peer to peer, Mesh.
+ Module lập trình XBee ZB series 2 đƣợc trang bị một bộ xử lý ứng dụng MC9S08QE32 với 32 KB bộ nhớ Flash và 2 KB RAM.
78
Truyền thông Xbee:
1) Truyền thông nối tiếp RF.
Thiết bị Xbee có thể truyền từ thiết bị này sang thiết bị khác trực tiếp nhƣ hình dƣới đây:
Hình 3.10. Truyền thông RF của Xbee.
Nhƣ hình trên các Module Xbee giao tiếp với vi điều khiển bởi các chân DI truyền data, DO nhận data, các cờ báo truyền nhận CTS và RTS. Dữ liệu ở đây cũng là dạng truyền thông nối tiếp truyền thống.
79
Hình 3.11. Khung truyền UART.
Khung truyền bao gồm 1 bit Start 8 bit data và một 1 stop. 2) Truyền thông kiểu API.
Truyền thông API là giao diện lập trình ứng dụng đƣợc ứng dụng cho các module Xbee nâng cao khả năng truyền thông, giảm xác xuất lỗi. Có thể mở rộng khung data tùy ý. Khi hoạt động ở chế độ API tất cả dữ liệu vào ra thông qua Xbee đều có một khung xác định nhƣ quy định. Truyền khung dữ liệu ở chân DI(pin3) bao gồm: Khung truyền dữ liệu RF và khung truyền lệnh (AT Command). Khung dữ liệu nhận ở chân sô 2 DO bao gồm: Khung dữ liệu nhận RF và lệnh trả về.
Chế độ API cho phép Xbee hoạt động ở 3 chế độ:
AP=0: đây là chế độ mặc định của Xbee (truyền thông nối tiếp bình thƣờng). AP=1: Hoạt động ở chế độ API
AP=2: Hoạt động ở chế độ API (với ký tự thoát).
Bất kỳ dữ liệu nhận trƣớc khi bắt đầu ký tự phân cách đƣợc âm thầm bỏ đi. Nếu khung dữ liệu không nhận đƣợc hoặc checksum bị lỗi thì dữ liệu âm thầm đƣợc bỏ qua.
Hoạt động API ở chết độ 1 (AP=1)
Hình 3.12. Cấu trúc khung truyền API chế độ 1.
Khung bao gồm 1 byte bắt đầu 0x7E, 2byte độ dài của khung dữ liệu , các byte dữ liệu và byte checksum.
80 Chế độ API ở chế độ 2 (AP=2)
Khi hoạt động ở chế độ 2 với ký tự thoát thì khung API đƣợc xác định nhƣ sau:
Hình 3.13. Khung API ở chế độ 2.
Ký tự thoát: Khi truyền và nhận khung dữ liệu UART, giá trị dữ liệu cụ thể phải đƣợc đánh dấu nhƣ sau: Chèn byte 0x7D trƣớc ký tự cần xác định là thoát và Xor nó với giá trị 0x20 để báo thoát.
Ví dụ khung dữ liệu cần đánh dấu bao gồm: 0x7E – xác định khung.
0x7D- ký tự thoát. 0x11 – XON 0x13 – XOFF
Vì vậy khung dữ liệu trƣớc lúc đƣợc đánh dấu có dạng nhƣ sau: 0x7E 0x00 0x02 0x23 0x11 0xCB
Sau khi đánh dấu nó sẽ trở về nhƣ sau: 0x7E 0x00 0x02 0x23 0x7D 0x31 0xCB vì 0x11 đã đƣợc đánh dấu bằng các XOR với 0x20.
Tính toán Byte Checksum nhƣ sau : lấy 0xFF- tất cả các byte trừ byte xác định khung và các byte độ dài.
3) Các kiểu API:
81
Hình 3.14. Cấu trúc cụ thể khung API.
Khung API trong phần khung dữ liệu bao gồm có byte xác định API và dữ liệu. Truyền thông với 64 bít địa chỉ.
API identifier: 0x00
Một khung RF sẽ gửi đi tới module RF tới module nhận.
Hình 3.15. API truyền 64 bit địa chỉ.
Trong phần khung dữ liệu Byte6-13 chứa địa chỉ của đích muốn gửi đến, nếu muốn truyền kiểu quảng bá thì đặt là 0x000000000000FFFF. Byte 14 là tùy chọn 0x01 vô hiệu hóa ACK, 0x04 gửi dữ liệu tới tất cả PANID, tất cả thiết bị khác để là 0.
Truyền thông với 16 bít địa chỉ Giá trị xác định khung là 0x01
82
Hình 3.16. API truyền 16 bit địa chỉ.
Trạng thái truyền
Giá trị xác định của khung API là 0x89
Khi truyền thành công module sẽ gửi trạng thái nhƣ khun dƣới đây:
Hình 3.17. Khung trạng thái truyền.
Gói nhận 64 bít địa chỉ
Giá trị API là 0x80 khi nhận đƣợc dữ liệu nó sẽ gửi ra UART một bản tin nhƣ sau:
Hình 3.18. Khung nhận 64 bit địa chỉ.
Gói nhận 16 bít địa chỉ
83
Hình 3.19. Khung nhận 16 bit địa chỉ.
b) Arduino Nano.
Arduino nano là một bo mạch vi điều khiển đƣợc xây dựng dựa trên chip ATmega328/168. Nó gồm có 14 chân vào ra digital (trong đó có 6 chân có thể sử dụng để điều chế độ rộng xung), có 8 chân vào Analog, trên bo mạch sử dụng một bộ cộng hƣởng, một công tắc Reset, và lỗ để cắm chân Header. Arduino nano đƣợc thiết kế bởi Shigeru Kobayashi và Sparkfun Electronics, và đƣợc sản xuất bởi Sparkfun Electronics.
84
Đặc điểm kỹ thuật:
Vi điều khiển Atmel ATmega168 hoặc ATmega328 Điện áp hoạt động (mứ logic) 5 V Điện áp vào (khuyến nghị) 7-12 V Điện áp vào (Giới hạn) 6-20 V Chân vào/ra
digital 14 (bao gồm 6 chân PWM)
Chân vào
analog 8
Dòng 1 chiều trên mỗi chân vào/ra
40 mA
Bộ nhớ FLASH
16 KB (ATmega168) hay 32 KB (ATmega328) trong đó 2 KB sử dụng cho bootloader
SRAM 1 KB (ATmega168) or 2 KB (ATmega328)
EEPROM 512 bytes (ATmega168) or 1 KB
(ATmega328) Xung nhịp
85
Nguồn nuôi:
Arduino Nano có thể đƣợc cấp nguồn thông qua cổng Mini-USB, cấp nguồn ngoài 6 – 20V (chân 30), hay nguồn ngoài chuẩn 5V (chân 27). Nguồn đƣợc chọn tự động nguồn có điện áp cao nhất.
Chip FTDI FT323RL trên Nano chỉ đƣợc cấp nguồn khi bo mạch đƣợc cấp nguồn qua cổng usb. Nhƣ vậy, khi sử dụng nguồn ngoài (không phải USB), lối ra 3,3V (đƣợc cấp bởi chip FTDI) không sử dụng đƣợc và LED RX, TX sẽ nhấp nháy nếu chân digital ở mức 0 hoặc 1.
Bộ nhớ:
ATmega168 có 16KB bộ nhớ FLASH để lƣu trữ mã chƣơng trình (trong đó 2KB đƣợc sử dụng cho bootloader), 1KB SRAM, 512 byte EEPROM.
ATmega328 có 32KB bộ nhớ FLASH (2KB sử dụng cho bootloader), 2KB SRAM, 512 byte EEPROM.
Chế độ vào và ra:
Mỗi chân trong số 14 chân digital trên Nano có thể sử dụng làm các chân input hoặc output, bằng cách sử dụng các hàm pinMode(), digitalWrite(), và digitalRead(). Các chân này hoạt động ở mức 5V, mỗi chân có thể cấp hoặc nhận tối đa 40mA và có một điện trở kéo nội từ 20 – 50kOhm (mặc định không nối, khi cần dùng đến thì sử dụng hàm pinMode(pin, INTERNAL_PULLUP)). Ngoài ra, một số chân có các chức năng đặc biệt:
- Serial: 0 (RX) và 1 (TX). Sử dụng để nhận (RX) và truyền (TX) dữ liệu nối tiếp TTL. Những chân này đƣợc nối tƣơng ứng với chân của chip FTDI USB-to-TTL Serial.
- Ngắt ngoài: chân 2 và 3. Những chân này có thể cấu hình để kích hoạt ngắt ở mức thấp, sƣờn lên hoặc sƣờn xuống, hoặc có sự thay đổi về giá trị.
- PWM: chân 3, 5, 6, 9, 10, and 11. Điều chế độ rộng xung 8-bit bằng hàm analogWrite().
86
- SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Những chân này hỗ trợ truyền thông SPI, mặc dù là phần cứng cơ bản nhƣng hiện tại chƣa sử dụng đƣợc trong ngôn ngữ Arduino.
Nano có 8 chân analog input, mỗi chân có độ phân giải 10 bit (chia thành 1024 mức). Theo nhƣ mặc định, đo từ đất đến 5V, có thể thay đổi bằng hàm
analogReference(). Ngoài ra, một số chân có các chức năng đặc biệt: - I2C: 4 (SDA) và 5 (SCL). Hỗ trợ truyền thông I2C (TWI).
Có một cặp chân trên bo mạch:
- AREF. Tham chiếu điện áp đầu vào. Sử dụng hàm analogReference().
- Reset. Đặt mức LOW để khởi động lại vi điều khiển. Thƣờng đƣợc sử dụng để thêm nút vào mạch mở rộng của bo mạch.
c) Cảm biến chuyển động.
Hình 3.21. Cảm biến chuyển động PIR.
- Thông số kỹ thuật:
+ Cấp nguồn: 5-20V DC. + Dòng ra: <50uA.
+ Điện áp ra mức cao: 3,3V + Độ nhạy cao.
87
- Cự ly hoạt động:
88
3.3.2. Thiết kế phần mềm.
3.3.2.1.Lƣu đồ thuật toán cho nút End Device.
89
3.3.2.2. Lƣu đồ thuật toán cho nút Router.
90
3.3.2.3. Lƣu đồ thuật toán cho nút Coordinator.
91
CHƢƠNG 4: KẾT QUẢ THỰC NGHIỆM VÀ ĐÁNH GIÁ 4.1. Kiểm nghiệm mô hình hệ thống.
Trong nội dung của luận văn, tôi chỉ xây dựng mạng không dây Zigbee để điều khiển hệ thống chiếu sáng mà chƣa làm phần giao tiếp với ngƣời điều khiển. Vì vậy, để kiểm nghiệm đƣợc mô hình hệ thống, tôi phải sử dụng một thiết bị giao tiếp với con ngƣời để điều khiển mô hình hệ thống. Cụ thể, tôi đã sử dụng thêm một Wifi Gateway để chuyển đổi tín hiệu Wifi sang tín hiệu Zigbee và nút Coordinator cũng sẽ đƣợc tích hợp trên Wifi Gateway này. Trong các kịch bản, ngƣời điều khiển sẽ sử dụng điện thoại có thu phát Wifi để điều khiển mô hình hệ thống. Để kiểm nghiệm sự hoạt động của mô hình hệ thống, ta đƣa ra một số phƣơng án thử nghiệm hoạt động nhƣ sau:
4.1.1. Thử nghiệm khoảng cách truyền và độ tin cậy của mô hình hệ thống.
Theo thông số kỹ thuật của Xbee S2, thì mỗi Xbee có tầm hoạt động là 40 (m) với môi trƣờng có vật cản và 120 (m) với môi trƣờng không có vật cản. Đề thử nghiệm, ta tiến hành truyền trực tiếp tín hiệu bật/tắt, Dim đèn LED từ nút Coordinator đến nút End Device.
Hình 4.1. Mô hình thử nghiệm truyền tín hiệu từ Coordinator đến End Device.
4.1.1.1. Trong môi trƣờng không có vật cản. a) Thử nghiệm khoảng cách truyền.
Phƣơng pháp thử nghiệm.
Để cho hai nút Coordinator và End Device gần nhau, gửi dữ liệu bật/tắt LED từ nút Coordinator tới nút End Device, kiểm tra sự thành công của quá trình truyền
92
qua sự tắt/mở của LED. Di chuyển nút End Device ra xa nút Coordinator cho đến khi hai nút mất kết nối, từ đó xác định đƣợc khoảng cách truyền tối đa giữa hai nút. Kết quả thử nghiệm.
Tiến hành thử nghiệm 10 lần, ta thu đƣợc kết quả khoảng cách truyền giữa hai nút trong bảng sau:
Thứ tự các lần thực hiện Khoảng cách (m) 1 112 2 115 3 111 4 110 5 115 6 113 7 112 8 114 9 111 10 115
Khoảng cách có thể truyền - nhận trong môi trƣờng không có vật cản từ nút Coordinator tới nút End Device lấy trung bình cộng 10 lần đo ta thu đƣợc kết quả khoảng cách là: 112.8 (m).
b) Thử nghiệm tính ổn định của mô hình hệ thống. Phƣơng án thử nghiệm.
Nút End Device đặt cách nút Coordinator tại những khoảng cách nhất định. Tại những khoảng cách đó, tiến hành gửi dữ liệu bật/tắt LED từ nút Coordinator đến nút End Device. Kiểm tra sự thành công của quá trình truyền dữ liệu qua sự tắt/mở của LED.
Kết quả thử nghiệm.
Tiến hành thử nghiệm với hai khoảng cách và ta lƣu lại số lần gửi dữ liệu thành công và không thành công. Kết quả thử nghiệm nhƣ sau:
93
Nút End Device đặt cách nút Coordinator 80 (m): Với 30 lần thử nghiệm truyền dữ liệu thì có 1 lần không thành công. Tỷ lệ truyền thành công là 97%.
Nút End Device đặt cách nút Coordinator 35 (m): Với 30 lần thử nghiệm truyền dữ liệu thì truyền thành công 30 lần. Tỷ lệ truyền thành công là 100%.
4.1.1.2. Trong môi trƣờng có vật cản. a) Thử nghiệm khoảng cách truyền.
Phƣơng pháp thử nghiệm.
Đặt nút Coordinator cố định trong một phòng nhà và đặt nút End Device ở ngoài phòng đó (vật cản là những bức tƣờng nhà, mỗi bức tƣờng dày 12 cm), gửi dữ liệu bật/tắt LED từ nút Coordinator tới nút End Device, kiểm tra sự thành công của quá trình truyền qua sự tắt/mở của LED. Di chuyển nút End Device ra xa nút Coordinator cho đến khi hai nút mất kết nối, từ đó xác định đƣợc khoảng cách truyền tối đa giữa hai nút.
Kết quả thử nghiệm.
Tiến hành thử nghiệm 10 lần, ta thu đƣợc kết quả khoảng cách truyền giữa hai nút trong bảng sau:
Thứ tự các lần thực hiện Khoảng cách (m) 1 18 2 19 3 20 4 20 5 18 6 18 7 19 8 18 9 16 10 16
94
Khoảng cách có thể truyền - nhận trong môi trƣờng có vật cản từ nút Coordinator tới nút End Device lấy trung bình cộng 10 lần đo ta thu đƣợc kết quả