цифровой датчик температуры ds18b20

Использование

// Дефайны настроек (перед подключением библиотеки)
#define DS_TEMP_TYPE [float / int]          // Тип данных для температуры (точность / экономия flash) (По умолч. float)
#define DS_CHECK_CRC [true / false]         // Проверка подлинности принятых данных (По умолч. true)
#define DS_CRC_USE_TABLE [true / false]     // Использовать таблицу для CRC. Быстрее, но +256 байт flash (<1мкс VS ~6мкс) (По умолч. false)

// Методы
void setAddress(uint8_t *addr);             // установить (сменить) адрес
void setResolution(uint8_t resolution);     // Установить разрешение термометра 9-12 бит
void readAddress(uint8_t *addressArray);    // Прочитать уникальный адрес термометра в массив
void requestTemp(void);                     // Запросить новое преобразование температуры
uint16_t getRaw(void)                       // Прочитать "сырое" значение температуры
[int/float] getTemp(void);                  // Прочитать значение температуры
[int/float] calcRaw(uint16_t data);         // Преобразовать "сырое" значение в температуру
[int/float] - настраивается дефайном. По умолчанию float

// внешние функции
int DS_rawToInt(uint16_t data);             // преобразовать raw данные в температуру int
float DS_rawToFloat(uint16_t data);         // преобразовать raw данные в температуру float

// Время преобразования от точности
точность | время
12 бит   | 750 мс
11 бит   | 375 мс
10 бит   | 187 мс
9 бит    | 93 мс

OneWire compatibility

class provides compatibility interface between
OneWireNg and OneWire library.
The main purpose of this class is to provide fast and effortless mechanism for
developers experiencing issues with OneWire and eager to give OneWireNg a try.
Finally, it’s strongly recommended to switch into OneWireNg interface rather
than stay with the OneWire due to OneWireNg’s more mature and feature-rich API
(search filtering, OD mode, touch support).

DallasTemperature library

As an example of usage of the compatibility interface there has been created
the following fork
of DallasTemperature
library ported with OneWireNg.

Подключение нескольких датчиковoв DS18B20+

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

Запускаем среду программирования IDE Arduino, копируем пример кода в в окно программы и загружаем в контроллер.

/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 12.11.2016г.
*/

#include <OneWire.h> // Подключаем библиотеку OneWire
#include <DallasTemperature.h> // Подключаем библиотеку DallasTempature

#define ONE_WIRE_BUS 2 // Указываем, к какому выводу подключена DQ

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup(void)
{
Serial.begin(9600); // Задаем скорость передачи данных
sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит
}

void loop(void)
{
Serial.print(» Reading Temperature…»);
sensors.requestTemperatures(); // Запрос на считывание температуры
Serial.println(«Read»);
Serial.print(» Sensor Temperature 1: «);
Serial.print(sensors.getTempCByIndex(0)); // Отображение температуры датчика 1
Serial.print(» Reading Temperature…»);
Serial.println(«Read»);
Serial.print(» Sensor Temperature 2: «);
Serial.print(sensors.getTempCByIndex(1)); // Отображение температуры датчика 2
}

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

/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 12.11.2016г.

*/

 
 
#include <OneWire.h>                        // Подключаем библиотеку OneWire
#include <DallasTemperature.h>              // Подключаем библиотеку DallasTempature
 
#define ONE_WIRE_BUS 2                      // Указываем, к какому выводу подключена DQ
 

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

voidsetup(void)

{

Serial.begin(9600);// Задаем скорость передачи данных

sensors.begin();// Запуск библиотеки, по умолчанию 9 бит

}

voidloop(void)

{

Serial.print(» Reading Temperature…»);

sensors.requestTemperatures();// Запрос на считывание температуры

Serial.println(«Read»);

Serial.print(» Sensor Temperature 1: «);

Serial.print(sensors.getTempCByIndex());// Отображение температуры датчика 1

Serial.print(» Reading Temperature…»);

Serial.println(«Read»);

Serial.print(» Sensor Temperature 2: «);

Serial.print(sensors.getTempCByIndex(1));// Отображение температуры датчика 2

}

