اطلاعیه

Collapse
No announcement yet.

فرکانس متر با آردوینو

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

    فرکانس متر با آردوینو

    کد:
    #define input 4
    //#define in 8
    #define F1 15
    #define F2 16
    #define F3 17
    #define F4 13
    unsigned int high_time;
    //int h_time;
    unsigned int low_time;
    //int l_time;
    float time_period;
    //float t_period;
    float frequency;
    //float frequenc;
    
    void setup()
    {
    pinMode(input,INPUT_PULLUP);
    //pinMode(in,INPUT);
    pinMode(F1,OUTPUT);
    pinMode(F2,OUTPUT);
    pinMode(F3,OUTPUT);  
    pinMode(F4,OUTPUT);
    
    Serial.begin(9600);
    }
    void loop()
    {
    
    high_time=pulseIn(input,HIGH);
    low_time=pulseIn(input,LOW);
    
    time_period=high_time+low_time;
    time_period=time_period/1000;
    frequency=1000/time_period;
    
    /*
    h_time=pulseIn(in,HIGH);
    l_time=pulseIn(in,LOW);
     
    t_period=h_time+l_time;
    t_period=t_period/1000;
    frequenc=1000/t_period;
    */
    
    
    //Serial.print('frequenc');
    Serial.println(frequency);
    //Serial.print(" Hz");
    
    
     if (frequency >= 17){
      digitalWrite (F1, HIGH);
      }
           else if (frequency <=16 ) 
           {
           digitalWrite (F1, LOW);
           }
    
     if (frequency >= 25){
      digitalWrite (F2, HIGH);
      }
           else if (frequency <= 24) 
           {
           digitalWrite (F2, LOW); 
           }
    
     if (frequency >= 38){
      digitalWrite (F3, HIGH);
      }
           else if (frequency <= 37) 
           {
           digitalWrite (F3, LOW); 
           }
     if (frequency >= 49){
      digitalWrite (F4, HIGH);
     }
           else if (frequency <=48){
            digitalWrite (F4, LOW);
     }
     delay(50);
    }
    سلام دوستان من به کمک شدید نیاز دارم یکی کمکم کنه لطفا
    جدیدترین ویرایش توسط cjmj; ۱۶:۵۳ ۱۳۹۵/۰۴/۲۲.

    #2
    پاسخ : فرکانس متر با آردوینو

    نوشته اصلی توسط cjmj نمایش پست ها
    کد:
    #define input 4
    //#define in 8
    #define F1 15
    #define F2 16
    #define F3 17
    #define F4 13
    unsigned int high_time;
    //int h_time;
    unsigned int low_time;
    //int l_time;
    float time_period;
    //float t_period;
    float frequency;
    //float frequenc;
    
    void setup()
    {
    pinMode(input,INPUT_PULLUP);
    //pinMode(in,INPUT);
    pinMode(F1,OUTPUT);
    pinMode(F2,OUTPUT);
    pinMode(F3,OUTPUT);  
    pinMode(F4,OUTPUT);
    
    Serial.begin(9600);
    }
    void loop()
    {
    
    high_time=pulseIn(input,HIGH);
    low_time=pulseIn(input,LOW);
    
    time_period=high_time+low_time;
    time_period=time_period/1000;
    frequency=1000/time_period;
    
    /*
    h_time=pulseIn(in,HIGH);
    l_time=pulseIn(in,LOW);
     
    t_period=h_time+l_time;
    t_period=t_period/1000;
    frequenc=1000/t_period;
    */
    
    
    //Serial.print('frequenc');
    Serial.println(frequency);
    //Serial.print(" Hz");
    
    
     if (frequency >= 17){
      digitalWrite (F1, HIGH);
      }
           else if (frequency <=16 ) 
           {
           digitalWrite (F1, LOW);
           }
    
     if (frequency >= 25){
      digitalWrite (F2, HIGH);
      }
           else if (frequency <= 24) 
           {
           digitalWrite (F2, LOW); 
           }
    
     if (frequency >= 38){
      digitalWrite (F3, HIGH);
      }
           else if (frequency <= 37) 
           {
           digitalWrite (F3, LOW); 
           }
     if (frequency >= 49){
      digitalWrite (F4, HIGH);
     }
           else if (frequency <=48){
            digitalWrite (F4, LOW);
     }
     delay(50);
    }
    سلام دوستان من به کمک شدید نیاز دارم یکی کمکم کنه لطفا
    با سلام و درود
    سوال شما نا مفهوم است. کجای کار مشکل دارید؟
    لطفاً توضیحات کاملی دهید.

    دیدگاه


      #3
      پاسخ : فرکانس متر با آردوینو

      این کد ها رو برای ساخت یه فرکانس متر برای یه کار خاص استفاده کردم
      این کد ها در نظر خودم درست میاد فرکانس هم درست اندازه گیری میکنه.

      مشکل من اینجاست که وقتی که دیگه فرکانسی نمیدم به ورودی یعنی ورودی رو به زمین وصل میکنم یا به 5 ولت ، قانونا باید فرکانس صفر رو نشون بده ولی تو سریال مانیتور مینویسه inf و مشکل از همین جا شروع میشه. چون در این لحظه که فرکانس 0 میشه تمام خروجی ها 1 میشن

      وقتی فرکانسی نداریم ، متغییر دوره ی زمانی مساوی میشه با 0 و چون طبق فرمول 1000 تقسیم میشه بر صفر و این یعنی بی نهایت. و وقتی که بی نهایت شد تمام خروجی هام 1 میشن.
      در ضمن تا فرکانس 17 هرتز هم درست نمی سنجه

      راستی در مورد تابع pulsein یه سوال دارم
      این تابع زمان تناوب به میکرو ثانیه رو برمیگردونه یا تعداد نواسانات رو در هر میکروثانیه؟؟؟
      جدیدترین ویرایش توسط cjmj; ۲۰:۰۹ ۱۳۹۵/۰۴/۲۰.

      دیدگاه


        #4
        پاسخ : فرکانس متر با آردوینو

        مشکل من اینجاست که وقتی که دیگه فرکانسی نمیدم به ورودی یعنی ورودی رو به زمین وصل میکنم یا به 5 ولت ، قانونا باید فرکانس صفر رو نشون بده ولی تو سریال مانیتور مینویسه inf و مشکل از همین جا شروع میشه. چون در این لحظه که فرکانس 0 میشه تمام خروجی ها 1 میشن

        وقتی فرکانسی نداریم ، متغییر دوره ی زمانی مساوی میشه با 0 و چون طبق فرمول 1000 تقسیم میشه بر صفر و این یعنی بی نهایت. و وقتی که بی نهایت شد تمام خروجی هام 1 میشن.
        تا این قسمت مشکلم حل شد. اما...
        در ضمن تا فرکانس 17 هرتز هم درست نمی سنجه
        هنوز با این قسمت مشکل دارم و کارم رو با مشکل مواجه کرده

        مشکلم اینه که وقتی فرکانس میدم ،از 1 هرتز تا فرکانس 17 هرتز ، آردوینو قاطی میکنه!! یعنی اگه بالای 17 هرتز فرکانس بدم همه چیز طبق روال پیش میره و درسته اما وقتی فرکانس به زیر 17 میرسه ، توی سریال مانیتور فرکانس های مختلف رو نشون میده و به شدت نوسان داره و خروجی ها هم هی صفر و یک میشن. دلیلش چیه به نظرتون؟؟

        دیدگاه


          #5
          پاسخ : فرکانس متر با آردوینو

          نوشته اصلی توسط cjmj نمایش پست ها
          تا این قسمت مشکلم حل شد. اما...

          هنوز با این قسمت مشکل دارم و کارم رو با مشکل مواجه کرده

          مشکلم اینه که وقتی فرکانس میدم ،از 1 هرتز تا فرکانس 17 هرتز ، آردوینو قاطی میکنه!! یعنی اگه بالای 17 هرتز فرکانس بدم همه چیز طبق روال پیش میره و درسته اما وقتی فرکانس به زیر 17 میرسه ، توی سریال مانیتور فرکانس های مختلف رو نشون میده و به شدت نوسان داره و خروجی ها هم هی صفر و یک میشن. دلیلش چیه به نظرتون؟؟
          مشکل قسمت قبل چطور حل شد؟

          طبق چیزی که در این مطلب بحث شده است دستور pulseIn مقداری پردازنده میکروکنترلر را مشغول می کند و شاید مشکل شما به این دلیل باشد.
          سلام تو این تایپ قراره یک فلایت کنترل بسازیم با استفاده از یک اردینو پرو مینی و یک سنسور imu6050 نکته : اساس کار این فلایت کنترل سرعت زاویه است و قابلیت auto leveling نداره برای ساخت واجرای پروژه باید چند تا کار انجام داد سیگنال ورودی از رادیو کنترل رو بخونیم سرعت زاویه ای از هر محور رو بخونیم بتونیم سیگنال رو به اسپید کنترل

          دیدگاه


            #6
            پاسخ : فرکانس متر با آردوینو

            سلام داداش
            مشکل دومم هم حل شد.
            مشکل قبل با اضافه کردن یک دستور if حل شد.
            اینطوری:
            کد:
            high_time=pulseIn(input,HIGH);
            low_time=pulseIn(input,LOW);
            
            time_period=high_time+low_time;
            time_period=time_period/1000;
            if(time_period!=0){frequency=1000/time_period;}
            else {Serial.println("0 Frequency");frequency=0;}
            و مشکل دوم که توی فرکانس های زیر 17 هرتز قاطی میکرد ، متغییر High_time و Low_time رو از نوع float تایین کردم و مشکل حل شد.
            حتی دو فرکانس مختلف و همزمان رو تونستم بسنجم با دو پین مختلف آردوینو.

            اینم از کد های کامل شده و تست شده:
            کد:
            #define input 4
            //#define in 8
            #define F1 15
            #define F2 16
            #define F3 17
            #define F4 13
            
            float high_time;
            float h_time;
            float low_time;
            float l_time;
            float time_period;
            float t_period;
            float frequency;
            float frequenc;
            
            
            void setup()
            {
              
            pinMode(input,INPUT_PULLUP);
            //pinMode(in,INPUT_PULLUP);
            pinMode(F1,OUTPUT);
            pinMode(F2,OUTPUT);
            pinMode(F3,OUTPUT);  
            pinMode(F4,OUTPUT);
            
            //Serial.begin(9600);
            
            }
            void loop()
            {
            
            high_time=pulseIn(input,HIGH);
            low_time=pulseIn(input,LOW);
            
            time_period=high_time+low_time;
            time_period=time_period/1000;
            if(time_period!=0){frequency=1000/time_period;}
            else {Serial.println("0 Frequency");frequency=0;}
            
            /*
            h_time=pulseIn(in,HIGH);
            l_time=pulseIn(in,LOW);
             
            t_period=h_time+l_time;
            t_period=t_period/1000;
            if(t_period!=0){frequenc=1000/t_period;}
            else {Serial.println("0 Frequenc");frequenc=0;}
            
            */
            
            
            //Serial.println(frequenc);
            //Serial.println(frequency);
            //Serial.print(" Hz");
            
            
            
            
             if (frequency >= 17){
              digitalWrite (F1, HIGH);
              }
                   else if (frequency <=16) 
                   {
                   digitalWrite (F1, LOW);
                   }
            
            
             if (frequency >= 25){
              digitalWrite (F2, HIGH);
              }
                   else if (frequency <= 24) 
                   {
                   digitalWrite (F2, LOW); 
                   }
            
            
             if (frequency >= 38){
              digitalWrite (F3, HIGH);
              }
                   else if (frequency <= 37) 
                   {
                   digitalWrite (F3, LOW); 
                   }
             if (frequency >= 49){
              digitalWrite (F4, HIGH);
             }
                   else if (frequency <=48){
                    digitalWrite (F4, LOW);
             }
             
            delay(100);
            }
            اگه کسی خواست بسازه ، اون مقادیر خروجی رو از توی کد هاش قرار نده.
            میشه با کمی تغییر توی کد و اظافه کردن یه ای سی 8704 (مقسم فرکانس) ، تا فرکانس 950 مگا هرتز رو هم باهاش به راحتی سنجید.
            جدیدترین ویرایش توسط cjmj; ۱۶:۵۴ ۱۳۹۵/۰۴/۲۱.

            دیدگاه

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