تجزیه و تحلیل رو ول کن.:d
کد رو بزار تا نگاش کنیم
تجزیه و تحلیل رو ول کن.:d
کد رو بزار تا نگاش کنیم
کد:#include <Bounce2.h> #include <DHT.h> #include <LiquidCrystal.h> #define setBUTTON 13 #define upBUTTON 12 #define downBUTTON 11 #define DHTPIN 2 #define DHTTYPE DHT21 Bounce set; Bounce up; Bounce down; DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(8, 7, 6, 5, 4, 3); const int temprelay = 10, humidityrelay = 9; float temp,hum; const float i=temp, j=hum; void setup() { lcd.begin(16, 2); lcd.clear(); dht.begin(); set.attach (setBUTTON); set.interval(50); up.attach (upBUTTON); up.interval(50); down.attach (downBUTTON); down.interval(50); pinMode (setBUTTON, INPUT_PULLUP); pinMode (upBUTTON, INPUT_PULLUP); pinMode (downBUTTON, INPUT_PULLUP); } void loop() { set.update(); up.update(); down.update(); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { lcd.clear(); lcd.setCursor(1,0); lcd.print("Failed to read "); lcd.setCursor(0,1); lcd.print("from DHT sensor!"); delay(2000); lcd.clear(); return; } if ((t) >= i){ digitalWrite (temprelay, HIGH); } else if ((t) <= i-5) { digitalWrite (temprelay, LOW); } if ((h) >= j){ digitalWrite (humidityrelay, LOW); } else if ((h) <=j-12) { digitalWrite (humidityrelay, HIGH); } lcd.print("Humidity:"); lcd.setCursor(10,0); lcd.print(h); lcd.setCursor(15,0); lcd.print("%"); lcd.setCursor(1,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print(t); lcd.setCursor(12,1); lcd.print(" *C "); }
ویرایش توسط cjmj : 02-08-2016 در ساعت 10:58 AM
الان مشکل کجاست؟
توی این کد هیچ مشکلی نیست ، قبلا هم گفتم که میخوام سه تا کلید وصل کنم به آردینو یک کلید بالا و یک کلید پایین برای کم و زیاد کردن و یک کلید هم برای رفتن به تنظیمات.
در واقع میخوام وقتی که دفعه ی اول که کلید تنظیمات رو فشار دادم تنظیمات temp نمایش داده بشه و با دو کلید up و down دما رو کم و زیاد کنم و دفعه ی دوم که کلید تنظیمات رو فشار دادم بتونم رطوبت رو توش تنظیم کنم با کلید up و down.
حالا چرا میخوام دما و رطوبت رو تنظیم کنم؟؟؟
چون توی این گلخانه ای که قراره سنسور نصب بشه رطوبت باید 80 تا 90 درصد باشه و دما هم باید 20 تا 25 درجه. برای مثال ما دما رو روی 20 درجه توسط کلید تنظیم و کلید های up و down و رطوبت رو روی 85 درصد تنظیم میکنیم. خوب آردینو این اعداد رو که بهش دادیم رو میگیره و یه عمل مقایسه بین این اعدادی که ما بهش دادیم و اعدادی که سنسور dht21 نشون میده انجام میده. خوب ما دما رو روی 20 درجه تنظیم کرده بودیم حالا اگر دمای گلخانه بالای 20 رفت مثلا شد 25 ، اردینو یک رله رو که به یکی از این پین ها متصله فعال کرده و رله هواکش رو روشن میکنه و تهویه انجام میشه تا دما به چند درجه زیر 20 برسه مثلا 16 یا 17. حالا چرا زیر 20؟ چون اگه دما دوباره روی 20 بیاد و آردینو تهویه رو خاموش کنه خوب مسلمه که دقت سنسور نیم درجه است و اگه یک لحظه بیشتر از 20 درجه تشخیص بده دوباره فن روشن میشه.
حالا در مورد رطوبت: خوب ما رطوبت رو روی 85 درصد تنظیم کرده بودیم ، حالا فرض کنید رطوبت محیط 50 درصد باشه خوب مسلمه که آردینو رله ی مخصوص رطوبت رو فعال میکنه و بدین ترتیب دستگاه رطوبت ساز فعال میشه و اونقدر رطوبت تولید میکنه تا رطوبت برسه به 85 درصد و رله قطع بشه و دستگاه رطوبت ساز خاموش شه و تا وقتی دوباره رطوبت به زیر 80 نرسیده رطوبت ساز توسط آردینو روشن نشه.
من فقط تونستم تا یه جایی کد نویسی کنم که کد هم گذاشتم واستون. و تمام چیز هایی که اینجا گفتم رو دیگه در توان من نیست برنامه نویسی کنم چون بیش از یک ماه نیست که دارم با آردینو کار میکنم لطفا کمکم کنید و راه های نوشتن این برنامه رو بگید که از چه دستوراتی میتونم استفاده کنم تا پروژه رو تکمیل کنم.
سپاس فراوان از شما و ببخشید که زیاد نوشتم.
ویرایش توسط cjmj : 02-08-2016 در ساعت 09:12 PM
اول یه نکته بگم:
متغیر از نوع float ، اعشاری می باشد.
تو این مواقع باید از نوع int (عدد صحیح) تعریف کنی تا مثلا توی برنامه وقتی می خوای بگی
اگه برابر 80 درصد شدی:
تابع مثلا سلام رو اجرا کن.
حالا برنامه رو نگاه می کنم و مورد های بعدی رو بهت می گم.
ببین کدت رو به شکل تابع نویسی در آوردم
اینو آپلود کن ببین همه چیز درسته یا نه
و این که یه نکته تو وقتی از شرط خارج میشی داری به پین دیجیتال متصل به رله دستور high میدی مگه رله تو 1 فعاله ؟
مدل رله ای که استفاده می کنی چیه؟
کد:#include <Bounce2.h> #include <DHT.h> #include <LiquidCrystal.h> #define setBUTTON 13 #define upBUTTON 12 #define downBUTTON 11 #define DHTPIN 2 #define DHTTYPE DHT21 Bounce set; Bounce up; Bounce down; DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(8, 7, 6, 5, 4, 3); float h, t, tset = 25, hset = 80; void setup() { project_config(); } //******************* void loop() { button_update(); DHT_Read(); compare_setpoint(tset, hset, t, h); data_Show(h, t); } //******************* void project_config() { lcd.begin(16, 2); lcd.clear(); dht.begin(); set.attach (setBUTTON); set.interval(50); up.attach (upBUTTON); up.interval(50); down.attach (downBUTTON); down.interval(50); pinMode (setBUTTON, INPUT_PULLUP); pinMode (upBUTTON, INPUT_PULLUP); pinMode (downBUTTON, INPUT_PULLUP); } //******************* void DHT_Read() { h = dht.readHumidity(); t = dht.readTemperature(); if (isnan(h) || isnan(t)) { lcd.clear(); lcd.setCursor(1, 0); lcd.print("Failed to read "); lcd.setCursor(0, 1); lcd.print("from DHT sensor!"); delay(2000); lcd.clear(); return; } } //******************* void data_Show(float temprature, float humidity) { lcd.print("Humidity:"); lcd.setCursor(10, 0); lcd.print(humidity); lcd.setCursor(15, 0); lcd.print("%"); lcd.setCursor(1, 1); lcd.print("Temp:"); lcd.setCursor(7, 1); lcd.print(temprature); lcd.setCursor(12, 1); lcd.print(" *C "); } //******************* void compare_setpoint(float tempsetpint , float humidsetpoint, float tempr, float humidi) { const int temprelay = 10, humidityrelay = 9; if (tempr >= tempsetpint) { digitalWrite (temprelay, HIGH); } else if (tempr <= tempsetpint - 5) { digitalWrite (temprelay, LOW); } if (humidi >= humidsetpoint) { digitalWrite (humidityrelay, LOW); } else if (humidi <= humidsetpoint - 12) { digitalWrite (humidityrelay, HIGH); } } //******************* void button_update() { set.update(); up.update(); down.update(); }
سپاس گزارم ازشما برای وقتی که برای حل شدن مشکلم گذاشتید.ببین کدت رو به شکل تابع نویسی در آوردم
اینو آپلود کن ببین همه چیز درسته یا نه
و این که یه نکته تو وقتی از شرط خارج میشی داری به پین دیجیتال متصل به رله دستور high میدی مگه رله تو 1 فعاله ؟
مدل رله ای که استفاده می کنی چیه؟
کد هایی که تغییر دادین رو آپلود کردم و تا اینجای برنامه مثل قبل درست کار میکنه.
درسته رله توی 1 فعال میشه ، پین میکرو به بیس یک ترانزیستور متصل میشه و رله توسط ترانزیستور فعال میشه.
در مورد دستورات شرطی که توی کد قرار داره مطمئنم چون به جای قرار دادن متغیر در کد ؛ از عدد استفاده کردم و دیدم که کارش رو درست داره انجام میده.
در مورد کلید تنظیم که قراره یک بار تنظیمات دما رو بیاره و یک بار تنظیمات رطوبت رو فکر کنم باید از switch / case استفاده کرد درسته؟؟؟؟
ویرایش توسط cjmj : 02-09-2016 در ساعت 12:18 PM
بچه ها بالاخره موفق شدم :d :d
پس از روز ها و شب ها بیداری خلاصه تونستم با کمک شما و کمک خدا و سلام و صلوات و با رمز یا زهرا برنامه ای رو که میخواستم درست کنم.
الان که خیلی خسته ام و خوابم میاد فردا یک فیلم از نحوه کار کردش میگیرم و میذارمش اینجا تا بقیه هم ببینند.
سلام
یه فیلم گرفتم از روش کار کردنش:
http://s7.picofile.com/file/82383647...22004.zip.html
کد:#include <EEPROM.h> #include <Bounce2.h> #include <DHT.h> #include <LiquidCrystal.h> #define setBUTTON 13 #define upBUTTON 12 #define downBUTTON 11 #define DHTPIN 2 #define DHTTYPE DHT21 Bounce set; Bounce up; Bounce down; DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(8, 7, 6, 5, 4, 3); const byte temprelay = 10, humidityrelay = 9; byte humiditySetpoint = 85; byte tempSetpoint = 20; unsigned long prevMillis = 0; unsigned long currentmillis = millis(); static byte prevdownButton; static byte prevupButton; static byte prevsetButton; static byte prevSetMode; byte setMode; void setup() { lcd.begin(16, 2); lcd.clear(); dht.begin(); set.attach (setBUTTON); set.interval(30); up.attach (upBUTTON); up.interval(30); down.attach (downBUTTON); down.interval(30); pinMode (setBUTTON, INPUT_PULLUP); pinMode (upBUTTON, INPUT_PULLUP); pinMode (downBUTTON, INPUT_PULLUP); humiditySetpoint = EEPROM.read(0); tempSetpoint = EEPROM.read(1); } void loop() { set.update(); up.update(); down.update(); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { lcd.clear(); lcd.setCursor(1,0); lcd.print("Failed to read "); lcd.setCursor(0,1); lcd.print("from DHT sensor!"); delay(2000); lcd.clear(); return; } if ((t) >= tempSetpoint){ digitalWrite (temprelay, HIGH); } else if ((t) <= tempSetpoint-5) { digitalWrite (temprelay, LOW); } if ((h) >= humiditySetpoint){ digitalWrite (humidityrelay, LOW); } else if ((h) <=humiditySetpoint-10) { digitalWrite (humidityrelay, HIGH); } if ( setMode != 0) { if (currentmillis - prevMillis >= 10000UL) { setMode = 0; prevMillis = currentmillis; } } if (set.fell()) { setMode++; } prevsetButton = setBUTTON; if (setMode >= 3) { setMode = 0; } if (setMode != prevSetMode) { lcd.clear(); prevSetMode = setMode; } switch (setMode) { case 0://normal lcd.print("Humidity:"); lcd.setCursor(10,0); lcd.print(h); lcd.setCursor(15,0); lcd.print("%"); lcd.setCursor(1,1); lcd.print("Temp:"); lcd.setCursor(7,1); lcd.print(t); lcd.setCursor(12,1); lcd.print(" *C "); prevMillis = currentmillis; break; case 1://edit temp if ('upButton' != prevupButton) { if (up.fell()) { tempSetpoint = tempSetpoint + 1; } prevupButton = 'upButton'; } if ('downButton' != prevdownButton) { if (down.fell()) { tempSetpoint = tempSetpoint - 1; } prevdownButton = 'downButton'; } lcd.setCursor(0, 0); lcd.print("Set temp:"); lcd.setCursor(7, 1); lcd.print(tempSetpoint); lcd.setCursor(9,1); lcd.print("*C"); EEPROM.write(1, tempSetpoint); break; case 2://edit humidity if ('upButton' != prevupButton) { if (up.fell()) { humiditySetpoint = humiditySetpoint + 1; } prevupButton = 'upButton'; } if ('downButton' != prevdownButton) { if (down.fell()) { humiditySetpoint = humiditySetpoint - 1; } prevdownButton = 'downButton'; } lcd.setCursor(0, 0); lcd.print("Set Humidity:"); lcd.setCursor(7, 1); lcd.print(humiditySetpoint); lcd.setCursor(9,1); lcd.print("%"); EEPROM.write(0, humiditySetpoint); break; }}
ویرایش توسط cjmj : 02-11-2016 در ساعت 07:45 PM