Chat
Danh mục
Hệ thống Thủy canh thông minh

Hệ thống Thủy canh thông minh

Số lượng:
Thêm vào giỏ
Hệ thống Thủy canh thông minh đã được thêm vào giỏ hàng


1. Nguyên liệu cần chuẩn bị:


Code chương trình Arduino:

#include <ESP8266WiFi.h>     //khai báo thư viện ESP8266

#include <WiFiClient.h>;  //khai báo thư viện server

#include <BlynkSimpleEsp8266.h> //khai báo thư viện blynk

#include <DHT.h>   ////khai báo thư viện cảm biến DHT

#include <Wire.h> //khai báo thư viện I2C

#include <LiquidCrystal_I2C.h> //khai báo thư viện LCD

#include <DS1307.h>  //khai báo thư viện đồng hồ thơi gian thực DS1307

#define BLYNK_PRINT Serial   

#define phao 2 // D4   //khai báo thư viện chân I/O

#define relay 16 // D0

#define coi 14 // D5

#define DHTPIN 12  // D6 

#define PHSensor A0

#define datsensor 13 // D7

LiquidCrystal_I2C lcd(0x3f,16,2); //khai báo địa chỉ I2C cho LCD

 

DS1307 rtc;  // Khai báo DS1307 rtc

int bom,chedo;   // Khai báo các biến sử dụng trong code

float PH;

int doamdat;

int doamdat1;

char auth[] = "dPj40fO07oAE2mXU5En3s0RePhefWYLz";  // Khai báo wifi va mã auth của blynk

char ssid[] = "vanhanh";

char pass[] = "vanhanh123";

WiFiClient client;   // Khai báo server

WiFiServer server(80);

String header;

String State = "tat";

int outbom1 = 0;

int outbom2 = 0;

 

#define DHTTYPE DHT11    

DHT dht(DHTPIN, DHTTYPE); // Khai báo cấu hình DHT11

int h,t;  // Khai báo các biến sử dụng

int timer1,timer2;

unsigned long time1 = 0;

unsigned long time2 = 0;

BlynkTimer timer;

WidgetLED led (V5);  // Khai báo led Virtual

WidgetLED led1 (V8);

BLYNK_WRITE(V3) // Khai báo nút nhấn diều khiển bơm trên app

{

  bom = param.asInt();

 

}

BLYNK_WRITE(V6) // Khai báo nút điều khiển chế độ trên app

{

  chedo = param.asInt();

 

}

 

 BLYNK_WRITE(V10) // Khai báo hẹn giờ trên app

{

  timer1 =param.asInt();

  Serial.print("Got a value: ");

  Serial.println(param.asStr());

}

 

BLYNK_WRITE(V11) // Khai báo hẹn giờ trên app

{

  timer2 = param.asInt();

  Serial.print("Got a value: ");

  Serial.println(param.asStr());

}

unsigned long int avgValue; 

float b;

int buf[10],temp;

 

void hienthi(){       // chương trình con hiển thì thời gian, ngày tháng

 uint8_t sec, min, hour, day, month; // Khai báo các biến thời gian 8bit

 uint16_t year;

 

  rtc.get( &sec, &min, &hour, &day, &month, &year);

  lcd.setCursor(0,0);       // chỉnh vị trí con trỏ

  lcd.print(hour/10, DEC);  // hiển thị thời gian lên LCD

  lcd.setCursor(1,0);

  lcd.print(hour%10, DEC);

 

  lcd.setCursor(3,0);

  lcd.print(min/10, DEC);

  lcd.setCursor(4,0);

  lcd.print(min%10, DEC);

 

  lcd.setCursor(6,0);

  lcd.print(sec/10, DEC);

  lcd.setCursor(7,0);

  lcd.print(sec%10, DEC);

 

  lcd.setCursor(1,1);

  lcd.print(day/10, DEC);

  lcd.setCursor(2,1);

  lcd.print(day%10, DEC);

 

  lcd.setCursor(4,1);

  lcd.print(month/10, DEC);

  lcd.setCursor(5,1);

  lcd.print(month%10, DEC);

 

   

 }

 

 

void cambienPH(){      // chương trình lấy mẫu độ PH

  for(int i=0;i<10;i++)       //lấy mẫu của 10 lần

  {

    buf[i]=analogRead(PHSensor);

    delay(10);

  }

  for(int i=0;i<9;i++)        //sắp xếp giá trị từ nhỏ đến lớn

  {

    for(int j=i+1;j<10;j++)

    {

      if(buf[i]>buf[j])

      {

        temp=buf[i];

        buf[i]=buf[j];

        buf[j]=temp;

      }

    }

  }

  avgValue=0;

  for(int i=2;i<8;i++)                      //Lấy số trung bình của 6 lần đo

    avgValue+=buf[i];

  float phValue=(float)avgValue*5.0/1024/6;           //Chuyển từ Analog sang milivol

  PH=3.5*phValue;                      //Chuyển Milivol sang độ PH

  lcd.setCursor(11,1); //  vị trí con trỏ hàng 10, cột 2

  lcd.print(PH,1); // in giá trị PH lên màn hình

 

}

