Безынерционное измерение температуры воздуха ультразвуком

2808faa0fd9f4d2ab9ceaa881e7e0048.jpgПривет Хабр.Люблю не стандартные решения. Cейчас я покажу, как измерять температуру воздуха с помощью ультразвука.Схема до безобразия проста — берем Arduino (я взял Nano) и подключаем к нему ультразвуковой дальномер (pin 2 — Echo, pin 4 — Trig). Я использовал US-020, так как он более дальнобойный и дает более стабильные показания чем HC-SR04.bcceb7d9ca444ca0b77f4e6a03e51491.jpgЗаливаем скетч: #define Trig 4#define Echo 2#define Steps

static const float defDist = 173.2;//cmstatic const float defTemp = 17.0;//Celsius

void setup (){pinMode (Trig, OUTPUT); pinMode (Echo, INPUT); Serial.begin (57600);}unsigned long impulseTime=0;

void loop (){float dist = 0; for (int i = 0; i <50; i++){float distance_sm=0;digitalWrite(Trig, HIGH);delayMicroseconds(10);digitalWrite(Trig, LOW);impulseTime=pulseIn(Echo, HIGH);

distance_sm=float (impulseTime)/58.0; dist += distance_sm; delay (50);}dist /= 50.0; Serial.println («Distance:» + String (dist)); float Speed_of_sound = defDist/dist * sqrt (1.4×287.0*(273.15 + defTemp));//c = sqrt (X*R*T)Serial.println («Temp:» + String ((Speed_of_sound*Speed_of_sound)/(1.4×287.0) — 273.15));//T = (c*c)/(X*R) in Kelvin}

Располагаем ультразвуковой сонар в направлении какого-нибудь препятствия на дистанции порядка двух-трех метров (меньше — хуже точность, больше — сонар может не поймать эхо) и надежно фиксируем. У меня это от стола до потолка. Запускаем, смотрим дистанцию в мониторе последовательного порта. Правим скетч — заменяем defDist и defTemp на свои показания дистанции и текущей температуры. Стартовую температуру придется замерять, или указать на глаз (как я). Опять прошиваем.Все, в мониторе порта смотрим температуру объема воздуха между датчиком и препятствием: 2276d0627a3c440cbac868ad4d6e2d0c.jpg

А теперь пояснение «уличной магии». Согласно учебникам физики:

Скорость звука в газах зависит только от температуры и не зависит от давления газа.

И эта зависимость выражается формулой: c = sqrt (X*R*T), где: с — скорость звука, м/cХ — показатель адиабатыR — газовая постоянная, Дж/кг·К

Замеряя время отклика сонара и сравнивая его с дефолтным можно легко посчитать скорость звука. А зная скорость так же легко вычисляем температуру. Для большей точности усредняем показания датчика за 50 замеров.В системе отсутствует инерционный тепловой элемент, которому нужно время на нагрев либо охлаждение до температуры среды. По этому полностью отсутствует инерционность измерения — если проветрить комнату, то показания меняются очень резво. Точность конечно не ахти — порядка 0,5 градуса, но зато не шаблонно.

© Habrahabr.ru