Введение
Данное устройство предназначено для определения температуры на расстоянии. Так как я не нашел нужной мне готовой инструкции по сборке данного устройства, а покупать за 2+ тысячи не очень хотелось, было принято решение сделать все на ардуино (не дорого и не очень сложно).
Инструкция по сборке
Для сборки проекта нам понадобится:
- Датчик температуры DS18B20 1 метр. (Герметичный)
- Экран 0.96 128x64 OLED
- Breadboard
- Набор проводов Папа-Папа
- Микроконтроллер Arduino Uno
- Резистор
Для реализации проекта нам необходимо установить arduino IDE и сразу несколько библиотек:
- OneWire Arduino Library
- OLED I2C_OLED_I2C с поддержкой Русского и Украинского языков.
- Dallas temperature
Поговорим немного насчет макетной платы. Данную макетную плату используют для быстрой сборки схем без пайки и радиоэлементов и провод для соединения. Макетные платы бывают различных размеров, но в большинстве случаев они состоят из вот таких одинаковых блоков:
Схема электрических соединений гнезд изображена на правом рисунке: пять отверстий с каждой стороны, в каждом из рядов (в данном случае 30) электрически соединены между собой. Слева и справа находится по две линии питания: здесь все отверстия в столбце соединены между собой. Прорезь по середине предназначена для установки и удобного извлечения микросхем в корпусах. Для сборки схемы в отверстия вставляются радиодетали и перемычки.
После того как мы разобрались с макетной платой, теперь можно переходить к подключениям модулей. Для начала подключим дисплей следующим образом:
В данном случае мы подключили 5V к “+” на макетной плате (желтый провод), а GND к ”-” (белый провод), чтобы в последствии всё питание на модулях подключать к “+” и “-” на макетной плате.
Далее подключаем датчик температуры DS18B20 при помощи резистора как показано на фотографии ниже:
В нашем случае, для удобства мы подключили все провода датчика к макетной плате и оранжевым проводом “Папа-папа” подключили к Pin 10.
Половина дела сделано, осталось только подключить сигнализирующие устройства, а именно: светодиод x2 (красный для повышенной температуры, синий для пониженной) и обычный пьезоизлучатель(в простонародье “пищалка”). Светодиод подключается очень просто, “+” это длинный стержень, а минус это короткий стержень. Вставляем его в плату, подсоединяем обязательно к нему резистор и при помощи проводов “Папа-папа” подключаем короткий стержень синего светодиода к 5 пину, а короткий стержень красного светодиода к 12 пину.
Пищалку же просто подключаем черный провод к “-”, красный провод к 13пину.
Вот так все должно получится:
Самое главное (скетч)
#include <Wire.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h> //подключение библеотек для DS18B20
#define ONE_WIRE_BUS 10 // pin к которому подключен DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#include <OLED_I2C.h>
OLED myOLED(8, 9, 8); // Подключение дисплея, 8 pin-SDA, 9pin-SCL
extern uint8_t RusFont[]; // Русский шрифт
extern uint8_t BigNumbers[]; // Большие цифры
extern uint8_t SmallFont[]; // Маленький шрифт
void setup()
{
pinMode(13, OUTPUT); // Объявить pin 13 как выход
pinMode(12, OUTPUT);// Объявить pin 12 как выход
pinMode(5, OUTPUT); // Объявить pin 5 как выход
sensors.begin();// Включение датчика
myOLED.begin();// Включение дисплея
myOLED.setFont(RusFont);
}
void loop()
{
if (sensors.getTempCByIndex(0)>70){ //Проверка датчика температуры(при температуре >70 будет включаться лампочка и сирена)
digitalWrite(5,255);// Включение лампочки
tone(13, 2500); // Включаем звук 2500 Гц
delay(400);// Пауза 0.4 сек
digitalWrite(5,LOW);// Выключение лампочки
}
else{
digitalWrite(5,LOW);
}
if (sensors.getTempCByIndex(0)<25){ //Проверка датчика температуры(при температуре <45 будет включаться лампочка и сирена)
digitalWrite(12,255); // Включение лампочки
tone(13, 2500); // Включаем звук 2500 Гц
delay(400); // Пауза 0.4 сек
digitalWrite(12,LOW); // Выключение лампочки
}
else{
digitalWrite(12,LOW);
}
if ((sensors.getTempCByIndex(0)<70) and (sensors.getTempCByIndex(0)>45)){
noTone(13); // Выключаем звук
}
sensors.requestTemperatures();
myOLED.clrScr(); // Очищаем экран
myOLED.setFont(RusFont);
myOLED.print("Ntvgthfnehf", CENTER, 0); // Вывод текста русскими буквами
myOLED.setFont(SmallFont);
myOLED.print("vk.com/tupo_izi123", CENTER, 55); // Вывод текста
myOLED.setFont(BigNumbers);
myOLED.print(String(sensors.getTempCByIndex(0) , 1), CENTER, 10); // Отображение значения температуры, с точностью до десятых
myOLED.update();
delay(100);
}
В данном скетче у меня выставлена температура выше 70 и ниже 45 градусов, вы же можете поставить любую другую (от -55 до +125 °C).
Фото конечного продукта: