Как стать автором
Поиск
Написать публикацию
Обновить

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

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

Введение


Данное устройство предназначено для определения температуры на расстоянии. Так как я не нашел нужной мне готовой инструкции по сборке данного устройства, а покупать за 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

Публикации

Ближайшие события