اطلاعیه

Collapse
No announcement yet.

سنسور رطوبت سنج

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    سنسور رطوبت سنج

    سلام دوستان گلم.من میخوام برای پروژه زیر
    نمایشگر LCD کاراکتری 2x16 سبز بزارم.کداشو برام ویرایش کنید و برنامه کاملشو بزاریداگه جایی هم اشتباه داره بگید.ممنونم



    int greenLED = 6;
    int redLED = 7;
    void setup()
    {
    Serial.begin(9600);
    pinMode(A0, INPUT);
    pinMode(greenLED, OUTPUT);
    pinMode(redLED, OUTPUT);
    digitalWrite(greenLED, LOW);
    digitalWrite(redLED, LOW);
    }


    void loop()
    {
    int mois =
    analogRead(A0);
    Serial.print(mois);


    if(mois >= 1000) {
    Serial.println("Sensor is not in the Soil or DISCONNECTED");
    digitalWrite(greenLED, HIGH);
    digitalWrite(redLED, LOW);


    }


    if(mois < 1000&& mois >= 600) {
    Serial.println("Soil is DRY");
    digitalWrite(redLED, HIGH);
    digitalWrite(greenLED, LOW);
    }


    if(mois < 600&& mois >= 370) {
    Serial.println("Soil is HUMID");
    }


    if(mois < 370) {
    Serial.println("Sensor in WATER");
    }
    delay(2000);
    }


    #2
    پاسخ : سنسور رطوبت سنج

    سلام دوستان.من برنامه زیر رو برای سنسور رطوبت سنج نوشتم.قبلا هم نمونه همین کارو برای سنسور فاصله سنج طراحی کردیم.این برنامه جوری باید عمل کنه که وقتی به مقدار بیش از 600 و کمتر از1000 رسید led1 رو برای 5 ثانیه روشن نگه داره و بعد خاموش کنه. و وقتی بین370 الی 600 باشدled2 را به همین صورت. میخوام روی lcd هم نشون بده.اون بخش long هم ارور داره نمیدونم چرا.
    ممنون میشم ایراداتمو با ویرایشش برطرف کنید



    #include <LiquidCrystal.h>
    #define led 7
    #define led2 8
    #define buzzer 6


    long duration, umidade;
    byte ref =0;
    byte lastref=0;
    long duration, umidade;
    byte ref =0;
    byte lastref=0;
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    int umidade;

    void setup()
    {
    Serial.begin (9600);
    lcd.begin(16, 2);
    pinMode(led, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
    pinMode(buzzer, OUTPUT);


    }

    void loop()
    {
    if((umidade > 1000) || (umidade <= 600)){
    ref=0;
    } else if((umidade <= 600) && (umidade > 370)){
    ref=1;

    }
    Serial.print(umidade);
    if(lastref!=ref){
    switch (ref) {
    case 0:
    Serial.println("Out of range");
    noTone(buzzer);
    lastref=ref;
    break;
    case 1:
    digitalWrite(led, HIGH);
    delay(5000);
    digitalWrite(led,LOW);
    sound = 250;
    lastref=ref;
    break;
    case 2:
    digitalWrite(led2, HIGH);
    delay(5000);
    digitalWrite(led2, LOW);
    sound = 260;
    lastref=ref;
    break;


    lcd.setCursor(0, 0);
    umidade = analogRead(A0);
    umidade = map(umidade, 1023, 0, 0, 200);
    lcd.print("Umidade em:");
    lcd.print(umidade);
    lcd.print(" %");

    delay(500);
    lcd.clear();
    }
    جدیدترین ویرایش توسط mahdi72z; ۰۶:۲۴ ۱۳۹۷/۰۹/۰۵.

    دیدگاه


      #3
      پاسخ : سنسور رطوبت سنج

      متغیر های duration و umidade را هر کدام 2-3 بار تغریف کردید. خط 7 و 10 و 15 رو درست کن.

      دیدگاه


        #4
        پاسخ : سنسور رطوبت سنج

        سلام.الان ویرایش کردم مهندس.چک کنید ببینید مشکلی نداره.چون هنوز قطعاتشو نگرفتم.فقط میخوام با همکاری شما بدونم که روی lcd نمایش داده میشه.و قسمت مهمش آیا وقتی به اون میزان برسه بعد 5 ثانیه خاموش میشه.همین دو مشکلو دارم اگه برام حلش کنید. و بگید کجاش غلطه

        #include <LiquidCrystal.h>
        #define led 7
        #define led2 8
        #define buzzer 6
        byte ref =0;
        byte lastref=0;
        int sound = 250;
        int umidade;
        LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

        void setup()
        {
        Serial.begin (9600);
        lcd.begin(16, 2);
        pinMode(led, OUTPUT);
        pinMode(led2, OUTPUT);
        pinMode(buzzer, OUTPUT);

        }

        void loop()
        {
        if((umidade < 1000) || (umidade >= 600)){
        ref=0;
        } else if((umidade < 600) && (umidade >= 370)){
        ref=1;

        }
        Serial.print(umidade);
        if(lastref!=ref){
        switch (ref) {
        case 0:
        Serial.println("Out of range");
        noTone(buzzer);
        lastref=ref;
        break;
        case 1:
        digitalWrite(led, HIGH);
        delay(5000);
        digitalWrite(led,LOW);
        sound = 250;
        lastref=ref;
        break;
        case 2:
        digitalWrite(led2, HIGH);
        delay(5000);
        digitalWrite(led2, LOW);
        sound = 260;
        lastref=ref;
        break;
        }

        lcd.setCursor(0, 0);
        umidade = analogRead(A0);
        umidade = map(umidade, 1023, 0, 0, 200);
        lcd.print("Umidade em:");
        lcd.print(umidade);
        lcd.print(" %");

        delay(500);
        lcd.clear();
        }
        tone(buzzer, sound);

        }
        جدیدترین ویرایش توسط mahdi72z; ۱۷:۵۱ ۱۳۹۷/۰۹/۰۵.

        دیدگاه


          #5
          پاسخ : سنسور رطوبت سنج

          دو تا مشکل میبینیم.
          1- در if اول شرط کمتر از 600 دارید و if دوم هم همون شرط رو داره.تداخل دارن. پس محدوده شرط ها رو درست کن.
          2- تو خط 58 اومدی و متغیرت رو محدود کردی به 0 تا 200 . پس چطوری انتظار داری شرط ها کار کنن؟ باید بین محدوده تعیین شده برای متغییر umidade در خط 58 و محدوده 2تا if اول برنامه تناسب وجود داشته باشه.الان اینا هیچ ربطی به هم ندارند.این مورد رو هم درست کنید.

          دیدگاه


            #6
            پاسخ : سنسور رطوبت سنج

            مهندس من شرطارو ویرایش کردم.تو خط ۵۵ چی قرار بدم بجای ۲۰۰ و ۰.و راستی مهندس برنامه تو بازه ۵ ثانیه خاموش میشه طبق دستورات
            و خط ۳۰ و دستورات سوییچ چی مهندس
            جدیدترین ویرایش توسط mahdi72z; ۱۷:۵۴ ۱۳۹۷/۰۹/۰۵.

            دیدگاه


              #7
              پاسخ : سنسور رطوبت سنج

              نوشته اصلی توسط mahdi72z نمایش پست ها
              تو خط ۵۵ چی قرار بدم بجای ۲۰۰ و ۰.
              شما باید بدونید چیکار میخواهید بکنید...من میتونم کل ساختار رو ببینم درست هست یا نه. اینکه چه مقداری بدید یا چه بازه ای باشه بستگی به کار شما داره...
              نوشته اصلی توسط mahdi72z نمایش پست ها
              و راستی مهندس برنامه تو بازه ۵ ثانیه خاموش میشه طبق دستورات
              و خط ۳۰ و دستورات سوییچ چی مهندس
              نه عزیز کار نمی کنه... دوست من دلخور نشو ولی به نظرم شما فقط برداشتی کد قبلی رو یه کپی پیست زدی.اینجوری کور کورانه نمی تونی کاری انجام بدی.به نظرم وقت بذار قسمت های مختلف کد رو تحلیل بکن، هر دستوری رو نمیدونی تو نت یه سرچ بزن در موردش بخون.
              سوالاتی که میپرسی این حس رو به من میده که لقمه آماده میخوای.
              درست کردن اون شرط ها و اینکه led ها روشن میشن یا نه نباید کار سختی باشه.از اون کد اولی که گذاشتی تا این کد آخر کلی قسمت زائد داره که معلومه فقط کپی پیست شده.

              دیدگاه


                #8
                پاسخ : سنسور رطوبت سنج

                سلام.ممنون مهندس بابت نصیحتت.به گوش گرفتم.الان درستش کردم و اجرا میشه.فقط یه سوال دارم که گیر کردم.تو برنامه زیر کهlcd هم گزاشتم براش.وقتی چراغ های فرمان روشن میشه.نوشته lcd میره.باز تا چراغ قطع نشه نوشتش نمیاد.دلیلش چیه



                #include <LiquidCrystal.h>
                LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

                int umidade;
                byte ref =0;
                byte lastref=0;
                void setup()
                {
                Serial.begin(9600);
                lcd.begin(16, 2);
                pinMode(13, OUTPUT);
                pinMode(7, OUTPUT);


                }

                void loop()
                {
                lcd.setCursor(0, 0);
                umidade = analogRead(A0);
                umidade = map(umidade, 1023, 0, 0, 100);
                Serial.print("umidae ");
                Serial.print("%");
                lcd.print("Umidade em:");
                lcd.print(umidade);
                lcd.print(" %");
                delay(500);
                lcd.clear();

                if(umidade < 20){
                ref=0;
                } else if(umidade > 30){
                ref=1;
                }
                if(lastref!=ref){
                switch (ref) {
                case 0:
                digitalWrite(13, HIGH);
                delay(5000);
                digitalWrite(13,LOW);
                lastref=ref;
                break;
                case 1:
                digitalWrite(7, HIGH);
                delay(5000);
                digitalWrite(7, LOW);
                lastref=ref;
                break;
                }

                }

                دیدگاه


                  #9
                  پاسخ : سنسور رطوبت سنج

                  دستور lcd.clear رو پاک کنید ، ولی مادامی که توی دیلی پنج ثانیه هست ، عدد به روز رسانی نمیشه ،

                  دیدگاه


                    #10
                    پاسخ : سنسور رطوبت سنج

                    درست مهندس مشکل برطرف شد.ولی چیکار کنم عددم تو این دیلی۵ ثانیه تعقیرم بکنه

                    دیدگاه


                      #11
                      پاسخ : سنسور رطوبت سنج

                      نوشته اصلی توسط mahdi72z نمایش پست ها
                      درست مهندس مشکل برطرف شد.ولی چیکار کنم عددم تو این دیلی۵ ثانیه تعقیرم بکنه
                      درود بر شما
                      ممنون که کد رو بررسی کردی.
                      الان راه حل برنامه نویسی به ذهنم نمیاد...مطمئن نیستم اصلا با کد بشه کاری کرد.همونطور که آقا مسعود فرمودند وقتی دستور delay اجرا میشه کلا میکرو میخوابه
                      چیزی که الان به ذهنم میرسه اینه که قسمت روشن خاموش شدن led ها رو از طریق یه مدار واسطه اجرا کنی. مثلا میتونی اون قسمت رو بدی به یه میکرو دیگه ...یا اینکه از یه مدار تایمر استفاده کنی و فقط با میکرو به مدار تایمر فرمان روشن خاموش بدی و با یک سوئیچ مثل 4066 بیای و led مورد نظر رو برای روشن شدن انتخاب کنی...اینطوری دیگه میکرو اصلی درگیر delay نمیشه و در نمایش مقادیر سنسور دچار وقفه نمیشی.
                      شاید دوستان راه حل ساده تری داشته باشند.

                      دیدگاه


                        #12
                        پاسخ : سنسور رطوبت سنج

                        نوشته اصلی توسط mahdi72z نمایش پست ها
                        درست مهندس مشکل برطرف شد.ولی چیکار کنم عددم تو این دیلی۵ ثانیه تعقیرم بکنه
                        درود. کلا دستور delay رو در این طور پروژه ها نباید استفاده کنید . اون هم ۵ ثانیه .
                        لطفاً از مثال های برنامه آردوینو ، مثال blink without delay رو مطالعه کنید . آردو تابع millis داره که اینطور مواقع به کار میاد .

                        دیدگاه


                          #13
                          پاسخ : سنسور رطوبت سنج

                          ممنون از پاسخ هاتون.یه سوال.من همین پروژه رو برای یه کار میخواستم.یعنی یه لوله داریم که تقریبا دهانه لوله 20سانتی متر هست.و از داخلش یه نوع خوراک طیور ینام پلت که شبیه گندمه رد میشه.و تو این رد شدن یه درصد آب هم اضاف میشه.که باید با همین رطوبت سنج تظیم کنیم درصدشو.من از رطوبت سنج خاک استفاده کردم.ولی چون رسانایی خوبی نداشت.اصلا درصدش بالا نمی رفت.یعنی به درد این کار نخورد و فقط برای خاک خوب بود..خوب بود چون داخل خوراکا و سر راه عبورشون قرار میگرفت.ولی دیگه این مشکلش بود.حالا به نظر شما چه نوع سنسوری استفاده کنم که داخل یه لوله که خوراک ها در حال عبور است بتونه درصد رطوبتو بهمون نشون بده که خوراکی که الان داره رد میشه اینقدر طوبت داره.چون بر اساس این رطوبت میخوایم تنظیم کنیم آب رو.ممنونم

                          دیدگاه


                            #14
                            پاسخ : سنسور رطوبت سنج

                            سلام دوستان. پروژه زیر رو دارم اجرا میکنم.ولی نورled خیلی کم نوره خیلییییییییی.دلیلش چیه که تو کد زیر اصلا نور نداره.چی کم داره

                            #include <dht.h>


                            #include <LiquidCrystal.h>


                            LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


                            dht DHT;
                            const int ledPin = 8;


                            const int buzzer = 6;
                            #define DHT11_PIN 7


                            void setup(){


                            lcd.begin(16, 2);


                            }


                            void loop()


                            {


                            byte temperature = 0; byte humidity = 0;


                            if (DHT.humidity > 50) {


                            digitalWrite(ledPin, HIGH);
                            }


                            int chk = DHT.read11(DHT11_PIN);


                            lcd.setCursor(0,0);


                            lcd.print("Temp: ");


                            lcd.print(DHT.temperature);


                            lcd.print((char)223);


                            lcd.print("C");


                            lcd.setCursor(0,1);


                            lcd.print("Humidity: ");


                            lcd.print(DHT.humidity);


                            lcd.print("%");


                            delay(1000);


                            }
                            جدیدترین ویرایش توسط mahdi72z; ۱۵:۴۱ ۱۳۹۷/۰۹/۰۸.

                            دیدگاه


                              #15
                              پاسخ : سنسور رطوبت سنج

                              سلام و وقت بخیر به همه دوستان
                              من دو عدد از سنسور HTU21D رو تهیه کردم و در دو مورد به مشکل خوردم
                              - برای اتصال همزمان هر دو به اردوینو (ادرس یکسان i2c) به مشکل خوردم و نتونستم راه حلی پیدا کنم.
                              من با هر دو کتاب خونه Adafruit_HTU21DF.h و SparkFunHTU21D.h یک سنسور رو راه اندازی کردم اما در جریان کد ادرس i2c خواسته نشده.(برای تغییر دستی ادرس، کاری مشابه اتصال چند نمایشگر به یک برد با i2c)
                              - و مورد بعدی هم این هست که این سنسور رطوبت رو بالای ۱۰۰٪ هم نشون میده( تا ۱۱۲٪ هم بالا رفت) که منطقی نیست.
                              از دوستانی که با این سنسور کار کردن ممنون میشم تجربه کاریشون رو در میون بزارن و راهنمایی کنند????

                              دیدگاه

                              لطفا صبر کنید...
                              X