Содержание

Подключение датчика температуры DS18B20 к Arduino.

#include <OneWire.h>

#include <DallasTemperature.h>

 

// Data wire is plugged into port 2 on the Arduino

#define ONE_WIRE_BUS 2

#define TEMPERATURE_PRECISION 9

 

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)

OneWire oneWire(ONE_WIRE_BUS);

 

// Pass our oneWire reference to Dallas Temperature.

DallasTemperature sensors(&oneWire);

 

// arrays to hold device addresses

DeviceAddress insideThermometer, outsideThermometer;

 

void setup(void)

{

  // start serial port

  Serial.begin(9600);

  Serial.println(«Dallas Temperature IC Control Library Demo»);

 

  // Start up the library

  sensors.begin();

 

  // locate devices on the bus

  Serial.print(«Locating devices…»);

  Serial.print(«Found «);

  Serial.print(sensors.getDeviceCount(), DEC);

  Serial.println(» devices.»);

 

  // report parasite power requirements

  Serial.print(«Parasite power is: «);

  if (sensors.isParasitePowerMode()) Serial.println(«ON»);

  else Serial.println(«OFF»);

 

  //insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };

  //outsideThermometer   = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 };

 

  if (!sensors.getAddress(insideThermometer, 0)) Serial.println(«Unable to find address for Device 0»);

  if (!sensors.getAddress(outsideThermometer, 1)) Serial.println(«Unable to find address for Device 1»);

 

  // show the addresses we found on the bus

  Serial.print(«Device 0 Address: «);

  printAddress(insideThermometer);

  Serial.println();

 

  Serial.print(«Device 1 Address: «);

  printAddress(outsideThermometer);

  Serial.println();

 

  // set the resolution to 9 bit

  sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);

  sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);

 

  Serial.print(«Device 0 Resolution: «);

  Serial.print(sensors.getResolution(insideThermometer), DEC);

  Serial.println();

 

  Serial.print(«Device 1 Resolution: «);

  Serial.print(sensors.getResolution(outsideThermometer), DEC);

  Serial.println();

}

 

// function to print a device address

void printAddress(DeviceAddress deviceAddress)

{

  for (uint8_t i = 0; i < 8; i++)

  {

    // zero pad the address if necessary

    if (deviceAddress[i] < 16) Serial.print(«0»);

    Serial.print(deviceAddress[i], HEX);

  }

}

 

// function to print the temperature for a device

void printTemperature(DeviceAddress deviceAddress)

{

  float tempC = sensors.getTempC(deviceAddress);

  Serial.print(«Temp C: «);

  Serial.print(tempC);

  Serial.print(» Temp F: «);

  Serial.print(DallasTemperature::toFahrenheit(tempC));

}

 

// function to print a device’s resolution

void printResolution(DeviceAddress deviceAddress)

{

  Serial.print(«Resolution: «);

  Serial.print(sensors.getResolution(deviceAddress));

  Serial.println();    

}

 

// main function to print information about a device

void printData(DeviceAddress deviceAddress)

{

  Serial.print(«Device Address: «);

  printAddress(deviceAddress);

  Serial.print(» «);

  printTemperature(deviceAddress);

  Serial.println();

}

 

void loop(void)

{

  // call sensors.requestTemperatures() to issue a global temperature

  // request to all devices on the bus

  Serial.print(«Requesting temperatures…»);

  sensors.requestTemperatures();

  Serial.println(«DONE»);

 

  // print the device information

  printData(insideThermometer);

  printData(outsideThermometer);

}

it-chainik.ru

Схема подключения датчика температуры ds18b20 к arduino

DS18B20 представляет собой стандартный температурный датчик, разработанный и изготовленный на цифровой основе. Его очень просто эксплуатировать за счет простоты конструкции, а также его адаптивных возможностей к работе с Arduino Processing LCD.

Главными его преимуществами являются:

  • Наличие всего одного контакта для получения полезного сигнала. Это дает возможность подключения огромного количества идентичных сенсоров DS18B20 к одному Arduino Processing LCD.
  • Цифровая система функционирования.
  • Возможность подключения огромного количества идентичных сенсоров к одному пину Arduino Processing LCD.

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

Все датчики типа DS18B20 имеют несколько форм-факторов, которые могут существенно облегчить работу с ними. Право выбора самого форм-фактора всегда, само собой, остается за клиентом. Сегодня на рынке преобладают 3 варианта этой продукции, а именно: 8Pin SO (150 mils), 8Pin µSOP и 3Pin TO92. Информация, которую мы почерпнули, свидетельствует о том, что китайские производители также предлагают приобрести датчик 3Pin TO92, снабженный специальной влагозащитной оболочкой. Это даст вам возможность погружать аппарат в жидкость, использовать во время плохой погоды и в других случаях. У всех сенсоров всегда имеется 3 выходных контакта: черного, красного и белого цветов. Они соответствуют значениям GND, Vdd и Data соответственно.

Дополнительное удобство эксплуатации DS18B20 для Arduino Processing LCD обеспечивается тем, что он может быть подключен к электросети через белый контакт. В этом случае вы будете использовать всего пару контактов вместо тех трех, которые требуются для нормального подключения. Датчик способен функционировать при напряжении в сети от 3 до 5,5 Вольт, а также фиксировать изменения температуры, если она находится в диапазоне от -55 до плюс 125 по Цельсию. Погрешность, которую может выдавать термостат при измерении температуры, составляет 0,5 градуса по Цельсию.