void mucnuoc(){   // Chương trình con đo mực nước

    if(digitalRead(phao)==1){      // khi mực nước thấp

    digitalWrite(coi,1);

    }

  else {      // khi mực nước bình thường

    digitalWrite(coi,0); 

    }

 

 

 

  }

 

void bangtay(){  // chương trình điều khiển bằng tay

 

   

  if (bom==1 ){

    digitalWrite(relay,1);led.on(); // led on trên app bật

    lcd.setCursor(11,0);

    lcd.print("ON ");  // Hiển thị lên LCD trạng thái bơm

    } 

  else if (bom==0 ){

    digitalWrite(relay,0);led.off(); // led on trên app tắt

    lcd.setCursor(11,0);

    lcd.print("OFF");}

 

  }

 

 

void setup() 

{

Serial.begin(115200);  // cấu hình tốc độ baud

lcd.init();  // khởi tạo thư viên LCD

lcd.backlight();  // bật đèn nền LCD

WiFi.begin(ssid, pass); // khởi tạo kết nối wifi

server.begin(); // khởi tạo địa chỉ server

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

pinMode(coi,OUTPUT); // cấu hình chức năng chân I/O

pinMode(relay,OUTPUT);

pinMode(phao,INPUT_PULLUP);

pinMode(datsensor,INPUT_PULLUP);

digitalWrite(coi,0);   // tắt còi báo

digitalWrite(relay,1); // tắt relay

Blynk.begin(auth, ssid, pass); // khởi tạo Blynk

dht.begin();  // khởi tạo DHT 11

//rtc.set( 0, 41, 22, 22, 3, 2020); //08:00:00 24.12.2014 //sec, min, hour, day, month, year

rtc.start(); // khởi tạo chương trình thời gian thật

lcd.setCursor(0, 0);  // điều chỉnh vị trí con trỏ

lcd.print("De tai: He thong");  // in kí tự ra màn hình

lcd.setCursor(0, 1);

lcd.print("   thuy canh    ");

delay(5000);

lcd.setCursor(0, 0);

lcd.print("Nguyen Van Hanh ");

lcd.setCursor(0, 1);

lcd.print("Mssv: 2202180015");

delay(5000);

lcd.clear();

lcd.setCursor(0, 0);

lcd.print("   IP address:  ");  // in địa chỉ IP ra màn hình

lcd.setCursor(2, 1);

lcd.print(WiFi.localIP());

delay(4000);

lcd.clear();

lcd.setCursor(0,0);

lcd.print("  :  :     Off  ");

lcd.setCursor(0,1);

lcd.print("   /   PH:      ");

timer.setInterval(2000L, sendSensor); // gửi data len blynk 2s 1 lần

}

