أخر الاخبار

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


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

(شرح الكود / شرح لقسم void setup)

Arduino-code-farme-hydroponic-control

===========

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




الكود مع الشرح (شرح قسم Void setup)

 

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

void setup() {

هنا نعرف مدخل ومخرج الالتراسونيك والمسافة الاولية التي سيعرضها كي لاتبقى خانته فارغة

//الالترا

     pinMode(trigPin, OUTPUT);

     pinMode(echoPin, INPUT);

     distance = 444;

هنا تعريف  لزر التشغيل كي يضيء دائما عند التشغيل وبعده زرر الويفي ليعرض وجود اتصال

//الOn و ال Wifi

     pinMode(On, OUTPUT);

     pinMode(Wifi, OUTPUT);

هنا نعطي قيمة لتشغيل لاد عمل الجهاز ونطفئ لاد الويفيي لنعرف حالته فيما بعد

     digitalWrite(On, HIGH);

     digitalWrite(Wifi, LOW);

هنا نعرف  مجموعة البينات بالاعلى انها مداخل والاخرى مخارج مع اطفائها جميعا

for(int k=0; k<13; k++) {pinMode(sensor[k], INPUT);}

for(int i=0; i<20; i++) {pinMode(sortee[i], OUTPUT);}

for(int j=0; j<20; j++) {digitalWrite(sortee[j], LOW);}

عندنا اذا مجموع البينات الكلي المستعمل بالاردوينو ميغا هي 70 نفس العدد المتوفر...

//13 مدخل +1الترا +3ريموت المجموع 17

//20 مخرج + 1 الترا المجموع 21

//وعندنا 6 6 LCD اي 12

//وعندنا للكايباد 8

//الايثرنت 8

//ال RTC هي 2

//المجموع 68

//ونعلم ان 54 ديجيتال + 16 اناوجيك = 70

//يتبقى A3 لل On و A4 لل Wifi

تشغيل الrtc و السيريال والشاشتين والايثرنت شيلد وطباعة  بالسسيريال void….  و  demarage…  لنعرف أن النظام بدأ يشتغل...

rtc.begin();

     Serial.begin(9600);

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

     Serial.println("Demarage de Systeme…");

     lcd1.begin(20, 4);

     lcd2.begin(20, 4);

//هذا لتشغيل حالة ال Wifi تقدر تنزعهم

     Ethernet.begin(mac, ip);

هنا إظهار صوتي وباللاد بلوحة العرض أن النظام بدأ...

//رسائل البدأ

     tone(Z, 3000, 20);

     digitalWrite(On, LOW);

     delay (150);

     tone(Z, 3000, 20);

     digitalWrite(On, HIGH);

     delay (400);

دوال لكتابات ثابتة سنحتاجها عند التغيير من وضع أوتو إلى مانيال إلى وضع التحليل..الخ لأن الكتابات الثابتة ستمسح ولابد من إعادتها لمكانها عند كل تغيير بالوضع العام...

#define B1    lcd2.setCursor(0, 0)

#define B2    lcd2.print("=")

#define B3    lcd2.setCursor(0, 2)

#define B4    lcd2.print("F<")

#define B5    lcd2.setCursor(3, 2)

#define B6    lcd2.print("M<")

#define B7    lcd2.setCursor(6, 2)

#define B8    lcd2.print("Q<")

#define B9    lcd2.setCursor(9, 2)

#define B10   lcd2.print("R1<")

#define B11   lcd2.setCursor(13, 2)

#define B12   lcd2.print("R2<")

#define B13   lcd2.setCursor(17, 2)

#define B14   lcd2.print("R3<")

#define B17   lcd2.setCursor(3, 3)

#define B18   lcd2.print("W<")

#define B19   lcd2.createChar(1, Flesh1)

#define B20   lcd2.setCursor(6, 3)

#define B21   lcd2.write(byte(1))

#define B22   lcd2.setCursor(19,1)

#define B23   lcd2.print("K")

#define B24   lcd1.setCursor(0, 2)

#define B25   lcd1.print("Li<")

#define B26   lcd1.setCursor(4, 2)

#define B27   lcd1.print("Lx<")

#define B28   lcd1.setCursor(8, 2)

#define B29   lcd1.print("Lm<")

#define B30   lcd1.setCursor(12, 2)

#define B31   lcd1.print("Fd<")

#define B32   lcd1.setCursor(16, 2)

#define B33   lcd1.print("Wt<")

#define B34   lcd1.setCursor(0, 3)

#define B35   lcd1.print("Vn<")

#define B36   lcd1.setCursor(4, 3)

#define B37   lcd1.print("Fn<")

#define B38   lcd1.setCursor(8, 3)

#define B39   lcd1.print("Ch<")

#define B40   lcd1.setCursor(12, 3)

#define B41   lcd1.print("An<")

#define B42   lcd1.setCursor(16, 3)

#define B43   lcd1.print("Ox<")

 

//كتابات ثابتة عامة

B1; B2; B3; B4; B5; B6; B7; B8; B9; B10; B11; B12; B13; B14;   

B17; B18; B19; B20; B21; B22; B23; B24; B25; B26; B27; B28;  

B29; B30; B31; B32; B33; B34; B35; B36; B37; B38; B39; B40; B41; 

B42; B43;  

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

if (digitalRead(B_auto) == HIGH){

     digitalWrite(Led_auto, HIGH);

     Serial.println("At...");

    قراءات أولية لمختلف الحساسات لعرضها بالشاشات لأننا نعلم أننا وضعنا بالأسفل زمن تأخير لكل منها وإذا لم نضفها هنا فلن تظهر الشاشات أي قرائة إلى بعد مرور مدة التأخير المتمثلة مثلا في الحرارات والرطوبة والغاز في 30 ثانية وفي حساس الضوء 1ساعة وهذه مشكلة حلها هنا...

//قرائة اولية لحساس الضوء

     D = analogRead(sensorPin_D);

     lcd2.setCursor(16, 0);

     lcd2.print("D   ");

     lcd2.setCursor(17, 0);

     lcd2.print(D);

 

//قرائة اولية لحساسات الغاز

  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);

  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);

 

