Ds18b20 подключение датчика температуры к arduino: инструкция

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

В этой статье мы собрали 8 доступных датчиков температуры, совместимых с Arduino и другими платами разработки (такими как ESP32 или ESP8266).

1. DHT11

ds18b20 подключение датчика температуры к arduino: инструкция

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

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

ds18b20 подключение датчика температуры к arduino: инструкция

Цифровой мультиметр AN8009

Большой ЖК-дисплей с подсветкой, 9999 отсчетов, измерение TrueRMS…

Ниже приведены наиболее важные технические характеристики датчика температуры DHT11:

2. DHT22

ds18b20 подключение датчика температуры к arduino: инструкция

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

Ниже приводим наиболее важные характеристики датчика температуры DHT22:

3. LM35DZ, LM335, LM34

ds18b20 подключение датчика температуры к arduino: инструкция

LM35DZ представляет собой линейный датчик температуры, который откалиброван непосредственно в градусах Цельсия. Аналоговый выход прямо пропорционален температуре в градусах Цельсия: 10 мВ на каждый градус Цельсия.

Этот датчик очень похож на LM335 (откалиброванный в Кельвинах) и LM34 (откалиброванный в градусах Фаренгейта).

Далее приведены наиболее важные характеристики датчика температуры LM35:

  • Протокол связи: аналоговый выход
  • Диапазон питания: от 4 до 30 В
  • Диапазон температур: от -55 до 150ºC
  • Точность: +/- 0,5ºC (при 25ºC)
  • Интерфейс с Arduino: analogRead ()

4. BMP180

ds18b20 подключение датчика температуры к arduino: инструкция

Хотя BMP180 является датчиком атмосферного давления, он также может измерять температуру. Это очень удобно при создании проекта метеостанции.

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

  • Протокол связи: I2C
  • Диапазон питания (для чипа): от 1,8 до 3,6 В
  • Диапазон питания (для модуля): от 3,3 до 5 В
  • Диапазон температур: от 0 до 65ºC
  • Точность:  +/- 0,5ºC (при 25ºC)
  • Библиотеки Arduino: Adafruit BME085,  Adafruit Unified Sensor Library

5. TMP36

ds18b20 подключение датчика температуры к arduino: инструкция

TMP36 — аналоговый датчик температуры. Он выводит аналоговое значение, пропорциональное температуре окружающей среды. Он очень похож на датчик температуры LM35.

Вот его основные характеристики:

  • Протокол связи:  аналоговый выход
  • Диапазон питания: от 2,7 В до 5,5 В
  • Диапазон температур:  от -40 ° C до + 125 ° C
  • Точность:  +/- 1ºC (при 25ºC)
  • Интерфейс с Arduino:  analogRead ()

6. LM75

ds18b20 подключение датчика температуры к arduino: инструкция

Датчик LM75 — еще один полезный датчик температуры. Он работает по шине I2C, то есть с Arduino этот датчик соединяется по линиям SDA и SCL.

Взгляните на следующую таблицу, где приведены сводные технические характеристики датчика LM75:

  • Протокол связи:  I2C
  • Диапазон питания: от 3,0 до 5,5 В
  • Диапазон температур: от -55 до 125 ° C
  • Точность: +/- 2,0 ° C (в диапазоне от -55 до 125 ° C))
  • Библиотеки  Arduino:  Temperature_LM75_Derived

7. BME280

ds18b20 подключение датчика температуры к arduino: инструкция

BME280 является барометрическим датчиком, который также измеряет температуру и влажность. Он может обмениваться данными с микроконтроллером по шине I2C или SPI. Питание модуля BME280 составляет 3,3 В или 5 В.

В следующей таблице приведены сводные технические характеристики датчика BME280, когда речь идет о датчике температуры:

8. DS18B20

ds18b20 подключение датчика температуры к arduino: инструкция

DS18B20  — цифровой дтчик температуры работающий по протоколу 1-Wire. Это означает, что для связи с Arduino требуется только одна линия данных (и GND).

Каждый датчик температуры DS18B20 имеет уникальный 64-битный серийный код. Это позволяет подключить несколько датчиков к одному проводу передачи данных. Таким образом, вы можете получать температуру от нескольких датчиков, используя всего один цифровой вывод Arduino.

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

  • Протокол связи:  1-Wire
  • Диапазон питания:  от 3,0 до 5,5 В
  • Диапазон рабочих температур:  от -55ºC до + 125ºC
  • Точность:  +/- 0,5 ºC (в диапазоне от -10ºC до 85ºC)
  • Библиотеки  Arduino:   DallasTemperature, OneWire

Источник

Цифровой термометр DS18B20 и ARDUINO UNO

Казалось бы, что может быть интересного и нового в измерении температуры при помощи Ардуино? Написаны сотни статей, объемом десятки мегабайт, может чуть меньше, а может и чуть больше скетчей… А вот еще и моя статья.

Зачем? Честно говоря, я тоже думал, что вопрос этот «разжеван вдоль и поперек», пока сам не столкнулся с измерением температуры. А тут полезло. Что-то не работает, что-то работает не так, возникает масса вопросов, на которые ответы приходится «выцарапывать» перерывая половину интернета, причем не только русскоязычного.

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

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

Соединив, при помощи Ардуино, термодатчик с релейным блоком получим простейший терморегулятор, а если данный терморегулятор сможет отслеживать температуру по нескольким точкам (зонам) и действовать по определенному алгоритму получим довольно серьезный прибор, промышленный аналог которого стоит сопоставимо со стоимостью неплохого ноутбука. Однако, целью данной статьи не является создание заумно-сложных устройств. Цель в другом — предложить новичку простое, проверенное на практике, решение для измерения температуры. Также, как и предыдущие статьи эта будет состоять из частей. В каждой из которых будет рассмотрен свой вопрос. Части будут идти по возрастанию сложности.

Часть первая. Простейшая, но тоже полезная

Итак, от слов к делу! Для реализации данного проекта на первом этапе нам понадобится цифровой термодатчик DS18B20, ARDUINO UNO, резистор на 4,7 кОм (мощность особого значения не имеет, от 0,125 до 2 Вт целиком подходит, но имеет значение точность, чем точнее – тем лучше), кусочек 3-жильного провода (и отдельные проводки на этапе эксперимента тоже подойдут), а еще — несколько штырьков для платы. Хотя и без них тоже можно, если аккуратно, конечно. Выбор данного датчика не случаен. Дело в том, что он может отслеживать температуру в диапазоне от -55оС до +125оС с точностью в основной части диапазона 0,5оС, что вполне хватает для управления, как бытовым отоплением, так и разнообразными морозильными и холодильными установками, а также банями, саунами, теплицами, инкубаторами, рассадниками и прочим. Напоминаю, что ARDUINO UNO можно свободно приобрести здесь: arduino-kit.com.ua/uno-r3-new.html или здесь: arduino-kit.com.ua/arduino-leonardo-original-italiya-new-rev3.html , термодатчик DS18B20 — arduino-kit.com.ua/18b20-sensor-datchik-temperatury-dlya-arduino.html , хотя лично у меня – такой:arduino-kit.com.ua/cifrovoy-datchik-temperatury-odnozhilnyy-ds18b20.html достоинство моего — малые размеры, сопоставимые с размерами кабеля. Недостатки – отсутствие платы, что в некоторых условиях отрицательно сказывается на удобстве монтажа и жизнеспособности датчика. Также – у датчика arduino-kit.com.ua/18b20-sensor-datchik-temperatury-dlya-arduino.html встроен резистор и больше никаких резисторов паять не нужно, зато исчезает возможность подключить несколько датчиков «цепочкой». Подключение датчика к Ардуино видно на Рис. 1 и указано в Таблице 1. На термодатчике определить контакты просто. Нужно взять его так, чтобы смотреть на срез с цифрами, а ножки были внизу. Крайняя левая ножка будет GND, средняя DQ, а крайняя правая VDD. 

Таблица 1.