Ссылки  Документация к DS18B20+  Скачать библиотеку DallasTemperature  Скачать библиотеку OneWire v.2.2

Купить на Aliexpress  Контроллер Arduino UNO R3 на CH340G  Контроллер Arduino UNO R3 на Atmega16U2  Провода DuPont, 2,54 мм, 20 см  Датчик температуры DS18b20

Купить в Самаре и области  Контроллер Arduino UNO R3 на CH340G  Контроллер Arduino UNO R3 на Atmega16U2  Провода DuPont, 2,54 мм, 20 см  Датчик температуры DS18b20

Подключение библиотеки

Подключить любую библиотеку можно одной командой:

<файл.h> – это и есть имя той библиотеки, которую вы хотите подключить.

Например, в статье Wi-Fi WebServer на WeMos D1 R2 мы подключаем библиотеку ESP8266WiFi.h следующим образом:

Дополнительные примеры подключения библиотек:

Кроме того, есть вариант размещения библиотеки в одной папке проекта со скетчем, т.е. файл библиотеки располагается рядом с файлом .ino.

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

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

Но важно понимать — такой способ не подходит для библиотек со множеством файлов

Функции

  • OneWire myWire(pin)
    

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

  • myWire.search(addrArray)
    

    Ищет следующее устройство. Массив addrArray – это массив из 8 байтов. Если устройство обнаружено, addrArray заполняется адресом этого устройства, после чего функция возвращает true. Если больше устройств не найдено, функция возвращает false.

  • myWire.reset_search()
    

    Начинает новый поиск. Следующее использование поиска начнется на первом устройстве.

  • myWire.reset()
    

    Делает сброс шины 1-Wire. Как правило, это нужно перед коммуникацией с каким-либо устройством.

  • myWire.select(addrArray)
    

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

  • myWire.skip()
    

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

  • myWire.write(num)
    

    Записывает байт.

  • myWire.write(num, 1)
    

    Записывает байт и оставляет включенным паразитное питание, подключенное к шине 1-Wire.

  • myWire.read()
    

    Считывает байт.

  • myWire.crc8(dataArray, length)
    

    Рассчитывает проверочный CRC для массива данных.

Интерфейсы 1-Wire

Управление шиной при помощи специальных устройств

Эти устройства специально созданы и оптимизированы для того, чтобы максимально эффективно осуществлять операции записи/считывания с устройствами типа 1-Wire. Будучи похожими на UART/USART, они управляют тактовыми операциями при помощи буфера, тем самым увеличивая точность и высвобождая вычислительные ресурсы главного процессора (к примеру, микроконтроллера). Внешние подтягивающие резисторы тоже не требуются.

Многие из этих чипов осуществляют также исправление ошибок, которые возникают при использовании шин данных (к примеру, потери целостности сигнала, колебания уровня сигнала, отражений и т.д.) и способны повлечь различные проблемы, особенно с крупными сетями. Кроме того, многие из этих девайсов обладают дополнительными функциями и могут работать с большим количеством интерфейсов. Их цена варьируется от 1 до 30 долларов.

Управление шиной при помощи технологии Bit-Banging

Если управление буфферизацией/частотой при помощи контроллера или UART\USART по какой-то причине невозможно, шину 1-Wire можно настроить на GPIO-контакте. То есть это, по сути, программная эмуляция UART\USART с ручным переключением состояния контакта и реконструкцией сигнала от присланных данных. Однако поскольку это программный процесс, на него будут напрямую влиять другие системные процессы, выполняемые в процессоре, что может негативно сказаться на его работе.

На Arduino и прочих совместимых чипах это можно выполнить как раз при помощи библиотеки OneWire – она позволяет реализовать эту технологию на любом цифровом контакте.

