Как подключить датчик ds18b20 к ардуино

Содержание:

DHT11 против DHT22/AM2302

У нас есть две версии серии датчиков DHTxx. Они выглядят немного похоже и имеют одинаковую распиновку, но имеют разные характеристики. Вот подробности.

DHT22 является более дорогой версией, которая, очевидно, имеет лучшие характеристики. Диапазон измерения температуры составляет от -40°C до +80°C с точностью ±0,5 градуса, а диапазон температур DHT11 составляет от 0°C до 50°C с точностью ±2 градуса. Также датчик DHT22 имеет более широкий диапазон измерения влажности, от 0 до 100% с точностью 2-5%, в то время как диапазон измерения влажности DHT11 составляет от 20 до 80% с точностью 5%.

Сравнение спецификаций DHT11 и DHT22/AM2302
 
  DHT11 DHT22
Рабочее напряжение от 3 до 5 В от 3 до 5 В
Максимальный рабочий ток 2,5 мА макс 2,5 мА макс
Диапазон измерения влажности 20-80% / 5% 0-100% / 2-5%
Диапазон измерения температуры 0-50°C / ± 2°C от -40 до 80°C / ± 0,5°C
Частота выборки 1 Гц (чтение каждую секунду) 0,5 Гц (чтение каждые 2 секунды)
Размер корпуса 15,5 мм х 12 мм х 5,5 мм 15,1 мм х 25 мм х 7,7 мм
Преимущество Ультра низкая стоимость Более точный

Хотя DHT22/AM2302 более точен и работает в большем диапазоне температур и влажности; есть три вещи, в которых DHT11 сильно превосходит DHT22. Он более дешевый, меньше по размеру и имеет более высокую частоту выборки. Частота выборки DHT11 составляет 1 Гц, то есть одно чтение каждую секунду, в то время как частота выборки DHT22 составляет 0,5 Гц, то есть одно чтение каждые две секунды.

Рабочее напряжение обоих датчиков составляет от 3 до 5 вольт, в то время как максимальный ток, используемый во время преобразования (при запросе данных), составляет 2,5 мА. И самое приятное, что датчики DHT11 и DHT22/AM2302 являются «взаимозаменяемыми», то есть, если вы создаете свой проект с одним датчиком, вы можете просто отключить его и использовать другой датчик. Ваш код, возможно, придется немного изменить, но, по крайней мере, схема не изменится!

Для получения более подробной информации обратитесь к техническим описаниям датчиков DHT11 и DHT22/AM2302.

LCD дисплей 1602

Жидкокристаллический дисплей (Liquid Crystal Display) сокращенно LCD построен на технологии жидких кристаллов. Самый распространенный LCD дисплей на рынке является дисплей LCD 1602A, который может отображать ASCII символа в 2 строки (16 знаков в 1 строке) каждый символ в виде матрицы 5х7 пикселей.

Характеристики дисплея 1602:

  • напряжение питания: 5 В
  • размер дисплея: 2.6 дюйма
  • тип дисплея: 2 строки по 16 символов
  • цвет подсветки: синий
  • цвет символов: белый
  • габаритные: 80мм x 35мм x 11мм

В данном примере будем использовать LCD дисплей 1602A оборудованным последовательной шиной I2C. I2C — это последовательная асимметричная шина для связи между интегральными схемами внутри электронных приборов. Использует две двунаправленные линии связи (SDA и SCL), применяется для соединения низкоскоростных периферийных компонентов с процессорами и микроконтроллерами.

внешний вид платы дисплея

Жидкокристаллический дисплей 1602 с I2C модулем подключается к плате Ардуино всего 4 проводами — 2 провода данных и 2 провода питания. Подключение проводится стандартно для шины I2C:

  • вывод SDA подключается к порту A4;
  • вывод SCL подключается к порту A5;
  • вывод Vcc LCD дисплея осуществляется к разъему +5V платы Arduino UNO;
  • вывод GND дисплея осуществляется к разъему GND платы Arduino UNO;

Подключение DHT11 и DHT22/AM2302 к Arduino UNO

Теперь, когда у нас есть полное понимание того, как работает датчик DHT, мы можем начать подключать его к нашей плате Arduino!

К счастью, подключение датчиков DHT11, DHT22/AM2302 к Arduino довольно тривиально. У них довольно длинные выводы с шагом 0,1 дюйма (2,54 м), поэтому вы можете легко вставить их в любую макетную плату. Подайте на датчик питание 5 В и подключите землю. Наконец, подключите вывод данных к цифровому выводу 2 на Arduino.

Помните, как обсуждалось ранее, между VCC и линией данных нам нужно установить подтягивающий резистор 10 кОм, чтобы поддерживать высокий логический уровень на линии данных для правильной связи между датчиком и микроконтроллером. Если у вас есть готовый модуль датчика, вам не нужно добавлять какие-либо внешние подтягивающие резисторы. Модуль поставляется со встроенным подтягивающим резистором.

Рисунок 6 – Подключение DHT11 к Arduino UNOРисунок 7 – Подключение DHT22/AM2302 к Arduino UNO

Теперь вы готовы загрузить в Arduino код и заставить ее работать.

Какой тип питания выбрать

Все датчики температуры типа DS 18B20 для Arduino Processing LCD могут работать в обычном или так называемом «паразитном» режиме. При этом если обычный режим подключения предусматривает нормальное функционирование всех 3 коннекторов, то «паразитический» — только 2. Что бы получать правильную и точную информацию со всех датчиков, нужно выбрать правильный режим питания в скетче:

  • чтобы воспользоваться «паразитным» режимом, необходимо ввести dswrite (0x44,1) в 65-й строке;
  • обычным режимом — ввести dswrite (0x44) в 65-й строке.

Подключение термодатчика DS18b20 к программе Arduino

Шаг 1. Создаем светодиодную цепь

Как вы могли узнать из уроков для начинающих, лучше всего начать с подключения вашего Arduino и макета к питанию и заземлению соответственно схеме в примере. Затем добавьте три красных светодиода к макету, как показано на рисунке. Это будет индикатор или индикаторная «гистограмма» проекта.

Перетащите Arduino Uno и макетную плату с панели компонентов на рабочую область рядом с существующей схемой.

Подключите проводами 5-вольтовые и заземляющие штыри Arduino к (+) и (-) рельсам на макете. Вы можете изменить цвет проводов, если хотите. Также вы можете использовать раскрывающийся список, либо цифровые клавиши на клавиатуре.

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

Используйте резистор 220 Ом для подключения катода каждого светодиода (левая нога) к рельсу заземления (черный) макета. В Tinkercad Circutis вы можете изменить значение резистора, выделив его и используя раскрывающееся меню в помощнике.

Подключите светодиодные аноды (правые, более длинные ножки) к цифровым контактам 4, 3 и 2 на Arduino. Светодиодный анод (+) — это терминал, в который втекает ток.

Катод (-) является терминалом, из которого вытекает ток. Он соединяется с рельсом заземления.

Preparing Your Arduino IDE

We’ll program the ESP8266 using Arduino IDE, so make sure you have the ESP8266 add-on installed before proceeding:

Install ESP8266 Board in Arduino IDE (Windows, Mac OS X, and Linux instructions)

Installing Libraries for DS18B20

To interface with the DS18B20 temperature sensor, you need to install the One Wire library by Paul Stoffregen and the Dallas Temperature library. Follow the next steps to install those libraries.

1. Open your Arduino IDE and go to Sketch > Include Library > Manage Libraries. The Library Manager should open.

2. Type “onewire” in the search box and install the OneWire library by Paul Stoffregen.

3. Then, search for “Dallas” and install the Dallas Temperature library by Miles Burton.

After installing the libraries, restart your Arduino IDE.

Настройка кода и работа с библиотеками

После окончания монтажных работ можно приступать к программированию устройства. Для этого с помощью приложения Arduino IDE требуется смонтировать библиотеку OneWire library. Для этого в меню приложения необходимо выбрать «Add Library», которое расположено в меню «Sketch» или для русскоязычного варианта «Скетч» — «Подключить библиотеку» — «OneWire».

Далее в открывшейся библиотеке следует найти пример программирования «DS18x20_Temperature». Для этого необходимо в меню «Файл» выбрать подменю «Примеры», далее раздел «OneWire» и пункт «DS18x20_Temperature».

В примере из библиотеки OneWire в строке 10 изначально запрограммирован 10 pin микроконтроллера, для рассматриваемого случая его требуется заменить на 2. В итоге 10 строка должна выглядеть следующим образом:

После корректно выполненных операций, компиляции и загрузки программы в окне монитора порта «Инструменты» — «Монитор порта» появится примерно следующее:

Общие принципы работы датчика температуры DS18B20

DS18B20 представляет собой однопроводный цифровой датчик температуры от компании Maxim IC. Выдает значение температуры в градусах Цельсия, способен измерять температуру с 9-12 битной точностью в диапазоне от -55 до 125 градусов Цельсия с точностью +/-0.5 градуса. Каждый датчик DS18B20 имеет 64-битный уникальный номер (Serial number), вытравленный на корпусе датчика, что позволяет подключать огромное число подобных датчиков к одной шине данных. С помощью данного датчика можно измерять температуру воздуха, жидкостей и земли. В некоторых магазинах датчик продается в комплекте с резистором сопротивлением 4,7 кОм.

Особенности датчика DS18B20:

  • однопроводный интерфейс (1-Wire interface), что позволяет использовать для подключения датчика только один контакт микроконтроллера (в нашем случае платы Arduino Uno);
  • каждый датчик имеет 64-битный уникальный последовательный код (номер), хранящийся в ПЗУ (ROM) датчика;
  • способность подключения к одной шине множества датчиков позволяет создавать на его основе приложения для распределенного (в пространстве) измерения температуры;
  • не требует никаких внешних компонентов;
  • может быть запитан от линии данных;
  • поддерживает напряжение питания от 3.0V до 5.5V;
  • способен измерять температуру в диапазоне от –55°C до +125°C (–67°F до +257°F) с точностью ±0.5°C (в диапазоне от –10°C до +85°C);
  • можно выбрать разрешающую способность (разрешение) датчика: от 9 до 12 бит;
  • преобразует значение температуры в 12-битное цифровое слово длительностью 750 мс (max.);
  • можно настраивать энергонезависимую (nonvolatile, NV) сигнализацию (сигнал тревоги);
  • опции сигнала тревоги позволяют идентифицировать и определить адрес датчика, чья температура не соответствует запрограммированным границам;
  • может применяться в устройствах термоконтроля, промышленных системах, потребительских продуктах, термометрах и в любых других системах, где требуется измерение температуры.

Более подробную информацию о принципах работы датчика DS18B20 вы можете посмотреть в следующей статье на нашем сайте.

Upload Code – Single DS18B20

To interface with the DS18B20 temperature sensor, you need to install the One Wire library by Paul Stoffregen and the Dallas Temperature library. Follow the next steps to install those libraries.

Installing Libraries

1. Open your Arduino IDE and go to Sketch > Include Library > Manage Libraries. The Library Manager should open.

2. Type “OneWire” in the search box and install the OneWire library by Paul Stoffregen.

3. Then, search for “Dallas” and install the Dallas Temperature library by Miles Burton.

After installing the needed libraries, upload the following code to your Arduino board. This sketch is based on an example from the Dallas Temperature library.

There are many different ways to get the temperature from DS18B20 temperature sensors. If you’re using just one single sensor, this is one of the easiest and simplest ways.

How the Code Works

Start by including the OneWire and the DallasTemperature libraries.

Create the instances needed for the temperature sensor. The temperature sensor is connected to Pin 4.