Пин Ардуино Уно Пин DS18B20 Примечание
GND GND «-»
+5V VDD +5V, также подпаивается одна ножка резистора 4,7 кОм.
10 DQ Цифровой ввод, также подпаивается вторая ножка резистора 4,7 кОм.
Читайте также:  Датчик температуры Рено Логан: где находится, замена ДТ охлаждающей жидкости

ds18b20 подключение датчика температуры к arduino: инструкция

Рисунок 1. Подключение одного термодатчика.

На рисунке видно, что было использовано два резистора. Это связано с тем, что найденный мной резистор с маркировкой «4К7», на самом деле имел довольно высокую погрешность, которую и пришлось компенсировать вторым резистором.

Общее сопротивление данной сборки составило 4,695 кОм, что я считаю вполне приемлемым. Также на рисунке можно видеть, что датчик не подпаян непосредственно к проводам (обрезок шлейфа), а вставлен в разъем. Сделано это было из соображений развития эксперимента.

Паять данные датчики настоятельно рекомендуется. Сам скетч также получился довольно компактным:

Файл DS18B20.ino

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

ds18b20 подключение датчика температуры к arduino: инструкция Рисунок 2. Результат работы с одним датчиком.

Часть вторая. Немного усложненная

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

ds18b20 подключение датчика температуры к arduino: инструкция Рисунок 3. Плата с двумя датчиками.

Скетч вырос всего на 3 строчки. Теперь в нем 17 строк:

Файл DS18B20_2.ino

Результаты работы этого скетча видно на Рисунке 4. 

ds18b20 подключение датчика температуры к arduino: инструкция Рисунок 4. Работа с двумя датчиками.

Часть третья. Заключительная

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

Мне под руку попался на 100 Ом, его я и использовал, подключив к 7-у контакту Ардуино. Длинную ножку светодиода (анод) подпаиваем к резистору, а короткую (катод) подключаем к контакту GND Ардуино.

Должно получиться, примерно, как на рисунке 5. 

ds18b20 подключение датчика температуры к arduino: инструкция

Скетч также вырос совсем не на много:

Файл DS18B20_2_plus_diod.ino

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

И в заключение данной статьи еще один шаг. Сейчас я расскажу, как к одной Ардуинке подключить несколько «гирлянд» данных устройств. Дело в том, что длина «гирлянды» не может быть бесконечной, более того – она очень сильно ограничена.

В идеальных условиях – 300 метров, но создание «идеальных» условий – довольно дорогостоящее удовольствие. В реальных условиях – не рекомендуется превышать 10 метров. Для обычного «комнатного» термометра этого более чем достаточно, но если речь идет о каком-либо более серьезном оборудовании – этого катастрофически мало.

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

Итак, подключаем мы несколько «гирлянд» именно для того, чтобы собрать информацию с большого числа точек, при этом сохранив достаточную точность и помехозащищенность. Добавляем контакты согласно таблице 2:

Пин Ардуино Уно Пин DS18B20 Примечание
GND GND «-»
+5V VDD +5V, также подпаивается одна ножка резисторов 4,7 кОм.
10 DQ Цифровой ввод, также подпаивается вторая ножка резистора 4,7 кОм.
8 DQ Цифровой ввод, также подпаивается вторая ножка резистора 4,7 кОм.

Как видно из таблицы – ничего сложного нет, точно такая же шина, только на другой цифровой вод. Не стал паять на 9-й контакт только из соображений удобства и скорости пайки.

Скетч:Файл DS18B20_2_plus_1.ino

  • Вряд ли скетч нуждается в излишних х.
  • Результат работы скетча выглядит так:

ds18b20 подключение датчика температуры к arduino: инструкция Рисунок 6. Работа одновременно двух линий датчиков.

  1. А плата с подключенными двумя линиями выглядит так: 

ds18b20 подключение датчика температуры к arduino: инструкция Рисунок 7. Плата с двумя шинами.

  • Из рисунка видно, что резистор 4,7кОм для повышения точности также выполнен составным. 
  • Библиотеки, примененные для написания скетчей рассмотренных в статье находятся здесь: 

OneWire.hDallasTemperature.h 

Обзор подготовил Павел Сергеев

Термометр с помощью arduino и датчиков LM35 и DS18B20

Я писал недавно статью, где подключал к arduino 4-разрядный 7-сегментный индикатор hs420561k-32, тогда упоминал, что хочу сделать градусник с выводом температуры на этот индикатор, только проблема была в отсутствии датчиков.

И вот наконец-то приехала посылка с недостающими запчастями и можно продолжить проект. Температурных датчиков у меня три штуки – dht11, LM35 и DS18B20.

Но использовать буду только LM35 и DS18B20, поскольку dht11 очень неточный, в даташите написано, что отклонения от реальной температуры составляют плюс-минус два градуса, а так же он работает только с положительной температурой.

Температурный датчик LM35. Подключение к arduino

Первый датчик, который будем использовать – это LM35, использовать его очень просто, тут даже дополнительные библиотеки не требуются, достаточно подключить к нему питание и считать данные на выходе с помощью аналогового пина arduino. LM35 работает с температурами от -55 до 150 градусов Цельсия и если верить даташиту, то погрешность составляет всего плюс-минус 0,25 градуса.

Хоть датчик и обрабатывает до +150 градусов, но считать ардуиной сможем только до +110, хотя и это более чем достаточно для домашнего градусника. Поскольку этот датчик имеет высокую точность, но находится в корпусе TO92, без какой-либо дополнительной защиты, использовать его будем для измерения температуры в помещении.

Официальный мануал arduino рекомендует использовать для снятия показаний этого датчика опорное напряжение 1,1 В. Чтобы настроить arduino подобным образом достаточно использовать команду analogReference(INTERNAL) в функции setup. Далее достаточно просто, с нужным интервалом, считывать напряжение с выходной ножки(OUT) датчика.

LM35 формирует напряжение 10 милливольт на один градус, таким образом имея опорное напряжение в 1,1 В легко обработать, довольно точно, данные.

void setup() {
// меняем опорное напряжение на 1.1 В, относительно которого происходят аналоговые измерения
analogReference(INTERNAL);
}
void loop() {
reading = analogRead(A0); // LM35 подключен к пину A0
temperature = (1.1 * reading * 100.0) / 1024; // получаем значение в градусах Цельсия
}

Ниже на картинке показано, какая нога датчика LM35 за что отвечает.

ds18b20 подключение датчика температуры к arduino: инструкция

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

Второй датчик, который будет использован – это цифровой DS18B20. Точность в этом случае не на много ниже — плюс-минус 0,5 градуса, а диапазон измерения температуры практически такой же: от -55 до +125 градусов Цельсия.

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

Еще из плюсов сюда можно добавить возможность подключение одновременно до 127 датчиков на один пин ардуино, только я даже предположить не могу, где это может пригодиться :).
Считывать данные с DS18B20 немного сложнее, чем с LM35, для удобства можно воспользоваться библиотекой OneWire.

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

На картинке ниже показано, как подключать датчик DS18B20. Основным моментом является то, что необходимо использовать резистор сопротивлением 4.7 кОм для соединения провода, передающего данные и плюсовым.

Читайте также:  Тест: проверьте знания о датчиках движения, положения и присутствия

ds18b20 подключение датчика температуры к arduino: инструкция

Проблема вывода температуры на индикаторе hs420561k-32

Пока я разбирался с каждым датчиком по отдельности, а также когда подключал к arduino 4-х разрядный 7-сегментнтый индикатор, проблем ни каких не было, все прекрасно работало. Но стоило мне собрать все в кучу, на одну макетную плату и собрать код воедино, как сразу появилась серьезная проблема.

Я писал в прошлой статье, что для одновременного вывода данных сразу на 4-х разрядах hs420561k-32 необходимо очень быстро по очереди выводить по одному разряду, тогда создается впечатление одновременного вывода четырех цифр, глаз не успевает уловить смену разрядов.

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

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

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

bool flag = false; // флаг
unsigned long previousMillis = 0; // время последнего срабатывания
const long interval = 1000; // интервал срабатывания кода, задержка.

void setup() {
//
}

void loop() {
// получаем время в миллисекундах, которое прошло
// с момента начала работы МК
unsigned long currentMillis = millis();
// проверяем сколько прошло врмени
if (currentMillis — previousMillis >= interval) {
// если прошло нужное количество миллисекунд,
// то записываем в переменную количество прошедшего времени
previousMillis = currentMillis;

// меняем положение флага,
// это может быть вкл и выкл светодиода, например
flag = !flag;
}
}

Что использовалось в проекте:

Скетч уличного и комнатного термометра на arduino

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

#include // библиотека для работы с датчиком DS18B20

OneWire ds(10); // подключаем уличный датчик к 10 пину

//Пин подключен к SH_CP входу 74HC595
int clockPin = 6;
//Пин подключен к ST_CP входу 74HC595
int latchPin = 7;
//Пин подключен к DS входу 74HC595
int dataPin = 8;
int tempHomePin = A0; // градусник в помещении

// Пины разрядов цифер
int pins_numbers[4] = {2, 3, 4, 5};
// Биты для отображения цифер от 0-9, минуса и символ градуса Цельсия
byte numbers_array[22] = {
B00111111, B00000110, B01011011, B01001111, // 0 1 2 3
B01100110, B01101101, B01111101, B00000111, // 4 5 6 7
B01111111, B01101111, B01000000, B01100011, // 8 9 — о
// цифры с точкой внизу (+12 к индексу элемента)
B10111111, B10000110, B11011011, B11001111, // 0 1 2 3
B11100110, B11101101, B11111101, B10000111, // 4 5 6 7
B11111111, B11101111 // 8 9
};

int cel_celsius = 0; // переменная для хранения градусов на улице
float tempHome = 0; // переменная для хранения градусов в помещении

const long tempInterval = 3000; // интервал запроса актуальной температуры
unsigned long previousMillis = 0; // время предыдущего запроса
unsigned long previousMillis_delay = 0; // хранения последней даты срабатывания, для второй задержки
bool startQuery = false; // флаг, для обозначения начала запроса температуры
bool firstQuery = true; // флаг первого запуска, при котором получаем температуру без задержек

bool showhome = true; // флаг, который указывают какую температуру показывать — комнату или улицу
int sec_show = 5000; // интервал смены отображения погоды
unsigned long showhomeMillis_delay = 0; // хранения последней переключения градусников

// функция для вывода чисел на индикаторе
void showNumber(int numNumber, int number){
// зажигаем нужные сегменты
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, numbers_array[number]);
digitalWrite(latchPin, HIGH);

