NGOI NHA THONG MINH doc TRƯỜNG ĐẠI HỌC ĐÔNG Á KHOA ĐIỆN ĐIỆN TỬ CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập Tự do Hạnh phúc o0o NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ và tên sinh viên Nguyễn Tiến Hưng Lớp TD15A2.
GIỚI THIỆU TỔNG QUAN VỀ ĐỀ TÀI
VAI TRÒ VÀ ỨNG DỤNG CỦA ARDUINO HIỆN NAY
Arduino: là một nền tảng mã nguồn mở được sử dụng để xây dựng các ứng dụng điện tử Arduino gồm có board mạch có thể lập trình được ( thường gọi là vi điều khiển và các phần mềm hỗi trợ IDE (Integrated Development Environment) dùng để soạn thảo, biên dịch code và nạp chương cho board
Arduino ngày nay rất phổ biến cho những người mới bắt đầu tìm hiểu về điện tử vì nó đơn giản, hiệu quả và dễ tiếp cận Không giống như các loại vi điều khiển khác, Arduino không cần phải có các công cụ chuyên biệt để phục vụ việc nạp code, ví dụ để nạp code cho PIC cần phải có Pic Kit Đối với Arduino rất đơn giản, ta có thể kết nối với máy tính bằng cáp USB
Arduino thực sự đã gây sóng gió trên thị trường người dùng DIY (là những người tự chế ra sản phẩm của mình) trên toàn thế giới trong vài năm gần đây, gần giống với những gì Apple đã làm được trên thị trường thiết bị di động Số lượng người dùng cực lớn và đa dạng với trình độ trải rộng từ bậc phổ thông lên đến đại học đã làm cho ngay cả những người tạo ra chúng phải ngạc nhiên về m Arduino ra đời tại thị trấn Ivrea thuộc nước Ý và được đặt theo tên một vị vua vào thế kỷ thứ 9 là King Arduin Arduino chính thức được đưa ra giới thiệu vào năm 2005 như là một công cụ khiêm tốn dành cho các sinh viên của giáo sư Massimo Banzi, là một trong những người phát triển Arduino, tại trường Interaction Design Instistute Ivrea (IDII) Mặc dù hầu như không được tiếp thị gì cả, tin tức về Arduino vẫn lan truyền với tốc độ chóng mặt nhờ những lời truyền miệng tốt đẹp của những người dùng đầu tiên Hiện nay Arduino nổi tiếng tới nỗi có người tìm đến thị trấn Ivrea chỉ để tham quan nơi đã sản sinh ra Arduino
1.1.2 Ứng dụng arduino trong thực tế
Một cuộc cách mạng khác cũng đang âm thầm định hình nhờ vào Arduino, đó là sự phát triển máy in 3D nguồn mở Reprap Máy in 3D là công cụ giúp tạo ra các vật thể thực trực tiếp từ các file CAD 3D Công nghệ này hứa hẹn nhiều ứng dụng rất thú vị trong đó có cách mạng hóa việc sản xuất cá nhân
Hình 1.1 Máy in 3D Makerbot điều khiển bằng Arduino Mega2560
Thiết bị bay không người lái (UAV)
UAV là một ứng dụng đặc biệt thíchhợp với Arduino do chúng có khả năng xử lý nhiều loại cảm biến như Gyro, accelerometer, GPS…; điều khiển động cơ servo và cả khả năng truyền tín hiệu từ xa
Hình 1.2 thiết bị UAV Điều khiển nhà thông minh (Smart Home)
Kết hợp với các module chức năng bluetooth hoặc wifi , với các ứng dụng cài đặt trên máy tính bảng, smartphone hay trình duyệt web người dùng có thể thiết kế hệ thống điều khiển giám sát thông minh các thiết bị điện trong ngôi nhà của mình khi ở trong nhà hoặc từ bất cứ nới nào (được kết nối internet)
Hình 1.3 Arduino Điều khiển nhà thông minh với Máy tính bảng và smartphone
LÝ DO CHỌN ĐỀ TÀI
Kỹ thuật điều khiển và tự động hóa là ngành công nghệ liên quan đến việc ứng dụng các kỹ thuật cơ khí hiện đại, kỹ thuật điều khiển và kỹ thuật máy tính vào việc vận hành và điều khiển quá trình sản xuất
Ngày nay, khi nhu cầu và thị hiếu con người ngày càng cao, yêu cầu về số lượng và chất lượng của các sản phẩm xã hội cũng không ngừng tăng, điều đó đòi hỏi các dây chuyền sản xuất trong công nghiệp ngày càng hiện đại, có mức độ tự động hóa ngày càng cao với việc sử dụng các kỹ thuật điều khiển hiện đại có trợ giúp của máy tính Hệ thống điều khiển và tự động hóa có mặt trong mọi dây chuyền sản xuất của các ngành kinh tế khác nhau như: công nghiệp, nông nghiệp, giao thông vận tải,…
Vì vậy một hệ thống điều khiển thông minh và hoàn toàn tự động là một xu thế tất yếu Ưng dụng hệ thống thông minh vào điều khiển cac thiết bị nhà ở và sân vườn vẫn còn khá mới mẻ ở Việt Nam Nhóm đã quyết ddingj chộn đề tài ngôi nhà thông minh để làm đề trài nguyên cứu của mình để đón đầu xu thế đó.
MỤC ĐÍCH CỦA ĐỀ TÀI
Nhóm xây dựng đề tài đã chọn theo hướng xây dựng hệ thống sử dụng arduino và esp8266 để quản lý ở nơi mà con người phải bỏ sức ra để thực hiện một công việc lặp đi lặp lại hằng ngày Nhằm bỏ qua sự tác động của con người, con người sẽ không phải bận tâm quá nhiều đến việc quản lý ngôi nhà Mang lại một cuộc sống thoải mái.
MỤC TIÊU VÀ PHẠM VI NGHIÊN CỨU
Nhóm thực hiện đề tài đã đặt ra mục tiêu nghiên cứu cụ thể như sau: tìm hiểu về nguyên tắc hoạt động của công nghệ số trên module Arduino và ESP8266 Biết cách ứng dụng trên ardunio IDE Tìm hiểu hoạt động của cảm biến quang, cũng như cảm biến nhiệt độ và độ ẩm
Do giới hạn về thời gian nghiên cứu cũng như kiến thức chuyên ngành nên nhóm thực hiện đề tài chỉ tập trung nghiên cứu một số vấn đề chính xoay quanh đề tài như: Tìm hiểu và cài đặt các công cụ hỗ trợ lập trình arduinon IDE Tìm hiểu hoạt động của các thiết bị trong hệ thống.
CÁC PHƯƠNG PHÁP NGHIÊN CỨU
Chúng em khi thực hiện đề tài đã sử dụng các phương pháp nghiên cứu đề tài sau:
+ Phương pháp phân tích tổng hợp lý thuyết
+ Phương pháp tham khảo tài liệu
+ Phương pháp thực nghiệm v Cụ thể:
+ Tìm hiểu Arduino phần cứng và tập lệnh
+ Viết chương trình điều khiển bằng phần mềm Arduino IDE
+ Thiết kế các bộ phận của mô hình
+ Lắp ráp hoàn thiện mô hình ngôi nhà thông minh
TỔNG QUAN VỀ HỆ THỐNG WIFI, GIỚI THIỆU CHIP
GIỚI THIỆU VỀ CÔNG NGHỆ WIFI
Wifi là viết tắt của từ Wireless Fidelity trong tiếng Anh, được gọi chung là mạng không dây sử dụng sóng vô tuyến Wifi là loại sóng vô tuyến tương tự như sóng điện thoại, sóng truyền hình và radio Hầu hết các thiết bị sử dụng điện tử hiện nay như : Smartphone, Máy tính bảng, Tivi, Laptop… đều có thể kết nối được Wi-
Fi Và Wifi là thứ gắn liền và không thể thiếu với đời sống của người dân trong hầu hết công việc cũng như giải trí hàng ngày
Kết nối Wifi dựa trên các loại chuẩn kết nối IEEE 802.11, và chủ yếu hiện nay Wifi hoạt động trên băng tần 54 Mbps và có tín hiệu mạnh nhất trong khoảng cách
Hình 2.1 Nguyên tắc hoạt động của wifi
Truyền thông qua mạng không dây là truyền thông vô tuyến hai chiều.Cụ thể: Thiết bị adapter không dây (hay bộ chuyển tín hiệu không dây) của máy tính chuyển đổi dữ liệu sang tín hiệu vô tuyến và phát những tín hiệu này đi bằng một ăng-ten
Thiết bị router không dây nhận những tín hiệu này và giải mã chúng Nó gởi thông tin tới Internet thông qua kết nối hữu tuyến Ethernet
Qui trình này vẫn hoạt động với chiều ngược lại, router nhận thông tin từ Internet, chuyển chúng thành tín hiệu vô tuyến và gởi đến adapter không dây của máy tính
Sóng WIFI: Các sóng vô tuyến sử dụng cho WiFi gần giống với các sóng vô tuyến sử dụng cho thiết bị cầm tay, điện thoại di động và các thiết bị khác Nó có thể chuyển và nhận sóng vô tuyến, chuyển đổi các mã nhị phân 1 và 0 sang sóng vô tuyến và ngược lại
Tuy nhiên, sóng WiFi có một số khác biệt so với các sóng vô tuyến khác ở chỗ:
Chúng truyền và phát tín hiệu ở tần số 2.5 GHz hoặc 5GHz Tần số này cao hơn so với các tần số sử dụng cho điện thoại di động, các thiết bị cầm tay và truyền
Hình 2.2 Các chuẩn kết nối wifi
Chúng truyền và phát tín hiệu ở tần số 2.4 GHz hoặc 5 GHz Tần số này cao hơn so với các tần số sử dụng cho điện thoại di động, các thiết bị cầm tay và truyền hình Tần số cao hơn cho phép tín hiệu mang theo nhiều dữ liệu hơn
IEEE 802.11 là một tập các chuẩn của tổ chức IEEE (tiếng Anh: Institute of Electrical and Electronic Engineers) bao gồm các đặc tả kỹ thuật liên quan đến hệ thống mạng không dây Chuẩn IEEE 802.11 mô tả một giao tiếp “truyền qua không khí” (tiếng Anh: over-the-air) sử dụng sóng vô tuyến để truyền nhận tín hiệu giữa một thiết bị không dây và tổng đài hoặc điểm truy cập (tiếng Anh: access point), hoặc giữa 2 hay nhiều thiết bị không dây với nhau
Năm 1997, IEEE giới thiệu chuẩn mạng không dây đầu tiên và đặt tên nó là 802.11 Khi đó, tốc độ hỗ trợ tối đa của mạng này chỉ là 2 Mbps với bang tầng 2.4GHz
IEEE đã mở rộng trên chuẩn 802.11 gốc vào tháng Bảy năm 1999, đó chính là chuẩn802.11b Chuẩn này hỗ trợ băng thông lên đến 11Mbps, tương quan với Ethernet truyền thống
802.11b sử dụng tần số vô tuyến (2.4 GHz) giống như chuẩn ban đầu 802.11 Các hãng thích sử dụng các tần số này để chi phí trong sản xuất của họ được giảm Các thiết bị 802.11b có thể bị xuyên nhiễu từ các thiết bị điện thoại không dây (kéo dài), lò vi sóng hoặc các thiết bị khác sử dụng cùng dải tần 2.4 GHz Mặc dù vậy, bằng cách cài đặt các thiết bị 802.11b cách xa các thiết bị như vậy có thể giảm được hiện tượng xuyên nhiễu này ã Ưu điểm của 802.11b – giỏ thành thấp nhất; phạm vi tớn hiệu tốt và khụng dễ bị cản trở ã Nhược điểm của 802.11b – tốc độ tối đa thấp nhất; cỏc ứng dụng gia đỡnh cú thể xuyên nhiễu
Chuẩn 802.11a Được phát triển song song cùng với chuẩn 802.11b, chuẩn 802.11a hỗ trợ tốc độ tối đa gần gấp 5 lần lên đến 54 Mpbs và sử dụng bằng tầng 5Ghz nhằm tránh bị nhiễu từ các thiết bị khác Tuy nhiên, đây cũng là nhược điểm của chuẩn này vì phạm vi phát sẽ hẹp hơn (40-100m) và khó xuyên qua các vật cản như vách tường Chuẩn này thường được sử dụng trong các mạng doanh nghiệp thay vì gia đình vì giá thành của nó khá cao
Năm 2003, chuẩn Wifi thế hệ thứ 3 ra đời và mang tên 802.11g Chuẩn này được kết hợp từ chuẩn a và b Được hỗ trợ tốc độ 54Mpbs như chuẩn a và sử dụng băng tầng 2.4GHz của chuẩn b vì vậy chuẩn này có phạm vi tín hiệu khá tốt (80-200m) và vẫn dễ bị nhiễu từ các thiết bị điện tử khác Ngày nay, một số hộ gia đình vẫn còn sử dụng chuẩn này ã Ưu điểm của 802.11g – tốc độ cao; phạm vi tớn hiệu tốt và ớt bị che khuất ã Nhược điểm của 802.11g – giỏ thành đắt hơn 802.11b; cỏc thiết bị cú thể bị xuyên nhiễu từ nhiều thiết bị khác sử dụng cùng băng tần
Chuẩn 802.11n (hay 802.11 b/g/n) Đây là chuẩn được sử dụng phổ biến nhất hiện nay và tương đối mới Chuẩn WiFi 802.11n được đưa ra nhằm cải thiện chuẩn 802.11g bằng cách sử dụng công nghệ MIMO (Multiple-Input Multiple-Output) tận dụng nhiều anten hơn
Chuẩn kết nối 802.11n hỗ trợ tốc độ tối đa lên đến 600 Mpbs, có thể hoạt động trên cả băng tần 2,4 GHz và 5 GHz, nếu router hỗ trợ thì hai băng tần này có thể cùng phát sóng song song Chuẩn kết nối này đã và đang dần thay thế chuẩn 802.11g với tốc độ cao, phạm vi tín hiệu rất tốt (từ 100-250m) và giá thành đang ngày càng phù hợp với túi tiền người tiêu dùng ã Ưu điểm của 802.11n – tốc độ nhanh và phạm vi tớn hiệu tốt nhất; khả năng chịu đựng tốt hơn từ việc xuyên nhiễu từ các nguồn bên ngoài ã Nhược điểm của 802.11n – chuẩn vẫn chưa được ban bố, giỏ thành đắt hơn 802.11g; sử dụng nhiều tín hiệu có thể gây nhiễu với các mạng 802.11b/g ở gần Chuẩn 802.11ac (hay chuẩn 802.11 a/b/g/n/ac)
GIỚI THIỆU VỀ MODULE ESP8622
2.2.1 Tổng quan về module esp8622
Kít ESP8266 là kít phát triển dựa trên nền chíp Wifi SoC ESP8266 với thiết kế dễ dàng sửa dụng vì tích hợp sẵn mạch nạp sử dụng chíp CP2102 trên borad Bên trong ESP8266 có sẵn một lõi vi sử lý vì thế bạn có thể trực tiếp lập trình cho ESP8266 mà không cần thêm bất kì con vi sử lý nào nữa Hiện tại có hai ngôn ngữ có thể lập trình cho ESP8266, sử dụng trực tiếp phần mềm IDE của Arduino để lập trình với bộ thư viện riêng hoặc sử dụng phần mềm node MCU
Module ESP8266 là module wifi giá rẻ và được đánh giá rất cao cho các ứng dụng liên quan đến Internet và Wifi cũng như các ứng dụng truyền nhận sử dụng thay thế cho các module RF khác
ESP8266 là một chip tích hợp cao, được thiết kế cho nhu cầu của một thế giới kết nối mới, thế giới Internet of thing (IOT) Nó cung cấp một giải pháp kết nối mạng Wi-Fi đầy đủ và khép kín, cho phép nó có thể lưu trữ các ứng dụng hoặc để giảm tải tất cả các chức năng kết nối mạng Wi-Fi từ một bộ xử lý ứng dụng
ESP8266 có xử lý và khả năng lưu trữ mạnh mẽ cho phép nó được tích hợp với các bộ cảm biến, vi điều khiển và các thiết bị ứng dụng cụ thể khác thông qua GPIOs với một chi phí tối thiểu và một PCB tối thiểu
2.2.2 Tính năng của chip esp8622 § SDIO 2.0, SPI, UART § 32-pin QFN ( Chip esp8266) § Tích hợp RF switch, balun, 24dBm PA, DCXO, and PMU § Tích hợp bộ xử lý RISC, trên chip bộ nhớ và giao diện bộ nhớ bên ngoài § Tích hợp bộ vi xử lý MAC / baseband § Chất lượng quản lý dịch vụ § Giao diện I2S cho độ trung thực cao ứng dụng âm thanh § On-chip thấp học sinh bỏ học điều chỉnh tuyến tính cho tất cả các nguồn cung cấp nội bộ § Kiến trúc giả miễn phí thế hệ đồng hồ độc quyền § Tích hợp WEP, TKIP, AES, và các công cụ WAPI
Hình 2.3 Sơ đồ chân esp8622
UTXD (TX) – chân truyền tín hiệu của module nối với chân RX của vi điều khiển URXD(RX) – chân truyền tín hiệu của module nối với chân RX của vi điều khiển RST – chân reset cứng của module Reset xảy ra khi tín hiệu xuống mức thấp GPIO0, GPIO2, CH_PD nối với mức cao
Hình 2.4 Hình ảnh thực tế module esp8622
2.2.4 Tập lệnh AT giao tiếp với Module ESP8266
Khi sử dụng giao tiếp UART để gửi lệnh AT đến Module ESP 8266, chúng ta phải gửi kềm kí tư để báo kết thúc lệnh
Lệnh Kiểm tra kết nối: AT
Kết quả trả về: OK nếu kết nối không bị lỗi
Lệnh Reset module: AT + RST
Trả về: Ready sau khi reset thành công module
Lệnh kiểm tra phiên bản module: AT+GMR
Trả về môt dãy số là mã phiên bản module
Lệnh cài đặt module hoạt động ở chế độ trạm phát wifi, điểm truy cập wifi: AT+CWMODE=3
Trả về: Ok sau khi cài đặt thành công
Lệnh tìm các mạng wifi đang có: AT+CWLAP
Kết quả trả về là danh sách các mạng wifi mà module có thể bắt được
Lệnh truy cập vào mạng wifi khác
AT+CWJAP=””,””
Sau khi truy cập thành công, trả về : Ok
Lệnh lấy đỉa chỉ IP của module AT+CIFSR
Trả về một dãy số là địa chỉ IP của module
Lệnh đặt tên và mật khẩu cho mạng wifi do module ESP8266 phát ra:
AT+CIFSR=”tên_mang”,”mật_khẩu”,3,0
Có thể sử dụng module ESP8266 ở hai chế độ: TCP Client hoặc TCP sever Cài đặt module hoạt động ở chế độ TCP Client
Cho phép module hoạt động ở chế độ đa kết nối, bằng cách gửi lệnh:
Sử dụng lệnh CIPSTART để chọn kênh kết nối (0-4), phương thức truyền(TCP/UDP), địa chỉ IP của website (or domain) và cổng kết nối ví dụ: AT+CIPSTART=4,”TCP”,”google.com”,80 nếu thành công, module trả về: ok
Sử dụng lệnh AT + CIPSEND để báo kênh truyền và số byte của địa chỉ websever mình cần lấy dữ liệu ví dụ: địa chỉ: “ GET / HTTP/1.0\r\n\r\n” có 18 byte sẽ phải gửi lệnh:
Sau khi gửi lệnh này, module sẽ trả về dấu “>” Đến đây chúng ta sẽ gửi địa chỉ của websever mà chúng ta cần lấy dữ liệu
Module sẽ trả về SEND OK
Và sau đó module sẽ trả về một loạt dữ liệu module nhận được từ web sever (Chuỗi json: JavaScript Object Notation) , phân tích chuỗi json này để lấy được dữ liệu cần thiết
2.2.5 Các phương pháp kết nối thiết bị với esp8266
Với demo này, chúng ta sẽ lập trình Arduino gửi AT commands để module ESP-01 thành 1 thiết bị Wifi, kết nối vào mạng Wifi xung quanh, gửi lệnh PING lên
1 web server và nhận response từ web server đó
Về phần cứng, chúng ta sẽ kết nối Arduino Due và ESP-01 như hình sau:
Hình 2.5 kết nối Arduino Due và ESP-01
Công việc còn lại là lập trình board Due trên Arduino IDE để gửi các lệnh AT command cần thiết
Flow chương trình trên Arduino sẽ như sau: ã Gửi lệnh “AT” để kiểm tra kết nối module với ESP-01 và đợi nhận “OK” từ ESP8266 ã Gửi lệnh “AT+CWMODE=1” để module ESP-01 hoạt động như 1 thiết bị Wifi ã Gửi lệnh “AT+CWJAP=\”\”,\”\” ” để chọn mạng Wifi và password để kết nối
Các bạn có thể thay thế và tương ứng với mạng Wifi của mình nha
Sau khi lệnh này, chúng ta cần đợi vài giây để module ESP-01 tìm và kết nối vào mạng Wifi đã chọn, trong code chúng ta có thể đợi đến khi nhận được “OK” từ ESP8266 ã Gửi lệnh “AT+PING=\”google.com\” ” để ping server của Google ã Nhận PING response từ module ESP-01
2.2.5.2 Giao ti ế p smarphone dùng esp8266
Trong demo này, chúng ta sẽ tạo 1 ứng dụng trong đó smartphone sẽ trao đổi dữ liệu với thiết bị có ESP8266 Chúng ta có thể sử dụng 1 wifi router trung gian giữa 2 thiết bị Wifi là ESP8266 và smartphone Cách khác đơn giản và hiệu quả hơn là sử dụng ESP8266 như là 1 rounter để kết nối với smartphone, do đó sẽ không cần router trung gian nữa Chúng ta sẽ chọn cách đơn giản bằng cách sử dụng module ESP-01 như 1 Access Point để smartphone có thể kết nối vào mạng Wifi tạo bởi module ESP-01 Đồng thời chúng ta cũng tạo TCP server và UDP server trên ESP8266 để truyền nhận dữ liệu với smartphone thông qua các port TCP, UDP
Về phần cứng chúng ta sẽ sử dụng board Arduino ATmega2560, module ESP-
01 và iPhone như hình bên dưới:
Hình 2.6 kết nối với smartphone 2.2.5.3 Truy ề n d ữ li ệ u TCP v ớ i smartphone
Các lệnh AT commands được sử dụng theo thứ tự như sau: ã Gửi lệnh “AT” đầu tiờn để kiểm tra giao tiếp, kết nối với module ESP-01 ã Gửi lệnh “AT+CWMODE=2” để module ESP-01 hoạt động như 1 Access Point ã Gửi lệnh “AT+CWSAP=\”ESP_HTelectronics\”,\”\”,5,0″ đẻ tạo mạng Wifi tên là “ESP_HTelectronics”, không security và không password ã Gửi lệnh “AT+CIPMUX=1” để cho phộp cỏc kết nối TCP/UDP ã Gửi lệnh “AT+CIPSERVER=1,1234” để tạo 1 TCP server, port 1234 trờn module ESP-01 ã Liờn tục kiểm tra dữ liệu nhận được từ port 1234 gửi lờn từ ESP-01 và xử lý dữ liệu tương ứng ã Sau khi nạp code vào board ATmega2560, chỳng ta sẽ dựng smartphone kết nối với module ESP-01 trong Wifi setting, sau đó mở app WIFI TCP Test Tool để truyền/nhận dữ liệu với board Arduino
Trên phone, chúng ta sẽ connect vào TCP port 1234 đã được mở trong ESP8266 và gửi dòng text “Who are you”, khi ESP-01 nhận được sẽ trả lời “I’m ESP_HTelectronics” lên smartphone và chúng ta thấy hiện trong phần Received data của app Với nguyên lý này, chúng ta có thể tạo thiết bị IoT sử dụng ESP8266 để giao tiếp trực tiếp với Smartphone
Tương tự như demo trên, nhưng chúng ta sẽ thử truyền dữ liệu thông qua UDP server trên ESP8266
GIỚI THIỆU VỀ BOARD ARDUINO
Một mạch Arduino bao gồm một vi điều khiển AVR với nhiều linh kiện bổ sung giúp dễ dàng lập trình và có thể mở rộng với các mạch khác Một khía cạnh quan trọng của Arduino là các kết nối tiêu chuẩn của nó, cho phép người dùng kết nối với CPU của board với các module thêm vào có thể dễ dàng chuyển đổi, được gọi là shield Vài shield truyền thông với board Arduino trực tiếp thông qua các chân khách nhau, nhưng nhiều shield được định địa chỉ thông qua serial bus I²C- nhiều shield có thể được xếp chồng và sử dụng dưới dạng song song Arduino chính thức thường sử dụng các dòng chip megaAVR, đặc biệt là ATmega8, ATmega168, ATmega328, ATmega1280, và ATmega2560 Một vài các bộ vi xử lý khác cũng được sử dụng bởi các mạch Aquino tương thích Hầu hết các mạch gồm một bộ điều chỉnh tuyến tính 5V và một thạch anh dao động 16 MHz (hoặc bộ cộng hưởng ceramic trong một vài biến thể), mặc dù một vài thiết kế như LilyPad chạy tại
8 MHz và bỏ qua bộ điều chỉnh điện áp onboard do hạn chế về kích cỡ thiết bị Một vi điều khiển Arduino cũng có thể được lập trình sẵn với một boot loader cho phép đơn giản là upload chương trình vào bộ nhớ flash on-chip, so với các thiết bị khác thường phải cần một bộ nạp bên ngoài Điều này giúp cho việc sử dụng Arduino được trực tiếp hơn bằng cách cho phép sử dụng 1 máy tính gốc như là một bộ nạp chương trình
Theo nguyên tắc, khi sử dụng ngăn xếp phần mềm Arduino, tất cả các board được lập trình thông qua một kết nối RS-232, nhưng cách thức thực hiện lại tùy thuộc vào đời phần cứng Các board Serial Arduino có chứa một mạch chuyển đổi giữa RS232 sang TTL Các board Arduino hiện tại được lập trình thông qua cổng USB, thực hiện thông qua chip chuyển đổi USB-to-serial như là FTDI FT232 Vài biến thể, như Arduino Mini và Boarduino không chính thức, sử dụng một board adapter hoặc cáp nối USB-to-serial có thể tháo rời được, Bluetooth hoặc các phương thức khác (Khi sử dụng một công cụ lập trình vi điều khiển truyền thống thay vì ArduinoIDE, công cụ lập trình AVR ISP tiêu chuẩn sẽ được sử dụng.)
Board Arduino sẽ đưa ra hầu hết các chân I/O của vi điều khiển để sử dụng cho những mạch ngoài Diecimila, Duemilanove, và bây giờ là Uno đưa ra 14 chân I/O kỹ thuật số, 6 trong số đó có thể tạo xung PWM (điều chế độ rộng xung) và 6 chân input analog, có thể được sử dụng như là 6 chân I/O số Những chân này được thiết kế nằm phía trên mặt board, thông qua các header cái 0.10-inch (2.5 mm) Nhiều shield ứng dụng plug-in cũng được thương mại hóa Các board Arduino Nano, và Arduino-compatible Bare Bones Board và Boarduino có thể cung cấp các chân header đực ở mặt trên của board dùng để cắm vào các breadboard
Có nhiều biến thể như Arduino-compatible và Arduino-derived Một vài trong số đó có chức năng tương đương với Arduino và có thể sử dụng để thay thế qua lại Nhiều mở rộng cho Arduino được thực thiện bằng cách thêm vào các driver đầu ra, thường sử dụng trong các trường học để đơn giản hóa các cấu trúc của các 'con rệp' và các robot nhỏ Những board khác thường tương đương về điện nhưng có thay đổi về hình dạng-đôi khi còn duy trì độ tương thích với các shield, đôi khi không Vài biến thể sử dụng bộ vi xử lý hoàn toàn khác biệt, với các mức độ tương thích khác nhau
2.3.2 Môi trường lập trình board mạch Arduino
Thiết kế board mạch nhỏ gọn, trang bị nhiều tính năng thông dụng mang lại nhiều lợi thế cho Arduino, tuy nhiên sức mạnh thực sự của Arduino nằm ở phần mềm Môi trường lập trình đơn giản dễ sử dụng, ngôn ngữ lập trình Wiring dễ hiểu và dựa trên nền tảng C/C++ rất quen thuộc với người làm kỹ thuật Và quan trọng là số lượng thư viện code được viết sẵn và chia sẻ bởi cộng đồng nguồn mở là cực kỳ lớn
Môi trường lập trình Arduino IDE có thể chạy trên ba nền tảng phổ biến nhất hiện nay là Windows, Macintosh OSX và Linux Do có tính chất nguồn mở nên môi trường lập trình này hoàn toàn miễn phí và có thể mở rộng thêm bởi người dùng có kinh nghiệm
Ngôn ngữ lập trình có thể được mở rộng thông qua các thư viện C++ Và do ngôn ngữ lập trình này dựa trên nền tảng ngôn ngữ C của AVR nên người dùng hoàn toàn có thể nhúng thêm code viết bằng AVR C vào chương trình nếu muốn
2.3.3 Các loại Board mạch Arduino
Arduino Uno.Nó có 14 chân dữ liệu số, có thế cấu hình làm chân lấy tín hiệu vào hoặc xuất tín hiệu ra là tùy bạn 6 chân tương tự đầu vào 5V, độ phân giải 1024 mức Tốc độ 16MHz, điện áp vào từ 7~12V, chân số có thể cấp điện áp ra 5V và 1A, nếu bạn điều khiển chân số ra tiêu tốn quá 1A thì Board sẽ bị hỏng.Kích thước broad5,5x7cm
Arduino Micro Board này có thiết kế nhỏ, dành cho các không gian lắp đặt nhỏ, nhẹ kích thước khoảng 5x2cm Board này giống với Arduino Uno Có 20 chân số, trong đó có 7 chân có thể phát xung PWM 12 chân tương tự
Arduino Pro/Pro Micro Nhìn chung thiết kế giúp Arduino Uno Có 2 loại,
3.3V và 5V Nó không được thiết kế chân sẵn nên khi sử dụng bạn có thể hàn trực tiếp nhằm tiết kiệm không gian
Arduino Nano Board này có kích thước nhỏ nhất gồm 14 chân số (6 chân
PWM) và 8 chân tương tự Kích thước khoảng 2x4cm Nhỏ gọn, dễ lắp đặt ở bất kỳ đâu
Sau đây là các Board có thiết kế cao cấp hơn:
Arduino Mega Có thiết kế hoạt động tương tự Arduino UNO, tuy nhiên có số lượng chân vào ra lớn với 54 chân Số (14 chân PWM), 16 chân tương tự và 4 cổng truyền nối tiếp (RS232) dễ dàng giao tiếp với các board, thiết bị khác Kích thước 5x10cm
Arduino Leonardo Đây là board có thiết kế giống Arduino Micro, sự khác biệt lớn nhất giữa nó và các board khác là nó không có cổng USB dành cho việc lập trình Mọi thứ được đặt trong 1 chip điều khiển, cho phép giao tiếp thông qua cổng COM ảo và cho phép nó giao tiếp với chuột và phím máy tính dễ dàng Không giống như các Board khác, khi cổng nối tiếp mở thì nó sẽ không bị reset, để gỡ rối cho chương trình thì bạn cần giao tiếp qua lệnh Serial.prints() trong hàm Setup()
Arduino Due Đây là Board có thiết kế lớn và xấu nhất trong tất cả các Board, nó hoạt động ở điện áp 3.3V Các chân số có mức logic ở 3,3V nên khi giao tiếp bạn cần phải nâng áp để có thể giao tiếp bình thường Gồm 54 chân số ( 12 chân tương tự) 4 cổng nối tiếp tương tự Arduino Mega Nó chạy bộ xử lý 32bit, 84MHz nó xử lý nhanh hơn gấp 5 lần so với các Board arduino khác Xử lý chương trình nhanh hơn 10 lần Vì vậy nó đọc các chân đầu vào và đáp ứng nhanh hơn
Arduino Ethernet Như tên của nó, nó là 1 Arduino giống chức năng với
UNO tuy nhiên nó được tích hợp Module Ethernet trong nó có tích hợp thẻ SD
2.3.4 Khả năng ghép nối của Arduino
Tất cả những cảm biến ghép nối được với vi điều khiển thì cũng ghép nối được với Arduino Các cảm biến phổ biến gồm:
Cảm biến nước, cảm biến nhiệt đô/ độ ẩm, cảm biến hồng ngoại/ ánh sáng, cảm biến màu, cảm biến rung, cảm biến âm thanh, cảm biến siêu âm, cảm biến khí, cảm biến áp suất, cảm biến chuyển động, cảm biến khoảng cách, cảm biến dòng điện, cảm biến góc/ gia tốc, cảm biến Hall, cảm biến từ trường, cảm biến quang điện
2.3.4.2 Ghép n ố i v ớ i các module ch ứ c n ă ng
Nếu có kiến thức và kỹ năng về thiết kế mạch điện tử người sử dụng có thể tự thiết kế các module chức năng ghép nối với Arduino Tuy nhiên việc này đòi hỏi tốn thời gian chưa tính đến việc thiết kế bị lỗi phải thực chỉnh sửa và làm mới lại gây lãng phí
TỔNG QUAN VỀ PHẦN MỀM BLYNK
2.4.1 Giới thiệu phần mềm blynk
Blynk thực ra là app trên điện thoại, cho phép người dùng có thể tạo ra giao diện và điều khiển thiết bị theo ý thích của cá nhân Mình lựa chọn Blynk vì một số lý do sau:
Dễ sử dụng: Quá đơn giản, chỉ việc vào store, cài đặt, sau đó đăng ký tài khoản và mất không quá 5 phút để làm quen Đẹp và đầy đủ: Giao diện của Blynk quá tuyệt vời, sử dụng bằng cách kéo thả, bạn cần nút bấm, kéo thả nút bấm, bạn cần đồ thị, kéo thả đồ thị, bạn cần LCD, kéo thả LCD, tóm lại là bạn cần gì thì kéo thả cái đó
Không phải lập trình android hay ios: Nếu như không có kiên thức về làm app trên điện thoại thì việc điều khiển thiết bị từ chính smartphone của mình quả là điều vô cùng khó khăn và phức tạp Nhờ blynk thì chúng ta có thể bỏ qua bước lập trình tạo app Có thể thử nhanh chóng và ứng dụng được dự án của mình vào thực tế Thử nghiệm nhanh chóng, có thể điều khiển giám sát ở bất kỳ nơi nào có internet
Tất nhiên ngoài những điểm lợi từ blynk thì còn có những cái hạn chế như phải mua energy để tạo được nhiều giao diện và chia sẻ giao diện cho người khác Phần mềm Blynk là một phần mềm được thiết kế cho Android, iOS cho chúng ta khả năng tự tạo ứng dụng kết nối với các board Arduino, Raspberry và các bo mạch khác để điểu khiển chúng
Blynk giúp bạn điều khiển thiết bị từ xa qua internet, thu thập dữ liệu của cảm biến, ảo hóa việc giao tiếp và thực hiện nhiều việc khác
Nguyên lý làm việc là khi nhấn nút điều khiển, lệnh sẽ được truyền về server của Blynk, sau đó Blynk gửi lệnh về module điều khiển, module sau khi chạy lệnh sẽ gửi lại kết quả theo quy trình ngược lại nghĩa là từ thiết bị gửi về server rồi từ server gửi về điện thoại của bạn
Sử dụng Blynk bạn không cần phải biết viết app cho Android, chỉ với thao tác rê và thả các đối tượng trong giao diện và vài thiết lập là xong
Trước khi biết Blynk, để điều khiển được thiết bị qua Internet, tôi phải làm rất nhiều việc như mở port modem trong nhà, đăng ký dịch vụ tên miền như DynDNS, No-IP để tự cập nhật địa chỉ IP modem, viết code cho phần cứng, viết ứng dụng cho phần cứng biến phần cứng đó thành một webserver để điều khiển từ trình duyệt web, viết app android hay iOS, tất cả những điều trên rất dễ làm nản lòng nếu một trong các giai đoạn đó chưa được thực hiện rốt ráo
Bây giờ với Blynk, bạn cần các module phần cứng được hỗ trợ và app này vậy là xong.Có thể điều khiển thiết bị dựa trên Internet qua mạng LAN, mạng Internet bất kỳ chổ nào và thậm chí 3G, rồi cả 4G nữa Tất cả đều không còn là vấn đề, vấn đề còn lại là bạn làm ra thiết bị để sử dụng vào việc gì
Blynk hiện hỗ trợ tốt cho 2 hệ phần cứng là Arduino và Raspberry Các bạn lần đầu tiên nghiên cứu về Internet Of Things (IOT) hay điều khiển từ Internet nên bắt đầu với phần cứng Arduino vì giá cả phù hợp
Hình 2.34 Giao diện điều khiển blynk
2.4.2 Thao tác đối với phần mềm blynk
Tải app cho điện thoại của bạn từ web chính của phần mềm là http://www.blynk.cc/
Hoặc vào chợ ứng dụng trên điện thoại cài app Blynk vào
Sau khi cài xong, chúng ta tải về thư viện cho Arduino từ địa chỉ http://www.blynk.cc/getting-started/
Vào đây chọn “DOWNLOAD BLYNK LIBRARY”
Sau khi tải xong, bạn mở phần mềm viết code cho Arduino để bổ sung gói thư viện vừa tải về Vào menu Sketch > Import Library > Add Library, chọn thư viện đã nén dạng zip vừa tải về để bổ sung thư viện và các ví dụ
Mở app Blynk trên điện thoại, đăng ký tài khoản và bắt đầu sử dụng Mỗi tài khoản miễn phí được 2000 điểm để tạo ứng dụng Khi sử dụng hết, có thể mua thêm
Mỗi dự án tạo ra, app sẽ cho một mã Auth Token, cần gửi email về email của mình khi đăng ký tài khoản bằng chức năng gửi mail trong app để lấy mã Auth Token Dùng mã này để nạp vào chương trình trên Arduino
Bây giờ tới phần viết code Ví dụ viết 1 đoạn code điều khiển tắt mở relay Relay thường được kích hoạt ở mức thấp (LOW), nếu sử dụng Button trong Blynk điều khiển trực tiếp nó điều khiển theo hướng từ thấp lên cao và không thể thay đổi cách điều khiển này Giải pháp là bạn sử dụng chân ảo (Virtual Pin) để gửi dữ liệu về module và xử lý nó
#include char auth[] = "auth_token_code"; void setup()
Blynk.begin(auth); pinMode(22, OUTPUT); digitalWrite(22,HIGH);
{ if (param.asInt()) { digitalWrite(22,LOW);
CHƯƠNG 3: THIẾT KẾ VÀ LẮP RÁP MÔ HÌNH NGÔI NHÀ
SƠ ĐỒ KHỐI TỔNG QUÁT CỦA HỆ THỐNG
Hình 3.1 Sơ đồ tổng quát hệ thống
KHỐI GIAO TIẾP MẠNG WIFI
Hình 3.2 hình ảnh thực tế esp8266 v12
Hình 3.3 Sơ đồ nối chân esp8266
Có chức năng gửi/nhận thông tin, nhận/thực hiện gửi các thông tin lên sever Module ESP8622 : Module wifi ESP8266 v12 cung cấp khả năng kết nối mạng wifi đầy đủ và khép kín, có thể sử dụng nó để tạo một web server đơn giản hoặc sử dụng như một access point Giao tiếp với esp8266
Phần cứng: Sử dụng modul esp8266 v12 làm khối xử lý chính trong đề tài, với các chức năng đã được giới thiệu ở chương trước, modul esp8266 v12 hoàn toàn có thể đáp ứng được các yêu cầu của đề tài đặt ra
Sử dụng chân D2,D3 làm ngõ ra role đóng cắt thiết bị
Sử dụng chân D4 làm ngõ nhận tín hiệu từ cảm biến độ ẩm nhiệt đọ DHT22
Sử dụng chân D6 để truyền tín hiệu với arduino
Sử dụng chân D5 nhận tín hiệu với arduino
KHỐI XỬ LÝ TRUNG TÂM
Có chức năng thực hiện xử lý khi có tín hiệu qua các cảm biến, khối xử lý chính thực hiện gửi khi có tín hiệu yêu cầu module esp8622, thực hiện điều khiển các thiết bị trong nhà
Hình 3.4 sơ đồ nối chân arduino
Chức năng: Khối có chức năng nhận các tín hiệu từ các cảm biến, xử lý tín hiệu nhận được, gửi dữ liệu đến LCD để hiển thị, giao tiếp với module esp8622 để thực hiện gửi/nhận thông tin và điều khiển các thiết bị thông qua việc điều khiển đóng mở các relay của khối output
Phần cứng: Sử dụng arduino nano làm khối xử lý chính trong đề tài, với các chức năng đã được giới thiệu ở chương trước, arduino nano hoàn toàn có thể đáp ứng được các yêu cầu của đề tài đặt ra
Sử dụng các chân D6,D7,D12 cấu hình là các chân output để đưa tín hiệu điều khiển đóng/ngắt các relay
Sử dụng chân D9 cấu hình là chân input để nhận tín hiệu từ cảm biến hồng ngoại
Sử dụng 2 chân D10 và D11 làm 2 chân giao tiếp UART với module sim900
Sử dụng 2 chân A4 và A5 làm 2 chân giao tiếp I2C để giao tiếp với khối hiển thị LCD
Sử dụng chân A1 xuất tín hiệu đến động cơ serve
Sử dụng các lệnh cơ bản để cấu hình input hay output cho các chân: pinMode(pin,mode) : pin : thứ tự chân arduino mode: INPUT (cấu hình chân là nhận tín hiệu vào), OUTPUT (cấu hình chân là gửi tín hiệu ra)Có chức năng thực hiện xử lý khi có tín hiệu qua các cảm biến, khối xử lý chính thực hiện gửi khi có tín hiệu yêu cầu module esp8622, thực hiện điều khiển các thiết bị trong nhà.
KHỐI CẢM BIẾN
3.4.1 Giới thiệu về cảm biến hồng ngoại
Cảm biến là thiết bị dùng để cảm nhận và biến đổi các đại lượng vật lý và các đại lượng không có tính chất điện cần đo thành các đại lượng có thể đo và xử lý được
Hình 3.5 Cảm biến hồng ngoại
Nguyên lý của cảm biến này như sau : mắt phát hồng ngoại sẽ phát ra sóng ánh sáng có bước sóng hồng ngoại , ở mắt thu bình thường thì có nội trở rất lớn
(khoảng vài trăm kilo ôm ) , khi mắt thu bị tia hồng ngoại chiếu vào thì nội trở của nó giảm xuống ( khoảng vài chục ôm) Lợi dụng nguyên lý này người ta chế tạo ra các cảm biến IR Hình sau biểu diễn nguyên lý hoạt động của cảm biến phát hiện vật cản IR:
Các đại lượng đo (M) thường không có tính chất điện như (nhiệt độ, áp suất, trọng lượng…) tác động lên cảm biến cho ta đại lượng đặc trưng (S) mang tính chất điện như (điện tích, điện áp, dòng điện hay trở kháng) chứa đựng thông tin cho phép xác định giá trị của đại lượng đó Đặc trưng (s) là hàm của đại lượng cần đo (M)
S = F(M) Người ta gọi (S) là đại lượng đầu ra hoặc phản ứng của cảm biến (M) là đại lượng đầu vào hay kích thích (có nguồn gốc đại lượng cần đo) Thông qua đo đạc (S) cho phép nhận biết giá trị (M) ỉ Một số loại cảm biến
- Theo nguyên lý của cảm biến
- Theo tính chất của nguồn điện
+ Cảm biến biến đổi trục tiếp
+ Không tiếp xúc với vật thể cần phát hiện
+ Có thể phát hiện vật từ khoảng cách xa
+ Không bị hao mòn, có tuổi thọ cao
+ Có thời gian đáp ứng nhanh, có thể phát hiện vật thể, vật chất
Module thu phát hồng ngoại:
- Sử dụng 1 led phát hồng ngoại
- Biến trở điều chỉnh độ chỉnh VR vuông 10K
- Chân AO - DO- GND - VCC
- Điện áp hoạt động : 3.3 đến 5VDC
Dùng 1 con oppam như lm358p chẳng hạn để tạo các mức logic 0 và 1 bằng cách so sánh 2 giá trị điện áp của cầu chia điện trở (ở đây ta dùng biến trở ) và điện áp trên anot của mắt nhận hồng ngoại Nếu khi có tia hồng ngoại chiếu vào mắt nhận thì nội trở mắt nhận giảm nên điện áp trên cực anot của mắt nhận sẽ tăng lên , khi điện áp này lớn hơn điện áp của cầu phân áp bằng điện trở thì mức điện áp ra sẽ là VCC ( mức logic 1) ngược lại là mức logic 0
Hình 3.6: Sơ đồ nguyên lý khối thu phát hồng ngoại
3.4.2 Cảm biến nhiệt độ độ ẩm DHT22
Các thông số phần cứng: Điện áp hoạt động: 3.3-5v
Dải đo nhiệt độ: -40-80 độ C
Sai số nhiệt độ: +-0.5 độ C
Chức năng: đo nhiệt độ, độ ẩm rồi gửi dữ liệu về khối xử lý trung tâm
Các lệnh sử dụng khai báo và đọc dữ liệu từ DHT22:
#include // khai báo thư viện DHT h=dht.readHumidity(); // đọc dữ liệu độ ẩm từ DHT22 t=dht.readTemperature(); // đọc dữ liệu nhiệt độ từ DHT22
KHỐI CƠ CẤU CHẤP HÀNH
Hình 3.8 Module relay thực tế
- Module Relay 4 kênh 5V có điện áp hoạt động ở mức 5V DC, chịu được tải đầu ra 30V/10A đối với điện áp DC và 250V/10A với điện áp AC
Module relay 4 kênh được thiết kế nhỏ gọn và đẹp mắt , khả năng chống nhiễu tốt và khả năng cách điện tốt nhờ trong mạch sử dụng IC cách ly quang và transistor giúp cách ly hoàn toàn mạch vi điều khiển với rơ le bảo đảm vi điều khiển hoạt động ổn định
Có sẵn header rất tiện dụng khi kết nối với các thiết bị đầu ra và vi điều khiển
Có các lỗ bắt vít rất tiện lợi dễ lắp đặt trong hệ thống mạch
Thông sô module relay 2 kênh 5V: ỉ Kớch thước: 76mm ( chiều dài )* 56mm ( chiều rụng )* 18,5mm (chiều cao) ỉ Trọng lượng: 61g ỉ Màu sắc: xanh ỉ Bốn lổ để bắt vớt cố định cú đường kớnh 3,1mm, dể dàng lắp đặt trong hệ thống mạch ỉ Cú đốn bỏo đúng ngắt trờn relay ỉ Sử dụng điện ỏp nuụi DC 5v ỉ Đầu ra điện thế đúng ngắt tối đa DC 30V/10A, AC 250V/10A
Thông số điện: ỉ Điện ỏp cấp 5V DC ỉ Dũng điện hoạt động lớn hơn 100mA ỉ Tải max 250V/10A ( AC ) hoặc ( DC ) 30V/10A ỉ Nối dõy Vcc nguồn cung cấp 5V ỉ GND: 0V
3.5.2 Động cơ servo Động cơ servo là cơ cấu cơ khí làm việc chính trong hệ thống truyền động và từ động dùng để đóng mở cổng ra vào
Hình 3.9 Động cơ servo ngoài thực tế
Hình 3.10 Cấu tạo động cơ Servo
Thông số kỹ thuật của động cơ Servo SG90-9G:
Tốc độ họạy động: 60 độ trong 0.1 giây Điện áp hoạt động: 4.8V (~5V)
Nhiệt độ hoạt động: 0 ºC – 55 ºC Điều khiển: Kết nối dây màu đỏ với 5V, dây màu nâu với mass, dây màu cam với chân phát xung của Arduino Ở chân xung cấp một xung từ 1ms-2ms theo để điều khiển góc quay theo ý muốn
Hình 3.11 Cấu tạo chân vào ra động cơ servo
Có chức năng báo động cho chủ nhà biết khi có trộm xâm nhập Điện áp định mức :12v
Hình 3.12 Đèn còi báo động
Hình 3.13 Động cơ một chiều
Vì vậy loại động cơ công 1 chiều có công suất nhỏ, điện áp 5 VDC Động cơ điện
1 chiều là động cơ hoạt động với dòng điện 1 chiều Động cơ có chức năng đảo chiều
Cấu tạo của động cơ điện 1 chiều
Stato (phần cảm): của động cơ điện một chiều thường là 1 hay nhiều cặp nam châm vĩnh cửu, hay nam châm điện
Rotor (phần ứng): có các cuộn dây quấn quanh lỏi sắt và được nối với nguồn điện một chiều
Bộ phận chỉnh lưu: nó có nhiệm vụ là đổi chiều dòng điện trong khi chuyển động quay của rotor là liên tục Thông thường bộ phận này gồm có một bộ cổ góp và một bộ chổi than tiếp xúc với cổ góp (Cổ góp : gồm các phiến góp bằng đồng được ghép cách điện, có dạng hình trụ gắn ở đầu trục rotor, Chổi than: làm bằng than graphit Các chổi tỳ chặt lên cổ góp nhờ lò xo và giá chổi điện gắn trên nắp máy)
Hình 3.14 Cấu tạo động cơ một chiều
Nguyên lý làm vi ệ c c ủ a độ ng c ơ đ i ệ n m ộ t chi ề u
Pha 1: Từ trường của rotor cùng cực với stator, sẽ đẩy nhau tạo ra chuyển động quay của rotor
Pha 2: Rotor tiếp tục quay
Pha 3: Bộ phận chỉnh điện sẽ đổi cực sao cho từ trường giữa stator và rotor cùng dấu trở lại pha 1
Hình 3.14 Nguyên lý hoạt động của động cơ DC
Cơ chế sinh lực quay của động cơ điện một chiều:
Khi có một dòng điện chạy qua cuộn dây quấn xung quanh một lõi sắt non, cạnh phía bên cực dương sẽ bị tác động bởi một lực hướng lên, trong khi cạnh đối diện lại bị tác động bằng một lực hướng xuống theo nguyên lý bàn tay trái Các lực này gây tác động quay lên cuộn dây, và làm cho rotor quay Để làm cho rotor quay liên tục và đúng chiều, một bộ cổ góp điện sẽ làm chuyển mạch dòng điện sau mỗi vị trí ứng với 1/2 chu kỳ Chỉ có vấn đề là khi mặt của cuộn dây song song với các đường sức từ trường Nghĩa là lực quay của động cơ bằng 0 khi cuộn dây lệch 90 0 so với phương ban đầu của nó, khi đó rotor sẽ quay theo quán tính
Trong các máy điện một chiều lớn, người ta có nhiều cuộn dây nối ra nhiều phiến góp khác nhau trên cổ góp Nhờ vậy dòng điện và lực quay được liên tục và hầu như không bị thay đổi theo các vị trí khác nhau của rotor.
KHỐI HIỂN THỊ LCD
Hiển thị các thông số nhiệt độ, độ ẩm đọc được từ cảm biến, hiển thị các thông tin setup, send sms hoặc hỗ trợ debug khi viết chương trình điều khiển
Hình 3.16 Khối hiển thị LCD
Phần cứng: Chọn loại LCD kiểu 2x16 để sử dụng trong đề tài và sử dụng thêm module chuyển đổi LCD I2C để tiết kiệm chân cho arduino và thuận tiện cho việc điều khiển LCD
1 Vss Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND của mạch điều khiển
2 VDD Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với
VCC=5V của mạch điều khiển
3 VEE Điều chỉnh độ tương phản của LCD
GND, VCC: 2 chân cấp nguồn 5Vdc
SDA (Serial Data): chân truyền/nhận dữ liệu
SCL (Serial Clock): chân xung nhịp
4 RS Chân chọn thanh ghi (Register select) Nối chân RS với logic “0”
(GND) hoặc logic “1” (VCC) để chọn thanh ghi
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD
5 R/W Chân chọn chế độ đọc/ghi (Read/Write) Nối chân R/W với logic
“0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc
6 E Chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus
DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU
Có 2 chế độ sử dụng 8 đường bus này : + Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7
15 - Nguồn dương cho đèn nền
Các lệnh khai báo và điều khiển khối LCD:
#include // khai báo thư viện LCD I2C
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display lcd.init(); // thiết lập LCD lcd.backlight(); // bật đèn nền lcd.setCursor(x,y); //đặt con trỏ tại vị trí cột x, dòng y lcd.print("Hello, world!"); // xuất chuỗi ra màn hình lcd.clear(); //xóa màn hình
KHỐI NGUỒN
Cấp nguồn cho toàn bộ hệ thống điều khiển bao gồm: khối xử lý trung tâm, khối cảm biến, khối hiển thị LCD, khối GSM sim 900, khối relay output
Thiết kế khối nguồn cung cấp cho hệ thống như hình 4.9
Hình 3.17 Sơ đồ mạch nguyên lý khối nguồn Để cấp nguồn cho khối xử lý trung tâm, khối hiển thị LCD, khối cảm biến ta cần cung cấp nguồn có điện áp 5V DC Ta chọn IC 7805 là IC chuyên dụng để tạo điện áp 5V cho mạch, với thông số dòng ra max 1.5A ta hoàn toàn có thể đủ dùng để cung cấp cho các khối vừa nêu Đối với module sim 900, đòi hỏi yêu cầu khắt khe về nguồn cấp phải ổn định, điện áp cấp nằm trong khoảng từ 3.2 V đến 4.5 V và dòng cấp phải ít nhất từ 2A trở lên
Nên yêu cầu phải thiết kế một nguồn nuôi riêng để cung cấp cho module sim
900 Ta sử dụng IC có thể thay đổi điện áp đầu ra IC 2596 để tạo điện áp đầu ra ổn định và có thể điều chỉnh phù hợp với module sim 900 Với dòng ra max của IC
2596 là 3A nên ta có thể hoàn toàn yên tâm sử dụng mà không sợ lỗi reset của module sim 900 khi thiếu dòng cung cấp.
LẬP TRÌNH TRƯỜNG TRÌNH ĐIỀU KHIỂN
TRƯƠNG TRÌNH ĐIỀU KHIỂN ARDUINO
4.1.1 lưu đồ thuật toán ardiuno
4.1.2 Chi tiết trương trình điều khiển arduino
#include //////thu vien cho dong co servo
#include //thu vien cho giao tiep serial
SoftwareSerial mySerial(10, 11); // RX, TX khai bao chan giao tiep serial voi esp Servo myservo; const int coi,M_cong,S_cong=9,bt_reset=8,DH=7, den_san=6; boolean alarm=0,auto1=0; int pos = 0,temp=0,reset=0;
String chuoi=""; void setup() { myservo.attach(M_cong);
Serial.begin(9600); mySerial.begin(4800); lcd.begin(16,2); for(int i = 0; i< 3; i++)
{ lcd.backlight(); delay(250); lcd.noBacklight(); delay(250);
} lcd.backlight(); lcd.clear(); lcd.setCursor(0,0); lcd.print(" DO AN "); lcd.setCursor (1,1); lcd.print("NHA THONG MINH"); lcd.backlight(); delay(100); pinMode(S_cong,INPUT); pinMode(coi,OUTPUT); pinMode(DH,OUTPUT); pinMode(bt_reset,INPUT_PULLUP); pinMode(den_san,OUTPUT); pinMode(DH,OUTPUT); pos; myservo.write(pos); // dong cong delay(15); digitalWrite(den_san, HIGH); //tat den san digitalWrite(coi, HIGH); //tat coi
{ char kt=char (mySerial.read());
Serial.println(kt); if(kt=='A') {alarm=1;Serial.println("alarm=1");} else if (kt=='B') {alarm=0;Serial.println("alarm=0");} else if (kt=='C') {reset=1;Serial.println("reset=1");} else if (kt=='D') {auto1=1;Serial.println("auto=1");} else if (kt=='E') {auto1=0;Serial.println("auto=0");} else if (kt=='F')
{digitalWrite(DH,HIGH);Serial.println("Bat may phun suong"); }// Bat may phun suong} else
{digitalWrite(DH,LOW);Serial.println("Tat may phun suong");} // Tat may phu
} else if(kt=='G') // nhiet do duoi 30
{ digitalWrite(DH,LOW);Serial.println("Tat may phun suong");}
// - if (digitalRead(S_cong)==0) // co nguoi vao cong
{ if (alarm==1) digitalWrite(coi,LOW); //bat coi else
{ digitalWrite(coi,HIGH); //tat coi pos=0; myservo.write(pos); // mo cong digitalWrite(den_san, LOW); delay(4000); digitalWrite(den_san, HIGH);
{ pos; myservo.write(pos); delay(15);
// - if (digitalRead(bt_reset)==0) {while(digitalRead(bt_reset)==0);reset=1;} //neu nhan nut reset if (reset==1)
{ digitalWrite(coi,HIGH); //Reset coi delay(10); reset=0;
TRƯƠNG TRÌNH ĐIỀU KHIỂN ESP8266
4.2.1 Lưu đồ thuật toán esp8266
4.2.2 Chi tiết trương trình điều khiển esp8266
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include // thu vien khai bao module wifi esp8266
#include // thu vien giao tiep voi phan mem blynk
#include // thu vien dinh thoi
#include // thu vien cho giao tiep serial
SoftwareSerial swSer(14, 12, false, 256); // cai dat chan giao tiep serial voi arduino
#include //thu vien cam bien DHT22
#define DHTPIN 2 //pin gpio 2 in sensor D4
#define DHTTYPE DHT22 // khai bao loai cam bien DHT 22
DHT dht(DHTPIN, DHTTYPE); char auth[] = "8837fdd266f540a59a36bfd15e6926c4"; //ma xac thuc cua blynk server char ssid[] = "XINCAIGI"; //ten wifi ket noi char pass[] = "LAMGICOPASS"; //pass wifi ket noi
WidgetTerminal terminal(V2); // virtuapl pin doi tuong terminal phan mem blynk : do loi, tra nhiet do do am
SimpleTimer timer; // khai bao thu vien thoi gian lay mau nhiet do float t,h; void do_nhiet_do()
{ h = dht.readHumidity(); t = dht.readTemperature(); if (isnan(h) || isnan(t) ) {
Serial.println("Loi cam bien DHT22!"); return;
Blynk.virtualWrite(10, t); // gui gia tri nhiet do len virtuapl pin 10 cua blynk Blynk.virtualWrite(11, h); // gui gia tri do am len virtuapl pin 11 cua blynk if(t>40)
{ swSer.write("F"); // Gui chuoi "F" cho arduino
{ swSer.write("G"); // Gui chuoi "B" cho arduino
{ int pinValue = param.asInt(); // lay gia tri tu virtual pin V1
Serial.println(pinValue); if (pinValue==1) swSer.write("A"); // Gui chuoi "A" cho arduino if (pinValue==0) swSer.write("B"); // Gui chuoi "B" cho arduino
{ if (String("temp") == param.asStr())
{ terminal.println("Loi cam bien"); terminal.flush();
{ terminal.print("Nhiet do: "); terminal.println(t); terminal.print("Do am: "); terminal.println(h); terminal.flush();
{ terminal.println("Lenh khong dung"); terminal.flush();
{ int pinValue = param.asInt(); // lay gia tri tu virtual pin V1
Serial.println(pinValue); if (pinValue==1) swSer.write("C"); // Gui chuoi "C" cho arduino
{ int pinValue = param.asInt(); // lay gia tri tu virtual pin V4
Serial.println(pinValue); if (pinValue==1) swSer.write("D"); // Gui chuoi "D" cho arduino else if(pinValue==0) swSer.write("E"); // Gui chuoi "E" cho arduino
Serial.begin(9600); swSer.begin(4800); dht.begin();
Blynk.begin(auth, ssid, pass); //khoi dong thu vien blynk voi auth code, ssid, pass wifi ket noi timer.setInterval(1000L, do_nhiet_do);// goi ham do nhiet do sau moi giay }
KIỂM TRA ĐÁNH GIÁ VÀ HƯỚNG PHÁT TRIỂN
KIỂM TRA HỆ THỐNG
Xữ lý các trường hợp thực tế:
+ Nhiều khi mạng wifi không ổn định làm cho sự đáp ứng của thiết bị không phản hồi nhanh
+ Cảm biến hồng ngoại bị nhiễu với môi trường có hồng ngoại nhiều
+ Khả năng cảm biến nhiệt độ và độ ẩm bị nhiễu bởi môi trường bên ngoài nên đưa ra giá trị hk sát với thực tế.
KẾT QUẢ
Hình 5.1 Mô hình phần cứng v Phần thiết kế mô hình
Nhóm hoàn thành mô hình gồm có 1 động cơ để điều khiển hệ thống làm mát, cảm biến nhiệt độ và đô ẩm DHT 22 và cảm biến hồng ngoại xác chuyển động của vật để phát hiện có người trong khu vực quang sát, 1 động cơ secvo để điều khiển đóng mở cổng,màn hình LCD 16x2 để hiển thị,và hệ thống đèn chiếu sáng v Phần kiến thức:
+ Tìm hiểu về bộ điều khiển lập trình IDE
+ Vai trò arduino và esp8266 trong hệ thống tự động hóa
+ Tìm hiểu quy trình công nghệ một số phương phát điều khiển tự động và giám sát các thiết bị từ xa
+ Vai trò của cảm biến trong lĩnh vức điều khiển tự động hóa
KẾT LUẬN
Sau một thời gian dài tìm hiểu và nghiên cứu, xây dựng ý tưởng và bắt tay và việc thi công Nhóm chúng em đã hoàn thành đề tài “ Thiết kế hệ thống giám sát ngôi nhà thông minh” Chúng em đạt được kết quả sau:
- Đề tài đã tìm hiểu cơ sở lý thuyết về arduino và esp 8266, hoạt động cảm biến nhiệt độ và đọ ẩm trong quá trình thu thập thông tin
- Tìm hiểu quy trình công nghệ tự động hóa trong điều khiển và điều khiển từ xa
- Đã xây dựng thành công hệ thống giám sát các hoạt động trong khuôn viên ngôi nhà thông minh
Qua quá trình nghiên cứu và xây dựng đề tài giúp chúng em hiểu được nhiều thiết bị ứng dụng trong các hệ thống giám sát điều khiển tự động, thấy được xu thế phát triển của ngành tự động hóa Thấy được vai trò và úng dụng của arduini và esp
8266 trong đời sống xã hội Giúp con người làm việc một cách hiệu quả, đạt được kết quả tốt trong công việc Cuộc sống chúng ta hướng tới những điều tốt đẹp hơn Qua đề tài, giúp chúng em biết được cấu trúc cách lập trình và vai trò của Arduino và esp 8266 trong hệ thống tự động hóa Giúp em củng cố lại kiến thức đã học => Áp dụng vào thực tế
- Hệ thống cần có những thiết bị khách và lạp trình theo nhu cầu riêng trong thực tế
- Kết cấu cơ khí ở các thiết bị mô phỏng chưa được đẹp mắt
- Hệ thống bị nhiễu nhiều với môi trường bên ngoài khi hoạt động
Trong tương lai, hệ thống có thể giám sát và điều khiển đcược nhiều thiết bị với nhiều tiêu chí khác nhau trong nhiều trường hợp
Mong rằng đề tài này sẽ được các bạn sinh viên khóa sau tiếp tục thực hiện và khắc phục những hạn chế của đề tài này, cải thiện những mặt chưa được và phát huy mặt được một cách tốt hôn để có thể tạo ra một hệ thống có chất lượng.