| Ваш IP: 3.236.132.132 | Online(25) - гости: 21, боты: 4 | Загрузка сервера: 1.01 ::::::::::::


DS18B20 без библиотеки (Arduino)

DS18B20 это датчик температуры с цифровым последовательным интерфейсом 1-Wire.

Основные характеристики датчика:

  • Погрешность измерения не больше 0,5 °С (для температур от -10 °С до +85 °С)
  • Температурный диапазон измерений от -55 С до +125 °С
  • Датчик питается напряжением от 3,3 В до 5 В.
  • Разрешающая способность от 9 до 12 бит
  • Каждый датчик обладает своим уникальным серийным кодом (адрес)
  • Не требуются дополнительные внешние элементы.
  • Можно подключить сразу до 127 датчиков к одной линии связи.
  • Информация передается по протоколу 1-Wire.

Схема подключения

При использовании модуля устанавливать подтягивающий резистор не нужно, он уже установлен на плате модуля.

Использование стандартной библиотеки DallasTemperature позволяет достаточно просто взаимодействовать с датчиками температуры DS18B20, но время измерения при использовании этой библиотеки достаточно большое. Ниже представлен скетч в котором используется только библиотека OneWire для управления шиной 1-Wire, при этом время измерения датчика заметно меньше при разрешении датчика 12 бит.

#include <OneWire.h>  // https://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
LiquidCrystal_I2C lcd(0x27, 16, 2);
OneWire  ds(A0); // Вход датчика
 
void setup() {
  lcd.init();
  lcd.backlight();
}
 
void loop() {
  lcd.setCursor(0, 0); lcd.print(dsRead(0), 2); // Опрос датчика 1
  //  lcd.setCursor(0,1);lcd.print(dsRead(1),2);// Опрос датчика 2
}
 
float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}

Скетч может поддерживать до 8 датчиков подключенных к одному входу. Для вывода температуры используется функция dsRead(0) в которой необходимо указать номер датчика. Для примера показания датчика выводятся на LCD1602 (I2C).

Вывод серийного номера датчика (адреса) и температуры в монитор порта:

#include <OneWire.h>
OneWire  ds(A0);
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  Serial.println(dsRead(0), 2); // Опрос датчика 1
  delay(1000); 
}
 
float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
 
  for( int i = 0; i < 8; i++) {
 Serial.print(' ');
 Serial.print(addr[kol][i], HEX);
 }
   Serial.print(" "); kol++;
  } 
 
 
 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}

Для удобства использования я упаковал выше показанный код в библиотеку — http://forum.rcl-radio.ru/misc.php?action=pan_download&item=735&download=1

Пример использования №1:

#include <DS18B20_RCL.h>

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println(dsRead(A0,0), 2); // вход датчика, номер датчика
  delay(5000);
}

Пример использования №2 (вывод температуры на TM1637):

#include <DS18B20_RCL.h>
#include <STM32_TM1637.h>                // https://rcl-radio.ru/wp-content/uploads/2020/02/STM32_TM1637_V1_3.zip
   STM32_TM1637 tm(2,3);// CLK, DIO

void setup() {
  tm.brig(7); // ЯРКОСТЬ 0...7
}

void loop() {
   tm.print_float(dsRead(A0,0),1,  0,0,0,0); 
   delay(1000);
}

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Удвоитель напряжения на микросхеме NE555

    Описание. Схема простейшего удвоителя напряжения использованием микросхемы NE555 показана на рисунке. Здесь IC NE555 подключен в схеме как нестабильный мультивибратор с частотой генерации около 9KHz. Базы двух транзисторов (Q1 и Q2) подключены напрямую к выходу мультивибратора (контакт 3). При выходе сигнала из мультивибратора в первый момент Q1 будет OFF и …Подробнее...
  • Преобразователь =12В\ 220В

    Преобразователь =12В\ 220В

    Схема преобразователя состоит из 3-х узлов: задающего мультивибратора, двухтактного транзисторного ключевого усилителя и повышающего трансформатора. Мультивибратор выполнен на микросхеме D1(D1.1  D1.2). Его частота зависит от R1 C1. На выходе мультивибратора включен инвертор на D1.4 который создает противофазные сигналы поступающие на базы VT1 VT2. Затем следует двухтактный усилитель на VT3 VT4 …Подробнее...
  • Термопары

    Термопары

    Термопара (термоэлектрический преобразователь) — устройство, применяемое для измерения температуры в промышленности, научных исследованиях, медицине, в системах автоматики. Принцип действия основан на эффекте Зеебека или, иначе, термоэлектрическом эффекте. Между соединёнными проводниками имеется контактная разность потенциалов; если стыки связанных в кольцо проводников находятся при одинаковой температуре, сумма таких разностей потенциалов равна нулю. …Подробнее...
  • TDA7499 — УМЗЧ 2х6 Вт

    TDA7499 — УМЗЧ 2х6 Вт

    TDA7499 — усилитель мощности звуковой частоты (класс АВ), с выходной мощность 6 Вт на канал (стерео). Усилитель относиться к классу Hi-Fi аппаратуры. В усилителе имеются функции STANDBY и MUTE, беззвучное включение и выключение (отсутствие щелчков), защита выхода от КЗ на землю, тепловая защита и защита от перегрузки. ИМС TDA7499 может …Подробнее...
  • Логический пробник для ТТЛ и ТТЛШ

    Схема отличается высокой точностью и возможностью контроля логических уровней «1» и «0», К3 и «Не определено». При неподключенном входе пробника светится светодиод «Не определено». Резисторы R1.R4 желательно применить с допуском 1%. ОУ любые, со своими частотными коррекциями, важно только, чтобы выходной ток был не менее 15 мА и Rвх не …Подробнее...