In the setup(), initialize the Serial Monitor at a baud rate of 9600.

Initialize the DS18B20 temperature sensor:

In the loop() is where you’ll get the temperature. You need to call the requestTemperatures() method before getting the actual temperature value.

Then, get and print the temperature in Celsius. To get the temperature in Celsius, use the getTempCByIndex() method :

Or use the getTempFByIndex() to get the temperature in Fahrenheit.

The getTempCByIndex() and the getTempFByIndex() methods accept the index of the temperature sensor. Because we’re using just one sensor its index is 0. If you have more than one sensor, you use index 0 for the first sensor, index 1 for the second sensor, and so on.

New temperature readings are requested every second.

Описание модуля KY-013 – аналоговый датчик температуры.

Модуль аналогового датчика температуры KY-013 для Arduino измеряет температуру окружающей среды за счет изменения сопротивления термистора. Данный модуль можно подключать к различным микроконтроллерам (Arduino, ESP32, ESP8266, stm32 и пр.) для измерения температуры окружающей среды.

Технические характеристики KY-013:

  • Рабочее напряжение -5В;
  • Диапазон измерения температуры — от -55 до 125 ° C;
  • Точность измерения — ± 0,5 ° С;

Модуль аналогового датчика температуры KY-013 состоит из термистора NTC и резистора 10 кОм. Сопротивление термистора зависит от температуры окружающей среды, мы воспользуемся уравнением Стейнхарта – Харта, чтобы получить точную температуру термистора.

Схема подключения KY-013 аналогового датчика температуры к Arduino NANO.

Подключаем линию питания платы (посередине) и землю (-) к 5 В и GND соответственно. Затем сигнал (S) к контакту A0 на Arduino.

Внимание! Не забывайте про вероятность, что на некоторых платах нанесена неправильная разметка контактов, о чем я рассказывал в начале урока

Пример кода Arduino для получения значений температуры с датчика KY-013.

В следующем скетче Arduino будет вычисляться температура термистора с использованием уравнения Стейнхарта-Харта. Код вернет температуру в градусах Цельсия.

int ThermistorPin = A0;
int Vo;
float R1 = 10000; // значение R1 на модуле
float logR2, R2, T;
float c1 = 0.001129148, c2 = 0.000234125, c3 = 0.0000000876741; //коэффициенты Штейнхарта-Харта для термистора

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

void loop() {
  Vo = analogRead(ThermistorPin);
  R2 = R1 * (1023.0 / (float)Vo - 1.0); //вычислите сопротивление на термисторе
  logR2 = log(R2);
  T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); // температура в Кельвине
  T = T - 273.15; //преобразование Кельвина в Цельсия

  Serial.print("Temperature: "); 
  Serial.print(T);
  Serial.println(" C"); 

  delay(500);
}

Коэффициенты применимы только к платам с термисторами 10 кОм, некоторые редкие платы имеют термисторы на 100 кОм и требуют других коэффициентов.

Описание датчика DS18B20 для Arduino

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

Микросхема имеет три выхода, из которых для данных используется только один, два остальных – это земля и питание. Число проводов можно сократить до двух, если использовать схему с паразитным питанием и соединить Vdd с землей. К одному проводу с данными можно подключить сразу несколько датчиков DS18B20 и в плате Ардуино будет задействован всего один пин.

Где купить датчик

Влагозащищенный датчик температуры DS18B20 с длиной провода 1 м от надежного магазина Комплект из 10 микросхем DS18B20 TO92 Модуль DS18B20 для удобного подключения к Ардуино от Keyestudio
Беспроводной модуль DS18B20 на ESP8266 ESP-01 ESP-01S для проектов умного дома Шилд датчика DS18B20 для платы D1 MINI – беспроводная передача данных Датчик DS18B20 с модулем для подключения к Ардуино

Особенности цифрового датчика DS18B20

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

