Tải bản đầy đủ - 0 (trang)
CHƯƠNG III: THI CÔNG HỆ THỐNG

CHƯƠNG III: THI CÔNG HỆ THỐNG

Tải bản đầy đủ - 0trang

52



3.2 Thiết kế phần mềm

3.2.1 Lưu đồ thuật tốn



Hình 3.2: Lưu đồ thuật tốn

3.2.2 Chương trình điều khiển

#define BLYNK_PRINT Serial



53



#include

#include

#include

#include

LiquidCrystal_I2C lcd(0x27,16,4);

#include "DHT.h"

/* TIMER */

#include

#define DHTPIN D3



// Chân DATA nối với D3



#define SOIL_MOIST_1_PIN A0 // Chân PE4 nối với cảm biến độ ẩm

// Relay, nút nhấn

#define PUMP_PIN D6 //Bom

// Uncomment loại cảm biến bạn sử dụng, nếu DHT11 thì uncomment DHT11 và

comment DHT22

#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

/* Thông số cho chế độ tự động */

#define DRY_SOIL



70



#define WET_SOIL



90



#define COLD_TEMP

#define HOT_TEMP



20

35



54



#define TIME_PUMP_ON 60

#define TIME_LAMP_ON 60



/* TIMER */

#define READ_SOIL_HUM_TM 10L //Đọc cảm biến ẩm đất 10s đọc 1 lần

#define READ_AIR_DATA_TM 5L //Đọc DHT 5s 1 lần

#define DISPLAY_DATA_TM 10L //Gửi dữ liệu lên terminal 10s

#define SEND_UP_DATA_TM 10L //Gửi dữ liệu lên blynk 10s

#define AUTO_CTRL_TM



60L //Chế độ tư động 1 phút



//Token Blynk và wifi

char auth[] = "0f9e0c56d7e641ab9ebccf04aed95279"; // Blynk token

char ssid[] = "fpt Telecom"; //Tên wifi

char pass[] = "trang95TB"; //Mật khẩu

const char* server = "api.thingspeak.com";

String apiKey = "1ZXJGH6KRLZN6YP2";

// Biến lưu các giá trị cảm biến

float humDHT = 0;

float tempDHT = 0;

//int lumen;



55



int soilMoist = 0;

// Biến lưu trạng thái bơm

boolean pumpStatus = 0;

int timePumpOn = 10; // Thời gian bật bơm nước

// Biến cho timer

long sampleTimingSeconds = 10; // ==> Thời gian đọc cảm biến (s)

long startTiming = 0;

long elapsedTime = 0;

// Khởi tạo timer

SimpleTimer timer;

// Khởi tạo cảm biến

DHT dht(DHTPIN, DHTTYPE);

WiFiClient client;

void setup() {

lcd.init();

lcd.backlight();

lcd.setCursor(0,0);

lcd.print("DO AN TOT NGHIEP");

lcd.setCursor(0,2);

lcd.print("D:");



56



lcd.setCursor(6,2);

lcd.print("T: ");

lcd.setCursor(0,1);

lcd.print("do am dat:");

lcd.setCursor(0,3);

lcd.print("B:");

//////

pinMode(PUMP_PIN, OUTPUT);

aplyCmd();

showDataLCD();

// Khởi tạo cổng serial baud 115200//

Serial.begin(115200);

delay(2000);

dht.begin(); // Bắt đầu đọc dữ liệu

Blynk.begin(auth, ssid, pass);

WiFi.begin(ssid, pass);

startTimers();

}

void loop() {

timer.run(); // Bắt đầu SimpleTimer



57



Blynk.run();

if (client.connect(server, 80)) { //server thingspeak là "184.106.153.149" hoặc

api.thingspeak.com

// Gửi dữ liệu lên thingspeak ở field1 và field2

String postStr = apiKey;

postStr += "&field3=";

postStr += String(tempDHT);

postStr += "&field2=";

postStr += String(humDHT);

postStr += "&field1=";

postStr += String(soilMoist);

postStr += "\r\n\r\n";



client.print("POST /update HTTP/1.1\n");

client.print("Host: api.thingspeak.com\n");

client.print("Connection: close\n");

client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");

client.print("Content-Type: application/x-www-form-urlencoded\n");

client.print("Content-Length: ");

client.print(postStr.length());



58



client.print("\n\n");

client.print(postStr);



Serial.print("Temperature: ");

Serial.print(t);

Serial.print(" oC Humidity: ");

Serial.print(h);

Serial.println("% send to Thingspeak");

}

client.stop();



Serial.println("Waiting…");

// Đợi 20s rồi gửi tiếp dữ liệu

delay(20000);

}

/****************************************************************

* Hàm điều khiển nhận tín hiệu từ blynk

****************************************************************/

BLYNK_WRITE(3) // Điều khiển bơm

{



59



int i = param.asInt();

if (i == 1)

{

pumpStatus = !pumpStatus;

aplyCmd();

}

}

void getSoilMoist(void)

{

int i = 0;

soilMoist = 0;

for (i = 0; i < 10; i++) //

{

soilMoist += analogRead(SOIL_MOIST_1_PIN); //Đọc giá trị cảm biến độ ẩm đất

delay(50); // Đợi đọc giá trị ADC

}

soilMoist = soilMoist / (i);

soilMoist = map(soilMoist, 4095, 0, 0, 100); //Ít nước:0% ==> Nhiều nước 100%

}

void showDataLCD(void)



60



{

lcd.setCursor(10,1);

lcd.print(soilMoist);

lcd.print("%");

lcd.setCursor(3,2);

lcd.print(humDHT);

lcd.print("%");

lcd.setCursor(10,2);

lcd.print(tempDHT);

lcd.print("C");

lcd.setCursor (3,3);

lcd.print(pumpStatus);

}

void getDhtData(void)

{

tempDHT = dht.readTemperature();

humDHT = dht.readHumidity();

if (isnan(humDHT) || isnan(tempDHT)) // Kiểm tra kết nối lỗi thì thơng báo.

{

Serial.println("Failed to read from DHT sensor!");



61



return;

}

}

void printData(void)

{

// IN thông tin ra màn hình

Serial.print("Do am: ");

Serial.print(humDHT);

Serial.print(" %\t");

Serial.print("Nhiet do: ");

Serial.print(tempDHT);

Serial.print(" *C\t");

Serial.print(" %\t");

Serial.print("Do am dat: ");

Serial.print(soilMoist);

Serial.println(" %");

}

/***************************************************

Thực hiện điều khiển các bơm

****************************************************/



62



void aplyCmd()

{

if (pumpStatus == 1)

{

Blynk.notify("NDTRBOT: Canh bao ==>> BOM ON");

digitalWrite(PUMP_PIN, LOW);

}

}

/***************************************************

* Chế độ tự động dựa trên thông số cảm biến

****************************************************/

void autoControlPlantation(void)

{

if (soilMoist < DRY_SOIL)

{

turnPumpOn();

}



if (tempDHT > HOT_TEMP && humDHT < DRY_SOIL)

{



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

CHƯƠNG III: THI CÔNG HỆ THỐNG

Tải bản đầy đủ ngay(0 tr)

×