На одноплатных компьютерах вроде Raspberry Pi имеется встроенная поддержка протокола 1-Wire, реализованная при помощи драйверов ядра. В частности, очень популярны w1-gpio, w1-gpio-therm и w1-gpio-custom, которые включены в большинство последних дистрибутивов Raspbian. С их помощью можно настроить коммуникацию с устройствами типа 1-Wire, не используя при этом никакого дополнительного оборудования. На данный момент, однако, поддерживается ограниченное количество устройств, а на программном уровне есть ограничение на размер шины.

Что такое библиотеки?

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

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

Большая часть библиотек зарегистрирована в Менеджере Библиотек Ардуино (Arduino Library Manager). Дополнительно существуют встроенные библиотеки в Arduino IDE.

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

Для работы вам необходимо скачать и установить на компьютер среду разработки Arduino IDE.

Создание веб-сервера NodeMCU ESP8266, используя Wi-Fi режим Station (STA)

Теперь мы собираемся настроить ESP8266 в режим станции (STA) и создать веб-сервер для выдачи веб-страниц любому подключенному клиента в существующей сети.

Если вы хотите узнать о создании веб-сервера с ESP8266 NodeMCU в режиме AP/STA, ознакомьтесь с этим руководством:

Создание простого веб-сервера на ESP8266 NodeMCU в Arduino IDE

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

Чтобы ESP8266 NodeMCU мог установить соединение с существующей сетью, вам необходимо изменить следующие две переменные в соответствии с учетными данными вашей сети.

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

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

1-Wire. Работа с DS18B20. Часть 1

     Все (и в том числе я) называют DS18B20 цифровым датчиком температуры. Однако это не просто датчик, это программируемый цифровой термометр.

Он измеряет температуру в диапазоне от –55 до +125 градусов Цельсия, имеет программируемое температурное разрешение от 9 до 12 бит и позволяет задавать верхний и нижний температурные пороги, в случае превышения которых,  устанавливается флаг аварии.

   Каждый термометр DS18B20 имеет уникальный 64 битный серийный номер, который используется для его адресации на 1-Wire шине. Это позволяет объединять на одной шине несколько независимо работающих термометров и осуществлять между ними и микроконтроллером обмен данными по 1-Wire протоколу. 

   Также особенностью данного термометра является то, что его можно запитывать не только от источника питания, но и от сигнального провода. Это так называемый режим паразитного питания. В этом режиме для подключения DS18B20 требуется всего два провода — сигнальный и возвратный (земляной, GND).

      Схема подключения нескольких датчиков DS18B20 с внешним питанием.    1-Wire шина  должна быть обязательно подтянута к плюсу питания через резистор номиналом 4,7 Ком. Напряжение источника питания от 3 до 5 Вольт. 

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

   Вывод Vdd соединяется с GND, а 1-Wire шина дополнительно подключается к источнику питания через полевой транзистор. 

   Когда датчик DS18B20 выполняет преобразование температуры или копирует данные из ОЗУ в EEPROM память, он потребляет ток до 1,5 мА. Этот ток может вызывать недопустимое снижение напряжения на 1-Wire шине. Чтобы этого не происходило, 1-Wire шину на время выполнения этих операций подключают к источнику питания. Для этого и нужен полевой транзистор.   

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