Очень приятным обстоятельством при использовании датчика DS18B20 для Arduino Processing LCD является то, что параллельно к одному аппарату можно подключить до 127 датчиков DS18B20 одновременно.

Трудно представить себе ситуацию, в которой это может потребоваться. Но если установить, например, один датчик в холодильнике, а другой — в морозилке, это будет весьма полезно. Опять же в таком случае у вас останется просто огромное количество свободных пинов для «Ардуино».

Что нужно, чтобы настроить работу датчика DS18B20 для Arduino Processing LCD

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

  • Программа Arduino IDE.
  • База данных OneWire library, примечательная тем, что она значительным образом упрощает работу как с самим Arduino, так и со всеми датчиками, включая DS18B20.
  • Скетч.

Программу «Ардуино» можно скачать с ее официального сайта — там есть ее последняя версия в открытом доступе.

База данных OneWire Library может быть скачана на OneWireProjectPage. При этом желательно загружать к себе на компьютер самую свежую ее версию.

Программа Arduino IDE

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

  • Nano-датчик для измерения температурных показателей DS 18B20 в количестве минимум одного экземпляра.
  • Контроллер «Ардуино».
  • Термостат.
  • Коннекторы в количестве 3 штук.
  • Плата для монтажных работ.
  • Кабель, который будет обеспечивать подключение «Ардуино» к вашему компьютеру посредством USB-соединения.

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

Nano-датчик температуры DS 18B20

Подключение датчика DS 18B20 к Arduino Processing LCD

Чтобы правильно произвести подключение датчика к системе «Ардуино», необходимо действовать в соответствии со следующим алгоритмом:

  • Черный контакт температурного датчика нужно подключить к GND-системе «Ардуино».
  • Красный контакт температурного датчика нужно подключить к +5V системы «Ардуино».
  • Красный контакт температурного датчика может быть подключен к любому свободному цифровому пину в системе «Ардуино».
  • Подключить к внешней обвязке системы специальный резистор на 4,7 килоома.

Полная схема подключения датчика температуры DS 18B20 к системе Arduino Processing LCD показана на изображении ниже.

Схема подключения датчиков температуры DS 18B20 к системе Arduino

Установка базы данных OneWireLibrary

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

Загрузка скетча в систему

Как правило, нужный скетч всегда есть в базе данных OneWireLibrary в категории «примеры». Вам нужно перейти в панели управления программой по такому алгоритму: “Файл” — “Примеры” — OneWire и выбрать пример, который будет содержать название подключаемого датчика температуры.

Эта функция используется для того, чтобы в базу данных могла поступать информация обо всех датчиках температуры DS 18B20 и отображаться на мониторе системы «Ардуино».

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

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

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

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

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

Как подключить несколько датчиков температуры DS 18B20 одновременно

Подключение нескольких датчиков температуры типа DS 18B20 к Arduino Processing LCD возможно. Это обеспечивается базой данных OneWirelibrary, способной считывать всю информацию со всех подключенных устройств одновременно.

Если речь идет о подключении большого числа датчиков (например, если их больше 10), должны быть использованы резисторы с более низким показателем сопротивления (к примеру, 1,5 килоома или меньше).

Если же вы собрались подсоединять больше десятка датчиков DS 18B20, могут быть проблемы с их точностью. В таком случае можно установить резистор (сопротивление — примерно 100 Ом) между белым контактом на аппарате «Ардуино» и белым контактом на каждом датчике.

Originally posted 2016-05-20 13:27:11.

proumnyjdom.ru

DS18B20 подключение к Arduino: как подключить, написать программу

В этой статье мы расскажем нашим читателям, как подключать датчики температуры DS18B20, LM35 и TMP36 на печатной плате Arduino UNO, которая построена на микроконтроллере ATmega328. Основным предназначением датчиков температуры DS18B20, LM35 и TMP36 является снятие температурных показателей. В нашем случае температурные показатели с этих датчиков будет считывать печатная плата Arduino UNO, и выводить результат на экране компьютера. По сути, с помощью этих датчиков любой желающий может создать свой собственный термометр. Кроме детального описания использования Arduino UNO и датчиков DS18B20, LM35 и TMP36, мы расскажем нашим читателям, где можно приобрести эти компоненты.

Подготавливаем программную часть на ПК с помощью Arduino IDE

Если у вас есть уже плата Arduino UNO и рассматриваемые датчики, то настало время настроить компьютер для того, чтобы он смог работать с микроконтроллером. Для этой задачи нам потребуется программный пакет Arduino IDE. Загрузить этот пакет можно на официальном сайте www.arduino.cc. На момент написания статьи последней версией пакета является ARDUINO 1.6.10. Сам же IDE мы будем использовать на ПК с операционной системой Windows 10. После загрузки IDE запустим установочный файл.

В стартовом окне установщика принимаем условия лицензионного соглашения и переходим к следующему окну.

В этом окне оставляем все как есть и продолжаем установку нажатием кнопки «Next >».

В этом окне можно выбрать путь установки для Arduino IDE, в нашем случае это папка по умолчанию. Выбрав путь, нажимаем кнопку «Install», которая запустит процесс установки.

После завершения установки на рабочем столе появится ярлык с именем Arduino.

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

Подключаем датчик DS18B20 к плате Arduino UNO

Первым делом нам нужно подключить сам датчик к плате. Для этого нам понадобится макетная плата и резистор с сопротивлением, равным 4,7 кОм. Ниже изображена схема подключения рассматриваемого датчика DS18B20 к Arduino UNO.