//قرائة اولية لحرارة ورطوبة الداخل

     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);

 

//قرائة اولية لحرارة ورطوبة الخارج

     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);

 

//قرائة أولية لحساس حرارة الماء Te

     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);

 

//قرائة اولية للحرارة للعلبة الكهربائية

     int readData_s = DHTs.read11(sensorPin_Ts);

     float Ts = DHTs.temperature;

     float Hs = DHTs.humidity;

     lcd2.setCursor(0, 1); // Sets the location at which subsequent text written to the LCD will be displayed

     lcd2.print("s"); // Prints string "Temp." on the LCD

     lcd2.print(Ts, 0);

 

//قرائة أولية لحساس الناقلية

     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);

 

//قرائة اولية لحساس مستوى الماء

     L = analogRead(sensorPin_L);

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

     L = constrain(L, 0, 10);

 

     lcd2.setCursor(4, 0);

     lcd2.print("L  ");

     lcd2.setCursor(5, 0);

     lcd2.print(L);

 

//قرائة اولية للالترا

     digitalWrite(trigPin, LOW);

     delayMicroseconds(2);

     digitalWrite(trigPin, HIGH);

     delayMicroseconds(10);

     digitalWrite(trigPin, LOW);

     duration = pulseIn(echoPin, HIGH);

     distance = duration * 0.034 / 2;

  if (distance < 1000) {

     lcd2.setCursor(14, 1);

     lcd2.print("U   ");

     lcd2.setCursor(15, 1);

     lcd2.print(distance);}

  else {

     lcd2.setCursor(14, 1);

     lcd2.print("U   ");

     lcd2.setCursor(15, 1);

     lcd2.print("999");}

 

//قرائة اولية للفلوتور T1 T0

if (digitalRead(B_Wt) == HIGH) {

     lcd2.setCursor(1, 0);

     lcd2.print("T1");}

  else  {

     lcd2.setCursor(1, 0);

     lcd2.print("T0");}

 

 

//قرائة اولية للPH غير موجود

     P=7;

     lcd2.setCursor(12, 0);

     lcd2.print("P  ");

     lcd2.setCursor(13, 0);

     lcd2.print(P);

 

 

//كتابات ثابتة خاصة بالاوتو فقط

//No think....

     lcd2.setCursor(7, 3);

     lcd2.print(" start auto..");

    

     lcd2.setCursor(0, 3);

     lcd2.print("At");

    

//الريموت XY  2

     RemoteXY_Init (); 

     pinMode (PIN_SWITCH_1, OUTPUT);

     pinMode (PIN_SWITCH_10, OUTPUT);

     pinMode (PIN_SWITCH_2, OUTPUT);

     pinMode (PIN_SWITCH_3, OUTPUT);}

 

 

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

else if (digitalRead(B_mn) == HIGH) {

       Serial.println("Mn .........");

       Serial.println("Press (Key).");}

 

//هذا عند تخطي الريموت

     digitalWrite(On, LOW);

     delay (150);

     digitalWrite(On, HIGH);

     delay (150);

     digitalWrite(On, LOW);

     delay (150);

     digitalWrite(On, HIGH);

     delay (150);

    

//هذا لتشغيل حالة ال Wifi تقدر تنزعهم

 if (client.connect(Site, 80)) {

       digitalWrite(Wifi, HIGH);}

 else {digitalWrite(Wifi, LOW);}

 

//هذا عند تخطي حالة الويفي اتصال

     digitalWrite(On, LOW);

     delay (150);

     digitalWrite(On, HIGH);

     delay (150);

     digitalWrite(On, LOW);

     delay (150);

     digitalWrite(On, HIGH);

     delay (150);    

}

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







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


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






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


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








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