Как стать автором
Обновить

Автономное устройство на ардуино, сигнализирующее об повышении (понижении) температуры

Время на прочтение3 мин
Количество просмотров18K

Введение


Данное устройство предназначено для определения температуры на расстоянии. Так как я не нашел нужной мне готовой инструкции по сборке данного устройства, а покупать за 2+ тысячи не очень хотелось, было принято решение сделать все на ардуино (не дорого и не очень сложно).

Инструкция по сборке


Для сборки проекта нам понадобится:

  • Датчик температуры DS18B20 1 метр. (Герметичный)
  • Экран 0.96 128x64 OLED
  • Breadboard
  • Набор проводов Папа-Папа
  • Микроконтроллер Arduino Uno
  • Резистор

Для реализации проекта нам необходимо установить arduino IDE и сразу несколько библиотек:

  • OneWire Arduino Library
  • OLED I2C_OLED_I2C с поддержкой Русского и Украинского языков.
  • Dallas temperature

Поговорим немного насчет макетной платы. Данную макетную плату используют для быстрой сборки схем без пайки и радиоэлементов и провод для соединения. Макетные платы бывают различных размеров, но в большинстве случаев они состоят из вот таких одинаковых блоков:

image

Схема электрических соединений гнезд изображена на правом рисунке: пять отверстий с каждой стороны, в каждом из рядов (в данном случае 30) электрически соединены между собой. Слева и справа находится по две линии питания: здесь все отверстия в столбце соединены между собой. Прорезь по середине предназначена для установки и удобного извлечения микросхем в корпусах. Для сборки схемы в отверстия вставляются радиодетали и перемычки.

После того как мы разобрались с макетной платой, теперь можно переходить к подключениям модулей. Для начала подключим дисплей следующим образом:

image

image

В данном случае мы подключили 5V к “+” на макетной плате (желтый провод), а GND к ”-” (белый провод), чтобы в последствии всё питание на модулях подключать к “+” и “-” на макетной плате.

Далее подключаем датчик температуры DS18B20 при помощи резистора как показано на фотографии ниже:

image

image

В нашем случае, для удобства мы подключили все провода датчика к макетной плате и оранжевым проводом “Папа-папа” подключили к Pin 10.

Половина дела сделано, осталось только подключить сигнализирующие устройства, а именно: светодиод x2 (красный для повышенной температуры, синий для пониженной) и обычный пьезоизлучатель(в простонародье “пищалка”). Светодиод подключается очень просто, “+” это длинный стержень, а минус это короткий стержень. Вставляем его в плату, подсоединяем обязательно к нему резистор и при помощи проводов “Папа-папа” подключаем короткий стержень синего светодиода к 5 пину, а короткий стержень красного светодиода к 12 пину.

Пищалку же просто подключаем черный провод к “-”, красный провод к 13пину.

Вот так все должно получится:

image

Самое главное (скетч)


#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).

Фото конечного продукта:

image
Теги:
Хабы:
Всего голосов 24: ↑6 и ↓18-12
Комментарии23

Публикации