Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp32 [2020/05/21 13:09] labuser29products:laboratory_iot:exp32 [2021/05/23 13:59] (текущий) – [Эксперимент 32. Преобразование сигнала терморезистора] labuser29
Строка 11: Строка 11:
 Формула для расчета напряжения на выходе делителя: Формула для расчета напряжения на выходе делителя:
 {{ :products:esp-iot:f1.png?nolink |}}  {{ :products:esp-iot:f1.png?nolink |}} 
- Согласно (1) напряжение на выходе делителя равно напряжению на входе умноженному на R1 и деленному на сумму R1 и R2.+ Согласно (1) напряжение на выходе делителя равно напряжению на входе умноженному на R1 и деленному на сумму R1 и R2. Но нас интересует не напряжение н выходе делителя. Мы хотим найти сопротивление термиорезистора. Он включен в нижнее плечо делителя, которое обозначено как R2. Следовательно нам нужно выразить R2 из формулы.  
 + 
 +{{ :products:esp-iot:f2.png?nolink |}} 
 + 
 +Теперь разберемся что есть что. Напряжение на выходе делителя мы получаем от АЦП и записываем его, например, в переменную ''value''. А напряжение на входе делителя, как видно из схемы, равно напряжению питания. Если напряжение питания подать на вход нашего АЦП результатом преобразования станет число 1023 - максимально возможное. Зная подставим в формулу (2) наши данные. 
 + 
 +{{ :products:esp-iot:f3.png?nolink |}} 
 + 
 +Теперь вычислить сопротивление R2 не составит труда так как в правой части формулы все операнды известны. Сопротивление R1 это 10 килоом у нас, ''value'' у нас получается в результате преобразования, а 1023 вообще константа.  
 + 
 +Таким образом сопротивление терморезистора мы смогли вычислить. Но нам нужна температура. Температура зависит от этого сопротивления, значит зная сопротивление мы сможем вычислить температуру. Для этого можно использовать уравнение [[https://ru.wikipedia.org/wiki/Уравнение_Стейнхарта_—_Харта|Стейнхарта-Харта]], которое позволит вычислить температуру достаточно точно. 
 + 
 +{{ :products:esp-iot:f4.png?nolink |}} 
 + 
 +Это достаточно сложное уравнение, требующее большое количество параметров, которые могут быть неизвестны для конкретного терморезистора. Поэтому обычно применяют упрощенную формулу: 
 + 
 +{{ :products:esp-iot:f5.png?nolink |}} 
 + 
 +Для этой зависимости нам надо знать To (этот параметр для комнатной температуры (25 °C) = 298.15 K), B (для нашего терморезистора равен 3950 - коэффициент, который зависит от используемого термистора), и Ro (сопротивление при комнатной температуре. В данном случае он равен 10 КОм). Подставляем R2 (измеренное сопротивление) и получаем значение T (температура по Кельвину), которую преобразовываем в °C. Чтобы получить температуру по Цельсию, нужно отнять от полученного результата температуру абсолютного нуля (273.15).  
 + 
 +==== Схема эксперимента ==== 
 +Оставляем схему собранную на прошлом эксперименте. 
 +{{ :products:esp-iot:exp13.1_sch.png?nolink |}} 
 +//Рисунок 1. Электрическая принципиальная схема эксперимента// 
 + 
 +{{ :products:esp-iot:exp13.1_mont.png?direct&600 |}} 
 +//Рисунок 2. Монтажная схема эксперимента// 
 + 
 +==== Программный код эксперимента ==== 
 +<file python Exp32.py[enable_line_numbers="2", start_line_numbers_at="1"]> 
 +from machine import Pin 
 +import time 
 +import math 
 +_init() 
 + 
 +Bcoef = 3950 
 +R1 = 10000 
 +Rtnom = 10000 
 +T0 = 273.15 
 + 
 +adc = machine.ADC(0) 
 + 
 +while True: 
 +    value = adc.read() 
 + 
 +    R2 = (-R1 * value)/(value-1023) 
 + 
 +    temp = 1 / (math.log(R2 / Rtnom) / Bcoef + 1/(25+T0)) -T0 
 + 
 +    print(temp) 
 +    time.sleep(1) 
 +</file> 
 + 
 +Теперь программа в терминал печатает температуру в градусах по Цельсию. Ты можешь измерить температуру окружающей среды, собственного тела, воды и даже почвы в цветочном горшке. Терморезистор в водонепроницаемом нержавеющем корпусе все это легко переживет.