Это низкоскоростной двунаправленный полудуплексный последовательный протокол обмена данными использующий всего один сигнальный провод.

   Имеется несколько типов сигналов, определенных 1-Wire протоколом – импульс сброса, импульс присутствия, запись 0, запись 1, чтение 0 и чтение 1. Все эти сигналы, за исключением импульса присутствия, формируются на шине главным устройством — MASTERом . В нашем случае это  микроконтроллер AVR. 

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

  Физически это реализуется так. 

  Операция записи бита: Вывод микроконтроллера устанавливается в режим выхода и на нем устанавливается логический ноль. Выдерживается пауза, длительность которой зависит от значения передаваемого бита (0 или 1), затем вывод переводится в режим входа в состоянии Hi-z и снова выдерживается пауза. 

   Все сеансы связи микроконтроллера с датчиком DS18B20 начинаются с сигнала сброса.  Микроконтроллер на 480 мкс «проваливает» 1-Wire шину в ноль, а затем «отпускает» ее. Если к шине подключен термометр DS18B20, то он  обнаруживает положительный перепад и после паузы в 15-60 мкс отвечает микроконтроллеру импульсом присутствия — «проваливает» шину в ноль на время от 60 до 240 мкс. 

   Обмен данными по 1-Wire шине происходит последовательно, младшим битом вперед. Передача или прием одного бита данных выполняются в течении фиксированного промежутка времени, так называемого тайм слота (time slot). Различают тайм слоты записи и тайм слоты чтения. Длительность всех тайм слотов должна быть > 60 мкс, а пауза между тайм слотами  > 1 мкс.   

   Для передачи нуля микроконтроллер «проваливает» 1-Wire шину на время от 60 до 120 мкс. Затем «отпускает» ее и перед записью следующего бита выдерживает паузу >1  мкс.

   DS18B20 является подчиненным устройством и может передавать данные, только когда микроконтроллер формирует на 1-Wire шине тайм слоты чтения.

Для формирования тайм слота чтения микроконтроллер «проваливает» 1-Wire шину на время от 1 до 15 мкс, а затем «отпускает» ее, передавая  управление состоянием 1-Wire шины датчику DS18B20.

Если DS18B20 передает ноль, он удерживает шину в «проваленном» состоянии (в состоянии логического нуля) до конца тайм слота. Если он передает 1, он оставляет шину в «подтянутом» состоянии. 

   Микроконтроллер может считывать данные датчика DS18B20 через 15 мкс после начала тайм слота чтения. 

Системные библиотеки ардуино

Библиотека EEPROM

Стандартная библиотека. Предназначена для работы с энергонезависимой памятью (запись данных, их чтение).

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

#include <EEPROM.h>

EEPROM.read(); – создание объекта, считывание байта по адресу из энергонезависимой памяти.

EEPROM.write(address, value)– запись байта в энергонезависимую память.

EEPROM.put() – запись строк чисел с плавающей запятой.

EEPROM.get() – чтение строк и чисел с плавающей запятой.

Библиотека SoftwareSerial

Библиотека, которая позволяет реализовывать последовательные интерфейсы с любых цифровых пинов. Также позволяет создавать несколько последовательных портов, которые работают на скорости до 115200 бод.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(RX, TX) – создание объекта, аргументы – выводы, к которым подключены RX и TX.

Serial.begin( ); – устанавливает скорость порта для связи ардуино и компьютера.

mySerial.overflow() – проверка входного буфера на переполнение.

Библиотека Math

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

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

#include <math.h>

Math(); – создание экземпляра Math.

Serial.print(“cos num = “); – возвращает косинус числа.

Serial.println (fmod (double__x, double__y)); – возвращает числа по модулю.

Библиотека Scheduler

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

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

#include <Scheduler.h>

Scheduler; – создание экземпляра.

Scheduler.startLoop() – позволяет добавить функцию, которая будет выполняться вместе с loop().

yield() – позволяет передать управление другим задачам.

Библиотека Servo

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

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

#include <Servo.h>

Servo myservo; – создание объекта для серводвигателя..

myservo.attach(); – номер выхода, к которому подключен серводвигатель.

myservo.write(180, 30, true); – движение на 180 градусов, скорость 30, ожидание окончания движения.

Библиотека Stepper

Небходима для управления шаговым униполярным и биполярным двигателем.

#include <Stepper.h>

const int stepsPerRevolution =  ; – количество шагов, за которое двигатель проходит полный поворот.

Stepper myStepper = Stepper(steps, pin1, pin2) – создает экземпляр класса с указанным количеством шагов и выводами, к которым подключается двигатель.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что такое протокол I2C и как он работает