Подключим плату к компьютеру посредством USB-кабеля. После подключения на плате должен загореться светодиод под названием «ON». Теперь нам нужно открыть установленную ранее Arduino IDE через ярлык на рабочем столе.

В окне открытой программы перейдем в меню «Инструменты» в пункт «Плата:» и выберем нашу плату.

Чтобы заставить работать наш датчик, нам нужно загрузить библиотеку «DallasTemperature», которую можно скачать по этой ссылке arduino-project.net/DallasTemperature.rar. После загрузки библиотеки ее нужно подключить к IDE. Для этого разархивируем загруженную библиотеку в директорию с библиотеками, которая находится по адресу «C:\Program Files\Arduino\libraries». Посмотреть подключенную библиотеку можно в меню «Скетч».

Теперь выполним пример из подключенной библиотеки. Для этого перейдем по ссылкам «Файл» — «Примеры» — «DallasTemperature» — «Multiple». После этого действия в окно программы загрузится выбранный нами пример.

Теперь загружаем этот пример в плату Arduino UNO с помощью кнопки «Загрузка». После этого откроем пункт «Монитор порта», который находится в меню «Инструменты».

Из монитора видно, что наш датчик DS18B20 показывает температуру, как по Цельсию, так и по Фаренгейту.

Подключаем датчик LM35 к плате Arduino UNO

Датчик температуры LM35 является недорогой моделью, которую выпускает компания Texas Instruments. Этот датчик довольно просто подключается к Arduino UNO. Ниже представлена схема подключения рассматриваемого датчика к печатной плате.

Из схемы видно, что датчик LM35 подключается напрямую без использования резистора. Теперь наберем довольно простой код, изображенный в IDE ниже.

После загрузки этого кода на плату, откроем «Монитор порта» и увидим, как датчик снимает температурные показатели с места, где он находится.

Из примера видно, что датчик LM35 намного проще подключать к Ардуино UNO, чем рассмотренный ранее.

Подключаем датчик TMP36 к плате Arduino UNO

Датчик температуры TMP36 является бюджетной моделью компании Analog Devices. Поскольку для этого примера у нас отсутствовал сам датчик, то мы воспользовались интернет сервисом Autodesk Circuits, который позволяет эмулировать платы Ардуино. Этот пример будет особенно интересен тем пользователям, которые хотят попробовать Arduino до его покупки. Чтобы попасть в сервис Autodesk Circuits, необходимо перейти на интернет страницу https://circuits.io. На этой странице необходимо пройти процедуру быстрой регистрации, после чего вы попадете на главную страницу сервиса.

Чтобы создать новый проект, необходимо нажать кнопку «New Electronics Lab» на этой странице. После этого действия мы попадем в окно проекта.

Из окна проекта видно, что у нас присутствует только макетная плата. Чтобы добавить необходимые нам компоненты откроем панель «Components». Из этой панели мы добавим и соединим компоненты, как это показано на изображении ниже.

После сборки пакета перейдем в панель «Code Editor» и вставим текст, изображенный ниже.

Также обратите внимание на код. В нем имеются описания функций всех операций. Теперь попробуем запустить нашу плату. Для этого нажмем кнопку «Start Simulation», после чего мы увидим, как загорится зеленый светодиод. Чтобы проверить, что наш проект работает, мы откроем «Serial Monitor».

Из окна монитора видно, что наш виртуальный датчик измеряет показатели температуры.

Из примера видно, что сделать проект с датчиком TMP36 в Autodesk Circuits совсем несложно. Настоятельно рекомендуем новичкам перед реальным использованием Ардуино UNO и компонентов воспользоваться эмулятором Autodesk Circuits.

Если вы неправильно соберете какую-нибудь схему, то вы реально можете спалить, как плату Arduino UNO, так и ее компоненты. Кстати в Autodesk Circuits также можно спалить печатную плату, хоть и виртуальную.

Где достать компоненты Arduino, чтобы осуществить измерение температуры

Многие не раз задумывались о покупке Ардуино и дополнительных деталей к ней. Но сдерживающим фактором такой покупки всегда была довольно завышенная цена, которая представлена на отечественном рынке. Чтобы наши читатели смогли сэкономить, мы рекомендуем покупать все компоненты и платы Arduino в Китае. Одним из самых популярных китайских интернет магазинов является AliExpress.com. На этом сайте можно найти практически любой компонент и плату Ардуино. Ниже представлен список деталей, которые мы использовали в статье:

  • Датчик температуры DS18B20 стоит 0.7 доллара;
  • Датчик температуры LM35 стоит 0.8 доллара;
  • Датчик температуры TMP36 стоит 3 доллара;
  • Печатная плата Arduino UNO стоит примерно 3 доллара.

Из списка можно подвести итог, что связка Arduino UNO плюс DS18B20 является наиболее выгодным предложением.

Подводим итог

В этой статье мы рассмотрели два примера подключения физических датчиков измерения DS18B20, LM35 к печатной плате Arduino UNO. Кроме этого, мы рассмотрели вариант виртуальной сборки схемы с использованием датчика TMP36. Во всех примерах мы представили вывод температурных показателей только через «Монитор порта». Это было сделано специально, чтобы максимально упростить схему сборки. На просторах сети можно найти сотни примеров, где можно использовать такие варианты подключения:

  • Превращение смартфона в термометр, благодаря снятию температурных показателей на его экране или ПК с различных датчиков, используя Wi-Fi модуль для Arduino;
  • Превращение смартфона в термометр, благодаря снятию температурных показателей на его экране или ПК с различных датчиков, используя Bluetooth модуль для Arduino;
  • Создание термостата со светодиодной индикацией;
  • Создание термометра на базе Arduino и TFT дисплея;
  • Получение температурных показателей с помощью Arduino через интернет.

