Оглавление:

Сетевой контроллер отказоустойчивого датчика температуры: 8 шагов
Сетевой контроллер отказоустойчивого датчика температуры: 8 шагов

Видео: Сетевой контроллер отказоустойчивого датчика температуры: 8 шагов

Видео: Сетевой контроллер отказоустойчивого датчика температуры: 8 шагов
Видео: Ардуино глючит и виснет из-за наводок? Как устранить влияния электромагнитных и радиочастотных помех 2024, Ноябрь
Anonim
Сетевой контроллер отказоустойчивого датчика температуры
Сетевой контроллер отказоустойчивого датчика температуры

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

Контроллер может управлять до 8 датчиками с Arduino Uno. (И многое другое с Arduino Mega или с небольшой модификацией программного обеспечения.)

Шаг 1. История позади…

Пару лет назад я установил сеть датчиков температуры DS18B20 в теплице моего отца для своего контроллера отопления на основе пи. К сожалению, надежность контроллера была низкой, в основном из-за частых отключений датчиков. Я пробовал несколько настроек - паразитное питание, прямое питание, подключение сети к пи, а также подключение к специальной плате на базе Atmega (основной целью которой было управление двигателями клапанов).

Что еще хуже, надежность сенсорной сети падала в основном в зимние ночи, в то время как летом проблем почти не было! Что, черт возьми, здесь происходит?

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

Шаг 2: как это работает

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

Хитрость в том, что провода питания каждого датчика подключены к собственным (выделенным) контактам GPIO, так что их можно включать и выключать по отдельности. Например, если датчик имеет вывод Vcc, подключенный к контакту №3, а GND - к контакту №2, установка контакта №3 в положение ВЫСОКОЕ обеспечивает питание для датчика (неудивительно), а установка контакта №2 в положение НИЗКИЙ обеспечивает заземление (небольшой сюрприз для меня). Установка обоих контактов в режим ввода (почти) полностью изолирует датчик и его проводку - независимо от того, какой сбой (например, ярлык) произойдет внутри него, он не будет мешать другим.

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

Обратите внимание, что DS18B20 потребляет до 1,5 мА, в то время как один вывод Arduino может потреблять / потреблять до 40 мА, поэтому питание датчиков напрямую через выводы GPIO совершенно безопасно.

Шаг 3: Материал и инструменты

Материал

  • 1 плата Arduino UNO
  • 3 штекерных разъема с внутренней резьбой: 1 × 4, 1 × 6 и 1 × 6 (или больше - я вырезал их из одного заголовка 1 × 40)
  • клей
  • кусок голой медной проволоки (не менее 10 см)
  • изоляционная лента
  • расходные материалы для пайки (проволока, флюс…)

Инструменты

  • паяльное оборудование (утюг, держатели,…)
  • маленькие кусачки

Шаг 4: исправляем вещи вместе

Исправляем вещи вместе
Исправляем вещи вместе

Приклейте разъемы женских выводов к заголовкам платы Arduino:

  1. Разъем 1 × 4 рядом с разъемом «аналогового» контакта, бок о бок с контактами A0 – A4
  2. Заголовок 1 × 6 рядом с первым цифровым штыревым штырем, бок о бок с контактами 2–7
  3. Заголовок 1 × 6 рядом со вторым цифровым штыревым штырем, бок о бок с контактами 8–13

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

Шаг 5: соедините все вместе

Связать вещи вместе
Связать вещи вместе
Связать вещи вместе
Связать вещи вместе

Подключение 1-проводной шины:

  1. Подключите все выводы приклеенных разъемов на «цифровой» стороне (рядом с контактами 2–13), припаяв к ним кусок неизолированного провода.
  2. Припаяйте конец этого провода к выводу SCL (внутренне подключен к A5).
  3. Подключите все выводы приклеенного разъема на «аналоговой» стороне (контакты A0 – A3), припаяв к ним кусок неизолированного провода.
  4. Припаяйте конец этого провода к выводам A4 и A5 (я использовал A5 и A6, потому что у меня есть плата с A6 и A7).
  5. Припаяйте резистор 4 кОм между другим концом этого провода и выводом +5 В.

Примечания:

  • Контакты A0 – A5, хотя и отмечены как «аналоговые», также могут использоваться как цифровые контакты GPIO.
  • Контакт SCL на «цифровой» стороне внутренне подключен к A5 на «аналоговой» стороне; подключенный к заголовкам, это формирует линию шины 1-wire
  • A4 (используется как аналоговый вход) измеряет напряжение шины в диагностических целях. По этой причине он напрямую подключен к шине.
  • Я использовал A6 вместо A4, потому что у меня есть доска с A6 и A7; Изначально я хотел использовать A7 в качестве мастера шины 1-Wire, но эти два контакта не могут быть сконфигурированы как цифровые GPIO.
  • Чтобы предотвратить неправильное подключение разъемов датчика, вы можете исключить / вырезать неиспользуемый контакт (не подключенный к какому-либо проводу) из каждого штекерного разъема и вставить его в соответствующее отверстие в наклеенной контактной колодке.

Шаг 6: Подключение датчиков

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

Вы только что создали массив из восьми сокетов 2 × 2. Вы можете припаять и собрать разъемы Dupont 2 × 2 к кабелям датчиков и подключить их к этим разъемам. Программное обеспечение настраивает контакты так, что четные контакты являются контактами GND, а нечетные контакты - контактами Vcc. Для каждого датчика контакт Vcc - это просто контакт GND + 1. Один из двух других контактов разъема 2 × 2 (один из этих двух в приклеенном и припаянном разъеме) предназначен для провода данных датчика. Неважно, какой вы используете.

Шаг 7: программное обеспечение контроллера

Программное обеспечение контроллера
Программное обеспечение контроллера

Скетч SerialThermometer запускает контроллер. Вы можете найти его на гитхабе. Откройте и загрузите с помощью Arduino IDE.

Шаг за шагом:

  1. Откройте IDE Arduino и установите библиотеку DallasTemperature и все ее зависимости через Sketch | Включить библиотеку | Управляйте библиотеками.
  2. Клонировать репозиторий git. Если вы не знакомы с git, скачайте и распакуйте этот zip в любом месте на вашем компьютере.
  3. Откройте эскиз SerialThermometer в вашей Arduino IDE.
  4. Подключите модифицированную плату Arduino к компьютеру с помощью USB-кабеля (стандартный способ)
  5. Загрузите скетч с помощью Arduino IDE.
  6. Откройте Serial Monitor через Инструменты | Последовательный монитор
  7. Вы должны увидеть диагностический вывод, содержащий несколько физических измерений, за которыми следуют показания температуры - каждое гнездо датчика на одной строке. Если количество датчиков различается при включении по отдельности и при включении всех вместе), диагностика будет повторяться, пока не будет устранена проблема. Но не беспокойтесь, также диагностика обеспечивает измерение температуры!

См. Аннотированное изображение для более подробной информации о диагностических выводах.

Шаг 8: Заключение

У меня есть сильное ощущение, что сбои в моей сенсорной сети были вызваны большой емкостью моей длинной проводки - около 10 м кабеля LIYY 314 (3 × 0, 14 мм²) для каждого датчика. Мои эксперименты показали, что связь прерывается, если между 1-проводной шиной и землей есть емкость около или выше 0,01 мкФ, я думаю, потому что подтягивающий резистор 4k7 не может подтянуть шину к + 5 В достаточно быстро, чтобы соответствовать ограничениям протокола..

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

Но также 5-й датчик (28: ff: f2: 41: 51: 17: 04: 31) выглядит довольно плохо (возможно, неправильная пайка), поэтому я могу продолжить исследование!

Рекомендуемые: