Ngun lí hoạt động:
Khi có âm thanh, chân Out của cảm biến đưa ra mức 1, chân 1 của ic 4013 sẽ đưa ra mức 1 và chốt cho dù khơng cịn nguồn âm thanh duy trì. Tran NPN được cấp mức 1 sẽ dẫn và rơ le dẫn.
Khi có âm thanh phát ra lần 2, chân 1 của ic 4013 đưa ra mức 0, tran không dẫn làm rơ le ngắt.
2.2.4. LCD 16x2
Ngày nay, thiết bị hiển thị LCD (Liquid Crystal Display) được sử dụng trong rất nhiều các ứng dụng của vi điều khiển. LCD có rất nhiều ưu điểm so với các dạng hiển thị khác, nó có khả năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí tự đồ họa), dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau, tốn rất ít tài nguyên hệ thống và giá thành rẻ.
a. Thông số kỹ thuật: - Điện áp MAX : 7V - Điện áp MIN : - 0,3V - Hoạt động ổn định : 2.7-5.5V - Điện áp ra mức cao : > 2.4 - Điện áp ra mức thấp : <0.4V
- Dòng điện cấp nguồn : 350uA - 600uA - Nhiệt độ hoạt động : - 30 - 75 độ C
Sơ đồ chân của LCD:
Hình 2.11. Sơ đồ chân của LCD1602
Các Text LCD theo chuẩn HD44780U thường có 16 chân, trong đó 14 chân kết nối với bộ điều khiển và 2 chân nguồn cho đèn LED nền.
Chân Kí hiệu Mức logic I/O Chức năng
1 Vss - - GND
2 Vcc - - +5V
3 Vee - - Điều chỉnh độ tương phản
4 RS 0/1 I RS=0 Nhập lệnh RS=1 Nhập dữ liệu 5 R/W 0/1 I 0 Ghi dữ liệu 1 Đọc dữ liệu 6 E 1, 10 I Cho phép tín hiệu 7 DB0 0/1 I/O Bit 0 LSB 8 DB1 0/1 I/O Bit 1 9 DB2 0/1 I/O Bit 2 10 DB3 0/1 I/O Bit 3 11 DB4 0/1 I/O Bit 4 12 DB5 0/1 I/O Bit 5
13 DB6 0/1 I/O Bit 6
14 DB7 0/1 I/O Bit 7 MSB
15 Lamp+ - - Nguồn dương cấp cho LED nền
16 Lamp- - - Nguồn âm cấp cho LED nền
2.2.5. Module giao tiếp I2C
Ngoài các module chính được nêu ra ở trên, mạch khóa số điện tử còn cần linh kiện khác là module giao tiếp I2C.
Để sử dụng các loại LCD có driver là HD44780(LCD 1602, LCD 2004,... ), cần có ít nhất 6 chân của Vi điều khiển kết nối với các chân RS, EN, D7, D6, D5 và D4 để có thể giao tiếp với LCD. Nhưng với module giao tiếp I2C, chỉ cần sử dụng 2 chân (SDA và SCL) của Vi điều khiển kết nối với 2 chân (SDA và SCL) của module là đã có thể điều khiển được màn hình LCD, ngồi ra cịn có thể điều chỉnh được độ tương phản của LCD bởi biến trở gắn trên module.
Hình 2.12. Module giao tiếp I2C
Bởi vì giao tiếp I2C được thiết kế riêng nhằm giúp LCD giao tiếp với Board vi xử lý một cách dễ dàng, nên rất dễ kết nối.
Module giao tiếp I2C Arduino
Vcc 5V
SDA A4
SCL A5
Và để sử dụng được module giao tiếp i2C, ta phải download thư viện LiquidCrystal_I2C.
2.2.6. Còi báo động buzzer
Còi Buzzer 5VDC có tuổi thọ cao, hiệu suất ổn định, chất lượng tốt, được sản xuất nhỏ gọn phù hợp thiết kế với các mạch còi buzzer nhỏ gọn, Còi báo động buzzer phát ra âm thanh dùng để thông báo hoạt động của mạch, mục đích chính trong đồ án này là để thơng báo việc cố tình mở khóa nhưng nhập sai mật khẩu của mạch.
Hình 2.13. Cịi báo động buzzer a. Thông số kỹ thuật
- Điện áp hoạt động: 3.5V – 5.5V - Dòng hoạt động: <25mA
2.3. Phần mềm
2.3.1. Phần mềm lập trình Arduino IDE
Arduino là một IDE tích hợp sẵn editor, compiler, programmer và đi kèm với nó là các firmware có bootloader, các bộ thư viện được xây dựng sẵn và dễ dàng tích hợp. Ngơn ngữ sử dụng là C/C++. Tất cả đều opensource và được đóng góp, phát triển hàng ngày bởi cộng đồng. Triết lý thiết kế và sử dụng của Arduino giúp cho người mới, không chuyên rất dễ tiếp cận, các cơng ty, hardware dễ dàng tích hợp. Tuy nhiên, với trình biên dịch C/C++ và các thư viện chất lượng được xây dựng bên dưới thì mức độ phổ biến ngày càng tăng và hiệu năng thì khơng hề thua kém các trình biên dịch chuyên nghiệp cho chip khác.
Hình 2.14. Giao diện lập trình Arduino IDE
Đại diện cho Arduino ban đầu là chip AVR, nhưng sau này có rất nhiều nhà sản xuất sử dụng các chip khác nhau như ARM, PIC, STM32 gần đây nhất là ESP8266, ESP32, và RISCV với năng lực phần cứng và phần mềm đi kèm mạnh mẽ hơn nhiều. Một số đặc điểm của Arduino IDE:
- Arduino che dấu đi sự phức tạp của điện tử bằng các khái niệm đơn giản, che đi sự phức tạp của phần mềm bằng các thủ tục ngắn gọn.
- Phổ biến và dễ dùng, với các thư viện được tích hợp sẵn. Người dùng chỉ cần quan tâm đến tính năng sản phẩm mà bỏ qua các tiểu tiết (protocol, datasheet…) Nên giúp người dùng mới dễ dàng tiếp cận và làm ra các sản phẩm tuyệt vời mà không cần phải biết nhiều về điện tử.
- Không quan tâm nhiều đến cách thức hoạt động của các Module đi kèm, nên đa phần người dùng sẽ khó xử lý khi có các vấn đề phát sinh ngồi tầm của thư viện.
- Thiết kế IDE tốt, có thể dễ dàng tích hợp nhiều loại compiler, nhiều loại hardware mà khơng hề giảm hiệu năng. Ví dụ: Arduino gốc cho AVR, nhưng có nhiều phiên bản cho STM32, PIC32, ESP8266, ESP32… tận dụng tối đa các thư viện sẵn có.
- Các thư viện được viết dựa trên lớp API trên cùng, nên đa số các thư viện cho Arduino có thể dùng được cho tất cả các chip. Điển hình là Arduino cho ESP8266 có thể tận dụng trên 90% các thư viện cho Arduino khác.
- Trình biên dịch cho Arudino là C/C++, ESP8266 non-os SDK và ESP8266 Arduino cùng dùng chung trình biên dịch.
- Cách tổ chức các thư viện C/C++ theo dạng OOP giúp phân lớp, kế thừa và quản lý cực kỳ tốt cho các ứng dụng lớn.
- Các project cho Arduino đều opensource, người dùng dễ dàng lấy nó và đưa vào sản phẩm production với chất lượng tốt và học hỏi được nhiều từ cách thức thiết kế chương trình của các lập trình viên chuyên nghiệp.
- Arduino chú trọng tính đa nền tảng, module hóa cao, phù hợp với các ứng dụng từ phức tạp tới cực kỳ phức tạp. Các ứng dụng này rất phổ biến trong thực tế.
- Arduino toolbar: có một số button và chức năng như sau:
Hình 2.15. Arduino toolbar.
+ Verify: kiểm tra code có lỗi hay khơng.
+ Upload: nạp code đang soạn thảo vào arduino + New, Open và save: tạo mới, mở và lưu lại
+ Serial Monitor: màn hình hiển thị dữ liệu từ arduino gửi lên máy tính - Arduino IDE Menu
Hình 2.16. IDE menu.
+ File menu: Trong file menu mục Example là nơi chứa code mẫu ví dụ: Như cách sử dụng các chân digital, analog....
+ Edit menu:
+ Sketch menu: Verify/ compile: Chức năng kiểm tra lỗi code; Show Sketch Foder: Hiển thị nơi code được lưu; Add file: Thêm vào 1 tập code mới; Import library: Thêm thư viện cho IDE.
+ Tool menu: Trong mục Board: Cần phải lựa chọn bo mạch phù hợp với bo mạch sử dụng; Serial port: Là nơi chọn cổng Com của arduino. Khi chúng ta cài đặt driver thì máy tính sẽ hiển thị thơng báo tên cổng Com của arduino là bao nhiêu, ta chỉ cần vào Serial port chọn đúng cổng Com để nạp code, nếu chọn sai thì khơng thể nạp code cho arduino được.
2.3.1.1. Cài đặt Arduino IDE
Để lập trình cho arduino, trước hết ta cần dowload và cài đặt mơi trường viết chương trình cho Arduino:
Bước 1: Truy cập địa chỉ https://www.arduino.cc/en/Main/Software/. Đây là nơi lưu trữ cũng như cập nhật các bản IDE của Arduino. Bấm vào mục Windows ZIP file for non admin install như hình minh họa.
Hình 2.17. Tải Arduino IDE
Sau đó sẽ được chuyển đến một trang mời quyên góp tiền để phát triển phần mềm cho Arduino, tiếp tục bấm JUST DOWNLOAD để tải xuống.
Bước 2: Sau khi tải xong, bấm chuột phải vào file vừa download arduino-
Hình 2.18. Giải nén file
Bước 3: Chạy file arduino.exe trong thư mục arduino-1.8.5\ để khởi
động Arduino IDE.
Hình 2.19. Màn hình khởi động Arduino IDE
Hình 2.20. Giao diện phần mềm Arduino IDE
a. Arduino Toolbar
Hình 2.21. Arduino Toolbar
Bao gồm các icon cho phép sử dụng nhanh các chức năng thường dùng của IDE được miêu tả như sau:
Bảng 2.8: Chức năng của các icon trên Arduino toolbar
Icon Chức năng
Verify :
Biên dịch chương trình đang soạn thảo để kiểm tra các lỗi lập trình
Upload: Nạp chương trình đang soạn thảo vào Arduino
New: Mở một trang soạn thảo mới
Open: Mở các chương trình đã lưu
Save: Lưu chương trình đang soạn thảo Serial
Monitor:
Mở cửa sổ Serial Monitor để gửi và nhận dữ liệu giữa máy tính và Arduino
b. Arduino IDE Menu
Hình 2.22. Arduino IDE Menu
File menu:
Trong file menu mục Examples là nơi chứa code mẫu ví dụ như: cách sử dụng các chân digital, analog, sensor …
Edit menu:
Hình 2.24. Edit menu
Sketch menu:
Trong Sketch menu:
Verify/ Compile: chức năng kiểm tra lỗi code.
Show Sketch Folder: hiển thị nơi code được lưu.
Add File: thêm vào một Tap code mới.
Import Library: thêm thư viện cho IDE Tool menu:
Hình 2.26. Tool menu
Trong Tools menu ta quan tâm tới Board và Port:
-Mục Board: chọn bo mạch cho phù hợp với loại bo Arduino đang kết nối với máy tình nếu chọn sai thì code Upload vào chip sẽ bị lỗi. Ví dụ trong đồ án này em dùng Arduino Uno nên em phải chọn như hình:
Hình 2.27. Chọn Board
Mục Port: đây là nơi lựa chọn cổng Com của Arduino. Khi chúng ta cài đặt driver thì máy tính sẽ hiện thơng báo tên cổng Com của Arduino là bao nhiêu, ta chỉ việc vào Serial Port chọn đúng cổng Com để nạp code, nếu chọn sai thì khơng thể nạp code cho Arduino được.
2.3.1.3. Cấu trúc chương trình
Cấu trúc cơ bản của một chương trình Arduino gồm hai hàm chính setup() vào loop(). Hai hàm này là bắt buộc đối với một chương trình Arduino.
setup(): Hàm setup() được gọi khi chương trình bắt đầu. Thường dùng để
khởi tạo giá trị ban đầu cho biến, cài đặt chế độ hoạt động của các chân, khởi động việc sử dụng thư viện... Hàm setup() sẽ chỉ được gọi duy nhất một lần, ngay sau khi bật nguồn hoặc reset bo Arduino.
loop(): Sau khi thực hiện xong hàm setup(), hàm loop() sẽ được gọi để thực
hiện và sẽ được gọi lặp đi lặp lại liên tục cho đến khi nào tắt hệ thống. Thường thì trong hàm loop() sẽ là chương trình chính, các cơng việc mà người lập trình muốn hệ thống Arduino của mình thực hiện.
Một chương trình Arduino với hai hàm setup() và loop() sẽ được viết như sau:
void setup() {
// code khởi tạo sẽ được viết ở đây }
void loop() {
// code phần cơng việc muốn board Arduino của mình thực hiện sẽ viết ở đây} Ví dụ chương trình Blink: void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() {
digitalWrite(LED_BUILTIN, HIGH); delay(1000);
digitalWrite(LED_BUILTIN, LOW); delay(1000); }
Arduino IDE này sử dụng GNU toolchain và AVR Libc để biên dịch chương trình, và sử dụng avrdude để upload chương trình lên board.
Để tạo một chương trình mới. Chọn File > New.
Trước khi bắt đầu thực hiện lập trình, nên thực hiện bước Save as lưu lại chương trình tại thư mục mong muốn. Chương trình được lưu dưới dạng đuôi .ino.
Sau khi thực hiện viết code cho chương trình, thực hiện bước Verify để Arduino tạo ra một file .hex, file này giúp chúng ta nạp cho các vi điều khiển lúc mơ phỏng hoặc làm mạch ngồi thực tế. Ngồi ra chức năng Upload cũng giúp thực hiện việc nạp chương trình vào Arduino nhanh chóng mà khơng cần phải tìm đến vị trí của file .hex, bằng cách kết nối board Arduino với máy tính qua cổng USB.
2.3.2. Giới thiệu về ThingSpeak2.3.2.1. ThingSpeak là gì? 2.3.2.1. ThingSpeak là gì?
Hình 2.28. Giới thiệu ThingSpeak
Theo các nhà phát triển của nó, " ThingSpeak là một ứng dụng và API Internet of Things (IoT) nguồn mở để lưu trữ và truy xuất dữ liệu từ những thứ sử dụng giao thức HTTP và MQTT qua Internet hoặc qua Mạng cục bộ. ThingSpeak cho phép tạo cảm biến ứng dụng ghi nhật ký, ứng dụng theo dõi vị trí và mạng xã hội của những thứ có cập nhật trạng thái ".
2.3.2.2. Các tính năng của Thingspeak
Thu thập dữ liệu trong các kênh riêng
Tích hợp ứng dụng
Lịch trình sự kiện
MATLAB phân tích và trực quan hóa
Ưu điểm
Lưu trữ miễn phí cho các kênh
Dễ hình dung
Cung cấp các tính năng bổ sung cho Ruby, Node.js và Python
Nhược điểm
API ThingSpeak có thể là một trở ngại cho người mới bắt đầu
2.3.2.3. Làm việc với Thingspeak
Trong phần này chúng ta cùng nhau tìm hiểu 1 cloud service khá phổ biến trong các cộng đồng IoT là ThingSpeak. Đây là một cloud service cho phép người dùng dễ dàng gửi dữ liệu và cung cấp các giao diện đồ họa hiển thị dữ liệu thông qua giao thức HTTP.
Bạn sẽ được hướng dẫn cách tạo 1 tài khoản ThingSpeak và 1 data channel và dùng Blocky để đưa data lên channel này thông qua giao thức HTTP.
Bước 1: Tạo Tài Khoản ThingSpeak
Bạn truy cập vào địa chỉ https://thingspeak.com và chọn Sign Up để đăng ký một tài khoản miễn phí. Sau khi điền đầy đủ các thông tin yêu cầu, bạn sẽ nhận được email yêu cầu xác thực tài khoản email.
Sau khi xác thực, bạn sẽ có thể login vào và thấy được các thơng tin về tài khoản của mình.
Bước 2: Tạo Data Channel
Sau khi login, bạn cần tạo một data channel để lưu trữ dữ liệu. Trong My Channels, bạn chọn New Channel và điền các thông tin cần thiết.
Ở đây mình tạo 1 channel để chứa các dữ liệu từ cảm biến thu được trong phịng ngủ của mình với Field 1 là temperature và Field 2 là humidity:
Bước 3: Lấy URL cần thiết để upload dữ liệu
Để upload hay lấy dữ liệu về bạn cần biết URL để truy cập. Bạn mở channel mới tạo, tìm đến tab API Keys và sẽ thấy được các URL để get hay upload data:
Bước 4: Upload dữ liệu từ Blocky
Bạn upload chương trình sau vào Blocky [Hình code]
Sau khi Blocky chạy và bắt đầu upload dữ liệu lên ThingSpeak, bạn có thể xem các dữ liệu này trong channel, tab Private View
Bạn có thể tìm hiểu thêm các tính năng khác của ThingSpeak như phân tích và vẽ đồ thị cho dữ liệu của mình.
CHƯƠNG 3. THIẾT KẾ VÀ THỰC THI SẢN PHẨM3.1. Thiết kế phần cứng 3.1. Thiết kế phần cứng
3.1.1. Sơ đồ khối
Hình 3.1. Sơ đồ khối
3.1.1.1. Phân tích chức năng các khối
Khối cảm biến: Thu nhận dữ liệu về nồng độ cồn trong hơi thở người sử dụng, gửi
tín hiệu về khối điều khiển.
Khối điều khiển: Khối điều khiển trung tâm có nhiệm vụ lấy dữ liệu từ khối cảm
biến để có được trạng thái hiện tại của hệ thống và xử lý dữ liệu thu được từ đó đưa tín hiệu thơng báo hiển thị cho người quan sát thấy trạng thái hoạt động của hệ thống.
Khối hiển thị: Có chức năng thơng báo cho người quan sát có thể biết được
trạng thái của hệ thống hiện thời.
Khối cảnh báo: Có chức năng cảnh báo. Khối nguồn: Cấp nguồn cho các khối cịn lại. Server: Cập nhật, hiển thị và lưu trữ thơng tin.
3.1.1.2. Nguyên lý hoạt động toàn mạch
KHỐI