โครงงานเครื่องรดน้ำผักอัตโนมัติ
                                                                                                                                                                                ตัวอย่างโค้ดเครื่องรดน้ำผักอัตโนมัติ

//  Thanapat Polruksa              //
//  RMUTT COMPUTER SCIENCE         //
//  ARDUINO UNO+ESP-01 WIFI-MODULE //
//  V 1.0                          //
#include
SoftwareSerial esp8266(7, 6);
//vvvvvvvvvvvvvvvvvvvvvvvvvvvvv ประกาศตัวแปรโค้ดรดน้ำ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
#include
DS3231  rtc(SDA, SCL);
Time  t;
//---------------------------------------------------// ความชื้น
int  Moisture = 0;
//---------------------------------------------------//ประกาศ รีเลย์
int Water1 = 2;
int Water2 = 3;
int Pump =4;
int Fertilizer = 5;
int T = 0;
int Mins = 0;
int DaySystem;
int UserWater =0;
int UserFertilizer = 0;
int TimeWatering = 0;
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ สิ้นสุดประกาศตัวแปรโค้ดรดน้ำ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);       // Boudrate of Serial Setup to 9600
  esp8266.begin(9600);      //Boudrate of Esp8266 Setup to 9600
//  rtc.setDOW();     // Set Day-of-Week to SUNDAY
//  rtc.setTime(20, 59, 50);     //set the time to 12:00:00 (24hr format)
//  rtc.setDate(3, 7, 2018);   // Set the date to January 1st, 2014
  rtc.begin();
  //vvvvvvvvvvvvvvvvvvvvvvvvvvvvv ประกาศขาโค้ดรดรดน้ำ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
   Serial.begin(9600);
    rtc.begin();
  //----------------------------------------------
  pinMode(Water1,OUTPUT);
  pinMode(Water2,OUTPUT);
  pinMode(Fertilizer,OUTPUT);
  pinMode(Pump,OUTPUT);
  //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ สิ้นสุดประกาศขาโค้ดรดรดน้ำ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
