Эксперимент 15. Комнатный термометр

Тема в разделе "Arduino & Shields", создана пользователем angabanga, 17 дек 2015.

  1. angabanga

    angabanga Нерд

    Я хотел спросить, может кто-нибудь в данном эксперименте сопостовлял вычесления в коде со своими. Я просто не понял , что в этом эксперименте значит переменная r1 и соответственно ход вычеслений. Только что сам через формулу заивисимости сопротивления термистор от температуры вывел температуру и получил не совсем то, что надо. Т к в формуле есть номинальное значения температуры и сопротивления. А как программа находит остальные- не понятно, она сразу пишет кусок формулы в одну переменную. Может кто- то уже разбирал?
     
  2. angabanga

    angabanga Нерд

    // Огромное количество готового кода уже написано другими людьми
    // и хранится в виде отдельных файлов, которые называются
    // библиотеками. Для использования кода из библиотеки, её нужно
    // подключить (англ. include). Библиотека «math» даёт разные
    // математические функции, в том числе функцию логарифма
    // (англ. log), которая нам понадобится далее
    #include <math.h>

    #define FIRST_LED_PIN 2
    #define LED_COUNT 10

    // Параметр конкретного типа термистора (из datasheet):
    #define TERMIST_B 4300

    #define VIN 5.0

    void setup()
    {
    for (int i = 0; i < LED_COUNT; ++i)
    pinMode(i + FIRST_LED_PIN, OUTPUT);
    }

    void loop()
    {
    // вычисляем температуру в °С с помощью магической формулы.
    // Используем при этом не целые числа, а вещественные. Их ещё
    // называют числами с плавающей (англ. float) точкой. В
    // выражениях с вещественными числами обязательно нужно явно
    // указывать дробную часть у всех констант. Иначе дробная
    // часть результата будет отброшена

    float voltage = analogRead(A0) * VIN / 1023.0;
    float r1 = voltage / (VIN - voltage);


    float temperature = 1./( 1./(TERMIST_B)*log(r1)+1./(25. + 273.) ) - 273;

    for (int i = 0; i < LED_COUNT; ++i) {
    // при 21°С должен гореть один сегмент, при 22°С — два и
    // т.д. Определяем должен ли гореть i-й нехитрым способом
    boolean enableSegment = (temperature >= 21+i);
    digitalWrite(i + FIRST_LED_PIN, enableSegment);
    }
    }
     
  3. angabanga

    angabanga Нерд

    все , разобрался. выразил вольтаж через ток с сопротивлением и все пересокращалось и пришло к нужному ответу