2.4.1 Vi điều khiển:
a. Giới thiệu về vi điều khiển:
Vi điều khiển là một máy tính được tích hợp trên một chíp, nó thường được sử dụng để điều khiển các thiết bị điện tử. Vi điều khiển, thực chất, là một hệ thống bao gồm một vi
xử lý có hiệu suất đủ dùng và giá thành thấp (khác với các bộ vi xử lý đa năng dùng trong máy tính) kết hợp với các khối ngoại vi như bộ nhớ, các mô đun vào/ra, các mô đun biến đổi số sang tương tự và tương tự sang số,... Ở máy tính thì các mô đun thường được xây dựng bởi các chíp và mạch ngoài.
Hình 2.6. Hệ thống vi điều khiển cơ bản.
Có rất nhiều hãng sản xuất vi điều khiển, nổi tiếng là TI, Microchip, Atmel, ... Mỗi loại đều có ưu và nhược điểm khác nhau, vì giới hạn của đề tài này dùng chức năng vi điều khiển không quá phức tạp nên hầu hết các vi điều khiển đều có thể dùng được, ở đây ta cân nhắc về vấn đề thông dụng, nhỏ gọn và khả năng phát triển trong tương lai của vi điều khiển nên ta chọn dòng vi điều khiển AVR của hãng Atmel.
b. Board vi điều khiển Arduino Uno R3:
Arduino Uno được xây dựng với phân nhân là vi điều khiển ATmega328P sử dụng thạch anh có chu kì dao động là 16 MHz. Với vi điều khiển này, ta có tổng cộng 14 pin (ngõ) ra / vào được đánh số từ 0 tới 13 (trong đó có 6 pin PWM, được đánh dấu ~ trước mã số của pin). Song song đó, ta có thêm 6 pin nhận tín hiệu analog được đánh kí hiệu từ A0 - A5, 6 pin này cũng có thể sử dụng được như các pin ra / vào bình thường (như pin 0 - 13). Ở các pin được đề cập, pin 13 là pin đặc biệt vì nối trực tiếp với LED trạng thái trên board.
Hình 2.7. Sơ đồ và chức năng chân Arduino Uno R3. Một vài thông số của Arduino Uno:
Arduino Uno R3 sử dụng vi điều khiển Atmega328P. Điện áp hoạt động: 5V - DC.
Tần số hoạt động: 16 MHz. Dòng điện áp: 30 mA.
Điện áp giới hạn: 7-12V - DC. Số chân Analog: 6.
Số chân Digital: 14 (6 chân PWM). Giao tiếp UART: 1 bộ UART. Giao tiếp SPI : 1 bộ SPI. Giao tiếp I2C : 2 bộ I2C.
Dòng tối đa trên mỗi chân I/O: 20 mA. Các chân năng lượng:
GND (Ground): cực âm của nguồn điện cấp cho Arduino Uno.
5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA. 3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA. Vin (Voltage Input): để cấp nguồn ngoài cho Arduino.
Bộ nhớ của Arduino Uno R3:
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 khai báo khi lập trình sẽ lưu ở đây. Khai báo càng nhiều biến thì càng cần nhiều bộ nhớ RAM.
Chú ý: khi mất điện, dữ liệu trên SRAM sẽ bị mất.
1KB cho EEPROM (Electrically Eraseble Programmable Read Only
Memory): tương tự như một chiếc ổ cứng mini – nơi có thể đọc và ghi dữ liệu vào đây mà không phải lo bị mất khi mất điện giống như dữ liệu trên SRAM.
c. Giao tiếp UART trong Arduino Uno R3:
Khái niệm giao tiếp UART:
UART là chuẩn truyền thông nối tiếp bất đồng bộ (Universal Asynchronous Receiver – Transmitter) dùng để truyền nhận dữ liệu giữa 2 hệ thống và không có phân biết chủ- tớ, giữa các hệ thống là ngang cấp nhau.
Chuẩn UART gồm một đường phát dữ liệu và một đường nhận dữ liệu. Để truyền dữ liệu giữa 2 hệ thống với nhau thì cả hai hệ thống phải tự tạo xung clock (CK) có cùng tần số. (Tốc độ baud)
Hình 2.8. Giao tiếp 2 hệ thống dùng chuẩn UART. Nguyên lý hoạt động:
Khi ở trạng thái chờ, mức điện áp của thiết bị truyền ở mức 1 (high). Khi bắt đầu truyền dữ liệu, START bit sẽ chuyển từ 1 xuống 0 để báo hiệu cho thiết bị nhận là quá trình truyền dữ liệu sắp xảy ra. Sau START bit là đến các bit dữ liệu D0-D7. Sau khi truyền hết dữ liệu thì đến Bit Parity để bộ nhận kiểm tra tính đúng đắn của dữ liệu truyền. Cuối cùng là STOP bit là 1 báo cho thiết bị nhận rằng các bit đã được gửi xong. Thiết bị nhận sẽ tiến hành kiểm tra khung truyền (Frame) nhằm đảm báo tính đúng đắn của dữ liệu.
Hình 2.9. Nguyên lý hoạt động chuẩn UART. Giao tiếp UART trong Arduino Uno R3:
Trên Arduino Uno có hổ trợ một chuẩn giao tiếp UART đó là 1 chân D0 (RX) dùng để nhận dữ liệu chuẩn TTL và 1 chân D1(TX) dùng để truyền dữ liệu chuẩn TTL.
d. Giao tiếp SPI trong Arduino Uno R3:
Khái niệm giao tiếp SPI:
SPI (Serial Peripheral Bus) là một chuẩn truyền thông nối tiếp tốc độ cao do hãng Motorola đề xuất. Đây là kiểu truyền thông Master-Slave, trong đó có 1 chip Master điều phối quá trình tuyền thông và các chip Slaves được điều khiển bởi Master vì thế truyền thông chỉ xảy ra giữa Master và Slave. SPI là một cách truyền song công (full duplex) nghĩa là tại cùng một thời điểm quá trình truyền và nhận có thể xảy ra đồng thời. SPI đôi khi được gọi là chuẩn truyền thông “4 dây” vì có 4 đường giao tiếp trong chuẩn
này đó là SCK (Serial Clock), MISO (Master Input Slave Output), MOSI (Master Ouput Slave Input) và SS (Slave Select).
Hình 2.10. Các chân giao tiếp SPI trên Uno R3
SCK: Xung giữ nhịp cho giao tiếp SPI, vì SPI là chuẩn truyền đồng bộ nên cần 1 đường giữ nhịp, mỗi nhịp trên chân SCK báo 1 bit dữ liệu đến hoặc đi. Đây là điểm khác biệt với truyền thông không đồng bộ mà chúng ta đã biết trong chuẩn UART. Sự tồn tại của chân SCK giúp quá trình tuyền ít bị lỗi và vì thế tốc độ truyền của SPI có thể đạt rất cao. Xung nhịp chỉ được tạo ra bởi chip Master.
MISO– Master Input / Slave Output: nếu là chip Master thì đây là đường Input còn nếu là chip Slave thì MISO lại là Output. MISO của Master và các Slaves
được nối trực tiếp với nhau.. MOSI – Master Output / Slave Input: nếu là chip Master thì đây là đường Output còn nếu là chip Slave thì MOSI là Input. MOSI của Master và các Slaves được nối trực tiếp với nhau.
SS – Slave Select: SS là đường chọn Slave cần giap tiếp, trên các chip Slave đường SS sẽ ở mức cao khi không làm việc. Nếu chip Master kéo đường SS của một Slave nào đó xuống mức thấp thì việc giao tiếp sẽ xảy ra giữa Master và Slave đó. Chỉ có 1 đường SS trên mỗi Slave nhưng có thể có nhiều đường điều khiển SS trên Master, tùy thuộc vào thiết kế của người dùng.
Ta có thể kiểm soát 1 hoặc nhiều thiết bị sử dụng SPI. Ví dụ dưới đây là 1 thiết bị
Hình 2.11. Kết nối giữa 2 thiết bị dùng SPI.
Dữ liệu được truyền qua lại dữa 2 đường MISO và MOSI. Điều này chỉ thực hiện được khi Dòng SS được thiết lập ở mức thấp LOW. Nói cách khác, để giao tiếp với một thiết bị SPI chúng ta cần thiết lập các dòng SS với thiết bị ở mức thấp LOW, sau đó giao tiếp với nó, sau đó thiết lập các dòng SS trở lại mức cao HIGH. Nếu chúng ta có hai hoặc nhiều thiết bị SPI trên cùng 1 bus, chúng sẽ được kết nối như sau:
Hình 2.12. Kết nối giữa nhiều thiết bị dùng SPI.
Chú ý, ở đây có hai dòng SS - với mỗi 1 thiết bị chỉ sử dụng 1 dòng SS. Bạn có thể sử dụng bất kỳ chân digital nào trên Arduino của bạn cho dòng SS. Chỉ cần nhớ là để tất cả các dòng SS ở mức cao HIGH , "ngoại trừ" dòng SS mà bạn muốn kết nối với các thiết bị SPI vào thời điểm đó.
2.4.2 Module bluetooth:
Trên thị trường hiện nay có khá nhiều module Bluetooth hỗ trợ vi điều khiểu giao tiếp với thiết bị khác thông qua kết nối Bluetooth, một số module Bluetooth thường được sử dụng trong thực tế như: module Bluetooth HC-05, module Bluetooth HC-06, Bluetooth Smart Module,… Tuy nhiên, module Bluetooth HC-06 là lựa chọn tối ưu cho đồ án này vì:
- Giá thành rẻ hơn so với các Module khác.
- Tốc độ hoạt động phù hợp với truyền dữ liệu điều khiển thiết bị. - Dễ dàng mua ở thị trường Việt Nam.
- Được nhiều người sử dụng và đánh giá là rất ổn định.
Giới thiệu module Bluetooth HC06
Module HC-06 được thiết kế dựa trên chip BC417. Con chip này khá phức tạp và sử dụng bộ nhớ flash ngoài 8Mbit. Nhưng việc sử dụng module này hoàn toàn đơn giản bởi nhà sản xuất đã tích hợp mọi thứ trên module HC-06.
Sơ đồ chân HC-06 gồm có:
KEY: Chân này để chọn chế độ hoạt động AT Mode hoặc Data Mode.
VCC: Chân này có thể cấp nguồn từ 3.6V đến 6V bên trong module đã có một ic nguồn chuyển về điện áp 3.3V và cấp cho IC BC417.
GND: Nối với chân nguồn GND.
TXD, RXD: Đây là hai chân UART để giao tiếp module hoạt động ở mức logic 3.3V.
STATE: Chân này chỉ cần thả nổi và không cần quan tâm đến chân này.
Sơ đồ chân của module HC06:
Hình 2.13. Module Bluetooth HC 06.
Điện áp hoạt động 3,3V đến 6,6V.
Khi bắt đầu kết nối cần dòng là 30 mA, sau khi kết nối xong dòng hoạt động truyền nhận bình thường là 8 mA.
Tốc độ Baud UART có thể chọn được: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.
Kích thước của module chính: 27mm X 13mm X 2mm Phiên bản Bluetooth V2.0 + EDR.
Chipset CSR BC417143.
Bluetooth class 2: Tầm phủ sóng 10m. Dải tần sóng hoạt động: 2.4GHz.
Thiết lập mặc định: Baud rate: 9600, N, 8, 1. Pairing code: 1234.
Module này có 2 chế độ làm việc (có thể tùy chỉnh 2 chế độ đó thông qua chân key 34 của nó):
- Tự động kết nối.
- Đáp ứng theo lệnh: khi làm việc ở chế độ này, các bạn có thể gửi các lệnh AT để giao tiếp với module.
Các chế độ hoạt động
HC-06 có hai chế độ hoạt động là Command Mode và Data Mode. Ở chế độ Commad Mode ta có thể giao tiếp với module thông qua cổng serial trên module bằng tập lệnh AT quen thuộc. Ở chế độ Data Mode module có thể truyền nhận dữ liệu tới module bluetooth khác. Chân KEY dùng để chuyển đổi qua lại giữa hai chế độ này. Có hai cách để cho chúng ta có thể chuyển đổi module hoạt động trong chế độ Data Mode :
- Nếu đưa chân này lên mức logic cao trước khi cấp nguồn module sẽ đưa vào chế độ Command Mode với baudrate mặc định 9600. Chế độ này khá hữu ích khi không biết baudrate trong module được thiết lập ở tốc độ bao nhiêu. Khi chuyển sang chế độ này đèn led trên module sẽ nháy chậm (khoảng 2s) và ngược lại khi chân KEY nối với mức logic thấp trước khi cấp nguồn module sẽ hoạt động chế độ Data Mode.
- Nếu module đang hoạt động ở chế Data Mode để có thể đưa module vào hoạt động ở chế độ Command Mode bằng cách đưa chân KEY lên mức cao. Lúc này module sẽ vào chế độ Command Mode nhưng với tốc độ Baud Rate được thiết lập lần cuối cùng. Vì thế phải biết baudrate hiện tại của thiết bị để có thể tương tác được với nó.
Ở chế độ Data Mode, HC-06 chỉ có thể cấu hình ở chế độ SLAVE : Cần thiết lập kết nối từ smartphone, laptop, usb bluetooth để dò tìm module sau đó pair với mã PIN là 1234. Sau khi pair thành công, ta sẽ có 1 cổng serial từ xa hoạt động ở baud rate 9600.
2.4.3 Module Wifi ESP8266:
Hiện tại thì đã có tới 14 phiên bản của ESP8266, quá nhiều sự lựa chọn cho chúng ta. Nhưng vì ở Việt Nam chỉ có 2 phiên bản ESP8266 phổ biến hiện nay đó là ESP-01 và ESP-12.Tuy nhiên, tôi chọn Module sử dụng là ESP-12 vì:
- Phiên bản mới nhất. - Có nhiều chân I/O.
- Hỗ trợ chuẩn truyền nhận dữ liệu cả SPI và UART.
Giới thiệu module ESP-12:
Mạch thu phát Wifi Soc ESP8266 ESP-12 có nhân xử lý bên trong là IC Wifi SoC ESP8266, thường được sử dụng trong các ứng dụng kết nối wifi, IoT hiện nay. Sơ đồ chân và chức năng:
Hình 2.14. Sơ đồ chân và chức năng ESP-12
Đặc điểm của Module ESP-12:
1 x Reset button,
1 x User button khi khởi động module, nhấn phím này sẽ đưa chip về bootloading mode để upload firmware.
1xRed LED có thể lập trình được ( nhấp nháy khi có tín hiệu chẳng hạn…), Tích hợp chuyển đổi điện áp tín hiệu từ 5V sang 3.3V cho UART và chân Reset, lý do là esp8266 chỉ chạy ở điện áp 3.3V,
Tích hợp IC ổn áp 3.3V, 500mA. 2 điot bảo vệ chống cấp ngược nguồn. 1 x Analog input (1.8V max).
9 x GPIO (3.3V logic), có thể sử dụng các giao tiếp I2C hặc SPI. 2 x UART pins.
2 x 3-6V power inputs, reset, enable, LDO-disable, 3.3V output.
Tính năng:
Sử dụng nguồn 3.3v
Tích hợp anten PCB trace trên module
Tiêu chuẩn wifi : 802.11b/g/n, với tần số 2.4GHz và hổ trợ bảo mật WPA/WPA2 Khoảng cách giữa các chân 2mm
Các chế độ hoạt động:
ESP8266 có ba chế độ hoạt động là Station, Access Point và cả hai chế độ này. Ở chế độ Station, thiết bị kết nối vào mạng WIFI được gọi là station (trạm). Việc kết nối vào mạng Wifi được hỗ trợ bởi một access point (AP), một AP có chức năng như một hub nhưng dùng cho nhiều station. Chế độ Access Point thì được hiểu là một điển truy cập cho các Station.
3.1 GIỚI THIỆU
Mục tiêu của đồ án: Thiết kế mô hình điều khiển được bằng giọng nói và bằng cách thao tác trên smart phone. Giọng nói hoặc thao tác sẽ được xử lý bằng App trên điện thoại Android, xuất tín hiệu, gửi đến trung tâm xử lý thông qua Bluetooth hoặc Wifi/3G/4G và điều khiển theo ý muốn. Riêng App sẽ có những chức năng riêng theo yêu cầu của người dùng.
Ứng dụng trên điện thoại:
- Yêu cầu đăng nhập tài khoản để sử dụng ứng dụng. - Điều khiển các thiết bị bằng giọng nói hoặc thao tác. - Tùy chọn kết nối Bluetooth hoặc Wifi/3G/4G.
- Thông báo nhiệt độ và độ ẩm, cảnh báo khi cần thiết.
- Nhiều thiết bị điều khiển cùng lúc và đồng bộ trạng thái theo thời gian thực.
Bộ xử lý trung tâm:
- Thiết kế nhỏ gọn, thẩm mỹ
- Giao tiếp với ứng dụng trên SmartPhone bằng Bluetooth (truyền nhận dữ liệu) và Wifi/3G/4G.
- Sử dụng nguồn 12V DC cho tất cả các thiết bị.
3.2 SƠ ĐỒ KHỐI HỆ THỐNG
TRUNG TÂM ĐIỀU KHIỂN
Bluetooth Wifi
Wifi/3G/4G App điện thoại
Android
ĐIỆN THOẠI THÔNG MINH
Firebase CƠ SỞ DỮ LIỆU Hình 3.1. Sơ đồ khối hệ thống.
Chức năng các khối:
Khối nguồn: Cung cấp nguồn nuôi DC cho mạch , ở đây những người thực hiện dùng nguồn 12V
Khối vi điều khiển: Đọc giá trị từ App điện thoại gửi đến thông qua Bluetooth hoặc Wifi, xử lý đồng thời điều khiển các thiết bị.
Khối Firebase: Nơi lưu trữ giữ liệu và là kết nối trung gian giữa vi điều khiển và ứng dụng Android.
Khối module Bluetooth:Tạo kết nối trung gian giữa vi điều khiển và ứng dụng Android.
App Android (Điện thoại): Nhận lệnh từ giọng nói hoặc thao tác của con