Термин IIC расшифровывается как “Inter Integrated Circuits” и часто обозначается как I2C или даже как TWI (2-wire interface protocol), но во всех случаях за этими обозначениями скрывается один и тот же протокол. I2C представляет собой протокол синхронной связи – это значит что оба устройства, которые обмениваются информацией с помощью данного протокола должны использовать общий сигнал синхронизации. Поскольку в этом протоколе используются всего 2 линии (провода), то по одной из них должен передаваться сигнал синхронизации, а по другой – полезная информация.

Впервые протокол I2C был предложен фирмой Phillips. Протокол в самом простом случае соединяет с помощью 2-х линий 2 устройства, одно из устройств должно быть ведущим, а другое – ведомым. Связь возможна только между ведущим и ведомым. Преимуществом протокола (интерфейса) I2C является то, что к одному ведущему можно подключить несколько ведомых.

Схема связи с помощью протокола I2C представлена на следующем рисунке.

Назначение линий данного интерфейса:

  • Serial Clock (SCL): по ней передается общий сигнал синхронизации, генерируемый ведущим устройством (master);
  • Serial Data (SDA): по ней осуществляется передача данных между ведущим и ведомым.

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

Уровни напряжений для передаваемых сигналов в интерфейсе I2C жестко не определены. В этом плане I2C является достаточно гибким, то есть если устройство запитывается от напряжения 5v, оно для связи с помощью протокола I2C может использовать уровень 5v, а если устройство запитывается от напряжения 3.3v, то оно для связи с помощью протокола I2C может использовать уровень 3v. Но что делать если с помощью данного протокола необходимо связать между собой устройства, работающие от различных питающих напряжений? В этом случае используются преобразователи/переключатели напряжения (voltage shifters).

Существует несколько условий для осуществления передачи данных в протоколе I2C. Инициализация передачи начинается с падения уровня на линии SDA, которое определяется как условие для начала передачи (‘START’ condition) на представленной ниже диаграмме. Как видно из этого рисунка, в то время как на линии SDA происходит падение уровня, в это же самое время на линии SCL ведущий поддерживает напряжение высокого уровня (high).

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

Аналогичным образом, повышение уровня на линии SDA останавливает передачу данных, что на представленной диаграмме обозначено как условие окончания передачи данных (‘STOP’ condition). В это же самое время ведущим на линии SCL поддерживается напряжение высокого уровня (high).

На следующем рисунке представлена структура адреса ведомого в протоколе I2C.

Бит R/W показывает направление передачи следующих за ним байт, если он установлен в HIGH – это значит что будет передавать ведомый (slave), а если он установлен в low – это значит что будет передавать ведущий (master).

Каждый бит передается в своем временном цикле, то есть нужно 8 временных циклов чтобы передать байт информации. После каждого переданного или принятого байта 9-й временной цикл используется для подтверждения/не подтверждения (ACK/NACK) приема информации. Этот бит подтверждения (ACK bit) формируется либо ведомым, либо ведущим в зависимости от ситуации. Для подтверждения приема информации (ACK) на линии SDA ведущим или ведомым устанавливается низкий уровень (low) в 9 временном цикле, в противном случае происходит не подтверждение приема информации (NACK).

На следующем рисунке представлена структура передаваемого сообщения в протоколе I2C.

Термометр через последовательный монитор

Чтобы отобразить данные на последовательном мониторе, подключите датчик DS18B20 к Arduino, используя перемычки и макет, и не забудьте подключить или припаять резистор 4.7k между контактом 2 и 3 датчика.

Затем скачайте, откройте и загрузите файл .ino, который называется — DS18B20_Serial, ниже.

Если все в порядке, вы должны увидеть измеренную температуру на серийном мониторе Arduino IDE.

#include <OneWire.h>
#include <DallasTemperature.h>
 
// Провод данных подключен к контакту 2 на Arduino
#define ONE_WIRE_BUS 2
 
// Настройка oneWire для связи с любыми устройствами OneWire 
// (не только Maxim/Dallas температурные IC)
OneWire oneWire(ONE_WIRE_BUS);
 
DallasTemperature sensors(&oneWire);
 
void setup(void)
{
  // Старт серийного порта
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC демо");

  // Запуск библиотеки
  sensors.begin();
} 
 