Это лишь малая доля примеров, с помощью которых пользователь может получать температурные показатели через плату Arduino. Используя Ардуино, в наше время каждый может воплотить в реальность концепцию умного дома. Надеемся, наш материал будет полезным для вас, и благодаря ему, вы сможете подключить температурные датчики к своей плате Arduino.

Видео по теме


vashumnyidom.ru

Подключение датчика температуры ds18b20, dht, lm35, tmp36 к Arduino

В этой статье мы рассмотрим популярные датчики температуры для Arduino ds18b20, dht11, dht22, lm35, tmp36. Как правило, именно эти датчики становятся основой для инженерных проектов начального уровня для Arduino. Мы рассмотрим также основные способы измерения температуры, классификацию датчиков температуры и приведем сравнение различных датчиков в одной таблице.

Описание датчиков температуры

Температурные датчики предназначены для измерения температуры объекта или вещества с помощью свойств и характеристик измеряемой среды. Все датчики работают по-разному. По принципу измерения эти устройства можно разделить на несколько групп:

  • Термопары;
  • Термисторы;
  • Пьезоэлектрические датчики;
  • Полупроводниковые датчики;
  • Цифровые датчики;
  • Аналоговые датчики.

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

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

  • Функция преобразования, т.е. зависимость выходной величины от измеряемого значения. Для датчиков температуры этот параметр измеряется в Ом/С или мВ/К.
  • Диапазон измеряемых температур.
  • Метрологические параметры – к ним относятся различные виды погрешностей.
  • Срок службы.
  • Время отклика.
  • Надежность – рассматриваются механическая устойчивость и метрологическая стойкость.
  • Эксплуатационные параметры – габариты, масса, потребляемая мощность, стойкость к агрессивному воздействию среды, стойкость к перегрузкам и другие.
  • Линейность выходных значений.

Датчики температуры по типу

  1. Термопары. Принцип действия термопар основывается на термоэлектрическом эффекте. Представляет собой замкнутый контур из двух проводников или полупроводников. В контуре возникает электрический ток, когда на месте спаев появляется разность температур. Чтобы измерить температуру, один конец термопары помещается в среду для измерения, а второй требуется для снятия значений. На спаях возникают термоЭДС E(t2) и E(t1), которые и определяются температурами t2 и t Результирующая термоЭДС в контуре будет равна разности термоЭДС на концах спаев E(t2)- E(t1). Термопары чаще всего выполняются из платины, хромеля, алюмеля и платинородия. Наибольшее распространение в России получили пары металлов ХА(хромель-алюмель), ТКХ(хромель – копель) и ТПП (платинородий-платина). Большим недостатком таких приборов является большая погрешность измерений. Из преимуществ можно выделить возможность измерения высоких температур – до 1300С.
  2. Терморезистивные датчики. Изготавливаются из материалов, обладающих высоким коэффициентом температурного сопротивления (ТКС). Принцип работы заключается в изменении сопротивления проводника в зависимости от его температуры. Такие приборы обладают высокой точностью, чувствительностью и линейностью измеренных значений. Основными характеристиками устройства являются номинальное электрическое сопротивление при температуре 25 С и ТКС. Терморезистивные датчики различаются по температурному коэффициенту сопротивления – бывают термисторы с отрицательным (NTC) и положительным (PTC, позисторы) ТКС. Для первых с ростом температуры уменьшается сопротивление, для позисторов – увеличивается. Терморезистивные датчики чаще всего применяются в электронике и машиностроении.
  3. Пьезоэлектрический датчик. Такое устройство работает на пьезоэффекте. Под воздействием электрического тока происходит изменение линейных размеров -прямой пьезоэффект. Когда подается разнофазный ток с определенной частотой, происходит колебание пьезорезонатора. Частота определяется температурой.  Зная полученную зависимость, можно определить необходимые данные о частоте и температуре. Диапазон измерения температуры широк, устройство обладает высокой точностью. Датчики чаще всего используются в научных опытах, которые требуют высокой надежности результатов.
  4. Полупроводниковый датчик. Измеряют в диапазоне от -55С до 150С. Принцип работы основан на зависимости изменения напряжения на p-n-переходе от температуры. Так как эта зависимость практически линейна, есть возможность создать датчик без сложной схемы. Но для таких приборов схема содержит одиночный p-n-переход, поэтому датчик отличается большим разбросом параметров и невысокой точностью. Исправить эти недостатки получилось в аналоговых полупроводниковых датчиках.
  5. Аналоговый датчик. Приборы стоят дешево и обладают высокой точностью измерения, что позволяет их применять в микроэлектронике. В схеме содержатся 2 чувствительных элемента (транзистора), обладающих различными характеристиками. Выходной сигнал – это разность между падениями напряжений на транзисторах. При помощи калибровки датчика внешними цепями можно увеличить точность измерения, которая находится в диапазоне от +-1С до +-3С. Датчики обладают тремя выходами, один из них используется для калибровки.
  6. Цифровой датчик. В отличие от аналогового датчика цифровой содержит дополнительные элементы – встроенный АЦП и формирователь сигнала. Подключаются по интерфейсам SPI, I2C, 1-Wire, что позволяет подключать сразу несколько датчиков к одной шине. Подобные устройства стоят немного дороже аналоговых, но при этом они значительно упрощают схемотехнику устройства.
  7. Существуют и другие датчики температуры. Например, для автоматических систем могут применяться сигнализаторы, также существуют пирометры, измеряющие энергию тела, которую оно излучает в окружающую среду. В медицине нередко используются акустические датчики — их принцип работы заключается в разности скорости звука при различных температурах. Эти датчики удобно применять в закрытых полостях и в недоступных средах. Похожие датчики – шумовые, они работают на зависимости шумовой разности потенциалов на резисторе от температуры.

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

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

