ตัวอย่างโค้ดเครื่องรดน้ำผักอัตโนมัติ
// 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(); }
|