Pull to refresh

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

DIY

Привет, Хабр.

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

Схема до безобразия проста — берем Arduino (я взял Nano) и подключаем к нему ультразвуковой дальномер (pin 2 — Echo, pin 4 — Trig). Я использовал US-020, так как он более дальнобойный и дает более стабильные показания чем HC-SR04.



Заливаем скетч:
#define Trig 4
#define Echo 2

#define Steps

static const float defDist = 173.2;//cm
static 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 на свои показания дистанции и текущей температуры. Стартовую температуру придется замерять, или указать на глаз (как я). Опять прошиваем.

Все, в мониторе порта смотрим температуру объема воздуха между датчиком и препятствием:



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

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

Замеряя время отклика сонара и сравнивая его с дефолтным можно легко посчитать скорость звука. А зная скорость так же легко вычисляем температуру. Для большей точности усредняем показания датчика за 50 замеров.

В системе отсутствует инерционный тепловой элемент, которому нужно время на нагрев либо охлаждение до температуры среды. По этому полностью отсутствует инерционность измерения — если проветрить комнату, то показания меняются очень резво. Точность конечно не ахти — порядка 0,5 градуса, но зато не шаблонно.
Tags:arduinoдатчикультразвук
Hubs: DIY
Total votes 183: ↑169 and ↓14 +155
Views79.5K

Popular right now

Data analyst
from 70,000 to 120,000 ₽ГдеМатериалRemote job
Senior Frontend разработчик
from 200,000 ₽АбсолютКартаRemote job
Frontend / Backend Разработчик (Vue)
from 200,000 ₽StroybotRemote job
JavaScript разработчик
from 100,000 to 270,000 ₽WebLab TechnologyRemote job
Mobile Developer (Kotlin, Kotlin Multiplatform Mobile, KMM)
to 400,000 ₽Кошелёк.руRemote job

Top of the last 24 hours