void loop(void)
{
  // запрашиваем sensor.requestTemperatures() для получения глобальной температуры
  // запрос всех устройств на шине
  Serial.print(" Запрашиваем температуру...");
  sensors.requestTemperatures(); // Отправляем команды для получения температуры
  Serial.println("DONE");

  Serial.print("Температура: ");
  Serial.print(sensors.getTempCByIndex(0)); // Почему "byIndex"? 
    // У вас может быть несколько IC на одной шине. 
    // 0 относится к первой IC
    delay(1000);
}

Скачать популярные библиотеки Arduino IDE на русском

Пользовательские библиотеки создаются разработчиками модулей и плат расширений для Ардуино. Большинство популярных библиотек Ардуино скачать можно на сайте GitHub. Это сервис для совместной разработки IT-проектов, где можно отследить историю изменений исходного кода. Чтобы пройти уроки Ардуино для начинающих, все необходимые для занятий библиотеки Arduino UNO можно скачать здесь:

Список пользовательских библиотек Arduino:

TroykaCurrent — перевод аналоговых значений в Амперы (скачать TroykaCurrent.h)

RotaryEncoder — работа с модулем энкодера (скачать RotaryEncoder.h)

Adafruit NeoPixel — работа с адресной лентой (скачать Adafruit_NeoPixel.h)

Fast LED — работа с адресной лентой ws2812b (скачать FastLED.h)

TroykaMQ — работа с датчиками газа MQ (скачать TroykaMQ.h)

MQ-2 sensor — работа с датчиком газа MQ2 (скачать MQ2.h)

LCD 1602 I2C — библиотека для дисплея 1602 I2C (скачать LiquidCrystal_I2C.h)

LCD 1602 I2C RUS — русификация дисплея 1602 I2C (скачать LCD_1602_RUS.h)

OLED I2C — библиотека для OLED дисплея (русифицированная) (скачать OLED_I2C.h)

SFE_BMP180 — библиотека для датчика давления BMP180 (скачать SFE_BMP180.h)

SD.h — библиотека для работы с sd картой памяти (скачать SD.h)

Другие полезные функции в библиотеке DallasTemperature.h

Есть еще несколько полезных функций, которые вы можете использовать с объектом . Несколько из них перечислены ниже:

  • Функция устанавливает разрешение внутреннего аналого-цифрового преобразователя DS18B20 на значение 9, 10, 11 или 12 бит, что соответствует шагу температуры 0,5°C, 0,25°C, 0,125°C и 0,0625°C соответственно ,
  • Функция возвращает значение флага . Это может быть полезно, когда вы хотите проверить, завершено ли преобразование температуры.
  • Функции и устанавливают внутренние пороги тревоги высокой и низкой температуры для устройства в градусах Цельсия. Допустимый диапазон от -55°C до +125°C
  • Функция возвращает , если устройство имеет состояние тревоги, когда температура выходит за пределы диапазона между верхним и нижним уровнями тревоги.

Файлы библиотек (из чего состоит)

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

  • скачать (загрузить на Ваш компьютер),
  • установить (разместить в нужной папке),
  • подключить (вставить текст в скетч).

Каждая библиотека должна содержать 2 файла с расширениями .h и .cpp.

Файлы первого типа (.h) содержат:

  • описание класса,
  • константы,
  • переменные.

Второй тип (.cpp) содержит коды методов.

Дополнительно нужно понимать, что файлы .h и .cpp могут не лежать в корне скачанного архива.

Примечание. С основными файлами также могут идти «keywords.txt» и папка с примерами («examples»).

library.properties (файл) — файл с информацией о библиотеке для менеджеров библиотек и различных агрегаторв. Данный файл содержит:

  • название,
  • версия,
  • автор,
  • категория
  • и т.д.

src (папка) — в ней находятся основные файлы библиотеки — .h, .cpp, .c.

examples (папка) – здесь находятся примеры использования библиотеки.

Описание датчика 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 код.