Аналоговый термометр (Troyka-модуль)

Тема в разделе "Arduino & Shields", создана пользователем Daemon2017, 12 мар 2014.

  1. Daemon2017

    Daemon2017 Нерд

    Прошу помощи: как с ним работать?
    Подключил его к Troyka-shield, использовал код для tmp36 с забугорного форума:
    Код (Text):
    //TMP36 Pin Variables
    int sensorPin = 0; //the analog pin the TMP36's Vout (sense) pin is connected to
                            //the resolution is 10 mV / degree centigrade with a
                            //500 mV offset to allow for negative temperatures
    /*
    * setup() - this function runs once when you turn your Arduino on
    * We initialize the serial connection with the computer
    */
    void setup()
    {
      Serial.begin(9600);  //Start the serial connection with the computer
                          //to view the result open the serial monitor
    }
    void loop()                    // run over and over again
    {
    //getting the voltage reading from the temperature sensor
    int reading = analogRead(sensorPin);
    // converting that reading to voltage, for 3.3v arduino use 3.3
    float voltage = reading * 5.0;
    voltage /= 1024.0;
    // print out the voltage
    Serial.print(voltage); Serial.println(" volts");
    // now print out the temperature
    float temperatureC = (voltage - 0.5) * 100 ;  //converting from 10 mv per degree wit 500 mV offset
                                                  //to degrees ((voltage - 500mV) times 100)
    Serial.print(temperatureC); Serial.println(" degrees C");
    // now convert to Fahrenheit
    float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
    Serial.print(temperatureF); Serial.println(" degrees F");
    delay(1000);                                    //waiting a second
    }
    И тут мне заявляют результат: 32 градуса Цельсия. В комнате не больше 24.
    Это брак сенсора или что-то делаю не так?
     
  2. Daemon2017

    Daemon2017 Нерд

    http://mk90.blogspot.ru/2009/07/arduino.html - здесь довольно понятно все расписано. Код:

    Код (Text):
    void setup() {
      Serial.begin(9600);
    }

    void loop() {
      float voltage = 5.0 / 1024.0 * analogRead(0);
      Serial.print(voltage);
      Serial.println(" B");
      float tempC = ( voltage - 0.5 ) * 100;
      Serial.print(tempC);
      Serial.println(" C");
      delay(1000);
    }
    Но результат всё тот же: обычный градусник показывает 25 градусов, а Ардуино 31-32.
     
  3. sagis

    sagis Нерд

    Возьмите вольтметр и проверьте напряжение на входе и выходе
    По вышеприведенной ссылке все расписано
    Если чтото отличается вбейте другие коэффициенты и проверьте на разных температурах
     
  4. Daemon2017

    Daemon2017 Нерд

    На Амперке указаны такие ТТХ:
    • Диапазон измеряемой температуры: от -55 °C до +125 °C
    Судя по формуле, мы отсекаем отрицательные значения, т.е. "voltage - 0.5". Где 0.5 это 500 мВ, которые позволяют нам определять отрицательные значения вплоть до -50С, т.к. 10 мВ приходится на 1 градус.

    Но если верить данным Амперки, то вычитать нужно 0.55! Попробовал - теперь 25-27, а лежащий рядом спиртовой градусник показывает 25.5

    Кстати, я достал лупу и увидел, что на Амперкином девайсе маркировка "TMP 36GZ". Возможно, примеры из Сети были созданы под датчики с нижним порогом в -55 и -40С. И такие, и такие встречал.

    Было бы здорово услышать комментарий от кого-нибудь из сотрудников Амперки, т.к. в даташите конкретно TMP 36GZ отсутствует.

    На данный момент код такой:
    Код (Text):
    int sensorPin = 0;

    void setup()
    {
      Serial.begin(9600);
    }
    void loop()                  
    {
    int reading = analogRead(sensorPin);
    float voltage = reading * 5.0;
    voltage /= 1024.0;
    Serial.print(voltage); Serial.println(" volts");
    float temperatureC = (voltage - 0.55) * 100 ;
    Serial.print(temperatureC); Serial.println(" degrees C");
    delay(1000);                                  
    }
     
  5. Daemon2017

    Daemon2017 Нерд

    UPD. Попробовал нагреть ладошками до своих 36.6 - медленно, но верно сенсор дошел до температуры в 35.5 и примерно в её области давал показания: 34-36. Кто знает, какова температура ладоней?) Если чуть менее 36, то эксперимент можно считать удачным.
     
  6. sagis

    sagis Нерд

    посмотрите погрешность данного датчика как минимум 1-3 градуса плюс датчик аналоговый соответственно даже небольшое сопротивление например в контактах уже внесут свою лепту
     
  7. Daemon2017

    Daemon2017 Нерд

    Ну и славненько, погрешность +-2 это не страшно.
     
  8. Megakoteyka

    Megakoteyka Оракул Модератор

    Можно взять показания датчика и эталонного термометра на нескольких отличающихся друг от друга температурах (в идеале - весь диапазон с некоторым шагом), построить график и экспериментально вычислить коэффициент поправки.
     
  9. acos

    acos Официальный гик Администратор

    Спасибо, что обратили внимание. Присутствует ошибка в описании — они от -40 до 125 градусов. Поправим
     
    Daemon2017 нравится это.
  10. patrickmo

    patrickmo Нуб

    Добрый вечер. С Ардуино не так давно. Скажите пожалуйста, разве это нормально, что температура прыгает от 15 до 25 градусов в комнате (Тройка-модуль)?
     
  11. Daemon2017

    Daemon2017 Нерд

    Само-собой, это не норма. Как выглядит ваш скетч?
     
  12. patrickmo

    patrickmo Нуб

    Как последний скетч в теме:

    Код (Text):

    int sensorPin = A0;

    void setup()
    {
      Serial.begin(9600);
    }
    void loop()                
    {
    int reading = analogRead(sensorPin);
    float voltage = reading * 5.0;
    voltage /= 1024.0;
    Serial.print(voltage); Serial.println(" volts");
    float temperatureC = (voltage - 0.55) * 100 ;
    Serial.print(temperatureC); Serial.println(" degrees C");
    delay(1000);                                
    }
     
     
  13. скорее проблема с подключением
     
  14. patrickmo

    patrickmo Нуб

    Подключение через USB. Из девайсов Arduino Uno, Troyka Shield, Аналоговый термометр (Troyka).

    Хотя если подождать минут 10, то с 17 до 19 градусов скачет, но в комнате градусов 24. Завтра куплю термометр для проверки.

    Спасибо Амперке (и персоналу) за продукцию и отзывчивый форум!
     
  15. Daemon2017

    Daemon2017 Нерд

    Если верить тому, что написал Акос, попробуйте заменить строчку
    Код (Text):
    float temperatureC = (voltage - 0.55) * 100 ;
     
    на строчку
    Код (Text):
    float temperatureC = (voltage - 0.4) * 100 ;
     
    Возможно, это поможет. Но больше походит на то, что у вас где-то коротит(если оно именно прыгает 15-25, как вы выразились) или модуль неисправен. Не могли бы вы выложить лог?

    У меня, например, выводит так:
    24 degrees C
    24 degrees C
    25 degrees C
    24 degrees C
    и т.д.
     
  16. patrickmo

    patrickmo Нуб

    После замены так:

    Код (Text):
    0.33.73 degrees C
    0.74 volts
    34.22 degrees C
    0.74 volts
    34.22 degrees C
    0.79 volts
    38.61 degrees C
    0.73 volts
    33.24 degrees C
    0.74 volts
    33.73 degrees C
    0.74 volts
    33.73 degrees C
    0.73 volts
    33.24 degrees C
    0.74 volts
    33.73 degrees C
    0.73 volts
    33.24 degrees C
    0.74 volts
    33.73 degrees C
    0.74 volts
    33.73 degrees C
    0.73 volts
    32.75 degrees C
    0.74 volts
    33.73 degrees C
    0.74 volts
    33.73 degrees C
    0.73 volts
    33.24 degrees C
    0.74 volts
    33.73 degrees C
    0.73 volts
    32.75 degrees C
    0.74 volts
    33.73 degrees C
    0.72 volts
    32.27 degrees C
    0.72 volts
    32.27 degrees C
    0.74 volts
    33.73 degrees C
    Огромные сомнения по поводу 33 градусов в комнате, 23-25 скорее...
     
  17. Daemon2017

    Daemon2017 Нерд

    Кстати, изменил у себя в коде данные с -55 на -40, как указал Акос, и у меня значения стали совершенно неправдоподобными. Как я уже говорил ранее, в продаже под маркировкой TMP36 продаются не менее трех вариаций. С нижним значением -40, -50 и -55. Если есть лупа - гляньте, что у вас на модуле после TMP36 написано.

    Соответственно, в коде нужно писать -0.4 -0.5 -0.55 в зависимости от вашего модуля. Попробуйте перебором(я делал это ладонями - там около 34-36 градусов должно быть) подобрать наиболее близкое и не забывайте, что погрешность довольно большая: +-3 градуса.

    Но больше всего радует то, что показания у вас больше не скачут :)
     
  18. patrickmo

    patrickmo Нуб

    У меня после TMP36 написано GZ.

    при -0.55 температура ладоней была 28 градусов. Попробую метод перебора + найти термометр домашний для сверки.

    Проверил перебором пока: из трех значений правдоподобнее всего смотрится 0.5.

    Буду дальше экспериментировать с тем, что купил в Амперке :)

    Спасибо за помощь Daemon2017 ;)
     
  19. Daemon2017

    Daemon2017 Нерд

    Не за что. Дайте знать, когда сделаете всё планируемое;)
     
  20. patrickmo

    patrickmo Нуб

    Когда я сделаю все, что запланировано, мне будет лет 80 :)
    Планов громадье :)