void webserver(){  // chương trình webserver

WiFiClient client = server.available();   // kiểm tra trạng thái server

  if (client) {                            

    Serial.println("New Client.");         

    String currentLine = "";               

    while (client.connected()) {           

      if (client.available()) { 

        char c = client.read();         

        Serial.write(c);                  

        header += c;

        if (c == '\n') {                  

          if (currentLine.length() == 0) {  // tạo giao diện webserver qua chuẩn HTTP

            client.println("HTTP/1.1 200 OK");

            client.println("Content-type:text/html");

            client.println("Connection: close");

            client.println();

            client.println("<!DOCTYPE html><html>");

            client.println("<meta charset=\"utf-8\">");

            client.println("<head>");

            client.println("<title>Hệ thống thủy canh thông minh</title>");

            client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");

            client.println("<meta http-equiv=\"refresh\" content=\"60\" />");

            client.println("<script src=\"https://code.jquery.com/jquery-2.1.3.min.js\"></script>");

            client.println("<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css\">");

            client.println("<style>body{font-size: 24px;} .voffset {margin-top: 30px;}</style>");

            client.println("<div class=\"container\">");

            client.println("<p><b>Nguyễn Văn Hạnh </b></p>");

            client.println("<p><b>MSSV:2202180015 </b></p>");

            client.println("<p><b>Lớp:08DHLDT_CT </p>");

            client.println("<p><b>Trường đại học Công Nghiệp Thực Phẩm </b></p>");

            client.println("<h1><font color=#dd0000 size= \"15\">Hệ thống thủy canh thông minh</font></h1>");

            client.println("<div class=\"row voffset\">");

            client.println("<div class=\"col-md-3\"><font color=#00cc33 size=\"5\">Nhiệt độ</font> : </div><div class=\"col-md-3\">" + String(t) + String("&degC") +"</div>");

            client.println("<div class=\"col-md-3\"><font color=#00cc33 size=\"5\">Độ ẩm không khí</font>: </div><div class=\"col-md-3\">" + String(h)+ String("%") +"</div>");

            client.println("<div class=\"col-md-3\"><font color=#00cc33 size=\"5\">Độ PH </font>: </div><div class=\"col-md-3\">" + String(PH)+ "</div>");

            client.println("<div class=\"col-md-3\"><font color=#00cc33 size=\"5\">Độ ẩm đất</font>: </div><div class=\"col-md-3\">" + String(doamdat1) + String("%") +"</div>");

            client.println("</div>");

            client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");

            client.println("<link rel=\"icon\" href=\"data:,\">");

            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");

            client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");

            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");

            client.println(".button2 {background-color: #77878A;}</style>");

            client.println("</script>");

            client.println("</head>");

           

            // The HTTP response ends with another blank line

            client.println();

            // Break out of the while loop

            break;

          } else { // if you got a newline, then clear currentLine

            currentLine = "";

          }

        } else if (c != '\r') {  // if you got anything else but a carriage return character,

          currentLine += c;      // add it to the end of the currentLine

        }

      }

    }

    header = "";

    client.stop();

  }

  }

 

 

void loop()   // Chương trình chính

 

  if(chedo==0){  // nếu chế độ là tự động

    mucnuoc();  // các chương trình con

    hienthi();

    cambienPH();

    webserver();

    Blynk.run();

    timer.run();

    if((digitalRead(datsensor)== 1)){ // kiểm tra độ ẩm đất

     digitalWrite(relay,1);led.on();

    lcd.setCursor(11,0);

    lcd.print("ON ");

    Blynk.notify("Do am dat< 30%, ban can cung cap them duong chat !"); // hiển thị thông báo lên Blynk

     }

    else if((timer1==1 )|| (timer2== 1)){ // hẹn giờ trên blynk

     digitalWrite(relay,1);led.on();

    lcd.setCursor(11,0);

    lcd.print("ON ");

     }

    else if(digitalRead(datsensor)== 0 && (timer1==0 ) && (timer2== 0)){

     digitalWrite(relay,0);led.off();

     lcd.setCursor(11,0);

     lcd.print("OFF");

    }}

   

else {  // nếu chế độ là bằng tay

     

     mucnuoc(); 

     hienthi();

     cambienPH();

     webserver();

     Blynk.run();

     timer.run();

        

 

   if((bom==1 )||(timer1==1 )|| (timer2== 1)){ // hẹn giờ trên app blynk

    digitalWrite(relay,1);led.on();

    lcd.setCursor(11,0);

    lcd.print("ON ");

     }

   else if( (bom==0 )||((timer1==0 ) && (timer2== 0))){

     digitalWrite(relay,0);led.off();

     lcd.setCursor(11,0);

     lcd.print("OFF");

    

     }}

    

}

 

 

void sendSensor(){  // chương trình con đọc cảm biến DHT11 và độ ẩm đất lên app blynk

  h = dht.readHumidity();

  t = dht.readTemperature();

  doamdat= digitalRead(datsensor);

  if(doamdat==1){

    doamdat1=15;

    }

  if(doamdat==0){

    doamdat1=75;

    }

  Blynk.virtualWrite(V1, h);  // gửi dữ liệu lên Blynk qua các Virtual

  Blynk.virtualWrite(V0, t);

  Blynk.virtualWrite(V2, PH);

 Blynk.virtualWrite(V9, doamdat1);

}


( Nguyên lý + Code chuẩn) Link Mediafire
Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút  hiện ra ở góc phải phía trên, nhấn vào để đến trang download
------------------------------------------------------------------------------------
DV1 - NHẬN VẼ MẠCH - LẬP TRÌNH 8051/ARDUINO/STM LẤY TRONG NGÀY 

BẤM XEM CÁCH ĐẶT HÀNG TẠI ĐÂY




-----------------------------------------------------------------------------------

DV2 - Mua linh kiện về làm mạch nhanh - Miễn phí Ship





DV3 - Kênh youtube chia sẻ kiến thức điện tử thực hành ngay


DV4 - Kênh cộng đồng Facebook Điện Tử ChipKool




CÔNG TY ECHIPKOOL - UY TÍN - CHẤT LƯỢNG - NHANH CHÓNG - BẢO MẬT