// включаем нужный разряд(одну из четырех цифр)
int num_razryad = pins_numbers[numNumber-1];
for(int i; i= tempInterval) || startQuery || firstQuery) {
previousMillis = currentMillis;

// читаем данные от датчика на улицы
if ( !ds.search(addr)) {
ds.reset_search();
//delay(250);
return;
}

// если ни чего не получили или получили не понятные данные
if (OneWire::crc8(addr, 7) != addr[7]) {
return;
}
// читаем первый байт и определяем тип датчика
switch (addr[0]) {
case 0x10: // DS18S20
type_s = 1;
break;
case 0x28: // DS18B20
type_s = 0;
break;
case 0x22: // DS1822
type_s = 0;
break;
default:
return;
}

// делаем запрос на получение данных от датчика
ds.reset();
ds.select(addr);
ds.write(0x44);
// ждем
startQuery = true;
// delay(1000);
if ( currentMillis — previousMillis_delay >= 1000 ) {
previousMillis_delay = currentMillis;
}else{
return;
}

startQuery = false;
// и получаем ответ
present = ds.reset();
ds.select(addr);
ds.write(0xBE);

// берем только первые 9 байт
for ( i = 0; i < 9; i++) { data[i] = ds.read(); } // данные приходят в битах, переводим их в десятичное число int16_t raw = (data[1]

Датчик температуры DS18B20 к ESP8266 и отправляем данные на БД MySql

Попробуем уже сделать на esp8266 что-нибудь действительно полезное. Большой плюс от такого дешёвого чипа, что его можно легко подружить с интернетом, а это открывает огромный потенциал в мир IoT. Дисплей мы подключили в прошлой статье, ну а теперь добавим ещё датчик температуры, возьмём для этого самую популярную модель DS18B20.

Разберёмся, как подключить датчик DS18B20 к нашей ESP8266. Распиновку легко найти в даташите, у датчика всего 3 пина, питание VCC, земля GND с собственно сигнал. Между сигнальной линией и питанием рекомендуется поставить резистор от 4.7 до 10кОм.

ds18b20 подключение датчика температуры к arduino: инструкция

Для начала подключим необходимые библиотеки, для работы с этим датчиком, ведь он работает по интерфейсу OneWire, который мы совсем недавно разбирали

#include
#include

Определим контакт, куда будет подключаться сигнальная шина датчика. GPIO5 по схеме соответствует D1

#define ONE_WIRE_BUS 5

Дадим понять, что этот контакт будет работать по интерфейсу OneWire

OneWire oneWire(ONE_WIRE_BUS);

И внесём переменную массив, temperatureCString, которая будет получать данные от датчика, в формате 8 битной посылки.

DallasTemperature DS18B20(&oneWire);
char temperatureCString[7];

Затем переходим в setup, и вносим инициализацию датчика

DS18B20.begin();

Теперь нам нужно написать функцию получения температуры. Я убрал из стандартного примера получение температуры в F, и оставил только градусы Цельсия.

void getTemperature()
{
do {
DS18B20.requestTemperatures();
tempC = DS18B20.getTempCByIndex(0);
dtostrf(tempC, 2, 2, temperatureCString);
delay(100);
} while (tempC == 85.0 || tempC == (-127.0));
}

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

Но картинку BMP нам заливать бессмысленно, потому-что нам нужна изменяемая шкала. Благо в библиотеке adafruit можно легко использовать геометрические фигуры.

Статья не о дисплее, поэтому просто приведу код с ми, кому интересно можно будет разобраться самому.

void disp_temp () // Функция отображения температуры
{
getTemperature(); // Получаем значение температуры
measureTemp = 145 — tempC * 2; // Вычитаем из высоты дисплея умноженное на 2 значение температуры
tft.fillScreen(ST77XX_WHITE); // Заполняем экран белым
tft.fillCircle(180, 170, 35, ST77XX_BLACK); // Рисуем чёрный и красный круг термометра
tft.fillRoundRect(165, 40, 30, 130, 15, ST77XX_BLACK); // Прямоугольник закругленный
tft.fillCircle(180, 170, 28, ST77XX_RED);
tft.fillRect(171, measureTemp, 18, tempC * 2, ST77XX_RED); // Прямоугольник с ртутью, отображает значение measure temp, высота столбика tempC*2
for (uint8_t a = 50; a < 140; a = a + 10) // Рисуем линии градусника длинные { tft.drawFastHLine(200, a, 14, ST77XX_BLACK); } for (uint8_t a = 55; a < 140; a = a + 10) // Рисуем линии грудусника короткие { tft.drawFastHLine(200, a, 7, ST77XX_BLACK); } tft.setTextSize(3); // Рисуем текст и значение температуры tft.setTextColor(ST77XX_BLACK); tft.setCursor(30, 90); tft.print("Temp:"); tft.setCursor(30, 120); tft.print(temperatureCString); }

Читайте также:  Датчик оборотов двигателя: назначение, виды, обслуживание и замена

Смотрим на результат. Шкала справа отображает температуру от 0 до 50 градусов тепла, что как-раз обычно и наблюдается в домашних условиях.

ds18b20 подключение датчика температуры к arduino: инструкция

Теперь нам нужно отправлять данные температуры на внешний сервер, на базу данных MySql

В принципе, я нашёл в интернете хорошее руководство про отправку данных через страницу на сервере правда на другом датчике, но в лоб оно не заработало, потому-что команды были заточены под старую версию PHP, и запрос GET также не исполнялся. Например, на строчку

//устанавливаем подключение к MySQL
$connect = mysql_connect($dbhost, $dbuser, $dbpass);

я сразу получил следующую ошибку, при выполнении файла php

Fatal error: Uncaught Error: Call to undefined function mysql_connect()

Так происходит, потому-что в версии php 7, формат команд немного поменялся, ко всем вставкам mysql, добавляется символ “i”, т.е. mysqli, ну и где-то добавились аргументы, поэтому подключение выполняем так

$connect = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

А отправку выполняем следующей строкой, здесь также меняются аргументы, необходимо указывать сначала подключение. Аргумент MySQL NOW()возвращает дату и время localhost, $temp – температуру, а $client_ip – адрес, с которого поступил запрос

mysqli_query($connect, «INSERT INTO temperature VALUES (NOW(), '$temp', '$client_ip')»);

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

Следующие наши действия должны происходить в phpmyAdmin, где создана наша база. Нужно создать таблицу (temperature), с тремя колонками – дата, температура и ip-клиента.

Arduino HC-06 + DS18B20 (Терморегулятор)

Статьи » Arduino » Arduino HC-06 + DS18B20 (Терморегулятор)

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

ds18b20 подключение датчика температуры к arduino: инструкция ds18b20 подключение датчика температуры к arduino: инструкция

На плате Arduino осуществляется измерение температуры и регулировка температуры срабатывания реле, а так же передача текущей температуры и температуры регулирования в Android приложение.

Android приложение в свою очередь осуществляет соединение с Bluetooth модулем HC-06, изменение температуры регулирования и получение данных от платы Arduino о текущей температуре и температуре регулирования.

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

Схема всего уст-ва очень простая, она содержит плату Arduino Nano (Uno), Bluetooth модуль HC-06 (подключение) и датчик DS18B20 показания которого передаются на вход A0. Выход управления реле (D13) и подключение датчика температуры можно изменить.

Для установки приложения на смартфон скачайте архив 18b20regapk.zip, распакуйте архив приложения и установите его.

#include #include #include OneWire oneWire(A0);// вход датчика 18b20 DallasTemperature temp(&oneWire);   int buff[2],i,dig,arr[2],w=1,w1,reg; int k; int gis=1; // гистерезис 1 градус unsigned long times;   void setup(){ Serial.begin(9600);Serial.setTimeout(50); pinMode(13, OUTPUT);// P1 temp.begin(); temp.setResolution(9);//12 бит reg = EEPROM.read(0); pinMode(13, OUTPUT); // выход реле }   void loop() {   /////// ПРИЕМ ДАННЫХ С SERIAL PORT ///////////////////////// while (Serial.available()>0){ for (i=0;i10&&w==1){ w=0; if(buff[0]==102){reg++;if(reg>125){reg=125;}} if(buff[0]==101){reg—;if(reg10000){w1=0;EEPROM.update(0,reg);} /// измерение температуры temp.requestTemperatures(); k = temp.getTempCByIndex(0); /// отправка днный в android Serial.print(k*10); Serial.println(reg);   if(reg >= k + gis){digitalWrite(13,HIGH);} if(reg 0){ for (i=0;i10&&w==1){ w=0; temp_time=millis(); if(buff[0]==102){reg++;if(reg>125){reg=125;}} if(buff[0]==101){reg—;if(reg10000){w1=0;EEPROM.update(0,reg);} /// измерение температуры if(millis()-temp_time>1000){ temp.requestTemperatures(); k = temp.getTempCByIndex(0); temp_time=millis();} /// отправка днный в android Serial.print(k,1); Serial.print(«:»); Serial.print(reg); Serial.print(«:»); Serial.println(nakal);   if(reg >= k + gis){digitalWrite(13,HIGH);nakal=1;} if(reg 0){ for (i=0;i10&&w==1){ w=0; temp_time=millis();   if(buff[0]>=10000){dig=buff[0];arr[0]=dig/1000;arr[1]=dig%1000;} if(buff[0]=1000){dig=buff[0];arr[0]=dig/100;arr[1]=dig%100;} if(buff[0]10000){w1=0;EEPROM.update(0,reg);} /// измерение температуры if(millis()-temp_time>1000){ temp.requestTemperatures(); k = temp.getTempCByIndex(0); temp_time=millis();} /// отправка днный в android Serial.print(k,1); Serial.print(«:»); Serial.print(reg); Serial.print(«:»); Serial.println(nakal);   if(reg >= k + gis){digitalWrite(13,HIGH);nakal=1;} if(reg

DS18B20 подключение к Arduino | Технохрень

  • #include
  • #include
  • // Пин Arduino куда подключен датчик
  • #define ONE_WIRE_BUS 10
  • // Объявляем переменные
  • OneWire oneWire(ONE_WIRE_BUS);
  • DallasTemperature sensors(&oneWire);
  • // тут будет хранится адрес нашего датчика. Каждый DS18B20 имеет свой уникальный адрес, зашитый на заводе
  • DeviceAddress insideThermometer;
  • void setup(void)
  • {
  •   Serial.begin(9600);
  •   Serial.println(«Dallas Temperature IC Control Library Demo»);
  •   // Поиск устройств на выбранном пине

  Serial.

print(«Поиск устройств…»);

  sensors.begin();

  Serial.print(«Found «);

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

  Serial.println(» штук.»);

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

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

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

  1.   else Serial.println(«OFF»);
  2.   // тут можно прописать адрес вручную
  3.   // Есть 2 варианта:
  4.   // 1) oneWire.search(deviceAddress) – сразу если известен адрес датчика
  5.   // 2) sensors.getAddress(deviceAddress, index) – по номеру подключения, начиная с 0
  6.   //insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };
  7.   // Мы будем использовать 2 вариант – поищем первый датчик (номер=0):

  if (!sensors.getAddress(insideThermometer, 0)) Serial.println(«Не найден адрес датчика 0»);  

  •   // Показываем адрес, который нашли
  •   Serial.print(«Адрес датчика 0: «);
  •   printAddress(insideThermometer);
  •   Serial.println();

  // устанавливаем разрешение датчика на 9 бит. Можно попробовать 10 поставить. Эта штука отвечает за точность показаний. Чем выше точность тем меньше скорость получения температуры.

  sensors.setResolution(insideThermometer, 9);

  Serial.print(«Разрешение датчика 0: «);

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

  1.   Serial.println();
  2. }
  3. // Эта волшебная функция пишет температуру в Serial
  4. void printTemperature(DeviceAddress deviceAddress)
  5. {
  6.   // вариант 1 — медленнее
  7.   //Serial.print(«Temp C: «);

  //Serial.print(sensors.getTempC(deviceAddress)); // в цельсиях

  //Serial.print(» Temp F: «);

  //Serial.print(sensors.getTempF(deviceAddress)); // в фаренгейтах. причем чтобы получить температуру в фаренгейтах мы делаем второй запрос к датчику.

  •   // вариант 2 — быстрее
  •   float tempC = sensors.getTempC(deviceAddress);
  •   Serial.print(«Temp C: «);
  •   Serial.print(tempC);
  •   Serial.print(» Temp F: «);

  Serial.println(DallasTemperature::toFahrenheit(tempC)); // чтобы получить фаренгейты в этот раз мы не делаем второй запрос к DS18B20, а просто конвертим температуру по формуле.

  1. }
  2. void loop(void)
  3. {

  Serial.print(«Получаем температуру…»);

  •   sensors.requestTemperatures(); // Отправка команды на получение температуры
  •   Serial.println(«готово»);
  •   // ну и теперь вывод данных
  •   printTemperature(insideThermometer);
  • }
  • // А эта функция выводит адрес в Serial
  • void printAddress(DeviceAddress deviceAddress)
  • {
  •   for (uint8_t i = 0; i

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

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