При работе с микроконтроллером Ардуино наиболее часто используются следующие датчики температуры: DS18B20, DHT11, DHT22, LM35, TMP36.

Датчик температуры DS18B20

DS18B20 – цифровой 12-разрядный температурный датчик. Устройство доступно в 3 вариантах корпусов — 8-Pin SO (150 mils), 8-Pin µSOP, и 3-Pin TO-92, чаще всего используется именно последний. Он же изготавливается во влагозащитном корпусе с тремя выходами. Датчик прост и удобен в использовании, к плате Ардуино можно подключать сразу несколько таких приборов. А так как каждое устройство обладает своим уникальным серийным номером, они не перепутаются в результате измерения. Важной особенностью датчика является возможность сохранять данные при выключении прибора. Также DS18B20 может работать в режиме паразитного питания, то есть без внешнего питания через подтягивающий резистор. Подробная статья о ds18b20.

Датчики температуры DHT

DHT11 и DHT22 – две версии датчика DHT, обладающие одинаковой распиновкой. Разливаются по своим характеристикам. Для DHT11 характерно определение температуры в диапазоне от 0С до 50С, определение влажности в диапазоне 20-80% и частота измерений 1 раз в секунду. Датчик DHT22 обладает лучшими характеристиками, он определяет влажность 0-100%, температурный диапазон увеличен – от -40С до 125С, частота опроса 1 раз за 2 секунды. Соответственно, стоимость второго датчика дороже. Оба устройства состоят из 2 основных частей – это термистор и датчик влажности. Приборы имеют 4 выхода – питание, вывод сигнала, земля и один из каналов не используется. Датчик DHT11 обычно используется в учебных целях, так как он показывает невысокую точность измерений, но при этом он очень прост в использовании. Другие технические характеристики устройства: напряжение питания от 3В до 5В, наибольший ток 2,5мА. Для подключения к ардуино между выводами питания и выводами данных нужно установить резистор. Можно купить готовый модуль DHT11 или 22 с установленными резисторами.

Датчик температуры LM35

LM35 – интегральный температурный датчик. Обладает большим диапазоном температур (от -55С до 150С), высокой точностью (+-0,25С) и калиброванным выходом. Выводов всего 3 – земля, питание и выходной мигнал. Датчик стоит дешево, его удобно подключать к цепи, так как он откалиброван уже на этапе изготовления, обладает низким сопротивлением и линейной зависимостью выходного напряжения. Важным преимуществом датчика является его калибровка по шкале Цельсия. Особенности датчика: низкая стоимость, гарантированная точность 0,5С, широкий диапазон напряжений (от 4 до 30В) ток менее 60мА, малый уровень собственного разогрева (до 0,1С), выходное сопротивление 0,1 Ом при токе 1мА. Из недостатков можно выделить ухудшение параметров при удалении на значительное расстояние. В этом случае источниками помех могут стать радиопередатчики, реле, переключатели и другие устройства. Также существует проблема, когда температура измеряемой поверхности и температура окружающей среды сильно различаются. В этом случае датчик показывает среднее значение между двумя температурами. Чтобы избавиться от этой проблемы, можно покрыть поверхность, к которой подключается термодатчик, компаундом.

Схема подключения к микроконтроллеру Ардуино достаточно проста. Желательно датчик прижимать к контролируемой поверхности, чтобы увеличить точность измерения.

Примеры применения:

  • Использование в схемах с развязкой по емкостной нагрузке.
  • В схемах с RC цепочкой.
  • Использование в качестве удаленного датчика температуры.
  • Термометр со шкалой по Цельсию.
  • Термометр со шкалой по Фаренгейту.
  • Измеритель температуры с преобразованием напряжение-частота.
  • Создание термостата.

TMP36 – аналоговый термодатчик

Датчик температуры Использует технологии твердотельной электроники для определения температуры. Устройства обладают высокой точностью, малым износом, не требуют дополнительной калибровки, просты в использовании и стоят недорого. Измеряет температуру в диапазоне от -40С до 150С. Параметры схожи с датчиком LM35, но TMP36 имеет больший диапазон чувствительности и не выдает отрицательное значение напряжения, если температура ниже нуля. Напряжение питания от 2,7В до 5,5В. Ток – 0.05мА. При использовании нескольких датчиков может возникнуть проблема, при которой полученные данные будут противоречивы. Причиной этого являются помехи от других термодатчиков. Чтобы исправить эту неполадку нужно увеличить задержку между записью измерений. Низкое выходное сопротивление и линейность результатов позволяют подключать датчик напрямую к схеме контроля температуры. TMP36 также, как и LM34 обладает малым нагревом прибора в нормальных условиях.

Сравнение характеристик датчиков температуры Ардуино

