Hướng dẫn xây dựng hệ thống giám sát qua internet đơn giản

Mô tả dự án: 

Mục đích bài hướng dẫn là mang lại cho bạn các xây dựng một hệ thống giám sát đơn giản, miễn phí, sau đó tùy vào bạn mà mở rộng tính năng theo ý tưởng của mình

 

Chuẩn bị

Kiến thức cần có

Vì đây là một bài hướng dẫn không phải là kiểu copy run nên để hiểu và hiệu chỉnh được code bạn phải chuẩn bị một số kiến thức như sau

  1. Lập trình Arduino cơ bản
  2. Lập trình PHP&MySQL
  3. Kiến thức về hosting/tên miền

Về phần dụng cụ

  • 1 Arduino UNO R3
  • 1 Cảm biến DHT 11 để minh họa cho phần gửi nhận thông tin
  • 1 Ethernet Shield
  • 1 Cáp mạng
  • 1 cáp USB
  • 1 Tài khoản Hostinger (Lưu ý: FreeVNN không hỗ trợ nhé nó nhé chống việc gửi dữ liệu từ Ethernet Shield) đăng ký tại hostinger.vn

Phần mềm và thư viện

Kiểm tra các thư viện và phần cứng

Sau khi chuẩn bị bạn cần kiểm tra để tránh các lỗi vô duyên kiểu code đúng mà chương trình chạy sai

Đầu tiên mình sẻ kiểm tra con DHT11 trước 

Để kiểm tra bạn lắp theo sơ đồ như đây

Chân DATA sẽ nối với điện trở 10k (còn gọi là pulse resistor)

Kết quả hình ảnh cho DHT11 arduino

Mình sẽ gửi code của chương trình đó luôn bạn chỉ cần biết sơ sơ về lập trình arduino hoặc c cũng hiểu nên mình không giải thích nhiều

#include "DHT.h"

#include <Adafruit_Sensor.h>

#define DHTPIN 2

#define DHTTYPE DHT11 // DHT 11

DHT dht(DHTPIN, DHTTYPE);

void setup()
{
    Serial.begin(9600);
    Serial.println("DHTxx test!");

    dht.begin();
}

void loop()
{
    delay(2000);

    float h = dht.readHumidity();
    float t = dht.readTemperature();
    float f = dht.readTemperature(true);

    if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
    }

    float hif = dht.computeHeatIndex(f, h);
    float hic = dht.computeHeatIndex(t, h, false);

    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.print(" *C ");
    Serial.print(f);
    Serial.print(" *F\t");
    Serial.print("Heat index: ");
    Serial.print(hic);
    Serial.print(" *C ");
    Serial.print(hif);
    Serial.println(" *F");
}

Dựa theo code mẫu của DHT Master Library

https://github.com/adafruit/DHT-sensor-library

Nếu chạy đúng thì chương trình sẽ không lỗi và hiện ra được thông tin thời tiết

Tiếp đến là kiểm tra Ethernet shield

Ethernet shield rất dễ sử dụng bạn chỉ cần chồng nó lên và gắm dây mạng vào là được

Code Ethernet shield tích hợp sẵn trong Arduino IDE hoạt động chính xác rồi cho nên bạn chỉ cần vào 

File > Examples> Ethernet > WebClient (trong bài viết Arduino sẽ ở vai trò là một web client để gửi GET_ReQUEST)

Và nếu đoạn mã bạn chạy ra như vậy thì bạn đã xong bước 2 để chắc chắn các module này hoặc động tốt

Xây dựng CSDL MySQL và web PHP

Phần này mình sẽ cho các bạn một source để tham khảo dĩ nhiên source này vẫn hoạt động được trên cả môi trường LAN và Internet

Mình đã kiểm tra rồi còn source chính thức của mình sẽ có Javascript và quản lý người dùng và các trạm trữ liệu (Sau khi hoàn thiện mình sẽ up lên sau)

https://drive.google.com/open?id=0B_LM5BFqCr-OZXRYY1ViQlo5S28 (mirror)

Đây là source web tham khảo

Mình sẽ giải thích về code

