نمایش نتایج: از 1 به 10 از 10
Like Tree5 لایک
  • 1 Post By siib
  • 1 Post By siib
  • 1 Post By hamed-pc
  • 1 Post By siib
  • 1 Post By siib

موضوع: در خواست راه اندازی دماسنج توسط ntc و اوردینو

  1. #1
    Member
    تاریخ عضویت
    Aug 2015
    نوشته ها
    55

    در خواست راه اندازی دماسنج توسط ntc و اوردینو

    سلام
    من میخوام توسط یک مقاومت ntc توسط اوردینو دماسنج بسازم . اما نمیدونم چطوری باید اقدام به کد نویسی کنم . مخصوصا که نمیدونم چطوری باید مقادیر اهم ntc را به دما تبدیل کنم
    نوع ntc که دارم هیچ مشخصه ای نداره فقط با اهم متر تونستم اندازه گیری کنم که به این شکل بود
    در دمای80+ درجه = 100 اهم
    در دمای 25+ درجه = 500 اهم

    حالا چطوری میتونم با این مشخصات دماسنج تعریف کنم ؟ کد نویسیش چطور میشه ؟

  2. #2
    Senior Member
    تاریخ عضویت
    Nov 2015
    نوشته ها
    229
    نقل قول نوشته اصلی توسط hamed-pc نمایش پست ها
    سلام
    من میخوام توسط یک مقاومت ntc توسط اوردینو دماسنج بسازم . اما نمیدونم چطوری باید اقدام به کد نویسی کنم . مخصوصا که نمیدونم چطوری باید مقادیر اهم ntc را به دما تبدیل کنم
    نوع ntc که دارم هیچ مشخصه ای نداره فقط با اهم متر تونستم اندازه گیری کنم که به این شکل بود
    در دمای80+ درجه = 100 اهم
    در دمای 25+ درجه = 500 اهم

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

  3. #3
    Member
    تاریخ عضویت
    Aug 2015
    نوشته ها
    55
    نقل قول نوشته اصلی توسط siib نمایش پست ها
    سلام
    همونطور که اشاره کردی مقاومتت ntc هست و موادی که این شکلی باشن رابطه دما و مقاومتشون به شکل یک معادله خطی درجه یک نیست ، برای پیدا کردن دما از روی مقاومت یا باید جدول بندی کنی و مقادیر رو گرد کنی که دقتت میاد پایین ، یا باید تو دما های مختلف مقاومت رو اندازه بگیری و یه منحنی رو به روش کمترین مربعات خطا به اون داده ها برازش بدی و یه معادله تقریبی بین دما و مقاومت به دست بیاری و ازش استفاده کتی
    سلام مجدد .lممنونم
    مدل NTC که الان دارم رو نمیددونم و مشخصات رو ندارم . سعی کردم با اهم متر توی 3 رنج درجه ( 0 درجه - 25 درجه و 80 درجه ) به دست بیارم که به این شکل شد
    0 درجه = 1500 اهم
    25 درجه = 500 اهم
    80 درجه = 100 اهم
    توی اینترنت در مورد تبدیلش سرچ کردم به این جدول رسیدم
    http://www.thinksrs.com/downloads/pr...calculator.htm
    مقادیر به دست آمده را در بخش مربوطه در جدول گذاشتم . این نتیجه رو داد
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: yhx2_untitled.jpg
مشاهده: 342
حجم: 46.0 کیلو بایت
    حالا مقدار های به دست اومده را چطوری باید توی برنامه بگذارم ؟ اصلا این مقادیر A , B , C درست هستش؟
    توی کد نویسی مشگل دارم نمیدونم چطوری باید انجام بدم .

  4. #4
    Senior Member
    تاریخ عضویت
    Nov 2015
    نوشته ها
    229
    بسیار عالی ،
    این معادله Steinhart Hart شکل عمومی رابطه بین دما و مقاومت برای نیمه رساناهاست https://en.wikipedia.org/wiki/Steinh...3Hart_equation
    خب تو سه تا نقطه داری و معادله هم سه تا مجهول داره (A , B ,C) ، اون نرم افزار همین سه تا پارامتر رو محاسبه میکنه ، چک کردم درسته مقادیر پارامترها (فقط حواست باشه دمایی که از معادله به دست میاری بر حسب کلوین هست)
    برای مقادیر مقاومت دما بر حسب درجه سانتیگراد رو میتونی از رابطه زیر به دست بیاری:
    t=1/(0.000581798+0.000511142*LN(R)+(-1.68459E-06)*(LN(R))^3)-273.15
    که R هم مقاومتت هست
    حالا فقط میمونه خوندن این مقدار مقاومت با آردوینو
    باید یه مقاومت دیگه به این مقاومتت سری کنی و وصلشون کنی به یه اختلاف پتانسیل مشخص (مثلا GND و 5V آردوینو) و با analogRead مقدار بین دو تا مقاومت رو بخونی و مقدار مقاومتت رو حساب کنی ، (معادله پیچیده ای نداره ، میتونی از http://blog.arduino.ir/?p=607 هم استفاده کتی)

    ضمنا خیلی مبحث توپی بود ، دمت گرم
    ویرایش توسط siib : 06-26-2017 در ساعت 07:58 PM
    لایک کردن

  5. #5
    Member
    تاریخ عضویت
    Aug 2015
    نوشته ها
    55
    نقل قول نوشته اصلی توسط siib نمایش پست ها
    بسیار عالی ،
    این معادله Steinhart Hart شکل عمومی رابطه بین دما و مقاومت برای نیمه رساناهاست https://en.wikipedia.org/wiki/Steinh...3Hart_equation
    خب تو سه تا نقطه داری و معادله هم سه تا مجهول داره (A , B ,C) ، اون نرم افزار همین سه تا پارامتر رو محاسبه میکنه ، چک کردم درسته مقادیر پارامترها (فقط حواست باشه دمایی که از معادله به دست میاری بر حسب کلوین هست)
    برای مقادیر مقاومت دما بر حسب درجه سانتیگراد رو میتونی از رابطه زیر به دست بیاری:
    t=1/(0.000581798+0.000511142*LN(R)+(-1.68459E-06)*(LN(R))^3)-273.15
    که R هم مقاومتت هست
    حالا فقط میمونه خوندن این مقدار مقاومت با آردوینو
    باید یه مقاومت دیگه به این مقاومتت سری کنی و وصلشون کنی به یه اختلاف پتانسیل مشخص (مثلا GND و 5V آردوینو) و با analogRead مقدار بین دو تا مقاومت رو بخونی و مقدار مقاومتت رو حساب کنی ، (معادله پیچیده ای نداره ، میتونی از جلسه هفدهم : ساخت ولت متر با آردوینو | وبلاگ آردوینو هم استفاده کتی)

    ضمنا خیلی مبحث توپی بود ، دمت گرم
    ممنونم
    کمکم میکنی کد نویسیشو انجام بدم ؟ چون اصلا بلد نیست چجوری باید شروع کنم

  6. #6
    Member
    تاریخ عضویت
    Aug 2015
    نوشته ها
    55
    سلام مجدد
    در یکی از انجمنهای همسایه این کد را پیدا کردم . اما بخشهاییش برام سئواله
    کد اینه



    #include <math.h>



    double ThermistorF(int RawADC) {

    double Temp;

    Temp = log(10000.0*((1024.0/RawADC-1)));

    Temp = 1 / (0.001125308852122+ (0.000234711863267+ (0.000000085663516* Temp * Temp ))* Temp );

    Temp = Temp - 273.15;

    Temp = (Temp * 9.0)/ 5.0 + 32.0;

    return Temp;

    }



    double ThermistorC(int RawADC) {

    double Temp;

    Temp = log(10000.0*((1024.0/RawADC-1)));

    Temp = 1 / (0.001125308852122+ (0.000234711863267+ (0.000000085663516* Temp * Temp ))* Temp );

    Temp = Temp - 273.15;

    return Temp;

    }



    void setup() {

    Serial.begin(9600);

    }



    void loop() {

    int valF, valC;

    double tempF, tempC;

    valF=analogRead(0);

    tempF=ThermistorF(valF);

    valC=analogRead(0);

    tempC=ThermistorC(valC);



    Serial.print("Temperature = ");

    Serial.print(tempF);

    Serial.print(" F; ");

    Serial.print(tempC);

    Serial.println(" C");

    delay(1000);

    }


    سئوالم اینه عدد 273.15 از کجا اومده ؟
    من مقادیر مربوط به NTC که دارم رو کجا باید جایگزین کنم ؟
    ویرایش توسط hamed-pc : 06-27-2017 در ساعت 12:49 PM
    لایک کردن

  7. #7
    Senior Member
    تاریخ عضویت
    Nov 2015
    نوشته ها
    229
    کد:
    #include "math.h"
    float R1=1000;
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600);
    
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    float v=analogRead(0);
    float r=R1*1024/v-R1;
    double t=1/(0.000581798+0.000511142*log(r)+(-1.68459E-06)*(pow(log(r),3)))-273.15;
    Serial.print("Temprature : ");
    Serial.print(t);
    Serial.println(" 'C");
    }
    برای استفاده از کد بالا مدارت رو به شکل زیر ببند:
    مقاومت NTC رو از یک سر به 5V آردوینو و از سر دیگه به یه مقاومت 1 کیلو اهم وصل کن ، اون یکی سر مقاومت یک کیلو اهم رو هم به GND آردوینو وصل کن و نهایتا پین analog IN شماره 0 (A0) رو به محل اتصال مقاومت NTC و مقاومت یک کیلو اهم (بینشون) وصل کن،

    اون 273.15 برای تبدیل کلوین به درجه سانتیگراد هست
    ویرایش توسط siib : 06-27-2017 در ساعت 02:38 PM
    لایک کردن

  8. #8
    Member
    تاریخ عضویت
    Aug 2015
    نوشته ها
    55
    نقل قول نوشته اصلی توسط siib نمایش پست ها
    کد:
    #include "math.h"
    float R1=1000;
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600);
    
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    float v=analogRead(0);
    float r=R1*1024/v-R1;
    double t=1/(0.000581798+0.000511142*log(r)+(-1.68459E-06)*(pow(log(r),3)))-273.15;
    Serial.print("Temprature : ");
    Serial.print(t);
    Serial.println(" 'C");
    }
    برای استفاده از کد بالا مدارت رو به شکل زیر ببند:
    مقاومت NTC رو از یک سر به 5V آردوینو و از سر دیگه به یه مقاومت 1 کیلو اهم وصل کن ، اون یکی سر مقاومت یک کیلو اهم رو هم به GND آردوینو وصل کن و نهایتا پین analog IN شماره 0 (A0) رو به محل اتصال مقاومت NTC و مقاومت یک کیلو اهم (بینشون) وصل کن،

    اون 273.15 برای تبدیل کلوین به درجه سانتیگراد هست
    سلام
    عزیز خیلی خیلی ممنونم . وصل کردم داره کار میکنه . البته هنوز نمیدونم دقتش درسته یا نه دارم بررسی میکنم ( تصحیح میکنم با سنسور S18S20 و کدی که برای این نوع دماسنج بود مقایسه کردم . حدودا 4 درجه اختلاف داره )
    فقط یه سئوالی برام هستش اینکه عدد های (0.000581798+0.000511142*log(r)+(-1.68459E-06) اینا رو از کجا آوردید ؟ چون با اعدادیکه توی نرم افزار محاسبه شده بود بر اساس نوع NTC که دارم متفاوته . آیا باید اعدادی که خودم توی برنامه به دست آوردم بگذارم توی برنامه ؟
    مساله بعدی اینکه : در این مدار از یک مقاومت یک کیلو استفاده شده . در کدهای سایتهای دیگه من دیدم مثلا از یک NTC 10 کیلو استفاده شده و به همون مقدار از یک مقاومت 10 کیلو استفاده شده . اینکه نوع TNC که من دارم در 25 درجه داره 500 اهم نشون میده آیا بهتره از یک مقاومت 500 اهم استفاده کنم به جای یک کیلو ؟
    ویرایش توسط hamed-pc : 06-28-2017 در ساعت 11:05 AM

  9. #9
    Senior Member
    تاریخ عضویت
    Nov 2015
    نوشته ها
    229
    خواهش میکنم
    دقت دماسنجت رو تو شرایط واقعی بررسی کن
    اون معادله همون معادله Steinhart-HArt هست و اون اعداد هم پارامترهایی هستن که با سه تا دما-مقاومتی که خودت گفتی حساب شدن ، همون لینک خودت حساب کرد پارامترها رو اما انگار من اشتباه واردشون کردم!

    نه نمیشه نسبت بگیری ، باید حداقل حدود یک کیلو باشه تا به آردوینو فشار نیاد و جریان زیادی ازش نگذره ، رابطه ولتاژ بین دو تا مقاومت و اندازه مقاومت ها رو هم میتونی با یه معادله ساده به دست بیاری ، به گمونم بهش میگن قانون تقسیم ولتاژ!
    کد اصلاح شده (با مقدار پارامتر های صحیح)
    کد:
    #include "math.h"
    float R1=1000;
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600);
    
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    float v=analogRead(0);
    float r=R1*1024/v-R1;
    double t=1/(0.001052366+0.000405863*log(r)+(-9.19218E-07)*(pow(log(r),3)))-273.15;
    Serial.print("Temprature : ");
    Serial.print(t);
    Serial.println(" 'C");
    }
    لایک کردن

  10. #10
    Member
    تاریخ عضویت
    Aug 2015
    نوشته ها
    55
    نقل قول نوشته اصلی توسط siib نمایش پست ها
    خواهش میکنم
    دقت دماسنجت رو تو شرایط واقعی بررسی کن
    اون معادله همون معادله Steinhart-HArt هست و اون اعداد هم پارامترهایی هستن که با سه تا دما-مقاومتی که خودت گفتی حساب شدن ، همون لینک خودت حساب کرد پارامترها رو اما انگار من اشتباه واردشون کردم!

    نه نمیشه نسبت بگیری ، باید حداقل حدود یک کیلو باشه تا به آردوینو فشار نیاد و جریان زیادی ازش نگذره ، رابطه ولتاژ بین دو تا مقاومت و اندازه مقاومت ها رو هم میتونی با یه معادله ساده به دست بیاری ، به گمونم بهش میگن قانون تقسیم ولتاژ!
    کد اصلاح شده (با مقدار پارامتر های صحیح)
    کد:
    #include "math.h"
    float R1=1000;
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600);
    
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    float v=analogRead(0);
    float r=R1*1024/v-R1;
    double t=1/(0.001052366+0.000405863*log(r)+(-9.19218E-07)*(pow(log(r),3)))-273.15;
    Serial.print("Temprature : ");
    Serial.print(t);
    Serial.println(" 'C");
    }
    نقل قول نوشته اصلی توسط siib نمایش پست ها
    خواهش میکنم
    دقت دماسنجت رو تو شرایط واقعی بررسی کن
    اون معادله همون معادله Steinhart-HArt هست و اون اعداد هم پارامترهایی هستن که با سه تا دما-مقاومتی که خودت گفتی حساب شدن ، همون لینک خودت حساب کرد پارامترها رو اما انگار من اشتباه واردشون کردم!

    نه نمیشه نسبت بگیری ، باید حداقل حدود یک کیلو باشه تا به آردوینو فشار نیاد و جریان زیادی ازش نگذره ، رابطه ولتاژ بین دو تا مقاومت و اندازه مقاومت ها رو هم میتونی با یه معادله ساده به دست بیاری ، به گمونم بهش میگن قانون تقسیم ولتاژ!
    کد اصلاح شده (با مقدار پارامتر های صحیح)
    کد:
    #include "math.h"
    float R1=1000;
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600);
    
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    float v=analogRead(0);
    float r=R1*1024/v-R1;
    double t=1/(0.001052366+0.000405863*log(r)+(-9.19218E-07)*(pow(log(r),3)))-273.15;
    Serial.print("Temprature : ");
    Serial.print(t);
    Serial.println(" 'C");
    }
    ممنون
    پس برای مقاومت حتما باید حداقل 1 کیلو باشه . اگر اینطوریه به نظرم بیشترش کنم که کمتر جریان بکشه مثلا 5 کیلو یا 10 کیلو
    برای این کار هم باید از برنامه تقسیم ولتاژ استفاده بشه ؟
    ضمن اینکه این کدیکه جدید گذاشتید را آپلود کردم توی اوردینو باز هم داره متفاوت نشون میده
    البته من با برنامه این سایت استفاده کردم آموزش راه اندازی سنسور دما DS18B20 به برد Arduino آردوینو + سورس برنامه
    با دماسنج DS18S20 دما را 27.69 نشون میده . با برنامه کدیکه فرستادید دما را 25.87 نشان میده
    به نظرتون کجا را باید بررسی کنم ؟

    در ضمن لینکی که برنامه برای تبدیل هستش . مقدار مقاومتهای منو به این اعداد محاسبه میکنه
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: 44.jpg
مشاهده: 244
حجم: 48.0 کیلو بایت
    شما اون اعدادیکه گذاشتید چطور فرق داره
    (0.001052366+0.000405863*log(r)+(-9.19218E-07) ( لطفا راجع به این خط توضیح بده چطور محاسبه شده ؟ چون با اعداد توی جدول فرق داره )
    اینا چطوری میشه مثلا اون قسمت سوم عدد - 7 چطور بهش اضافه میشه . من نمیفهمم اینجاشو
    ویرایش توسط hamed-pc : 06-28-2017 در ساعت 07:42 PM

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

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

SEO by vBSEO