void loop() {

  //  ConfigurationESP01();
    //delay(60000);

        ThinkSpeakSetup();                      //function for setup thinkspeak. it's scroll down for configuration.
        delay(300);                             //delay 300 ms not 3 second

//vvvvvvvvvvvvvvvvvvvvvvvvvvvvv โค้ดรดรดน้ำvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//---------------------------------------------เวลา
  t = rtc.getTime();
  Serial.print("Today");
  Serial.print(" ");
  Serial.print(t.date, DEC);            // สำหรับดึงค่าวันที่
  DaySystem=t.date, DEC;
  Serial.print(" ");
  Serial.print(rtc.getMonthStr());      // สำหรับดึงค่าเดือน
  Serial.print(" ");
  Serial.print(t.year, DEC);            // สำหรับดึงค่าปี
  Serial.println(".");
  Serial.print("Time : ");
  Serial.print(t.hour, DEC);            // สำหรับดึงค่าเวลาเป็นชั่วโมง
  T = t.hour, DEC;
  Serial.print(" :");
  Serial.print(t.min, DEC); 
  Mins = t.min, DEC;// สำหรับดึงค่าเวลาเป็นนาที
  Serial.print(" : ");
  Serial.println(t.sec, DEC);             // สำหรับดึงค่าเวลาเป็นวินาที
  
  //----------------------------------------------------------------------อ่านค่าความชื้น
  unsigned char  i;
   Moisture = 0; 
   for(i=0;i<10;i++){Moisture = Moisture + analogRead(0);delay(1);}
   Moisture = Moisture / 10; 
   if(Moisture >= 530){Moisture = ((Moisture - 550)/15) + 90;}else
   if(Moisture >= 430){Moisture = ((Moisture - 450)/10) + 80;}else
   if(Moisture >= 130){Moisture = ((Moisture - 130)/6) + 30;}else
   if(Moisture >=   0){Moisture = ((Moisture)/5);}   
   if(Moisture > 100){Moisture = 100;}
   if(Moisture >=50 && Moisture <= 100)
  {

    Serial.print("ความแห้งของดิน: ");
    Serial.print(Moisture);
    Serial.println('%');
  }
  else 
  {
    Serial.print("ความแห้งของดิน: ");
    Serial.print(Moisture);
    Serial.println('%');
    
  }


// รับค่าจากแอพ
if(T >9 ){   //ตั้งเวลา
 TimeWatering =1;
  Serial.println("ถึงชั่วโมงเหมาะสมกับการรดน้ำ");
}
else{  TimeWatering =0;
  Serial.println("ยังไม่ถึงชั่วโมงเหมาะสมกับการรดน้ำ");}
//--------------------------------------------------------
if( TimeWatering == 1 &&  Moisture >= 50  /*&& Mins < 30*/ &&  UserWater == 1){  //เงื่อนไขการเปิดระบบรดน้ำ
  digitalWrite(Water1,HIGH);
  digitalWrite(Water2,HIGH);
  digitalWrite(Pump,HIGH);
  Serial.println("ระบบกำลังรดน้ำ");
 }
 else if(UserWater == 0 && Moisture > 95){  //เงื่อนไขการเปิดระบบรดน้ำ
  digitalWrite(Water1,HIGH);
  digitalWrite(Water2,HIGH);
  digitalWrite(Pump,HIGH);
  Serial.println("ระบบกำลังรดน้ำฉุกเฉิน");
  
 }

 else {       //เงื่อนไขการปิดระบบรดน้ำ 
  digitalWrite(Water1,LOW);
  digitalWrite(Water2,LOW);
  digitalWrite(Pump,LOW);
  Serial.println("ระบบกำลังไม่รดน้ำ");
 }
 //--------------------------------------------------
if( TimeWatering == 1 &&  Moisture >= 50 /*&& Mins < 30*/ && UserFertilizer == 1 ){    //เงื่อนไขการเปิดระบบปุ๋ย
  digitalWrite(Fertilizer,HIGH);
  Serial.println("ระบบกำลังใส่ปุ๋ย");
 }

else {        //เงื่อนไขการปิดระบบรดน้ำ
  digitalWrite(Fertilizer,LOW);
 Serial.println("ระบบกำลังไม่ใส่ปุ๋ย");
 }

 delay(1000);
     Serial.println("  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -");
  //^^^^^^^^^^^^^^^^^^^^^^^^^ สิ้นสุดโค้ดรดน้ำ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void ThinkSpeakSetup() {
  esp8266.println("AT+CIPSTART="TCP","184.106.153.149",80");
  delay(100);
  esp8266.println("AT+CIPSEND=36");
  delay(100);
  esp8266.println("GET /channels/454954/fields/1/last");
  delay(100);
  printResponseThinkSpeak();
  
//  esp8266.println("AT+CIPSTART="TCP","184.106.153.149",80");
//  delay(100);
//  esp8266.println("AT+CIPSEND=36");
//  delay(100);
//  esp8266.println("GET /channels/443297/fields/2/last");
//  delay(100);
//  printResponseThinkSpeak();
}
void printResponseThinkSpeak() {
  
  while (esp8266.available()) {               // loop while for esp8266 available is true only
    //  Serial.println(esp8266.readStringUntil('n'));
    String IncomingString = "";
    boolean StringReady = false;

    IncomingString = esp8266.readString();
    StringReady = true;

    if (StringReady) {
        String TimeDetect = rtc.getTimeStr();
    
        Serial.println(TimeDetect);     
      //      Serial.println("ServerThingSpeak: " + IncomingString);        //print server port specification ที่กำหนดไว้

      //-------------------------------This is Configuration for Sensor.-----------------------------------------------//
      if (IncomingString.indexOf("one") != -1) {
        UserWater =1;
        UserFertilizer = 1 ;
        Serial.println("วันนี้ผู้ใช้สั่งรดน้ำ และ ใส่ปุ๋ย");
      } else if (IncomingString.indexOf("two") != -1) {
         UserWater =1;
        UserFertilizer = 0 ;
        Serial.println("วันนี้ผู้ใช้สั่งรดน้ำ และ ไม่ใส่ปุ๋ย ");
      } else if (IncomingString.indexOf("three") != -1) {
        UserWater =0;
        UserFertilizer = 0 ;
        Serial.println("วันนี้ผู้ใช้ไม่สั่งรดน้ำ");
      }
    }
  }
}

void printResponseESP01() {
  while (esp8266.available()) {
    Serial.println(esp8266.readStringUntil('n'));
  }
}
void ConfigurationESP01() {

  esp8266.println("AT");
  delay(1000);
  printResponseESP01();
  
  esp8266.println("AT+CWMODE=1");
  delay(1000);
  printResponseESP01();
  
  esp8266.println("AT+CWJAP="Kob555","1234567890"");
  delay(1000);
  printResponseESP01();
  delay(5000);
  esp8266.println("AT+CIPMUX=0");
  delay(1000);
  printResponseESP01();   }