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

Виды датчиков

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

Рассмотрим основные виды приборов, построенных на рассматриваемой платформе:

  1. Вращательный: в основном, резистор, подключенный к потенциометру и трехконтактному разъему, который позволяет подключать аналоговый выход и подавать его VCC и GND. Часто используется для определения положения двигателя, как сервомотора, так и шагового, постоянного тока и других. По-другому можно назвать – Ардуино датчик тока или Аrduino датчик движения.
  2. Звуковой: оснащен микрофоном, операционным усилителем LM386 и потенциометром, позволяющим захватывать любой звук вокруг него и превращать его в аналоговый сигнал с 0V до VCC, который может быть преобразован в сигнал Аrduino от 0 до 1024 в резолюции ADC. Существуют различные приложения для такого типа, которые относятся к аудиозахвату. Также существует ультразвуковой датчик Ардуино.
  3. Обнаружитель дыма: используется в системах обнаружения пожара, является прибором, который выявляет дым и газ, может быть откалиброван с помощью потенциометра, а выходной сигнал подключается к аналоговому входному модулю. Эти Ардуино-датчики имеют, помимо прочего, варианты MQ-2, MQ-3, MQ4 и дифференцируются по типу обнаруженного вещества, метана, спирта, пропана и другие.
  4. Детонация: предназначен для обнаружения сбоев или известен, как перкуссионный. Передает цифровой сигнал, когда обнаруживает изменение. Может быть подключен к цифровому входу на плате разработки Arduino и обнаруживать сигнал, который генерируется при наличии какого-либо удара.
  5. Ардуино-датчик температуры: предназначается для измерения состояния окружающей среды. К таким можно отнести Аrduino dsl8b20.

Installing Library For DS18B20

The Dallas 1-Wire protocol is somewhat complex, and requires a bunch of code to parse out the communication. To hide away this unnecessary complexity we will install DallasTemperature.h library so that we can issue simple commands to get temperature readings from the sensor.

To install the library navigate to the Sketch > Include Library > Manage Libraries…Wait for Library Manager to download libraries index and update list of installed libraries.

Filter your search by typing ‘ds18b20’. There should be a couple entries. Look for DallasTemperature by Miles Burton. Click on that entry, and then select Install.

This Dallas Temperature library is a hardware-specific library which handles lower-level functions. It needs to be paired with One Wire Library to communicate with any one-wire device not just DS18B20. Install this library as well.

Getting Temperature from Multiple DS18B20 Sensors

The DS18B20 temperature sensor communicates using one-wire protocol and each sensor has a unique 64-bit serial code, so you can read the temperature from multiple sensors using just one single Arduino digital Pin.

Schematic

To read the temperature from multiple sensors, you just need to wire all data lines together as shown in the following schematic diagram:

Upload Code – Multiple DS18B20

Then, upload the following code. It scans for all devices on Pin 4 and prints the temperature for each one. This sketch is based on the example provided by the DallasTemperature library.

How the code works

The code uses several useful methods to handle multiple DS18B20 sensors.

You use the getDeviceCount() method to get the number of DS18B20 sensors on the data line.

The getAddress() method finds the sensors addresses:

The address is unique for each sensor. So each sensor can be identified by its address.

Then, you use the getTempC() method that accepts as argument the device address. With this method you can get the temperature from a specific sensor:

To get the temperature in Fahrenheit degrees, you can use the getTemF(). Alternatively, you can convert the temperature in Celsius to Fahrenheit as follows:

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

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • модуль DHT11;
  • макетная плата;
  • 2 светодиода и 2 резистора на 220 Ом;
  • провода «папа-папа» и «папа-мама».

На этом занятии мы приведем для примера два скетча. Первый скетч будет отсылать данные с модуля DHT11 на последовательный монитор порта  компьютера. Во втором скетче мы будем использовать вывод данных на жк дисплей — LCD 1602 модуль. LCD модуль можно будет использовать в дальнейшем в любом автономном устройстве, например, при конструировании «Домашней метеостанции» или «Умной теплицы».


Схема. Датчик DHT11 подключение к Ардуино

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

#include <DHT.h>      // подключаем библиотеку для датчика
DHT dht(2, DHT11);  // сообщаем на каком порту будет датчик

void setup() {
   dht.begin();                // запускаем датчик DHT11
   Serial.begin(9600);   // подключаем монитор порта
}

void loop() {
   // считываем температуру (t) и влажность (h)
   float h = dht.readHumidity();
   float t = dht.readTemperature();

   // выводим температуру (t) и влажность (h) на монитор порта
   Serial.print("Humidity: ");
   Serial.println(h);
   Serial.print("Temperature: ");
   Serial.println(t);
}