НазваниеТемпературный диапазонТочностьПогрешностьВариант исполненияБиблиотека
DS18B20-55С…125С+-0.0625С+-2%Существует в 3 видах —  8-Pin SO (150 mils), 8-Pin µSOP, и 3-Pin TO-92, последний изготавливается во влагозащитном корпусе.Onewire.h
DHT110С…50С+-2С+-2% температура, +-5% влажностьИзготавливается в виде готового прямоугольного модуля с 4 ножками, третья не используется. Также встречаются модули с тремя ножками и сразу установленным резистором на 10 кОм.DHT.h
DHT22-40С…125С+-0,5С+-0,5% температура, от +-2 до +-5% влажностьDHT.h
LM35-55С…150С+-0.5С (при 25С)+-2%Существует несколько видов корпуса: TO-46 (для датчиков LM35H, LM35AH,

LM35CH, LM35CAH,

LM35DH)

TO-92 (для датчиков LM35CZ, LM35CAZ,

LM35DZ)

SO-8 для датчика LM35DM

TO-220 для датчика LM35DT.

TMP36-40С…150С+-1С+-2%Изготавливается в трехвыводном корпусе TO-92, восьмивыводном SOIC и пятивыводном SOT-23.

 

arduinomaster.ru

Arduino. Подключение датчика DS18B20. Сложно! — Сообщество «Arduino для автомобиля» на DRIVE2

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

Arduino. DS18B20. Подключение к D5, D6, D7

Соответственно…

Arduino. DS18B20. Фото работы программы! (Не скетч)

(Добавлено)
Данная публикация касается только лишь нестандартного подключения датчика, остальные вопросы (оптимизация кода, орфография, прерывания, …) не рассматриваются.
Использование прерываний (MsTimer2) приведено в статье:

Подсматривал.



1 год

Метки: arduino, ds18b20, датчик, датчик температуры, uno, arduino uno, nano






Нравится

43



Поделиться:











www.drive2.ru

BlockDuino: Адресная работа с несколькими датчиками температуры DS18B20 с выводом на графический дисплей

Когда-то я уже отписывался о работе с тремя датчиками температуры от компании Dallas 18B20. Но на одном из форумов снова встретил обсуждение работы 10 датчиков. Так вот там утверждалось, что десять датчиков будут опрашиваться по секунде на каждого, те десять секунд на все. Меня это слегка смутило, не помню я такого, поэтому решил перепроверить все вживую. Тем более, что в прошлый раз я не доработал до ума код, тк те датчики не привязывались по адресам к объектам, а выбирались наугад, по очереди.
В общем поставил я 6 датчиков, хотел 9, но не нашел столько сходу. Так что пока только шесть. Но это не принципиально, код написал более менее универсальный, так что можно использовать под любое количество датчиков.
Для этого мне понадобилось:

  • Blockduino — 1 шт
  • CleClo-18B20 — 6 шт (1 — с резистором, 5 — без резистора)
  • PlugDIO (mama) — 1 шт
  • Blockproto2 с запаяным GLCD (в будущем PlugGLCD) — 1 шт
  • Провода стандарта GVS — 6 шт


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

Dallas Temperature IC Control Library Demo
Locating devices…Found 6 devices.
Parasite power is: OFF
Device #0 — Address: 28140758030000E8 Resolution: 9
Device #1 — Address: 2882DB3C020000A1 Resolution: 9
Device #2 — Address: 2822E85803000002 Resolution: 9
Device #3 — Address: 288A2F6C060000FF Resolution: 9
Device #4 — Address: 2853265F030000AB Resolution: 9
Device #5 — Address: 28C7EC3C020000EA Resolution: 9
Requesting temperatures…#0 DONE: 0:00:01
Device Address: 28140758030000E8 Temp C: 22.50 Temp F: 72.50
Device Address: 2882DB3C020000A1 Temp C: 23.00 Temp F: 73.40
Device Address: 2822E85803000002 Temp C: 24.00 Temp F: 75.20
Device Address: 288A2F6C060000FF Temp C: 23.00 Temp F: 73.40
Device Address: 2853265F030000AB Temp C: 23.00 Temp F: 73.40
Device Address: 28C7EC3C020000EA Temp C: 22.50 Temp F: 72.50
Requesting temperatures…#1 DONE: 0:00:01
Device Address: 28140758030000E8 Temp C: 22.50 Temp F: 72.50
Device Address: 2882DB3C020000A1 Temp C: 23.00 Temp F: 73.40
Device Address: 2822E85803000002 Temp C: 24.00 Temp F: 75.20
Device Address: 288A2F6C060000FF Temp C: 23.00 Temp F: 73.40
Device Address: 2853265F030000AB Temp C: 23.00 Temp F: 73.40
Device Address: 28C7EC3C020000EA Temp C: 22.50 Temp F: 72.50
Requesting temperatures…#2 DONE: 0:00:02

Requesting temperatures…#99 DONE: 0:00:52
Device Address: 28140758030000E8 Temp C: 22.50 Temp F: 72.50
Device Address: 2882DB3C020000A1 Temp C: 22.50 Temp F: 72.50
Device Address: 2822E85803000002 Temp C: 23.50 Temp F: 74.30
Device Address: 288A2F6C060000FF Temp C: 22.50 Temp F: 72.50
Device Address: 2853265F030000AB Temp C: 22.50 Temp F: 72.50
Device Address: 28C7EC3C020000EA Temp C: 22.50 Temp F: 72.50
Requesting temperatures…#100 DONE: 0:00:53
Device Address: 28140758030000E8 Temp C: 22.50 Temp F: 72.50
Device Address: 2882DB3C020000A1 Temp C: 22.50 Temp F: 72.50
Device Address: 2822E85803000002 Temp C: 23.50 Temp F: 74.30
Device Address: 288A2F6C060000FF Temp C: 22.50 Temp F: 72.50
Device Address: 2853265F030000AB Temp C: 22.50 Temp F: 72.50
Device Address: 28C7EC3C020000EA Temp C: 22.50 Temp F: 72.50
Requesting temperatures…#101 DONE: 0:00:54

Т.е. как видно, что сто считываний температуры с шести датчиков были выполнены за 52 секунды. Это при: Resolution: 9, а при 11, тоже будет уже за 0:01:21, т.е. за 80 секунд.

Дальше, так как все уже собрано, решил вывести эти показания красиво на графический экран. Но, как и предполагал, столкнулся с проблемкой — датчики опрашиваются не последовательно по расположению, а в некотором зафиксированном, но случайном порядке. Ну в смысле, если я грею первый по счету датчик, а выводится он пятым в списке, второй — третьим, третий — шестым. Бардак вобщем.
Чтоб избавиться от такой проблемки нужно опрашивать датчики не по порядку, а по адресу датчика. Напомню: каждый датчик имеет свой уникальный адрес, который вшит в его чип.
А чтоб опрашивать по адресам, нужно их сначала считать и записать куда-нибудь.
Для этого я написал код, который выдает в Serial список адресов в удобном к использованию формате. Для этого нужно (после загрузки кода ессно) дотрагиваться в нужной Вам последовательности к датчикам и код выдает такой текст:


This sketch help find and print adresses of all 18B20 themperature sensors
Sensors should be connected to port: 10
Init
Found 6 sensors
Requiest temperatures…
22.69 oC
22.87 oC
23.50 oC
22.81 oC
22.62 oC
22.56 oC
Ready to locate adresses.
Touch sensors in sequinces to heat plus one degree

DeviceAddress myAddress[] = {
{0x28, 0x53, 0x26, 0x5F, 0x03, 0x00, 0x00, 0xAB},
{0x28, 0xC7, 0xEC, 0x3C, 0x02, 0x00, 0x00, 0xEA},
{0x28, 0x14, 0x07, 0x58, 0x03, 0x00, 0x00, 0xE8},
{0x28, 0x22, 0xE8, 0x58, 0x03, 0x00, 0x00, 0x02},
{0x28, 0x82, 0xDB, 0x3C, 0x02, 0x00, 0x00, 0xA1},
{0x28, 0x8A, 0x2F, 0x6C, 0x06, 0x00, 0x00, 0xFF}
};

DONE!!!

Остается только скопировать сформированный массив (все от слова ‘degree’ до слова ‘DONE!!!’) и вставить в Ваш код.
Вот код для поиска адресов и для вывода шести датчиков на графический дисплейчик.

Код

Поиск и вывод адресов

Вывод шести датчиков температуры поадресно на графический экран

Фото

Датчик температуры 18B20 — CleClo_18B20

Дотрагиваюсь до левого верхнего — там же и выводится

Дотрагиваюсь до правого нижнего — там же и выводится… Зашибись! 🙂
Здесь был использован файл с русским шрифтом SystemRus5x7.h взятый на mk90.ru

blockduino.blogspot.com

Герметичный датчик температуры DS18B20 [Амперка / Вики]

Цифровой датчик температуры DS18B20 предназначен для измерения температур от −55 до +125 °C. Показания передаются на управляющую плату по протоколу 1-Wire — для подключения понадобится всего один свободный пин.

Подключение

Датчик имеет несколько вариантов исполнения чувствительного элемента. В статье мы опишем работу с сенсором DS18B20+ и его герметичным вариантом.

Для питания датчика током напряжением от 3 В до 5.5 В используются контакты V и G. Контакт S предназначен для передачи данных на микроконтроллер.

Чтобы подключить датчик понадобится резистор на 4.7 кОм, которым необходимо будет притянуть сигнальный контакт S к контакту питания V. Ниже приведена схема подключения двух типов датчика с использованием Breadboard.

Собрать такую схему на макетке не сложно, но если вам важна надежность — спаяйте схему на Troyka Protoboard. Если вы ещё никогда не паяли, сейчас хороший повод научится этому.

Распаяйте резистор на 4.7 кОм, штырьковые соединители и герметичный датчик, как показано на рисунке ниже.

Теперь датчик легко подключить стандартным трёхпроводным шлейфом «мама-мама» к Troyka Shield.

А если хотите избавиться от лишних проводов, воспользуйтесь Troyka Slot Shield.

Примеры работы

Для того чтобы микроконтроллер получил данные с термометра необходимо установить библиотеку OneWire Library. Рекомендуем установить еще одну библиотеку Dallas Temperature — в ней собраны функции для упрощения работы с датчиком.

Работа с одним датчиком

Рассмотрим самый простой способ получения температуры — получение значений и выводом их в Serial монитор.
Прошейте управляющую плату примером кода, перезагрузите контроллер и откройте Serial монитор.

simple.ino
// подключим необходимые библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>
 
// сигнальный провод подключен к 2 пину на Arduino
#define ONE_WIRE_BUS 4
 
// настроим библиотеку 1-Wire для связи с датчиком
OneWire oneWire(ONE_WIRE_BUS);
 
// создадим объект для работы с библиотекой DallasTemperature
DallasTemperature sensors(&oneWire);
 
void setup(){
  // инициализируем работу Serial порта
  Serial.begin(9600);
  sensors.begin();
}
 
void loop(){
  // отправляем запрос на измерение температуры
  sensors.requestTemperatures();
  // покажем температуру в мониторе Serial порта
  Serial.print("Temp C: ");
  Serial.print(sensors.getTempCByIndex(0));
  Serial.println();
}

В результате получим значение вот в таком виде

