صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از 1 به 10 از 12
Like Tree7 لایک

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

  1. #1
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85

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

    کد:
    #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 : 07-10-2016 در ساعت 12:54 PM
    لایک کردن

  2. #2
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    این کد ها رو برای ساخت یه فرکانس متر برای یه کار خاص استفاده کردم
    این کد ها در نظر خودم درست میاد فرکانس هم درست اندازه گیری میکنه.

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

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

    راستی در مورد تابع pulsein یه سوال دارم
    این تابع زمان تناوب به میکرو ثانیه رو برمیگردونه یا تعداد نواسانات رو در هر میکروثانیه؟؟؟
    ویرایش توسط cjmj : 07-10-2016 در ساعت 03:45 PM

  3. #3
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    3,933
    نقل قول نوشته اصلی توسط cjmj نمایش پست ها
    این کد ها رو برای ساخت یه فرکانس متر برای یه کار خاص استفاده کردم
    این کد ها در نظر خودم درست میاد فرکانس هم درست اندازه گیری میکنه.

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

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

    راستی در مورد تابع pulsein یه سوال دارم
    این تابع زمان تناوب به میکرو ثانیه رو برمیگردونه یا تعداد نواسانات رو در هر میکروثانیه؟؟؟
    مشکلت با نوشتن یه if حل میشه دوست من :
    کد:
    #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;
    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;
    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);
    }
    اینو تست کن ببین مشکل یک شدن خروجی هات حل میشه
    لایک کردن

  4. #4
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    3,933
    نقل قول نوشته اصلی توسط cjmj نمایش پست ها
    این کد ها رو برای ساخت یه فرکانس متر برای یه کار خاص استفاده کردم
    این کد ها در نظر خودم درست میاد فرکانس هم درست اندازه گیری میکنه.

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

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

    راستی در مورد تابع pulsein یه سوال دارم
    این تابع زمان تناوب به میکرو ثانیه رو برمیگردونه یا تعداد نواسانات رو در هر میکروثانیه؟؟؟
    در مورد تابع
    pulsein
    این تابع میکروثانیه هایی رو میشماره که پینت تغییر وضعیت میده

    یعنی اگه تو HIGH تعریفش کرده باشی
    مدت زمانی رو میشماره که پین high شده تا زمانی که LOW شده

    مثلا 1000000 میکرو ثانیه این پین HIGH بوده

  5. #5
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    سلام. ممنونم از راهنماییتون

    مشکلم در این مورد حل شد اما یه مشکل دیگه دارم.

    مشکلم اینه که وقتی فرکانس میدم ،از 1 هرتز تا فرکانس 15 هرتز ، آردوینو قاطی میکنه!! یعنی اگه بالای 15 هرتز فرکانس بدم همه چیز طبق روال پیش میره و درسته اما وقتی فرکانس به زیر 15 میرسه ، توی سریال مانیتور فرکانس های مختلف رو نشون میده و به شدت نوسان داره و خروجی ها هم هی صفر و یک میشن. دلیلش چیه به نظرتون؟؟
    ویرایش توسط cjmj : 07-11-2016 در ساعت 12:41 PM

  6. #6
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    3,933
    نقل قول نوشته اصلی توسط cjmj نمایش پست ها
    سلام. ممنونم از راهنماییتون

    مشکلش در این مورد حل شد اما یه مشکل دیگه دارم.

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

    این قسمت کد رو ببینید:
    کد:
    .
      if (frequency >= 17) {
        digitalWrite (F1, HIGH);
      }
      else if (frequency <= 16 )
      {
        digitalWrite (F1, LOW);
      }

    یه بار با این دو تا عدد بازی کنید مثلا دوتا سه تا کمشون کنید
    ببینید هنوز روی 15 گیر می کنه یا میرسه به 13 12

  7. #7
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    مشکلم کلا حل شد :d
    شما کمک های زیادی در این انجمن به من کردین امیدوارم بتونم جبران کنم.
    متغییر High_time و Low_time رو از نوع float تایین کردم
    ویرایش توسط cjmj : 07-11-2016 در ساعت 12:41 PM
    لایک کردن

  8. #8
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    اینم از کد های کامل شده و کاملا تست شده:

    کد:
    #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 مگاهرتز رو اندازه گیری کرد.
    در ضمن با استفاده از همین کد تونستم دو تا فرکانس مختلف رو همزمان اندازه گیری کنم بدون اینکه توی کار کوچک ترین تداخلی ایجاد بشه.

  9. #9
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    3,933
    نقل قول نوشته اصلی توسط cjmj نمایش پست ها
    مشکلم کلا حل شد :d
    شما کمک های زیادی در این انجمن به من کردین امیدوارم بتونم جبران کنم.
    متغییر High_time و Low_time رو از نوع float تایین کردم

    خوشحالم تونستم کمکی بکنم
    موفق باشید
    لایک کردن

  10. #10
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    3,933
    نقل قول نوشته اصلی توسط cjmj نمایش پست ها
    اینم از کد های کامل شده و کاملا تست شده:

    کد:
    #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 مگاهرتز رو اندازه گیری کرد.
    در ضمن با استفاده از همین کد تونستم دو تا فرکانس مختلف رو همزمان اندازه گیری کنم بدون اینکه توی کار کوچک ترین تداخلی ایجاد بشه.
    با تشکر از شما که اطلاعاتتون رو به اشتراک میزارید
    لایک کردن

صفحه 1 از 2 12 آخرینآخرین

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO