Меню

Ds18b20 скетч несколько датчиков

Блог did5.ru

Про АйТи и около айтишные темы

[Arduino] Несколько датчиков температуры DS18B20

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

Залил скетч для опроса всех датчиков на шине 1-Wire:

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

Засунул один из датчиков в морозильную камеру и включил режим супер-заморозка (до –32 градусов Цельсия). Значения температуры стало стремительно падать, перевалило через 0 и продолжало падать. В этот момент я отвлекся на 20 минут, чтобы не ждать возле холодильника. Но когда вернулся к стенду увидел, что датчик показывает –127 градусов. Вот и первый баг, т.к. морозилка не могла выдать такую температуру.

Опытным путем выяснил, что баг проявляется при температуре меньше –15,75°. Следующее значение уже -127°. Начал грешить на китайский датчик DS18B20, но его замена ошибку не исправила.

Проблема была в библиотеке DallasTemperature. Скачал другую версию библиотку с этого сайта — http://www.hacktronics.com/Tutorials/arduino-1-wire-tutorial.html. Хотя версия новой библиотеки совпадала с моей, но различия имелись.

Вот обе версии библиотеки DallasTemperature, выложил на Яндекс.Диск:

1. DallasTemperature.zip — с этой библиотекой нормально отображается минусовая температура (https://yadi.sk/d/DsfPqoqsd7g8f)

2. DallasTemperature (-127).zip — с этой библиотекой при температуре меьше -16 датчик показывает -127. (https://yadi.sk/d/g9SMy6fMd7gMS).

Нашли опечатку в тексте? Пожалуйста, выделите ее и нажмите Ctrl+Enter! Спасибо!

Хотите поблагодарить автора за эту заметку? Вы можете это сделать!

Источник

Ds18b20 скетч несколько датчиков

Скетч Arduino с огромным числом датчиков DS18B20. TEST.

Сообщение tsember » Вт мар 24, 2015 12:02 pm

Здравствуйте.
Начал осваивать МЖД. Купил ардуино, датчики 18B20. Загрузил скетч (http://smartliving.ru/Main/ArduinoSchema).
Для освоения скетч хороший. Но меня не устраивало, что при подключении нового датчика, постоянно требовалось вносить изменения в код и перезаливать его в плату Arduino (перед этим отключив все шилды), что, согласитесь, крайне не удобно.

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

Представляю Вашему вниманию Universal Arduino sketch for MajorDoMo: https://github.com/petertsermber/arduin . orDoMo.ino

Пока работает только с датчиками 18B20 (но я в ближайшем будущем добавлю поддержку распространенных датчиков: DHT (влажности и температуры), BPM085 (давления и температуры, PIR (датчик движения), а так же модуля управления реле на 4 канала).

Ардуино ищет подключенные с 1-wire шине датчики, определяет их адреса, заносит в массив.
Далее по циклу, с каждого датчика получаем температуру, округляем ее до десятых, сравниваем с прошлой отправленной на сервер температурой. Если дельта больше 0,3 градуса, то отправляем данные на сервер МЖД. Идентификатором на сервере служит адрес датчика в HEX формате. Затем цикл повторяется.
Для «горячего» подключения датчиков требуется всего лишь «железно» подцепить датчик к шине, а в МажорДоМо добавить новый объект с именем типа 28156B15060000A7 (Адрес нового датчика можно узнать в стандартной программе типа Hyper Terminal), в котором существует свойство temp. Ну и должен присутствовать стандартный метод tempSensors-> tempChanged (который присутствует в стандартном дистрибутиве MJD). ВСЕ! Никаких перепрограммирований, перепрошиваний и прочего!

Читайте также:  Датчик угла поворота дупх амт 24 dc аналог 0 10в

P.S. Я не программист, си++ вообще впервые увидел три недели назад, если что в коде не так, прошу сильно не ругать, а здесь написать.

Re: Скетч Arduino с огромным числом датчиков DS18B20. TEST!!

Сообщение karlismoto » Чт мар 26, 2015 10:27 pm

Re: Скетч Arduino с огромным числом датчиков DS18B20. TEST!!

Сообщение vova5049 » Пт мар 27, 2015 1:25 am

Re: Скетч Arduino с огромным числом датчиков DS18B20. TEST!!

Сообщение Lordserdjo » Вс мар 29, 2015 9:43 pm

Re: Скетч Arduino с огромным числом датчиков DS18B20. TEST!!

Сообщение tsember » Вс мар 29, 2015 11:43 pm

Была такая проверка. При температуре DEVICE_DISCONNECTED на сервер отправлялся гет запрос с температурой 200 градусов (предварительно в методе changeTemp увеличил максимальную температуру до 200). Тем самым я понимаю, что датчик отвалился.
Но отказался от этого, так как посчитал, что при отключении датчика мы уберем его и с МЖД?!

Я думал, что скетч никого не заинтересует, поэтому на форуме не появлялся. Рассказываю дальше.
А дальше я пошел еще дальше:
Захотелось мне добавить к объектам температуры свойство с дельтой, при превышении которой идет отправка данных на сервер. У каждого датчика температуры должна быть своя дельта. У одного — 0,2 градуса (минимальная адекватная чувствительность 18в20), у другого — 2 градуса. Для чего это?! Например, один датчик у нас установлен на улице, второй — в комнате.
Первым мы просто регистрируем уличную температуру, а из второго делаем ВЫСОКОТОЧНЫЙ комнатный термостат.
Понятное дело, что и дельта для них должна быть разная.
Думал, чтоб при GET отправке температуры на сервер, так же отправлялась текущая дельта для ДАННОГО датчика. Сервер сравнивает дельты текущую в ардуинке и прописанную в МЖД. Если они не совпадают — отправляем новую дельту на ардуино, а там запускается обработка по присвоению новой дельты для текущего датчика. Как то так.

Но планам не суждено было сбыться.
Если на ардуино запускать web-server (webduino), то по каким то причинам не работает цикл:

for (int i=0; i = «0»+String(Termometers ,HEX); > //если бит меньше 16, то дописываем в начале 0, так же конвертируем в шеснадцатиричный код
else // в противном случае просто конвертируем в 16ричный код и записываем байт в массив

Смысл его в чем: получает каждый байт адреса датчика температуры, переводит его в шеснадцатиричный код, если цифра получилась одна, то добавляем нолик впереди, и записываем каждый байт адреса в HEX формате в i-ячейку массива адреса.

После склеивания всех ячеек:
aa = aba[0]+aba[1]+aba[2]+aba[3]+aba[4]+aba[5]+aba[6]+aba[7]
получалась переменная aa , в которой содержалось имя датчика , например 28156B15060000A7.

Дак вот. Это цикл никак не хочет дружить с функцией webserver.processConnection(buff, &len); , которая следит за входящими подключениями к ардуино.
Что только не перепробовал. Результата нет.

Решил, что будет 2 ардуино: один — контроллер датчиков, другой — исполнительное устройство .
Конечно можно было сервер оставить, и сделать одно устройство, но тогда бы я лишился фишки, ради которой я все это задумал — отправку адреса датчика на сервер МЖД.
Дельта пока установлена на 0,3 градуса (если дельта 0,4 и более — отправляем новую т.)

Источник

BlockDuino

воскресенье, 5 июля 2015 г.

Адресная работа с несколькими датчиками температуры DS18B20 с выводом на графический дисплей — Contrlol Multiple 18b20 Arduino GLCD

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

Читайте также:  Pe0118501b датчик давления масла

Т.е. как видно, что сто считываний температуры с шести датчиков были выполнены за 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

Источник

Подключение нескольких DS18B20 к ESP32

В этом руководстве рассказывается, как считывать показания с нескольких датчиков температуры DS18B20 посредством микросхемы ESP32 с помощью среды разработки Arduino IDE.

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

Читайте также:  Как проверить датчик расхода воздуха субару аутбек

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

DS18B20 — цифровой датчик температуры с возможностью подключения одним проводом. Каждому датчику присвоен уникальный 64‑битный серийный номер, что позволяет использовать множество датчиков на одной шине данных (т. е. множество датчиков, подключённых к одной линии ввода-вывода общего назначения).

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

Распиновка слева-направо: первый вывод — заземление GND, второй — данные, третий, крайний справа, — питание VCC.

Примечание: также существует водонепроницаемая версия датчика температуры DS18B20.

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

  • Связь поддерживается посредством однопроводной шины
  • Рабочий диапазон температуры: -55…+125 °C
  • Точность: ±0,5 °C (при температуре от -10 до +85 °C)

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

Для подключения датчика температуры DS18B20 вам нужно подключить резистор на 4,7 кОм между питанием VCC и линией данных. На следующей схеме показан пример для трёх датчиков (при необходимости вы можете добавить их еще больше).

На вышеприведённой схеме датчик повёрнут закруглённой стороной к нам. Плоская сторона смотрит в обратную сторону.

Подготовка среды разработки Arduino IDE

Для среды Arduino IDE существует дополнение, которое позволяет программировать микросхему ESP32 посредством этой среды и её языка программирования.

Скоро выйдет отдельный материал, как подготовить среду Arduino IDE для работы с ESP32.

Установка библиотек

Перед загрузкой кода вам необходимо установить две библиотеки в среду Arduino IDE. Библиотека OneWire Пола Штоффрегена и библиотека Dallas Temperature. Выполните следующие шаги, чтобы установить эти библиотеки.

Библиотека OneWire

  1. Библиотека OneWire скачиватся здесь. После скачивания, в вашей папке с загрузками должен появиться архивный файл с расширением .zip (например, в папке Downloads — «Загрузки»).
  2. Разархивируйте файл с расширением .zip — должна появиться папка OneWire-master.
  3. Смените название папки OneWire-master на OneWire.
  4. Переместите папку OneWire в папку с установленными библиотеками среды Arduino IDE.
  5. Перезапустите среду Arduino IDE для подгрузки бибоиотеки.

Библиотека Dallas Temperature

  1. Библиотека DallasTemperature скачивается здесь. В вашей папке с загрузками должен появиться архивный файл с расширением .zip (например, в папке Downloads — «Загрузки»).
  2. Разархивируйте файл с расширением .zip — должна появиться папка Arduino-Temperature-Control-Library-master.
  3. Смените название папки Arduino-Temperature-Control-Library-master на DallasTemperature
  4. Переместите папку DallasTemperature в папку с установленными библиотеками среды Arduino IDE
  5. Перезапустите среду Arduino IDE.

Получение адреса датчика DS18B20

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

Загрузите следующий код в микросхему ESP32. Убедитесь, что выбрали правильную плату и последовательный COM-порт.

Источник

Adblock
detector