Создадим простой проект бесконтактного термометра для мониторинга собственной температуры на основе Arduino.
Идея проекта
Идеей проекта является возможность измерения температуры человека без участия постороннего.
Это устройство использует инфракрасный термометр с ЖК-дисплеем и ультразвуковым датчиком, которое обнаруживает человека и затем отображает прочитанную температуру.
В проекте используется ультразвуковой датчик HC-SR04 для определения расстояния между пользователем и датчиком. Если это расстояние находится в указанных пределах, снятие показаний начнутся с задержкой в 10 миллисекунд, температура будет отображаться на ЖК-дисплее и 3 коротких звука зуммера привлекут внимание читателя к ЖК-экрану.
После того, как температура измерена, термометр издает короткий звук через активный зуммер, чтобы привлечь внимание пользователя.
Комплектующие
Для нашего бесконтактного термометра нам понадобится приличный список деталей для использования в проекте:
- Arduino Uno × 1
- ЖК-дисплей 16 х 2 × 1
- Резистор 47,5 кОм × 2
- Резистор 220 Ом × 1
- Поворотный потенциометр, 10 кОм × 1
- Зуммер (пьезо, активный) × 1
- Ультразвуковой датчик HC-SR04 × 1
- Инфракрасный термометр MLX90614ESF-BAA × 1
- Макет (универсальный) × 1
Для оптимального чтения держитесь как можно ближе к термометру. Этот датчик имеет поле зрения 90 градусов, на каждый сантиметр от датчика зона чувствительности увеличивается на 2 см.
Также нам, конечно, пригодится установленная IDE Arduino.
Схема соединения
Соединяем все детали согласно схеме ниже:
Соединяем LCD (ЖК-дисплей):
- LCD RS <=> digital pin 12
- LCD Enable <=> digital pin 11
- LCD D4 <=> digital pin 5
- LCD D5 pin <=> digital pin 4
- LCD D6 pin <=> digital pin 3
- LCD D7 pin <=> digital pin 2
- LCD R/W pin <=> ground
- LCD VSS pin <=> ground
- LCD VCC pin <=> 5V
Резистор 10 кОм:
- выводы на +5В и ground (земля)
- движок на LCD VO пин (pin 3)
Соединяем HC-SR04:
- Pin 8 <=> Trig
- Pin 9 <=> Echo
- VCC <=> 5V
- Gnd <=> Ground
Соединяем MLX90614:
- VDD <=> 3.3V
- VSS <=> GND
- SDA <=> A4
- SCL <=> A5
Скетч проекта
Скетч для нашего устройства вы можете скопировать ниже для загрузки в вашу IDE.
Нам также предварительно нужно установить основные библиотеки:
#include <LiquidCrystal.h> #include <Wire.h> #include <SparkFunMLX90614.h> const int triggerPin = 8; const int echoPin = 9; const int buzzerPin = 10; IRTherm Therm; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { pinMode(triggerPin, OUTPUT); pinMode(echoPin, INPUT); Therm.begin(); Therm.setUnit(TEMP_C); // set the unit of measurement to celsius lcd.begin(16, 2); pinMode(buzzerPin, OUTPUT); //Set the buzzer pin digitalWrite(buzzerPin, LOW); } void loop() { if (GetMeasuredDistance() <= 8 && Therm.read()) // the value of 8 cm can be tweaked to adjust the reading distance { lcd.print("Your temp is :"); lcd.setCursor(0,1); lcd.print(String(Therm.object(), 2) + "* C"); for (int i = 0; i < 3; i++); { digitalWrite(buzzerPin, HIGH); delay(10); digitalWrite(buzzerPin, LOW); delay(10); } } else if (GetMeasuredDistance() >= 20) { lcd.print("Come closer :)"); } else { lcd.print("The Ambiant temperature is :"); lcd.setCursor(0,1); lcd.print(String(Therm.ambient(), 2) + "*C"); } delay(5000); } int GetMeasuredDistance() { long duration; digitalWrite(triggerPin, LOW); delayMicroseconds(5); digitalWrite(triggerPin, HIGH); delayMicroseconds(10); digitalWrite(triggerPin, LOW); duration = pulseIn(echoPin, HIGH); return duration * 0.034 / 2; // This return a distance in cm }
К сожалению, не было возможности протестировать этот бесконтактный термометр на Ардуино, тем не менее, принципиальная схема и код должны работать как задумано. Будьте здоровы и позитивны.