Как хорошо известно, всем поклонникам аппаратной платформы Arduino датчик HC-SR04 – это ультразвуковой локатор для измерения расстояния [1-3].
Но скорость распространения ультразвуковых колебаний в воздухе изменяется поl действием различных физических факторов, таких как температура, влажность, давление [4]. Одним из важнейших параметров влияющих на скорость звука является температура воздуха. Таким образом измеряя какое-либо заранее определенное расстояние можно по изменению показаний ультразвукового локатора сделать вывод об изменении температуры воздуха. Следует заметить, что не является первым, кто до этого додумался [5]. Подключение датчика для измерения температуры является совершенно стандартным.
Для измерения температуры следует точно измерить базовое расстояние. В условиях реального практического применения следует также надежно зафиксировать датчик и убедится, что ничто не будет прикрывать ему обзор. Удобно направить лежащий на столе или полу датчик в потолок.
Управляющая программа
Для работы данного термометра автор написал следующую программу:
float alfa = sqrt((7/5*8.31)/0.029); // константа связывающая скорость звука и температуру alfa = sqrt((gamma*R)/M) https://ru.wikipedia.org/wiki/Скорость_звука
// Порты подключения УЗ датчика
int Trig = 12;
int Echo = 13;//float l = 1.80; //базовое расстояние для измерения температуры (м), задается при калибровке
float l = 1.68; //базовое расстояние для измерения температуры (м), задается при калибровкеint T; // измеряемая термодинамическая температура (К)
float time; //время прихода эха с расстояния l при температуре T (с)
float v; //скорость звука при температуре T (м/с)int dt = 1000; //Задержка между измерениями
void setup()
{
Serial.begin(9600);
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);}
void loop()
{// получение данных с УЗ датчика
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
time = pulseIn(Echo, HIGH);time=time*1.211*1e-6; // Вычисление времени прихода эха по данным датчика (c)
v=2*l/time; //расчет скорости звука при температуре T (м/c)
T=v*v/(alfa*alfa); //расчет искомой температуры T
//вывод измеренного значения температуры
Serial.print(“T = “);
Serial.println(T);delay(dt);
}
Данная программа по стандартному алгоритму определяет время прихода эха. Как известно [6], на выводе Echo датчика HC-SR04 формируется импульс длительностью от 150 мкс до 25 мс, который отображает расстояние до препятствия. Как установил автор экспериментальным путем, для того, что бы получить время прихода эха в секундах надо длительность импульса Echo умножить на 1,211 х 10-6. Затем вычисляется расстояние до препятствия.
где l – расстояние до препятствия (м), t – время прихода эха (с).
И, наконец, находится температура, по известной формуле, связывающей температуру воздуха и скорость звука [7].
где a – коэффициент в котором, показатель адиабаты, численно равен 7/5 для двухатомных газов, в том числе и для воздуха, R – универсальная газовая постоянная 8,31 Дж/(моль*К), M – молярная масса газа, для воздуха 0,029 кг/моль.
Результаты выполнения программы можно наблюдать в окне монитора последовательного порта.
В данном случае измеряется именно температура воздуха, а не температура какого-либо термометрического прибора, например терморезистора. Таким образом, удается обойти неизбежную в других случаях инерционность термометрического элемента.
Литература
- 1) http://robocraft.ru/blog/electronics/772.html
- 2) https://arduinomaster.ru/datchiki-arduino/ultrazvukovoj-dalnomer-hc-sr04/
- 3) http://2shemi.ru/ultrazvukovoj-datchik-izmereniya-rasstoyanij-hc-sr04/
- 4) Енохович А.С. Справочник по физике и технике. – М.:Просвещение, 1989. – 224 с.
- 5) https://geektimes.ru/post/258882/
- 6) http://www.zi-zi.ru/docs/senser/Description_HC-SR04.pdf
- 7) https://ru.wikipedia.org/wiki/Скорость_звука
Файлы скачайте в архиве. Автор проекта – Denev
Тоже самое что и [z5], только про точность ни слова. Лабораторные работы делал?