Датчик температури LM35. Перемикач нахилу

 Ще один корисний прилад, який часто використовується у сучасних пристроях – це датчик температури. Навіть у вашому комп'ютері є відразу кілька датчиків температури, за допомогою яких система стежить за перегріванням ключових компонентів - процесора, відеокарти, блоку живлення та інших вузлів. Найпопулярніший же приклад використання датчика температури будинку - термостат. Цей пристрій постійно стежить за температурою повітря і регулює подачу енергії в систему опалення. Суміжний приклад – казан для нагрівання води.

У нашому уроці ми використовуємо датчик TMP35. Замість нього можна використовувати будь-який інший схожий датчик: TMP35, TMP37, LM35, LM335 та подібні. Виглядає датчик як звичайний транзистор:

ardu_temp_tmp35

Можна легко сплутати, тому рекомендую завжди уважно читати маркування на таких пристроях (та й взагалі спочатку завжди читайте, потім підключайте :). Саме цей датчик має такі характеристики:

  • напруга живлення: від 2,7 до 5,5;
  • похибка: 2 градуси;
  • температура, що вимірюється: від 10°C до 125°C
  • споживаний струм: 50 мкА.

    Підключення

    Датчик TMP35 має три виводи (три ноги). Якщо подивитися на датчик з боку цих висновків та зрізом вгору, як показано на малюнку,

    то ліворуч буде позитивний контакт живлення (+2.7 - 5.5В),
    по центру - вихід на контролер,
    і праворуч - негативний контакт живлення (земля).

    tmp_1

    Датчик аналоговий, а значить, на його виході ми маємо не 0 або 1, а напругу в діапазоні від 0 до 5 вольт. Отже, ми повинні згадати розділ про аналого-цифрове перетворення (АЦП) сигналів Arduino . Маючи на увазі, що у Ардуїно Уно є шість аналогових входів (A0-A5), підключаємо наш датчик за наступною схемою:

    ЗОВНІШНІЙ ВИГЛЯД МАКЕТУ

    tmpx1_bb

    ПРИНЦИПОВА СХЕМА

    tmpx1_схема

    Ось так має виглядати зібрана схема.

    Ардуїно: датчик температури LM35

    Програма

    Підключивши датчик температури до Ардуїна, починаємо писати програму. Перше, що ми зробимо, це виведемо необроблений сигнал з аналогового входу в послідовний порт, щоб просто зрозуміти, як змінюється значення на вході A0. Нам знадобиться проста програма:

    int raw = 0;
    float temp = 0;
    
    void setup() {
        Serial.begin(9600);
        pinMode( A0, INPUT );
    }
    
    void loop() {
        raw = analogRead(A0);
        temp = ( raw/1023.0 )*5.0*1000/10;
        Serial.println(temp);
        delay(1000); 
    }

    Увага, математика! У програмі можна побачити вираз:

    temp = (сирий/1023,0)*5,0*1000/10;

    Воно необхідно для того, щоб перетворити аналоговий сигнал датчика на градуси Цельсія. Справа тут ось у чому. Всі аналогові датчики мають важливу характеристику відношення кількості вольт до одиниці вимірюваної величини. Наприклад, у специфікації до нашого датчика tmp35 написано, що кожен градус вимірюваної температури відповідає 10 мілівольтам напруги на виході. Виходячи з цих міркувань, прочитане за допомогою analogRead значення ми спочатку перетворимо до кількості Вольт:

     вольти = (значення АЦП/1023) * 5

    Така процедура називається нормуванням. Тут  1023 - максимальне значення, яке може повернути нам 10-бітний АЦП, вбудований в Ардуїно Уно.
    5 - робоча напруга АЦП.

    Потім перетворимо ці вольти на градуси Цельсія:

    градуси = (вольти * 1000)/10

    Перетворюємо вольти на мілівольти (*1000), і ділимо на 10 (те саме число зі специфікації!).

    Загалом, навіть якщо нічого не зрозуміло, завантажуємо програму на Ардуїно та спостерігаємо за температурою навколишнього повітря. Наприклад, у нас у лабораторії датчик оцінив температуру наступним чином:

    ph_temp_1

    Цілком собі правдиве значення. А тепер піднесемо прилад до відкритого вікна (на вулиці зима -10 ° C):

    ph_temp_2

    Працює! Датчик негайно реєструє зниження температури.

    Робимо термостат

    Тепер додамо в програму якусь дію, яка буде здійснюватися якщо температура впаде нижче за заданий нами поріг. Нехай цей поріг дорівнюватиме 15°C. Найпростіше, що ми можемо зробити, - це запалювати на Ардуїно штатний світлодіод #13. Виходить така ось програма:

    int raw = 0;
    float temp = 0;
    
    void setup() {
        pinMode( A0, INPUT );
    }
    
    void loop() {
        raw = analogRead(A0);
        temp = ( raw/1023.0 )*5.0*1000/10;
        if (temp < 15)
            digitalWrite(13, HIGH);
        else
            digitalWrite(13, LOW);
        delay(1000); 
    }

    Хтось забув закрити вікно – температура різко опустилася нижче 15 – світлодіод запалюється. Закриваємо вікно, активно дихаємо - світлодіод гасне. А тепер уявіть, що ви запалюєте світлодіод, а подаєте сигнал на реле, яке включає обігрівач в кімнаті. Виходить готовий термостат!

    Небагато змінивши програму можна відслідковувати не зниження, а перевищення заданого рівня. Наприклад, зручно буде стежити за температурою всередині, скажімо, серверною, і при збільшенні температури до 40 градусів включати витяжку!

Немає коментарів:

Дописати коментар