Mục đich trong Arduino bạn sẽ khai báo đường dẫn của tập tin add.php trên web server kèm theo là 2 $_POST Parameter là temp1 hum1. Trên CSDL sẽ có 2 cột là temperature, humidity để lưu dữ liệu từ cảm biến một cột là ID khóa chính và một cột thời gian để ghi lại thời gian nhận cho nên với CSDL bạn sẽ có được dự liệu theo thời gian thực của SERVER không lệ thuộc vào các node nên không cần module thời gian thực

Và đây là kết quả

Kết quả hình ảnh cho arduino dht11 ethernet shield

Cấu trúc bảng dữ liệu SQL

Tên bảng: tempLog

temperature: float

humidity: float

id: int(11)

timeStamp: timestamp(CURRENT_TIMESTAMP)

Cấu trúc đường dẫn

địa chỉ host>/add.php/?temp1=<nhiệt độ>&hum1=<độ ẩm>

Bạn có thể nhập vào trình duyệt web thí dụ 127.0.0.1/temp1=34&hum1=56 nếu dữ liệu cập nhập đúng thi bạn đã xong bước 3

Sau các bước trên bạn sẽ tiến hành upload Web lên host để hoàn thành phần này (bạn nào gặp khó khăn chỗ này thì liên hệ với mình hoặc để lại comment nhé nhất là những bạn không rành món lâp trình web)

Viết chương trình gửi dữ liệu cho Arduino

Đây là code mình tham khảo tại trang này

http://arduinotronics.blogspot.com/2015/12/sending-sensor-data-to-web-server.html

Nó cũng rất dễ hiểu

#include <DHT.h>
#include <Ethernet.h>
#include <SPI.h>

byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 }; // Cái này bạn không cần thay đổi tuy nhiên một số Ethernet Shield có địa chỉ trên board thì bạn nên nhập số đó EthernetClient client;

#define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE);

long previousMillis = 0;
unsigned long currentMillis = 0;
long interval = 250000; // READING INTERVAL

int t = 0; // TEMPERATURE VAR int h = 0; // HUMIDITY VAR String data;

void setup()
{
    Serial.begin(115200);

    if (Ethernet.begin(mac) == 0) {
        Serial.println("Failed to configure Ethernet using DHCP");
    }

    dht.begin();
    delay(10000); // GIVE THE SENSOR SOME TIME TO START

    h = (int)dht.readHumidity();
    t = (int)dht.readTemperature();

    data = "";
}

void loop()
{

    currentMillis = millis();
    if (currentMillis - previousMillis > interval) { // READ ONLY ONCE PER INTERVAL previousMillis = currentMillis; h = (int) dht.readHumidity(); t = (int) dht.readTemperature(); }

        data = "temp1=";

        data.concat(t);

        data.concat("&hum1=");

        data.concat(h);

        if (client.connect("www.xxxxxx.com", 80)) { //Thay địa chỉ host vào đây client.println("POST /add.php HTTP/1.1"); client.println("Host: xxxxxx.com"); // SERVER ADDRESS HERE TOO client.println("Content-Type: application/x-www-form-urlencoded"); client.print("Content-Length: "); client.println(data.length()); client.println(); client.print(data); }

            if (client.connected()) {
                client.stop();
            }

            delay(300000);
        }
    }
}

Đây là kết quả sau khi hoàn thành khi xem trên Serial

Bước này xong bạn lên web kiểm tra sẽ thấy dữ liêu bạn đã được cập nhật rồi

Vì phần này đòi hỏi khá nhiều kiến thức bản thân mình lần đầu làm cũng không phải thuận lợi lắm nhất là mình test trên nhiều host khác nhau để chọn ra được host tốt nhất, nếu có vấn đề khó khăn bạn có thể để comment để mình hướng dẫn phần đó

lên
15 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Bộ điều tốc và kiểm tra động cơ BLDC của máy photocopy

Mình thấy hiện tại có một số bạn trên diễn đàn khác có hỏi về cách điều khiển động cơ BLDC mà các bạn gom đc từ các máy photocopy mà không biết điều khiển như thế nào vậy hôm nay mình sẽ hướng dẫn một bài ngắn cho các bạn nhé

lên
13 thành viên đã đánh giá bài viết này hữu ích.