Важно, что в этом режиме не гарантируется корректная работа при температурах выше 100С. Режим паразитного питания удобно обычно применяется для приложений с удаленным температурным датчиком.

Память датчика состоит из двух видов: оперативной и энергонезависимой – SRAM и EEPROM. В последнюю записываются регистры конфигурации и регистры TH, TL, которые могут использоваться как регистры общего назначения, если не используются для указания диапазона допустимых значений температуры.

Основной задачей DS18B20 является определение температуры и преобразование полученного результата в цифровой вид. Мы можем самостоятельно задать необходимое разрешение, установив количество бит точности – 9, 10, 11 и 12. В этих случаях разрешающие способности будут соответственно равны 0,5С, 0,25С, 0,125С и 0,0625С.

Во время включения питания датчик находится в состоянии покоя. Для начала измерения контроллер Ардуино выполняет команду «преобразование температуры». Полученный результат сохранится в 2 байтах регистра температуры, после чего датчик вернется в первоначальное состояние покоя. Если схема подключена в режиме внешнего питания, микроконтроллер регулирует состояние конвертации. Во время выполнения команды линия находится в низком состоянии, после окончания программы линия переходит в высокое состояние. Такой метод не допустим при питании от паразитной емкости, так как на шине постоянно должен сохраняться высокий уровень сигнала.

Полученные температурные измерения сохраняются в SRAM датчика. 1 и 2 байты сохраняют полученное значение температуры, 3 и 4 сохраняют пределы измерения, 5 и 6 зарезервированы, 7 и 8 используются для высокоточного определения температуры, последний 9 байт хранит устойчивый к помехам CRC код.

Шаг 6. Используем проект

Если вы создали физическую версию этой схемы, вы можете протестировать ее с помощью последовательного монитора программного обеспечения Arduino IDE (кнопка увеличительного стекла в правом верхнем углу окна эскиза), активируя датчик пальцами. Проект может не сработать если температура в комнате действительно холодная или действительно теплая, или если ваши пальцы холодные!

Если вы используете физическую плату, оцените температуру в помещении с помощью последовательного монитора и установите для нее значение baselineTemp.

Отрегулируйте разницу температурных порогов на меньший диапазон (2, 4, 6, вместо 10, 20, 30).

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

Подключение DS18B20 к Arduino

DS18B20 является цифровым датчиком. Цифровые датчики передают значение измеряемой температуры в виде определенного двоичного кода, который поступает на цифровые или аналоговые пины ардуино и затем декодируется. Коды могут быть самыми разными, ds18b20 работает по протоколу данных 1-Wire. Мы не будем вдаваться в подробности этого цифрового протокола, укажем лишь необходимый минимум для понимания принципов взаимодействия.

Обмен информацией в 1-Wire происходит благодаря следующим операциям:

  • Инициализация – определение последовательности сигналов, с которых начинается измерение и другие операции. Ведущее устройство подает импульс сброса, после этого датчик должен подать импульс присутствия, сообщающий о готовности к выполнению операции.
  • Запись данных – происходит передача байта данных в датчик.
  • Чтение данных – происходит прием байта из датчика.

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

  • Arduino IDE;
  • Библиотека OneWire, если используется несколько датчиков на шине, можно использовать библиотеку DallasTemperature. Она будет работать поверх OneWire.

Из оборудования понадобятся:

  • Один или несколько датчиков DS18B20;
  • Микроконтроллер Ардуино;
  • Коннекторы;
  • Резистор на 4,7 кОм (в случае подключения одного датчика пойдет резистор номиналом от 4 до 10K);
  • Монтажная плата;
  • USB-кабель для подключения к компьютеру.

К плате Ардуино UNO датчик подключается просто: GND с термодатчика присоединяется к GND Ардуино, Vdd подключается к 5V, Data – к любому цифровому пину.

Простейшая схема подключения цифрового датчика DS18B20 представлена на рисунке.