Рассмотрим более сложный пример — с большим числом параметров

single.ino
// подключим необходимые библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>
 
// сигнальный провод подключен к 2 пину на Arduino
#define ONE_WIRE_BUS 4
 
// выберем разрешение от 9 до 12
#define TEMPERATURE_PRECISION 9
 
// настроем библиотеку 1-Wire для связи с датчиком
OneWire oneWire(ONE_WIRE_BUS);
 
// создадим объект для работы с библиотекой DallasTemperature
DallasTemperature sensors(&oneWire);
 
// создаем массив для хранения адреса датчика
DeviceAddress Thermometer;
 
// функция вывода адреса датчика
void printAddress(DeviceAddress deviceAddress){
  for (uint8_t i = 0; i < 8; i++){
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}
 
void setup(void){
  // инициализируем работу Serial порта
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library");
 
  // инициализируем работу с датчиком
  sensors.begin();
 
  // выведем общее количество найденных датчиков
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");
 
  // проверяем способ подключения питания
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()){
  Serial.println("ON");
  } else {
  Serial.println("OFF");
  }
  // сделаем запрос на получение адреса датчика
  sensors.getAddress(Thermometer, 0);
  // выведем полученный адрес
  Serial.print("Device 0 Address: ");
  printAddress(Thermometer);
  Serial.println();
 
  // установим выбранное разрешение датчика
  sensors.setResolution(Thermometer, TEMPERATURE_PRECISION);
  // выведем значение установленного разрешения
  Serial.print("Resolution: ");
  Serial.print(sensors.getResolution(Thermometer), DEC);
  Serial.println();
}
 
void loop(void){
  // отправляем запрос на измерение температуры
  sensors.requestTemperatures();
  // создаем переменную для хранения температуры в градусах Цельсия и выводим её значение
  float tempC = sensors.getTempC(Thermometer);
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.println();
  // пересчитаем значение температуры из шкалы Цельсия в шкалу Фаренгейта
  Serial.print("Temp F: ");
  Serial.print(DallasTemperature::toFahrenheit(tempC));
  Serial.println();
  Serial.println();
}

В Serial мониторе отобразятся значения температуры и дополнительные настройки датчика.

Работа с двумя датчиками

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

Multiple.ino
// подключим необходимые библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>
 
// сигнальный провод подключен к 2 пину на Arduino
#define ONE_WIRE_BUS 4
// выберем разрешение от 9 до 12
#define TEMPERATURE_PRECISION 9
 
// настроем библиотеку 1-Wire для связи с датчиком
OneWire oneWire(ONE_WIRE_BUS);
 
// создадим объект для работы с библиотекой DallasTemperature
DallasTemperature sensors(&oneWire);
 
// создаем массивы для хранения адреса датчиков
DeviceAddress insideThermometer, outsideThermometer;
 
// функция вывода адреса датчика
void printAddress(DeviceAddress deviceAddress){
  for (uint8_t i = 0; i < 8; i++){
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}
 
void setup(void){
  // инициализируем работу сериал порта
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library");
 
  // инициализируем работу с датчиком
  sensors.begin();
 
  // выводим количество найденных датчиков
  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");
 
  // проверяем способ подключения питания
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");
 
  // сделаем запрос на получение адреса датчика
  sensors.getAddress(insideThermometer, 0);
  sensors.getAddress(outsideThermometer, 1);
  // выведем полученный адрес
  Serial.print("Device 0 Address: ");
  printAddress(insideThermometer);
  Serial.println();
  Serial.print("Device 1 Address: ");
  printAddress(outsideThermometer);
  Serial.println();
 
  // установим выбранное разрешение датчика
  sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
  sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);
 
  // выведем значение установленного разрешения
  Serial.print("Device 0 Resolution: ");
  Serial.print(sensors.getResolution(insideThermometer), DEC);
  Serial.println();
  Serial.print("Device 1 Resolution: ");
  Serial.print(sensors.getResolution(outsideThermometer), DEC);
  Serial.println();
}
 
void loop(void){
  // отправляем запрос на измерение температуры
  sensors.requestTemperatures();
  // создаем переменную для хранения температуры в градусах Цельсия и выводим её значение
  float tempC0 = sensors.getTempC(insideThermometer);
  Serial.print("Temp C Device 0: ");
  Serial.print(tempC0);
  Serial.println();
  // пересчитаем значение температуры из Цельсия в Фаренгейт
  Serial.print("Temp F Device 0: ");
  Serial.print(DallasTemperature::toFahrenheit(tempC0));
  Serial.println();
  Serial.println();
 
  float tempC1 = sensors.getTempC(outsideThermometer);
  Serial.print("Temp C Device 1: ");
  Serial.print(tempC1);
  Serial.println();
  // пересчитаем значение температуры из Цельсия в Фаренгейт
  Serial.print("Temp F Device 1: ");
  Serial.print(DallasTemperature::toFahrenheit(tempC1));
  Serial.println();
  Serial.println();
}

В мониторе порта появятся показания двух датчиков.

Характеристики

  • Диапазон измеряемых температур: −55…+125 °C

  • Точность: ±0,5°C (в пределах −10…+85 °C)

  • Время получения данных: 750 мс при 12-битном разрешении; 94 мс при 9-битном разрешении

  • Напряжение питания: 3–5,5 В

  • Потребляемый ток при бездействии: 750 нА

  • Потребляемый ток при опросе: 1 мА

Ресурсы

wiki.amperka.ru

alexxlab

Отправить ответ

avatar
  Подписаться  
Уведомление о