Báo cáo Cuối Kỳ ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ BÁO CÁO CUỐI KỲ LẬP TRÌNH NÂNG CAO ỨNG DỤNG TRONG ĐO LƯỜNG ĐIỀU KHIỂN Mã lớp học phần EMA3129 21 Giảng viên hướng dẫn T S Đỗ Trần Thắng[.]
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ BÁO CÁO CUỐI KỲ LẬP TRÌNH NÂNG CAO ỨNG DỤNG TRONG ĐO LƯỜNG ĐIỀU KHIỂN Mã lớp học phần: EMA3129 21 Giảng viên hướng dẫn: T.S Đỗ Trần Thắng Phạm Mạnh Tuấn Thành viên nhóm: Dương Duy Anh – 19020998 Trần Văn Công – 19021003 Nguyễn Đức Cường - 19021006 Giới thiệu đồ án 1.1 Tên đồ án 1.2 Nội dung Thiết kế phần cứng 2.1 Raspberry Pi *Giới thiệu: *Cấu trúc phần cứng: *Thông số kỹ thuật chính: 2.2 Arduino Uno R3 *Giới thiệu: *Thông số kỹ thuật: 2.3 Cảm biến đo nhiệt độ độ ẩm DHT22 10 *Giới thiệu: 10 *Thông số kỹ thuật: 10 *Sơ đồ chân cảm biến: 11 *Sơ đồ nối dây: 12 Thiết kế phần mềm 12 3.1 Đọc liệu từ cảm biến đo nhiệt độ độ ẩm DHT22 12 3.2 Đưa kết thu lên sở liệu 15 3.3 Sử dụng liệu từ Database để vẽ biểu đồ hiển thị web 19 Danh sách hình ảnh Hình 1: Raspberry Pi Hình 2: Arduino Uno R3 Hình 3: Các kết nối Arduino Hình 4: Cảm biến DHT22 10 Hình 5: Sơ đồ chân DHT22 11 Hình 6: Sơ đồ nối dây 12 Hình 7: Màn hình kết Serial Monitor 14 Hình 8: Kết chạy hình Terminal 18 Hình 9: Dữ liệu lưu database 19 Hình 10: Giao diện website 23 Hình 11: Giao diện hiển thị nút ẩn cho chức website 23 Hình 12: Biểu đồ đo nhiệt độ 24 Hình 13: Biểu đồ đo độ ẩm 24 Hình 14: Bảng lịch sử kết đo 25 Giới thiệu đồ án 1.1 Tên đồ án Đọc nhiệt độ từ cảm biến DHT22 Arduino hiển thị lên web Raspberry Pi 1.2 Nội dung Đầu tiên, ta sử dụng cảm biến DHT22 kết nối với Arduino để đo giá trị nhiệt độ độ ẩm Những giá trị chuyển lên sở liệu Raspberry Pi lưu lại dạng bảng theo thời gian Sau đó, ta hiển thị giá trị website dạng biểu đồ biến thiên theo thời gian Thiết kế phần cứng Để thực tồn chương trình cần phải chuẩn bị: - Raspberry Pi - Arduino Uno R3 - Cảm biến DHT22 2.1 Raspberry Pi *Giới thiệu: Tồn chương trình chạy thiết bị mang tên Raspberry Pi Raspberry Pi board máy tính đơn nhỏ, giá rẻ, kích thước thẻ tín dụng, tiết kiệm điện (vì nguồn điện cung cấp cho RPi có 5V) giới thiệu Raspberry Pi Foundation, kèm với CPU, GPU, cổng USB chân I/O có khả thực số chức đơn giản máy tính thơng thường Máy tính nhỏ bé phát triển với mục đích làm cho q trình học máy tính trở nên dễ dàng để học sinh trung bình nhận lợi ích dự đốn máy tính tiên tiến làm Raspberry Pi (Model B hệ đầu tiên) đời vào năm 2012 sớm tiếng dễ sử dụng tính sẵn có Tương tự, Raspberry Pi giới thiệu vào tháng năm 2015 với chút cải tiến thiết kế có thêm RAM so với phiên trước Được giới thiệu vào năm 2016, Raspberry Pi Model B kèm với xử lý lõi tứ cho thấy hiệu mạnh mẽ gấp 10 lần Raspberry Pi Và tốc độ Raspberry Pi cao 80% so với Raspberry Pi Phần cứng Raspberry trải qua số biến thể hỗ trợ thiết bị ngoại vi dung lượng nhớ Mỗi bổ sung kèm với chút cải tiến mặt thiết kế tính nâng cao thêm vào thiết bị để thực nhiều chức tốt máy tính thơng thường WiFi Bluetooth khơng có phiên cũ (Pi Pi 2), thêm vào phần bổ sung thiết bị (Pi 3), cho phép trì kết nối với thiết bị ngoại vi mà không cần tham gia kết nối vật lý *Cấu trúc phần cứng: Hình 1: Raspberry Pi Raspberry Pi Model B kèm với xử lý lõi tứ 64 bit, board mạch với tính WiFi Bluetooth USB Nó có tốc độ xử lý từ 700 MHz đến 1,4 GHz nhớ RAM dao động từ 256 đến 1GB CPU thiết bị coi não thiết bị chịu trách nhiệm thực thi câu lệnh dựa hoạt động toán học logic GPU (bộ xử lý đồ họa) chip tiên tiến khác tích hợp board mạch có chức tính tốn hình ảnh Board mạch trang bị cáp lõi video Broadcam chủ yếu sử dụng để chơi trị chơi video thơng qua thiết bị Pi kèm với chân GPIO (General Purpose Input Output) cần thiết để trì kết nối với thiết bị điện tử khác Các chân đầu đầu vào nhận lệnh hoạt động dựa chương trình thiết bị Cổng Ethernet tích hợp thiết bị để thiết lập đường giao tiếp với thiết bị khác Có thể kết nối cổng Ethernet với định tuyến để trì kết nối cho internet Board có bốn cổng USB sử dụng sử dụng để kết nối với bàn phím, chuột kết nối USB 3G để truy cập internet thẻ SD thêm vào để lưu trữ hệ điều hành Đầu nối nguồn điện phần board mạch sử dụng để cung cấp nguồn V cho bo mạch Bạn sử dụng nguồn để thiết lập nguồn cho board mạch, nhiên, bạn ưu tiên kết nối cáp nguồn qua cổng USB máy tính xách tay để cung cấp V Pi hỗ trợ hai tùy chọn kết nối bao gồm HDMI RCA Video Cổng HDMI sử dụng để kết nối LCD TV, hỗ trợ cáp phiên 1.3 1.4 Cổng RCA Video sử dụng để kết nối hình TV đời cũ sử dụng jack cắm 3,5mm mà không hỗ trợ cổng HDMI Cổng USB tích hợp board mạch sử dụng để khởi động thiết bị Vì RPi chạy hệ điều hành Linux, nên cần cắm bàn phím chuột vào sử dụng mà khơng cần cài thêm driver *Thơng số kỹ thuật chính: - 1,4 GHz 64 bit, Bộ xử lý lõi tứ Broadcom BCM2387 ARM Cortex-A53, nhanh 10 lần so với Raspberry Pi - RAM 1GB (LPDDR2 SDRAM) cho phép bạn chạy ứng dụng nâng cao - 802.11 b/g/n Wireless LAN - On-board Bluetooth 4.1 - cổng USB 2.0 - Ethernet 300Mbit/s - 40 chân GPIO - HDMI hỗ trợ phiên 1.3/1.4 Composite RCA (PAL and NTSC) - 10/100 BaseT Ethernet socket - Camera interface (CSI), để kết nối với camera - Display interface (DSI): sử dụng để kết nối Raspberry Pi với hình cảm ứng - Khe cắm thẻ microSD: đễ lưu trữ liệu - Micro USB power source - VideoCore IV multimedia/3D graphics core @ 400MHz/300MHz 2.2 Arduino Uno R3 *Giới thiệu: Hình 2: Arduino Uno R3 Arduino Uno R3 board mạch vi điều khiển phát triển Arduino.cc, tảng điện tử mã nguồn mở chủ yếu dựa vi điều khiển AVR Atmega328P Arduino Uno R3 kết nối trực tiếp với máy tính thơng qua USB để giao tiếp với phần mềm lập trình IDE, tương thích với Windows, MAC Linux Systems, nhiên, Windows thích hợp để sử dụng Các ngơn ngữ lập trình C C ++ sử dụng IDE *Thơng số kỹ thuật: Hình 3: Các kết nối Arduino - Chíp ATMEGA328P-PU - Nguồn Cấp : 7-12V - Dòng Max chân 5V : 500mA - Dòng Max 3.3V : 50mA - Dòng Max Chân I/O : 30mA -14 Chân Digital I/O (6 chân PWM) -6 Chân Analog Inputs - Đèn LED : Arduino Uno kèm với đèn LED tích hợp kết nối thơng qua chân 13 Cung cấp mức logic HIGH tương ứng ON LOW tương ứng tắt - Vin : Đây điện áp đầu vào cung cấp cho board mạch Arduino Khác với 5V cung cấp qua cổng USB Pin sử dụng để cung cấp điện áp toàn mạch thông qua jack nguồn, thông thường khoảng 7-12VDC - 5V : Chân 5V sử dụng để cung cấp điện áp đầu Arduino cấp nguồn ba cách USB, chân Vin bo mạch giắc nguồn DC - USB : Hỗ trợ điện áp khoảng 5V Vin Power Jack hỗ trợ dải điện áp khoảng từ 7V đến 20V - GND : Chân mass chung cho toàn mạch Arduino - Reset : Chân reset để thiết lập lại ban đầu - IOREF : Chân hữu ích để cung cấp tham chiếu điện áp cho Arduino - PWM : PWM cung cấp chân 3,5,6,9,10, 11 Các chân cấu hình để cung cấp PWM đầu bit - SPI : Chân gọi giao diện ngoại vi nối tiếp Các chân 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) cung cấp liên lạc SPI với trợ giúp thư viện SPI - AREF : Chân gọi tham chiếu tương tự, sử dụng để cung cấp điện áp tham chiếu cho đầu vào tương tự - TWI : Chân Giao tiếp TWI truy cập thông qua thư viện dây Chân A4 A5 sử dụng cho mục đích - Serial Communication :Giao tiếp nối tiếp thực thông qua hai chân (Rx) (Tx) - Rx : Chân sử dụng để nhận liệu chân Tx sử dụng để truyền liệu - External Interrupts (Ngắt ngoài) : Chân sử dụng để cung cấp ngắt 2.3 Cảm biến đo nhiệt độ độ ẩm DHT22 *Giới thiệu: Hình 4: Cảm biến DHT22 DHT22 cảm biến nhiệt độ độ ẩm với tính gần với độ xác cao Điều cho phép bạn khơng phải phụ thuộc vào cảm biến nhiệt độ cảm biến độ ẩm riêng biệt mà tích hợp thứ thiết bị Cảm biến chứa chip thực chuyển đổi tương tự sang kỹ thuật số phát tín hiệu kỹ thuật số với nhiệt độ độ ẩm Điều làm cho dễ sử dụng với vi điều khiển *Thông số kỹ thuật: Phạm vi nhiệt độ Phạm vi độ ẩm -40 đến 80 ºC ±0.5ºC đến 100% ±2% Độ phân giải Điện áp hoạt động Độ ẩm: 0.1% Nhiệt độ: 0,1ºC - V Nguồn DC Dòng điện - 1,5 mA Thời gian lấy mẫu giây *Sơ đồ chân cảm biến: Hình 5: Sơ đồ chân DHT22 Chân nguồn (thường 5V) Chân truyền liệu(nên kết nối qua điện trở tối đa 10 Ohm) NC(chân khơng có kết nối) GND(chân nối đất) *Sơ đồ nối dây: Hình 6: Sơ đồ nối dây -Chân Vcc cảm biến nối với nguồn 5V Arduino -Chân GND nối với chân GND Arduino -Chân Data nối với chân kỹ thuật số Arduino Thiết kế phần mềm 3.1 Đọc liệu từ cảm biến đo nhiệt độ độ ẩm DHT22 Để đo nhiệt độ độ ẩm cảm biến DHT22, ta cần phải thiết kế code để nạp vào Arduino kết nối với cảm biến theo sơ đồ nối dây phần Ở đây, sử dụng phần mềm Arduino IDE để thiết kế, nạp code vào Arduino để thực chương trình #include "DHT.h" #define DHTPIN #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); Serial.print(h); Serial.print(","); Serial.println(t); delay(1000); } Đầu tiên, ta khai báo thư viện DHT.h, thư viện từ Adafruit.Đây thư viện tích hợp để sử dụng cho loại cảm biến bao gồm: DHT11, DHT21, DHT22 Để sử dụng thư viện này, ta cần cài đặt thư viện Adafruit Unified Sensor Sau đó, ta khai báo vị trí chân kết nối chân Data cảm biến nối với chân kỹ thuật số Arduino (ở chân số 7) khai báo loại cảm biến sử dụng chương trình (DHT22) #include "DHT.h" #define DHTPIN #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); Trong hàm setup(), ta khởi chạy baudrate (tốc độ truyền) 9600 với mục đích gỡ lỗi kết nối với database Và khởi tạo cảm biến DHT phương thức begin() void setup() { Serial.begin(9600); dht.begin(); } Việc đọc nhiệt độ độ ẩm từ cảm biến vô đơn giản Để lấy độ ẩm, ta dùng phương thức readHumidity đối tượng dht Tương tự nhiệt độ phương thức readTemperature Các giá trị trả kiểu float Sau đó, ta in lên hình Serial Monitor lệnh Serial.print() void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); Serial.print(h); Serial.print(","); Serial.println(t); delay(1000); } Sau chạy chương trình, ta thu kết hình Serial Monitor sau: Hình 7: Màn hình kết Serial Monitor 3.2 Đưa kết thu lên sở liệu Sau có kết đo từ cảm biến, việc cần làm đưa liệu lên sở liệu (database), từ tạo lập thành bảng thống kê kết đo theo thời gian thực connection.php Trước hết, ta sử dụng thư viện bao gồm: serial, mysql.connector, datetime time Thư viện serial cung cấp công cụ dùng để kết nối với Arduino Trong đó, thư viện mysql.connector thư viện dùng để giao tiếp với sở liệu (ở MySQL) Vì ta đo nhiệt độ độ ẩm thời gian thực nên để thị ta cần thêm thư viện datetime time Việc cần làm tạo bảng sở liệu Phương thức connect() module mysql.connector sử dụng để tạo đối tượng connection kết nối sở liệu python Trong đối tượng truyền thông tin bao gồm: - Hostname Username Password Database(sau tạo) Tiếp đến, ta tạo đối tượng trỏ, khía cạnh quan trọng việc thực truy vấn sở liệu Nó tạo điều kiện cho ta có nhiều mơi trường làm việc riêng biệt thơng qua kết nối với sở liệu Để làm việc đó, ta gọi hàm cursor() từ đối tượng connection Ta sử dụng lệnh CREAT DATABASE CREAT TABLE Như tên chúng, lệnh dùng để tạo sở liệu tạo bảng để hiển thị kết đo thời gian thực Trong bảng ta bao gồm: - Số thứ tự Giờ phút giây đo (kiểu TEXT) Nhiệt độ (kiểu TEXT) Độ ẩm (kiểu TEXT) Ngày tháng năm (kiểu TEXT) Việc cuối ta cần làm ghi giá trị cần thiết lên bảng ta tạo lập Khi xong, ta đóng bảng lệnh close() Ta kết nối với Arduino read_data() Như ta set baudrate Arduino 9600 nên Serial(), ta khai báo 9600 để code kết nối với Ta cần khai báo thêm cổng kết nối với Arduino (COM4) độ trễ để chương trình hoạt động trơn tru Sau đấy, ta dùng hàm while để lấy giá trị liên tục Ta cần giải mã liệu phương thức decode() mã ascii Nếu liệu ta thu có độ dài string lớn trả kết liệu để tránh xảy lỗi trình chạy chương trình Cuối cùng, ta dùng hàm while để in ghi kết liên tục database ta tạo Ở sử dụng hàm split(‘,’) để xuất dấu “,” liệu ghi thêm giá trị vào hàng bảng Để thị thời gian thực, ta sử dụng thêm hàm strftime() có tác dụng trả chuỗi biểu diễn giá trị thời gian cách sử dụng đối tượng datetime time Sau cùng, ta thu kết Terminal phần mềm MySQL Benchmark sau: Hình 8: Kết chạy hình Terminal Hình 9: Dữ liệu lưu database 3.3 Sử dụng liệu từ Database để vẽ biểu đồ hiển thị web Việc cần làm kết nối Database với Server Ở đây, ta khai báo thuộc tính bao gồm: - Servername Username Password Database Sau khai báo xong, ta tạo kết nối với Database Nếu mà kết nối ta bị lỗi, ta sử dụng hàm die() để dừng hệ thống trả thông báo Sau đó, ta dùng HTML (Hypertext Markup Language), để xây dựng cấu trúc thành phần website, để tạo trang web.HTML hiển thị nội dung cho người truy cập Trong trang web bao gồm heading, footer, content, liên kết cho mục website, tạo nút bấm để quay lại trang web… index (2).php Sau ấy, ta bắt đầu tạo biểu đồ để hiển thị giá trị ta đo lưu lại sở liệu Với nhiệt độ, ta tạo kết nối với Database, sau đọc liệu phù hợp tiếp tục chương trình Ở đây, ta sử dụng hàm json_encode() có tác dụng chuyển hay nhiều mảng PHP sang chuỗi json Sau giá trị thỏa mãn, ta bắt đầu thêm vào biểu đồ cập nhật giá trị 2s Biểu đồ thị lên gồm trục giá trị nhiệt độ thời gian đo tempchart.php tempchart-info.php Ta làm điều tương tự biểu đồ độ ẩm: humichart.php humichart-info.php Ta tạo thêm bảng để hiển thị lịch sử giá trị đo lấy từ Database table.php Để web có bắt mắt, thu hút người truy cập, ta sử dụng CSS (Cascading Style Sheets ), ngôn ngữ dùng để tìm định dạng lại phần tử tạo HTML CSS giúp thêm style vào phần tử HTML thay đổi bố cục, màu sắc trang, đổi màu chữ, font chữ, thay đổi background… Khi chạy chương trình, ta thu kết web sau: Hình 10: Giao diện website Cuộn xuống bên nút ấn để biểu đồ nhiệt độ, độ ẩm bảng lịch sử: Hình 11: Giao diện hiển thị nút ẩn cho chức website Khi click vào ô Temperature ta thu biểu đồ sau: Hình 12: Biểu đồ đo nhiệt độ Tương tự với Huminity: Hình 13: Biểu đồ đo độ ẩm Bảng History hiển thị giá trị đo theo thời gian: Hình 14: Bảng lịch sử kết đo