4.1.1 Khối cảm biến
Khối này sử dụng 2 cảm biến để đo 2 đại lượng là mực nước và lưu lượng nước, trong đề tài này em chọn cảm biến siêu âm SRF05 để đo mực nước, cảm biến lưu lượng S201 để đo lưu lượng nước.
• Cảm biến siêu SRF05
Module cảm biến siêu âm SRF05 dùng để đo khoảng cách đến vật chắn bằng sóng siêu âm. Module có 2 đầu thu và phát sóng, khoảng cách được xác định bằng cách đo khoảng thời gian mà sóng siêu âm được phát ra từ module truyền đến vật chắn rồi phản hồi về.
Hình 4.1 Cảm biến siêu âm [8]
Sử dụng bằng cách truyền 1 xung vào chân TRIGGER của module, sau đó chờ 1 xung trả về trên chân ECHO, độ dài của xung phản hồi tương ứng với thời gian của sóng siêu âm truyền trong không khí, từ đó tính ra được khoảng cách đến vật thể chắn.
Khi phát ra xung, và chờ xung phản xạ về, chân ECHO của SRF05 sẽ được kéo lên cao. khi có xung phản xạ về chân ECHO sẽ được kéo xuống thấp, hoặc sau 30ms nếu không có xung phản xạ về.
Hình 4.2 Nguyên lý đo khoảng cách [8]
Vậy để đo lượng nước ta sẽ làm thế nào, ví dụ nếu đo mực nước trong một cái bình, thì ta sẽ đo chiều cao của bình là h, sau đó dùng cảm biến siêu âm SRF05 để đo khoảng cách từ mặt nước trong bình lên đến đỉnh bình là h1, mực nước trong bình sẽ là d = h –h1.
Thông số cơ bản
Điện áp 5v
Dòng cấp 30mA, max 50mA
Tần số 40Khz
Khoảng cách đo 3cm – 4,5m
Kích thước 43mm x 20mm x17mm
Giá 50000đ
Bảng 4.1 Thông số của SRF05 [8]
• Cảm biến lưu lượng
Hình 4.3 Cảm biến lưu lượng S201 [8]
Chất liệu bằng nhựa bên trong có cánh quạt nước và cảm biến hall. Khi nước chảy qua van cảm biến làm động cơ quay dẫn đến sự thay đổi trạng thái đầu ra của cảm biến Hall, đâu ra tín hiệu xung.
Hình 4.4 Nguyên lý hoạt động của cảm biến [9]
Nguồn 5V-24V
Dòng tối đa 15 mA(DC 5V)
Khối lượng 43 g
Lưu lượng đo 1~40 L/min Nhiệt độ hoạt động
Nhiệt độ chất lỏng
0°C~80°C
<120°C Độ ẩm hoạt động 35%~90%RH Áp lực chịu đc under 1.75Mpa Nhiệt độ bảo quản -25°C~+80°C
Độ ẩm bảo quản 25%~90%RH
Giá 70.000đ
Bảng 4.2 Thông số của cảm biến lưu lượng S201 [8]
Tần số tín hiệu đầu ra: F=7.5xQ ( L/Phút) (4.1) Trong đó:
Q: Lưu lượng nước
F: Tần số tín hiệu đầu ra (Hz) 7.5: Hằng số
VD:
1L nước sẽ có công thức : 1x7.5x60 = 450 xung 4.1.2 Khối điều khiển
Mạch sử dụng Arduino Uno R3 làm trung tâm xử lý
Hình 4.5 Arduino Uno R3 [10]
Thông số của Uno R3
Vi điều khiển Atmega328 họ 8bit
Điện áp hoạt động 5V DC (chỉ được cấp qua cổng USB)
Tần số hoạt động 16 MHz
Dòng tiêu thụ khoảng 30mA
Điện áp vào khuyên dùng 7-12V DC Điện áp vào giới hạn 6-20V DC
Số chân Digital I/O 14 (6 chân hardware PWM) Số chân Analog 6 (độ phân giải 10bit) Dòng tối đa trên mỗi chân I/O 30 mA
Dòng ra tối đa (5V) 500 mA Dòng ra tối đa (3.3V) 50 mA
Bộ nhớ flash 32 KB (Atmega328) với 0.5KB dùng bởi
bootloader
SRAM 2 KB (Atmega328)
EEPROM 1 KB (Atmega328)
Bảng 4.3 Thông số kỹ thuật Arduino Uno R3 [10]
Nguồn cho Arduino :
Arduino UNO R3 có thể được cấp nguồn 5VDC thông qua cổng USB hoặc cấp nguồn ngoài thông qua Adaptor với điện áp khuyên dùng là 7-9VDC, thường thì nên cấp nguồn bằng pin 9V là hợp lý nhất nếu bạn không có sẵn nguồn từ cổng USB.
Nếu cấp nguồn vượt quá ngưỡng giới hạn như trên sẽ làm hỏng Arduino UNO R3.GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi bạn dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với nhau.
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à 150mA.
Vin (Voltage Input): Để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của nguồn với chân này và cực âm của nguồn với chân GND.
RESET: Khi nhấn nút Reset trên board để Reset vi điều khiển tương đương với việc chân Reset được nối với GND qua 1 điện trở 10KΩ.
Các chân vào ra của Arduino Uno R3:
Arduino UNO R3 có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng chỉ có 2 mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA. Ở mỗi
chân đều có các điện trở pull-up từ được cài đặt ngay trong vi điều khiển ATmega328 (mặc định thì các điện trở này không được kết nối).
Một số chân digital có các chức năng đặc biệt như sau:
2 chân Serial 0 (RX) và 1 (TX): dùng để gửi (Transmit – TX) và nhận (Receive – RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này. Kết nối bluetooth có thể nói là kết nối Serial không dây. Nếu không cần giao tiếp Serial bạn không nên sử dụng 2 chân này nếu không cần thiết
Chân PWM (~): 3, 5, 6, 9, 10, và 11: Cho phép bạn xuất ra xung PWM với độ phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói một cách đơn giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác.
Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngoài các chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác.
LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân này được người dùng sử dụng, LED sẽ sáng.
Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit để đọc giá trị điện áp trong khoảng 0V → 5V. Với chân AREF trên board, bạn có thể để đưa vào điện áp tham chiếu khi sử dụng các chân analog. Tức là nếu bạn cấp điện áp 2.5V vào chân này thì bạn có thể dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân giải vẫn là 10bit.
Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.
4.1.3 Khối truyền thông
Việc truyền phát dữ liệu được thực hiện trên module SIM 900A. Module Sim900A là module GSM, hoạt động ở 2 băng tần 900/1800 MHz, xây dựng dựa trên Sim900A của hãng SIMCOM.
Hình 4.6 Sim 900A và module [8]
Ngoài chức năng gửi nhận tin nhắn SMS, cuộc gọi, SIM900 hỗ trợ giao thức TCP/IP, hữu ích cho việc truyền dữ liệu trên Internet.
* Thông số kĩ thuật của module
• Sử dụng nguồn ngoài: 9 - 12VDC/ 500mA trở lên (khuyên dùng 2A ),
• Giao tiếp UART, dùng được với cả MCU 5V và 3.3V,
• Tích hợp led báo trạng thái sim
• Dòng khi hoạt động từ 100mA đến 2A.
* Chức năng của một số chân chính
• GND: Chân mass.
• Vcc: Chân cấp nguồn nuôi để module hoạt động.
• TXD : Chân truyền UART.
• RXD: Chân nhận UART.
• PWR: Chân bật tắt modul sim900a.
• SPK: Chân xuất âm thanh ra loa thoại.
• MIC: Chân tạo mic để đàm thoại.
4.1.4 Khối nguồn
Mạch đặt ngoài trời những nơi không có điện lưới và trong một thời gian dài nên cần nguồn có thể tự sạc, lựa chọn pin mặt trời làm nguồn là giải pháp tối ưu
Hình 4.7 Pin mặt trời 4.1.5 Khối hiển thị
Hình 4.8 LCD 16x2 [11]
Các chức năng của từng chân
Bảng 4.4 Chi tiết LCD 16x2 [11]
Chân Ký hiệu Mô tả
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
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.
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.
7-14 DB0 - DB7
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 LedA Nguồn dương cho đèn nền.
16 LedK GND cho đèn nền.
4.2 Chi tiết phần mềm
4.2.1 Lập trình Server
Server là trung tâm thu nhận và xử lý dữ liệu, kết hợp với database để quản lý các dữ liệu nhận được. Server mà em sử dụng là máy tính cá nhân, được viết bằng ngôn ngữ java, sử dụng lập trình socket
• Giới thiệu ngôn ngữ java
Java là một ngôn ngữ lập trình hướng đối tượng (OOP) và dựa trên các lớp (class). Khác với phần lớn ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn khi chạy, Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường thực thi (runtime environment) chạy.
• Lập trình Socket
Trong lập trình, Socket là một API (Application Programming Interface) cung cấp các phương thức để giao tiếp thông qua mạng.
Lập trình socket là cách lập trình cho phép chúng ta kết nối các máy tính truyền tải và nhận dữ liệu từ máy tính thông qua mạng, thông thường là mô hình client- server sử dụng lập trình Socket sử dụng giao thức TCP/IP để truyền nhận dữ liệu với nhau.
Hình 4.9 Mô hình truyền nhận client server lập trình socket [12]
Các bước lập trình Socket:
b1: Mở một ServerSocket tại 1 số hiệu cổng
Các client biết tên máy của máy tính mà trên đó chương trình chủ (server) đang chạy và số cổng mà chương trình chủ lắng nghe. Để thực hiện một yêu cầu kết nối, client cố gắng tạo ra cuộc gặp với máy chủ trên máy tính của chương trình chủ và cổng. Các client cũng cần phải tự định danh chính nó với server để gắn với một cổng địa phương cái sẽ được sử dụng trong suốt quá trình kết nối này, thông thường nó được gán bởi hệ điều hành.
Hình 4.10 Hình ảnh minh họa client yêu cầu kết nối tới Server [13]
b2: Chấp nhận một yêu cầu kết nối từ phía client
Nếu không có vẫn đề gì xảy ra, server chấp nhận kết nối của client. Khi chấp nhận, máy chủ có được một socket mới bị ràng buộc vào cùng "số hiệu cổng". Server tạo ra một socket mới để giao tiếp với client vừa được chấp nhận kết nối.
Hình 4.11 Hình ảnh minh họa server chấp nhận mở 1socket với client [13]
b3: Mở luồng vào ra trên Socket tại Server
Dữ liệu ghi vào luồng đầu ra trên Socket của client sẽ nhận được trên luồng đầu vào của Socket tại server. Và ngược lại dữ liệu ghi vào luồng đầu ra trên Socket của server sẽ nhận được trên luồng đầu vào của Socket tại client.
Hình 4.12 Hình ảnh minh họa luồng vào ra dữ liệu giữa client và server [13]
4.2.2 Thiết kế Server
Server được viết bằng ngôn ngữ java sử dụng lập trình Socket để nhận dữ liệu gửi về từ module Sim.
Các bước thiết kế chương trình:
b1: Mở một ServerSocket tại cổng nào đó giá trị từ 1023 – 65535 ServerSocket listener = new ServerSocket(8888); //ví dụ cổng 8888 b2: Chấp nhận một yêu cầu kết nối từ phía client
Socket socketOfServer = listener.accept();
b3: Mở luồng vào dữ liệu trên Socket tại server
InputStream in = socketOfServer.getInputStream();
DataInputStream is = new DataInputStream(in);
b4: Thực hiện đọc dữ liệu
Đọc dữ liệu được gửi tới từ mạch phần cứng bằng cách sử dụng phương thức readline() của lớp DataInputStream với cú pháp sau
is.readline();
b5: Truyền dữ liệu đọc được vào CSDL
Server kết nối với CSDL bằng cách sử dụng JDBC (Java Database Connectivity) là một API tiêu chuẩn dùng để tương tác với các loại CSDL quan hệ. Khởi tạo JDBC, kết nối với CSDL, dữ liệu đọc được ở bước trên sẽ được ghi vào bảng CSDL ứng với các trường.
b6: Đóng kết nối is.close();
socketOfServer.close();
4.3 Kết luận chương
Trong chương này chúng ta đã tìm hiểu chi tiết từng linh kiện của mạch như cảm biến siêu âm SRF05, cảm biến lưu lượng S201, arduino uno, module sim900a ... Lập trình Socket, cách thức hoạt động của mô hình Client-Server