Делаем термометр на основе Arduino UNO и датчика DS18B20

В этом уроке мы будем использовать датчик температуры DS18B20 с Arduino UNO для создания термометра. Датчик DS18B20 является хорошим вариантом, когда в проекте с высокой точностью требуется хорошая реакция. Мы покажем как подключить DS18B20 к вашему Arduino UNO и отобразить данные температуры на ЖК-дисплее 16x2.

Обзор датчика DS18B20

Датчик DS18B20 взаимодействует с Arduino через 1-проводную шину. По определению для связи с Arduino требуется только одна линия данных (и земля).

Рабочая температура датчика колеблется от -55° C до + 125° C с точностью ± 0,5° C в диапазоне от -10° C до + 85° C. Кроме того, DS18B20 может получать питание непосредственно от линии передачи данных («паразитный источник питания») без необходимости внешнего источника питания.

Каждый DS18B20 имеет уникальный 64-битный последовательный код или адрес, который позволяет нескольким DS18B20s работать на той же однопроводной шине. Поэтому использование микропроцессора упрощает управление несколькими DS18B20, распределенными по большой площади. Приложения для этой функции включают в себя экологический контроль, системы контроля температуры в зданиях и механическом оборудовании.

Особенности DS18B20

  • Необходим только один однопроводный интерфейс для связи между микроконтроллером и датчиком.
  • Требуется только один внешний компонент: резистор 4,7 кОм.
  • Может питаться от линии передачи данных напрямую, требуя напряжения от 3,0 до 5,5 В.
  • Каждое устройство имеет уникальный 64-битный последовательный код, хранящийся на встроенном ПЗУ.
  • Может измерять температуру в диапазоне от -55° C до + 125° C (от -67° F до + 257° F).
  • Точность ± 0,5° C  в диапазоне от -10° C до + 85° C.

В этом проекте используется DS18B20, который поставляется в форме температурного зонда, который является водонепроницаемым. Использование водонепроницаемого датчика расширяет возможности - датчик температуры сможет измерить температуру жидкостей, таких как вода, химикаты, чай и кофе.

Требования к комплектующим

Требования к оборудованию для вашего термометра достаточно стандартные, нам пригодятся:

  • Arduino UNO
  • ЖК-дисплей 16х2
  • Датчик температуры DS18B20
  • Провода для перемычек
  • Резистор 1K
  • Макетная плата

Схема соединения

Сделайте соединения согласно приведенной ниже схеме.

Соединяем датчик и Ардуино

  • VCC -> Arduino 5V, плюс резистор 4,7K, идущий от VCC к Data
  • Data -> Пин 7 Arduino
  • GND -> GND Arduino

Соединения для ЖК-дисплея и Arduino UNO

  • Пин 1 -> GND
  • Пин 2 -> VCC
  • Пин 3 -> Arduino Пин 3
  • Пин 4 -> Arduino Пин 33
  • Пин 5 -> GND
  • Пин 6 -> Arduino Пин 31
  • Пин 7-10 -> GND
  • Пин 11 -> Arduino Пин 22
  • Пин 12 -> Arduino Пин 24
  • Пин 13 -> Arduino Пин 26
  • Пин 14 -> Arduino Пин 28
  • Пин 15 -> VCC через резистор 220 Ом
  • Пин 16 -> GND

Подключите потенциометр, как показано выше, к контакту 3 на ЖК-дисплее, для управления контрастностью.

Этот проект работает на температурах до 125° C. В случае наличия некоторого диссонанса в значении показанной температуры дважды проверьте соединения с резистором, подключенным к DS18B20. После соединения всего, что описано выше, мы можем перейти к программированию.

Исходный код для термометра

Перед загрузкой исходного кода вам нужно настроить две библиотеки, необходимые для запуска этого кода в среде Arduino.

После скачивания обеих библиотек переместите файлы в папку библиотек Arduino по умолчанию. Затем скопируйте код в IDE Arduino и загрузите его после двойной проверки правильности подключения вашего датчика.

//Code begins
#include <OneWire.h>
#include <LiquidCrystal.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 7

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

float tempC = 0;
float tempF = 0;

LiquidCrystal lcd(12,11,5,4,3,2);

void setup() {
  sensors.begin();
  lcd.begin(16,2);
  lcd.clear();
  pinMode(3, OUTPUT);
  analogWrite(3, 0);
  Serial.begin(9600);
  
}

void loop() {
  sensors.requestTemperatures();
  tempC = sensors.getTempCByIndex(0);
  tempF = sensors.toFahrenheit(tempC);
  delay(1000);
  
  Serial.println(tempC);
  lcd.setCursor(0,0);
  lcd.print("C: ");
  lcd.print(tempC);
  lcd.print(" degrees");
  lcd.setCursor(0,1);
  lcd.print("F: ");
  lcd.print(tempF);
  lcd.print(" degrees");
}

Примерно это выглядит так:

Мы смогли измерить температуру до 100°C с помощью этого датчика! Он очень отзывчив.

После того, как вы создали проект, потестируйте устройство, погрузив датчик в горячую и холодную воду.

Ардуино+