Этот ультразвуковой дальномер HC-SR04 был усовершенствован с помощью датчика температуры LM35.
Ещё со школы можно вспомнить что скорость звука зависит от плотности воздуха, а плотность воздуха зависит от температуры.
Рассчитывать температуру мы будем по этой формуле
temp2 = ( temp/1023.0 )*5.0*1000/10;
Где temp2 это готовое значение температуры после формулы,
А где temp это сырое значение с датчика.
Что нам понадобится:
Имейте в виду что HC-SR04 бывает двух видов-
Вот у меня хороший и он стабильно измеряет расстояние.
Они оба измеряют от 4 см до 400 см.
Питаются от 3.3 до 5 v
Начнём с того что смакетируем всё это на макетной плате.
Ультразвуковой датчик:
Термистор LM35:
Должно получится так:
Далее мы заливаем скетч.
Скачать библиотеку для датчика HC-SR04 —
iarduino_hc-sr04.zip
[299.69 Kb] (скачиваний: 238)
Скачать скетч —
sketch_mar23f.zip
[338 b] (скачиваний: 177)
#include <iarduino_HC_SR04.h> // подключаем библиотеку для работы с ультразвукового датчика HC-SR04
iarduino_HC_SR04 hcsr(2,3); // обозначаем контакты Trig и Echo
int temp = 0; // сырое значение температуры
float temp2 = 0; // готовое значение температуры
void setup() { // запускаем 1 раз
Serial.begin(9600); // запускаем монитор порта
pinMode( A0, INPUT ); // обозначаем контакт А0 как вход
}
void loop() { // повторяется бесконечное количество раз
temp = analogRead(A0); // читаем значение контакта А0 и назначаем ему переменную temp
temp2 = ( temp/1023.0 )*5.0*1000/10; // вычисляем сырое значение по формуле чтобы получить готовое значение температуры
Serial.println(hcsr.distance(temp2)); // пишем готовую дальность в мониторе порта
delay(1000); // задержка 1 секунда
}
А вот скетч для lcd дисплея-
Скачать скетч —
sketch_mar23f-1.zip
[861 b] (скачиваний: 164)
#include <iarduino_HC_SR04.h> // подключаем библиотеку для работы с ультразвукового датчика HC-SR04
#include <LiquidCrystal_I2C.h> //подключаем библиотеку для работы с дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // обозначаем (адрес, столбцы, сторки)
iarduino_HC_SR04 hcsr(2,3); // обозначаем контакты Trig и Echo
int temp = 0; // сырое значение температуры
float temp2 = 0; // готовое значение температуры
void setup() { // запускаем 1 раз
lcd.init(); // инициализируем дисплей
lcd.backlight(); // включаем подсветку дисплея
pinMode( A0, INPUT ); // обозначаем контакт А0 как вход
}
void loop() { // повторяется бесконечное количество раз
temp = analogRead(A0); // читаем значение контакта А0 и назначаем ему переменную temp
temp2 = ( temp/1023.0 )*5.0*1000/10; // вычисляем сырое значение по формуле чтобы получить готовое значение температуры
lcd.setCursor(2, 0); // ставим курсор на 2 столбец и 0 строку
lcd.print(temp2); // пишем расстояние
lcd.setCursor(5,0);// ставим курсор на 5 столбец и 0 строку
lcd.print("cm"); // пишем см
delay(1000); // задержка 1 секунда
}
Пишите комментарии и вопросы я на всё отвечу!
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Источник: