أخر الاخبار

كود أردوينو كامل (ج4) للتحكم الذكي في مستودع هيدروبونيك زراعة أسماك نباتات


كود أردوينو كامل للتحكم الذكي في مستودع هيدروبونيك زراعة أسماك نباتات الجزء الرابع (4)

(شرح الكود / شرح لقسم void loop / الجزء "أ" )

Arduino-code-farme-hydroponic-control

===========

كود أردوينو كامل للتحكم الذكي في مستودع هيدروبونيك (زراعة أسماك نباتات او ورقيات...) بالكامل مجرب لن تحتاج لأيدي عاملة به تقريبا إلا للأعمال الروتينية والتفقدات...  ونظرا لأن الموضوع طويل فقد تم تقسيمه لسبعة أجزاء وهذا هو الجزء الرابع سنتعرف فيه على شرح لقسم void loop / الجزء "أ"...




الكود مع الشرح / شرح لقسم void loop / الجزء "أ"

  

===========================================

void loop() {

 

//========================= MODE AUTOMATIC ======================

//===============================================================

//===============================================================

            تشغيل لاد الوضع الأوتوماتيكي والبقاء فيه اذا كان السويتش في الوضع الاوتوماتيكي...

 if (digitalRead(B_auto) == HIGH){

     digitalWrite(Led_auto, HIGH);

 

     lcd2.setCursor(0, 3);

     lcd2.print("At");

    

     strcpy (RemoteXY.text_At, "At");

     RemoteXY.led_Auto_g = 255;

     RemoteXY.led_Man_r = 0;

 

//الريموت XY  3

     RemoteXY_Handler ();

     digitalWrite(PIN_SWITCH_1, (RemoteXY.switch_1==0)?LOW:HIGH);

     digitalWrite(PIN_SWITCH_10, (RemoteXY.switch_10==0)?LOW:HIGH);

     digitalWrite(PIN_SWITCH_2, (RemoteXY.switch_2==0)?LOW:HIGH);

     digitalWrite(PIN_SWITCH_3, (RemoteXY.switch_3==0)?LOW:HIGH);  

 

//تعاريف الساعة2

     Time T;

     T = rtc.getTime();

     Hor = T.hour;

     Min = T.min;

     Sec = T.sec;

     Jour = T.date;

     Mois = T.mon;

     Annee = T.year;

//عرض الوقت والتاريخ

     lcd1.setCursor(0, 0);

     lcd1.print(rtc.getTimeStr());

     lcd1.setCursor(9, 0);

     lcd1.print(rtc.getDateStr());

     dtostrf(Hor, 0, 0, RemoteXY.text_HOR);

     dtostrf(Min, 0, 0, RemoteXY.text_MIN);

     dtostrf(Sec, 0, 0, RemoteXY.text_SEC);

     dtostrf(Sec, 0, 0, RemoteXY.text_SEC0);    

     dtostrf(Jour, 0, 0, RemoteXY.text_JOUR);

     dtostrf(Mois, 0, 0, RemoteXY.text_MOIS);

     dtostrf(Annee, 0, 0, RemoteXY.text_ANNEE);

 

 

//--------------------بداية الحساسات------------------------

//حساس غاز العلبة الكهربائية

  if (millis() > time_now_Gs + period_Gs) {

     time_now_Gs = millis();

     Gs = (analogRead(sensorPin_Gs));

     Gs = map(Gs, 0, 1023, 0, 255);

     lcd2.setCursor(9, 1);

     lcd2.print("Gs   ");

     lcd2.setCursor(11, 1);

     lcd2.print(Gs);

     dtostrf(Gs, 0, 0, RemoteXY.text_Gs);}

 

//حساس غاز الداخل

  if (millis() > time_now_Gi + period_Gi) {

     time_now_Gi = millis();

     Gi = (analogRead(sensorPin_Gi));

     Gi = map(Gi, 0, 1023, 0, 255);

     lcd2.setCursor(4, 1);

     lcd2.print("Gi   ");

     lcd2.setCursor(6, 1);

     lcd2.print(Gi);

     dtostrf(Gi, 0, 0, RemoteXY.text_Gi);}

 

//  حساس الالترا

     digitalWrite(trigPin, LOW);

     delayMicroseconds(2);

     digitalWrite(trigPin, HIGH);

     delayMicroseconds(10);

     digitalWrite(trigPin, LOW);

     duration = pulseIn(echoPin, HIGH);

     distance = duration * 0.034 / 2;

if (millis() > time_now_Ult + period_Ult) {

     time_now_Ult = millis();

  if (distance < 1000) {

     lcd2.setCursor(14, 1);

     lcd2.print("U   ");

     lcd2.setCursor(15, 1);

     lcd2.print(distance);

    dtostrf(distance, 0, 0, RemoteXY.text_U);}

  else {

     lcd2.setCursor(14, 1);

     lcd2.print("U   ");

     lcd2.setCursor(15, 1);

     lcd2.print("999");

     strcpy (RemoteXY.text_U, "999");}}

 

//حساس الفلوتور مع Wt

    

//حساس الضوء D

if (millis() > time_now_d + period_d) {

     time_now_d = millis();

     D = analogRead(sensorPin_D);

     lcd2.setCursor(16, 0);

     lcd2.print("D   ");

     lcd2.setCursor(17, 0);

     lcd2.print(D);

     dtostrf(D, 0, 0, RemoteXY.text_D);}

 

//حساس مستوى الماء

if (millis() > time_now_L + period_L) {

     time_now_L = millis();

     L = analogRead(sensorPin_L);

     L = map(L, 0, 1023, 0, 10);

//  اذا كان فوق 7 فهو مملوء جدا تحت 4 ناقص    

//  جدا 0 لا ماء (هذا للماء النضيف وتقريبا للمعكر قليلا)   

     lcd2.setCursor(4, 0);

     lcd2.print("L  ");

     lcd2.setCursor(5, 0);

     lcd2.print(L);

     dtostrf(L, 0, 0, RemoteXY.text_L);}

 

//حساس ناقلية الماء

if (millis() > time_now_C + period_C) {

     time_now_C = millis();

     C = analogRead(sensor_pin_c);

     C = map(C, 670, 1023, 0, 10);

     C = constrain(C, 0, 10); //هذا لتثبيت النطاق

     //ناقلية الماء 660تقريبا اي عدد يظهر هو تلوث

     lcd2.setCursor(8, 0);

     lcd2.print("C   ");

     lcd2.setCursor(9, 0);

     lcd2.print(C);

     dtostrf(C, 0, 0, RemoteXY.text_C);}

 

//حساس الPH غير موجود

if (millis() > time_now_P + period_P) {

     time_now_P = millis();

     P=7;

     lcd2.setCursor(12, 0);

     lcd2.print("P  ");

     lcd2.setCursor(13, 0);

     lcd2.print(P);

     dtostrf(P, 0, 0, RemoteXY.text_P);}

 

//حرارة ورطوبة الداخل

      float Ti = DHTi.temperature;

      float Hi = DHTi.humidity;

if (millis() > time_now_Ti + period_Ti) {

     time_now_Ti = millis();

     int readData_i = DHTi.read11(sensorPin_Ti);

     float Ti = DHTi.temperature;

     float Hi = DHTi.humidity;

     lcd1.setCursor(0, 1);

     lcd1.print("i");

     lcd1.print(Ti, 0);

     lcd1.setCursor(3, 1);

     lcd1.print("(  )");

     lcd1.setCursor(4, 1);

     lcd1.print(Hi, 0);

     dtostrf(Ti, 0, 0, RemoteXY.text_Ti);

     dtostrf(Hi, 0, 0, RemoteXY.text_Hi);}

 

//حرارة ورطوبة الخارج

     float Tx = DHTx.temperature;

     float Hx = DHTx.humidity;

  if (millis() > time_now_Tx + period_Tx) {

     time_now_Tx = millis();

     int readData_x = DHTx.read11(sensorPin_Tx);

     float Tx = DHTx.temperature;

     float Hx = DHTx.humidity;

     lcd1.setCursor(8, 1);

     lcd1.print("x");

     lcd1.print(Tx, 0);

     lcd1.setCursor(11, 1);

     lcd1.print("(  )");

     lcd1.setCursor(12, 1);

     lcd1.print(Hx, 0);

     dtostrf(Tx, 0, 0, RemoteXY.text_Tx);

     dtostrf(Hx, 0, 0, RemoteXY.text_Hx);}

 

//حرارة الماء

if (millis() > time_now_Te + period_Te) {

     time_now_Te = millis();

     Vo = analogRead(sensorPin_Te);

     RR2 = RR1 * (1023.0 / (float)Vo - 1.0);

     logRR2 = log(RR2);

     TT = (1.0 / (c1 + c2 * logRR2 + c3 * logRR2 * logRR2 * logRR2));

     Te = TT - 273.15;

     lcd1.setCursor(16, 1);

     lcd1.print("e");

     lcd1.setCursor(17, 1);

     lcd1.print(Te, 0);

     dtostrf(Te, 0, 0, RemoteXY.text_Te);}

 

//حرارة الصندوق الكهربائي

     float Ts = DHTs.temperature;

     float Hs = DHTs.humidity;

  if (millis() > time_now_Ts + period_Ts) {

     time_now_Ts = millis();

     int readData_s = DHTs.read11(sensorPin_Ts);

     float Ts = DHTs.temperature;

     float Hs = DHTs.humidity;

     lcd2.setCursor(0, 1);

     lcd2.print("s");

     lcd2.print(Ts, 0);

     dtostrf(Ts, 0, 0, RemoteXY.text_Ts);}

 

ارسال جميع القراءات التي تظهر بلوحة عرض الصندوق الكهربائي للسيريال مونيتور

//ارسال القراءات للسيريال

if (millis() > time_now_Serial + period_Serial) {

     time_now_Serial = millis();

     Serial.println("Void loop................................");

//الشاشة1

     Serial.print(" ");

     Serial.print(Hor);

     Serial.print(":");

     Serial.print(Min);

     Serial.print(":");

     Serial.print(Sec);

     Serial.print(" ");

     Serial.print(Jour);

     Serial.print(".");

     Serial.print(Mois);

     Serial.print(".");

     Serial.println(Annee);

 

     Serial.print(" ");

     Serial.print("i");

     Serial.print(Ti,0);

     Serial.print("(");

     Serial.print(Hi,0);

     Serial.print(")");

     Serial.print(" ");

     Serial.print("x");

     Serial.print(Tx,0);

     Serial.print("(");

     Serial.print(Hx,0);

     Serial.print(")");

     Serial.print(" ");

     Serial.print("e");

     Serial.println(Te,0);

 

     Serial.print(" ");

     if (digitalRead(Li)){           

     Serial.print("Li>");}

     else{Serial.print("Li<");}                  

     Serial.print(" ");

     if (digitalRead(Lx)){           

     Serial.print("Lx>");}

     else{Serial.print("Lx<");}

     Serial.print(" ");

     if (digitalRead(Lm)){           

     Serial.print("Lm>");}

     else{Serial.print("Lm<");}                  

     Serial.print(" ");

     if (digitalRead(Fd)){           

     Serial.print("Fd>");}

     else{Serial.print("Fd<");}

     Serial.print(" ");

     if (digitalRead(Wt)){           

     Serial.println("Wt>");}

     else{Serial.println("Wt<");}

 

     Serial.print(" ");

     if (digitalRead(Vn)){           

     Serial.print("Vn>");}

     else{Serial.print("Vn<");}                  

     Serial.print(" ");

     if (digitalRead(Fn)){           

     Serial.print("Fn>");}

     else{Serial.print("Fn<");}

     Serial.print(" ");

     if (digitalRead(Ch)){           

     Serial.print("Ch>");}

     else{Serial.print("Ch<");}                  

     Serial.print(" ");

     if (digitalRead(An)){           

     Serial.print("An>");}

     else{Serial.print("An<");}

     Serial.print(" ");

     if (digitalRead(Ox)){           

     Serial.println("Ox>");}

     else{Serial.println("Ox<");}  

     

//الشاشة2

     Serial.print("                      ");

     Serial.print("T");

     if (digitalRead(B_Wt) == HIGH) {Serial.print(1);}

     else  {Serial.print(0);}

     Serial.print(" ");

     Serial.print("L");

     Serial.print(L);

     Serial.print(" ");

     Serial.print("C");

     Serial.print(C);

     Serial.print(" ");

     Serial.print("P");

     Serial.print(P);

     Serial.print(" ");

     Serial.print("D");

     Serial.println(D);

 

     Serial.print("                      ");

     Serial.print("s");

     Serial.print(Ts,0);

     Serial.print(" ");

     Serial.print("Gi");

     Serial.print(Gi);

     Serial.print(" ");

     Serial.print("Gs");

     Serial.print(Gs);

     Serial.print(" ");

     Serial.print("U");

     Serial.print(distance);

     Serial.print(" ");

     Serial.println("k");

 

     Serial.print("                      ");

     if (digitalRead(F)){           

     Serial.print("F>");}

     else{Serial.print("F<");}                  

     Serial.print(" ");

     if (digitalRead(M)){            

     Serial.print("M>");}

     else{Serial.print("M<");}

     Serial.print(" ");

     if (digitalRead(Q)){           

     Serial.print("Q>");}

     else{Serial.print("Q<");}                  

     Serial.print(" ");

     if (digitalRead(R1)){            

     Serial.print("R1>");}

     else{Serial.print("R1<");}

     Serial.print(" ");

     if (digitalRead(R2)){           

     Serial.print("R2>");}

     else{Serial.print("R2<");}

     Serial.print(" ");

     if (digitalRead(R3)){           

     Serial.println("R3>");}

     else{Serial.println("R3<");}

 

     Serial.print("                      ");

     Serial.print("At");

     Serial.print(" ");

     if (digitalRead(Led_wr)){           

     Serial.print("W>");}

     else{Serial.print("W<");}

     Serial.print(" ");

     Serial.print(">>");

     if (Ts >=33) {Serial.println(" Ts>=33      ");}

     else if (Ti >= 33) {Serial.println(" Ti>=31      ");}

     else if (Te >=31) {Serial.println(" Te>=31      ");}

     else if (C >= 5) {Serial.println(" C>=5        ");}

     else if (L >=8) {Serial.println(" L>8         ");}

     else if (L >=8) {Serial.println(" L>8       ");}  //هنا من المفروض L<=6

     else if (Gs > 25) {Serial.println(" Gs>25       ");}

     else if (Gi > 25) {Serial.println(" Gi>25       ");}

     else if (distance < 200 && distance > 50) {Serial.println(" distance<100");}

     else  {Serial.println(" No think....");}}  

 

//------------------  المجموعة الوسطى  ------------------------------

//تشغيل الFs

  if   ((Ts >= 28 && Min >= 0  && Min <= 10)

     || (Ts >= 28 && Min >= 16 && Min <= 25)

     || (Ts >= 28 && Min >= 31 && Min <= 40)

     || (Ts >= 28 && Min >= 46 && Min <= 55)

     || (Min == 5)

     || (Min == 10)

     || (Min == 15)

     || (Min == 20)

     || (Min == 25)

     || (Min == 30)

     || (Min == 35)

     || (Min == 40)

     || (Min == 45)

     || (Min == 50)

     || (Min == 55)

     || (Min == 00))

    {digitalWrite(F, HIGH);

     lcd2.setCursor(0, 2);

     lcd2.print("F>");

     RemoteXY.led_F_g = 255;

     strcpy (RemoteXY. text_F, "F>");}

  else {

     digitalWrite(F, LOW);

     lcd2.setCursor(0, 2);

     lcd2.print("F<");

     RemoteXY.led_F_g = 0;

  strcpy (RemoteXY. text_F, "F<");}

===========================================






للتنقل السريع بين أجزاء الموضوع إستخدم الروابط بالأسفل...


(التعرف على مهام ودور الكود + العتاد المطلوب + كيفية طلب العتاد (للجزائريين)
(تحميل المكتبات + بداية شرح الكود / الجزء العلوي فوق void setup)
(شرح الكود / شرح لقسم void setup)
(شرح الكود / شرح لقسم void loop / الجزء "أ" )
(شرح الكود / شرح لقسم void loop / الجزء "ب" )
(شرح الكود / شرح لقسم void loop / الجزء "ج" )
(شرح الكود / شرح لقسم void loop / الجزء "د" + تحميل الكود كامل / المراجع / إمكانية شراء الخدمات المماثلة  )






إذا أعجبك الموضوع يمكنك مشاهدة مواضيع  مشابهة بقسم الأردوينو لاتقل أهمية إضغط هنا  للإنتقال لقسم الأردوينو.


ليصلك جديدنا تابعنا على صفحاتنا الاجتماعية: الفيسبوكالتويتر ,tumblrpinterestlinkedininstagram








ˆFr
وضع القراءة :
حجم الخط
+
16
-
تباعد السطور
+
2
-