Пояснения к коду:

  1. переменные «h» и «t» являются типом данных float, которая служит для хранения чисел с десятичным разделителем (dht11 подключение к ардуино);
  2. команда выводит информацию на порт без переноса строки, команда выводит информацию на порт с переносом строки.

Скетч DHT11 и дисплея LCD 1602 Arduino

#include <Wire.h>                       // библиотека для протокола I2C 
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602
#include <DHT.h>                         // подключаем библиотеку для датчика

LiquidCrystal_I2C LCD(0x27,16,2);  // присваиваем имя LCD для дисплея
DHT dht(2, DHT11);                          // сообщаем на каком порту будет датчик

void setup() {
   LCD.init();            // инициализация LCD дисплея
   LCD.backlight();  // включение подсветки дисплея
   dht.begin();         // запускаем датчик DHT11
}

void loop() {
   // считываем температуру (t) и влажность (h)
   float h = dht.readHumidity();
   float t = dht.readTemperature();

   // выводим температуру (t) и влажность (h) на жк дисплей
   LCD.setCursor(0,0);
   LCD.print("Humidity: ");
   LCD.print(h);

   LCD.setCursor(0,1);
   LCD.print("Temperature: ");
   LCD.print(t);

   delay(1000);
   LCD.clear();
}

Пояснения к коду:

  1. команда в программе очищает экран дисплея от надписей для вывода новых значений с сенсора температуры DHT11 Arduino.

Описание

В зависимости от конструкции микросхема-датчик температуры Dallas DS18B20 для контроля заданных параметров доступна в 3 формах:

  • ТО-92;
  • SO (150 mm);
  • µSOP.

Расшифруем, где какой вывод микросхемы, и как правильно ее подключить.

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

  • низкий уровень U питания от линии (3–5,5 В);
  • высокоэффективная работа с помощью протокола 1-Wire;
  • уникальный идентификационный 64-битный код, записываемый в независимую ROM-память устройства для работы большего количества устройств с помощью одной линии связи, что позволяет получать точное положение датчика, температурный режим которого находится выше или ниже запрограммированного уровня;
  • широкий диапазон температурных измерений: –55°..+125°С с точностью 0,5°С в диапазоне –10°..+85°С;
  • встроенный АЦП позволяет запрограммировать DS18B20 в диапазоне 9–12 разрядов, что позволяет снизить время измерений до 750 мс;
  • удобное подключение микросхемы DS18B20 Raspberry Pi;
  • для программирования термодатчика достаточно его подключить к любому устройству, работающему под управлением архитектур Arduino, ARM, PIC или AVR.

DS18B20 1-Wire Temperature Sensor

DS18B20 is 1-Wire interface Temperature sensor manufactured by Dallas Semiconductor Corp. The unique 1-Wire Interface requires only one digital pin for two way communication with a microcontroller.

The sensor comes usually in two form factors. One that comes in TO-92 package looks exactly like an ordinary transistor. Other one in a waterproof probe style which can be more useful when you need to measure something far away, underwater or under the ground.


Types Of DS18B20 Temperature Sensor

DS18B20 temperature sensor is fairly precise and needs no external components to work. It can measure temperatures from -55°C to +125°C with ±0.5°C Accuracy.

The resolution of the temperature sensor is user-configurable to 9, 10, 11, or 12 bits. However, the default resolution at power-up is 12-bit (i.e. 0.0625°C precision).

The sensor can be powered with a 3V to 5.5V power supply and consumes only 1mA during active temperature conversions.

Here are the complete specifications:

Power Supply 3V to 5.5V
Current Consumption 1mA
Temperature Range -55 to 125°C
Accuracy ±0.5°C
Resolution 9 to 12 bit (selectable)
Conversion Time < 750ms

Wiring Arduino and DS18B20

The wiring, this is the beauty of a 1-wire interface, is super simple.

The GND pin of the DS18B20 goes to GND on the Arduino.
The Vdd pin of the DS18B20 goes to +5V on the Arduino.
The Data pin of the DS18B20 goes to a (digital) pin of your choice on the Arduino, in this example I used Pin 2.

The only thing we need to add is a pull-up resistor of 4.7 KΩ. I have seen ther values, but it seems this is the most commonly used value.

The wiring presented below is the regular way of wiring the DS18B20 with your Arduino.

 Make sure that you very line 10 and line 65 in the Sketch below to match your data pin and power mode!

DS18B20 and Arduino wiring

Below a picture of my test setup … it’s really easy.

Arduino and DS28B20 setup is super simple …

Parasite Power vs Regular Power

The alternative wiring is called “Parasite” mode, where we do NOT connect the +5V to the Vdd pin of the DS18B20.
Instead we connect Vdd of the DS18B20 to GND. The advantage being obvious: you only need 2 wires.

The downside of parasite mode is that you should limit the number of sensors and the wires should not be too long!
In the end, I’m not sure what to think of the Parasite mode, as I’d like to use this when the sensors are far away from the Arduino, but on the other hand this mode is not very suitable for that. Up to you which you prefer.

 Plenty of strange results have been report when using Parasite mode. Therefor I cannot recommend Parasite mode for a reliable setup.

Скетч для работы с датчиками DHT11 и DHT22 в Arduino

#include "DHT.h"
#define DHTPIN 2 // Тот самый номер пина, о котором упоминалось выше
// Одна из следующих строк закоментирована. Снимите комментарий, если подключаете датчик DHT11 к arduino
DHT dht(DHTPIN, DHT22); //Инициация датчика
//DHT dht(DHTPIN, DHT11);
void setup() {
  Serial.begin(9600);
  dht.begin();
}
void loop() {
  delay(2000); // 2 секунды задержки
  float h = dht.readHumidity(); //Измеряем влажность
  float t = dht.readTemperature(); //Измеряем температуру
  if (isnan(h) || isnan(t)) {  // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу
    Serial.println("Ошибка считывания");
    return;
  }
  Serial.print("Влажность: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Температура: ");
  Serial.print(t);
  Serial.println(" *C "); //Вывод показателей на экран
}

После загрузки скетча и подключения датчика, результат измерений можно посмотреть в окне монитора порта. Там будут выводиться значения температуры и влажности. Если что-то пошло не так, проверьте правильность подключения датчика, соответствие номера порта на плате Arduino и в скетче, надежность контактов.
Если все работает и датчик дает показания, можете провести эксперименты. Например, поместить датчик в более холодное место или подышать на него, отслеживая при этом изменения . Если при запотевании уровень влажности увеличивается, значит датчик работает исправно. Подуйте на него тонкой струйкой – влажность уменьшится и температура вернется в норму.

На этом этапе вы сможете заметить разницу между реальным значением температуры и показаниями датчика с ардуино. Точность DHT11 гораздо хуже точности DHT22, о чем мы уже говорили в этой статье. Если у вас есть оба датчика, подключите их к плате Arduino и сравните результаты. По моему опыту, в среднем расхождение составляет больше градуса. Учитывайте это, используя эти датчики в своих проектах.

Introducing DS18B20 Temperature Sensor

The DS18B20 temperature sensor is a one-wire digital temperature sensor. This means that it just requires one data line (and GND) to communicate with the Arduino.

It can be powered by an external power supply or it can derive power from the data line (called “parasite mode”), which eliminates the need for an external power supply.

The following table shows how you should wire the DS18B20 sensor to your Arduino board:

DS18B20 Arduino
GND GND
DQ Any digital pin (with 4.7k Ohm pull-up resistor)
VDD 5V (normal mode) or GND (parasite mode)

Each DS18B20 temperature sensor has a unique 64-bit serial code. This allows you to wire multiple sensors to the same data wire. So, you can get temperature from multiple sensors using just one Arduino digital pin.

The DS18B20 temperature sensor is also available in waterproof version.

Here’s a summary of the most relevant specs of the DS18B20 temperature sensor:

  • Communicates over one-wire bus communication
  • Power supply range: 3.0V to 5.5V
  • Operating temperature range: -55ºC to +125ºC
  • Accuracy +/-0.5 ºC (between the range -10ºC to 85ºC)

For more information consult the DS18B20 datasheet.

Подключаем датчик 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.

Подключение цифрового датчика влажности, температуры

Два популярных датчика — DHT11, DHT22 — предназначены для замера влажности и температуры (про подключение датчика температуру мы еще поговорим ниже отдельно); недорогое решение, отлично подходят для простых схем и обучения. Термистор, ёмкостной датчик — основа DHT11 и DHT22. Внутренний чип выполняет АЦП, давая на выходе «цифру», которую поймёт любой микроконтроллер.

DHT11 отличается от DHT22 диапазоном измерения и частотностью опроса:

  • влажность — 20-80% для DHT11 и 0-100% для DHT22;
  • температура — 0°C до +50°C для DHT11 и -40°C до +125°C для DHT22;
  • опрос — ежесекундный для DHT11 и раз в две секунды для DHT22.

Оба датчика DHT имеют стандартных 4 вывода:

  1. Питание датчиков.
  2. Шина данных.
  3. Не задействован.
  4. Земля.

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

Для DHT-датчиков разработана библиотека DHT.h. При загрузке скетча в контроллер монитор порта должен отобразить текущие значения влажности, температуры. Проверить работоспособность просто — достаточно подышать на датчик и взять его в руки: температура и влажность должны поменяться.

Возможен вывод значений на экран LCD 1602 I2C, если включить его в систему.

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

Также некоторые акватеррариумы требуют особых условий влажности, которые легко контролировать при помощи DHT1 и DHT22.

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.

Оцените статью:
Оставить комментарий