В режиме паразитного питания контакт Vdd с датчика подключается к GND на Ардуино – в этом случае пригодятся только два провода. Работу в паразитном режиме лучше не использовать без необходимости, так как могут ухудшиться быстродействие и стабильность.

Как уменьшить стоимость бесконтактного термометра?

При ближайшем рассмотрении нам для изготовления бесконтактного термометра понадобятся инфракрасный датчик температуры, микроконтроллер, дисплей, драйвер дисплея и батарейка. Одним из самых дорогих устройств в этом списке будет бесконтактный инфракрасный датчик температуры. К сожалению, выбор среди доступных на рынке подобных датчиков невелик и придется выбирать между MLX90614 и MLX90615. Существенно сэкономить в этом плане можно с помощью аналогового датчика температуры (если вы умеете уверенно с ними работать), но общая схема термометра в этом случае немного усложнится и вам придется терпеть некоторые «муки», связанные с калибровкой подобного устройства. Но здесь выбор за вами. Мы же для нашего проекта решили использовать датчик MLX90615 от компании Melexis.

Когда датчик температуры выбран, нам осталось определиться с микроконтроллером, дисплеем и батареей. С целью удешевления проекта нашего термометра мы решили использовать в его составе смартфон потому что смартфоны сейчас уже не являются новинкой – они есть у большинства активного населения. Поэтому мы написали приложение на Android под названием “Easy Scan” (его можно скачать далее в статье), которое будет взаимодействовать с нашим термометром и выполнять ряд операций – вести лог данных температуры и захватывать изображения. С помощью данного подхода мы не только сможем просто хранить необходимые нам данные, но также мы сможем их передавать по электронной почте, по WhatsApp и т.п.

Поэтому теперь для нашего проекта бесконтактного термометра понадобятся лишь следующие компоненты:

Программа

Программа передатчика

Сперва рассмотрим программу передающей части:

Для передачи влажности и температуры в одном сообщении я соединяю их вместе. Сначала данные считываются в переменную как целые числа, потом целые числа преобразовываются в массив символов, а затем они соединяются друг с другом. На приемной стороне данные будут разделены на отдельные символы. Делая это, я ограничиваю себя двумя цифрами градусов. Если датчик находится в среде с температурой менее 10°C, я буду получать на дисплее символы мусора. Например, если температура составляет 20°C, а влажность – 45%, то будет передаваться сообщение 2045, и всё хорошо. Если температура равна 9°C, а влажность – 78%, то передастся сообщение 978x, где «x» – случайный символ. Поэтому, если вы будете собирать данный беспроводной термометр, я советую вам изменить программу для передачи правильных данных, когда температура будет меньше 10°C.

Программа приемника

Интересный способ использования библиотеки LiquidCrystal – это создание пользовательских символов. С помощью я создал символ градусов. Таким же способом вы можете создать и свои собственные символы. Чтобы создать пользовательский символ или значок, вам необходимо объявить его, как массив из восьми байт, и «нарисовать», какие пиксели будут включены (1 – включен, 0 – выключен).

В функции вы создаете его с помощью . принимает два аргумента: номер позиции для хранения символа и массив байт, в котором определено, какие пиксели будут отображаться. В нашем случае это . Затем символ выводится на LCD с помощью функции .

Как подключить несколько сенсоров DS18B20 к Arduino?

Вы можете подключить несколько цифровых датчиков температуры DS18B20 параллельно. При этом библиотека OneWire library позволит вам считывать данные со всех датчиков одновременно.

Ниже описаны два метода подключения сенсоров.

Для большого количества сенсоров (больше 10), надо использовать резисторы с меньшим сопротивлением (например, 1.6 КОм или даже меньше).

Кроме того, если вы подключаете параллельно более 10 датчиков, могут возникнуть проблемы (погрешности при съеме показаний). Поэтому рекомендуется устанавливать дополнительный резистор сопротивлением 100…120 Ом между контактом data на Arduino и data на каждом сенсоре!

Результат работы предыдущего скетча с двумя подключенными сенсорами может выглядет примерно следующим образом:

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 51 1 4B 46 7F FF F 10 FE CRC=FE

Temperature = 21.06 Celsius, 69.91 Fahrenheit

ROM = 28 DA CA 27 5 0 0 49

Chip = DS18B20

Data = 1 4E 1 4B 46 7F FF 2 10 D9 CRC=D9

Temperature = 20.87 Celsius, 69.57 Fahrenheit

No more addresses.

Выбираем правильный сенсор

Было бы неплохо знать, с какого именно сенсора вы получаете данные, когда вы используете параллельно несколько датчиков. Как это сделать?

Серийный номер

Так как датчики цифровые, у каждого из них есть индивидуальный серийный номер, который можно использовать для опознавания того или иного сенсора. Вроде бы все просто. Но… нам ведь надо предварительно определить эти серийные номера, прежде чем использовать их для опознавания сенсора, правильно?

Вы могли обратить на примерах выше, что скетч выдает нам данные в виде 64-битного серийного номера — значение “ROM”. Например:

28 88 84 82 5 0 0 6A или 28 DA CA 27 5 0 0 49 в примере выше.

Не забывайте, если вы используете одновременно большое количество датчиков (10 и больше), надо добавить резисторы 100 … 120 Ом между контактами data с сенсора DS18B20 и пином data на Arduino (для каждого датчика!).

Ниже показана схема параллельного подключения нескольких сенсоров с использованием трех контактов.

Паразитный режим питания

В «паразитном» режиме контакт Vdd остается фактически не задействован. Питание датчика осуществляется через контакт data.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Исходный код программы

Чтобы написать код программы для нашего цифрового термометра, мы должны написать код для Arduino, датчика температуры LM35 и ЖК дисплея 16×2. Сначала подключим библиотеку для ЖК дисплея, а затем определим контакты данных и управления для подключения ЖК дисплея и датчика температуры.

После получения аналогового значения напряжения на аналоговом входе A0 мы считываем это значение и сохраняем его в переменной с помощью команды float analog_value=analogRead(analog_pin). После этого мы преобразуем его в цифровое значение температуры по следующей формуле:

float Temperature=analog_value*factor*100

где factor=5/1023, analog_value – аналоговое значение напряжение с выхода датчика температуры.

То есть получаем код вида:

Символ градуса формируем используя стандартный метод с помощью следующего кода:

Далее представлен полный исходный код программы нашего цифрового термометра.

Arduino

#include<LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);
#define sensor A0
byte degree =
{
0b00011,
0b00011,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
void setup()
{
lcd.begin(16,2);
lcd.createChar(1, degree);
lcd.setCursor(0,0);
lcd.print(» Digital «);
lcd.setCursor(0,1);
lcd.print(» Thermometer «);
delay(4000);
lcd.clear();
lcd.print(» Circuit Digest «);
delay(4000);
lcd.clear();
}
void loop()
{
/*———Temperature——-*/
float reading=analogRead(sensor);
float temperature=reading*(5.0/1023.0)*100;
delay(10);

/*——Display Result——*/
lcd.clear();
lcd.setCursor(2,0);
lcd.print(«Temperature»);
lcd.setCursor(4,1);
lcd.print(temperature);
lcd.write(1);
lcd.print(«C»);
delay(1000);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

#include<LiquidCrystal.h>

LiquidCrystallcd(7,6,5,4,3,2);

#define sensor A0

bytedegree8=

{

0b00011,

0b00011,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000

};

voidsetup()

{

lcd.begin(16,2);

lcd.createChar(1,degree);

lcd.setCursor(,);

lcd.print(»    Digital    «);

lcd.setCursor(,1);

lcd.print(»  Thermometer   «);

delay(4000);

lcd.clear();

lcd.print(» Circuit Digest  «);

delay(4000);

lcd.clear();

}

voidloop()

{

/*———Temperature——-*/

floatreading=analogRead(sensor);

floattemperature=reading*(5.01023.0)*100;

delay(10);

/*——Display Result——*/

lcd.clear();

lcd.setCursor(2,);

lcd.print(«Temperature»);

lcd.setCursor(4,1);

lcd.print(temperature);

lcd.write(1);

lcd.print(«C»);

delay(1000);

}

Conclusion

In this tutorial, I have shown you how to use DS18B20 1-Wire digital temperature sensors with Arduino. I hope you found it useful and informative. If you did, please share this article with a friend who also likes electronics and making things.

I would love to know what projects you plan on building (or have already built) with these sensors. If you have any questions, suggestions, or if you think that things are missing in this tutorial, please leave a comment below.

Note that comments are held for moderation to prevent spam.

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Способ 2: чтение датчика DS18B20 по адресу

Мы знаем, что каждому DS18B20 назначен уникальный 64-битный адрес, чтобы отличать их друг от друга. В этом методе мы найдем этот адрес для соответствующей маркировки каждого датчика. Затем этот адрес можно использовать для считывания каждого датчика в отдельности.

Поиск адресов датчиков DS18B20s на шине

Следующий скетч обнаруживает все DS18B20, присутствующие на шине, и печатает их адреса на 1-Wire в монитор последовательного порта.

Вы можете подключать только один датчик за раз, чтобы определить его адрес (или последовательно добавлять по одному новому датчику, чтобы вы могли идентифицировать каждый из них по его адресу). Затем вы можете пометить каждый датчик.

Теперь откройте монитор последовательного порта. Вы должны получить что-то подобное:

Рисунок 6 – Нахождение адресов 1-Wire всех датчиков DS18B20 на шине

Скопируйте все адреса, так как они нам понадобятся в следующем скетче.

Чтение показаний датчиков DS18B20 по адресу

Следующий скетч считывает температуру датчиков DS18B20 по их адресам. Прежде чем приступить к загрузке скетча, вам нужно изменить адреса датчиков DS18B20 на те, которые вы определили в предыдущем скетче.

Вывод вышеприведенного эскиза выглядит так

Рисунок 7 – Вывод показаний нескольких датчиков DS18B20 методом адреса

Объяснение кода

Как обычно, скетч начинается с включения библиотек, объявления вывода, к которому подключена шина датчиков, и создания объекта библиотеки .

Далее мы вводим адреса, которые были найдены ранее для каждого датчика температуры. В нашем случае имеем следующее.

Во фрагменте настройки мы инициализируем библиотеку путем вызова функции и инициализируем последовательную связь с ПК.

В цикле мы просто посылаем команду всем датчикам для преобразования температуры, используя функцию .

Затем, чтобы напечатать температуру датчика, мы вызываем пользовательскую функцию , для которой передается в качестве параметра.

Вышеприведенная функция просто вызывает библиотечные функции для отображения температуры в градусах Цельсия и для отображения температуры в градусах Фаренгейта.

Назначение выводов

Как уже говорилось, есть два варианта поставки термодатчика — микросхема с 8 ножками (8-PIN SOIC) или 3 (ТО-92). Из рисунка ниже видно, какие контакты для чего предназначены, включая их полную распиновку.

Линия связи при подключении должна быть задействована через подтягивающий резистор 4.7 кОм. Требование обуславливается работой самого протокола 1-Wire. Питание корпуса, хоть это и не рекомендуется для температур свыше 100 °С, можно организовать от линии данных шины:

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

Схема подключения с использованием внешнего источника будет выглядеть по-другому:

Или же, следуя советам профессионалов, выполнить подключение можно также таким образом:

В представленном варианте, схема будет работать от сохраненного через диод заряда в конденсаторе. К сожалению, необходимость в двух проводах никуда не делась.

Если возникает необходимость в определении именно вида поступающего питания на сенсор, то можно произвести опрос самого термодатчика DS18B20, отправив сначала ему команду CС следом B4. На выходе будет 0, если применяется паразитное питание или 1 при раздельном.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector