Обнаружение датчиков DS18B20 и правильное назначение их реле

Я относительно новичок в программировании микроконтроллеров, поэтому, пожалуйста, извините меня за глупый вопрос. Я создал простое устройство, которое позволяет мне управлять 4 реле в зависимости от температуры. Купил четыре датчика DS18B20, 4 платы реле и Wemos D1. Все работает нормально — я могу считывать температуру каждого датчика по их адресу.

Но я начал задаваться вопросом, как я могу заменить один DS18B20 без перекомпиляции кода; в настоящее время это невозможно. Немного поискав нашел пару вопросов по поводу заказа датчиков 1Wire. Например, вот этот. Я не могу контролировать порядок обнаружения датчиков.

Есть ли передовой опыт настройки датчиков DS18B20? Я хочу настроить свое устройство. Под настройкой я имею в виду, что я хотел бы назначить определенный DS18B20 определенному реле.

Я себе это так представляю:

  1. Возьмите новый DS18B20, подключите его к устройству и включите устройство.
  2. Устройство должно выполнить поиск датчиков DS18B20. Если он найдет его, он должен назначить его реле 1 и сохранить его адрес в EEPROM.
  3. Затем отключите устройство от источника питания, подключите второй DS18B20 и снова включите устройство.
  4. Устройство снова сканирует датчики DS18B20. Находит 2 устройства. Первый известен (адрес был сохранен в EEPROM), поэтому он пропускается. Второй назначается реле 2, а адрес хранится в EEPROM.
  5. Та же процедура применяется к третьему и четвертому датчикам.
  6. Если подключено четыре датчика (адреса из EEPROM), то устройство может работать.
  7. Если пользователь хочет заменить неработающий датчик, можно использовать ту же процедуру.

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

, 👍0

Обсуждение

Сколько датчиков ds18b20 вы собираетесь сломать? При использовании byIndex действительно нет контроля над порядком. Каждый ds18b20 имеет уникальный идентификатор, вы можете сохранить его в eeprom. Это единственный способ быть уверенным в считывании температуры с конкретного датчика. Вы можете делать то, что вы написали, но вы также можете использовать кнопку для поиска нового датчика. Чем сложнее код, тем больше вероятность ошибки. Проще когда есть дисплей или последовательный порт или веб-интерфейс., @Jot

лично я бы выбрал веб-интерфейс для настройки - хотя, если достаточно просто подключиться к ПК, если вам нужно заменить DS18B20, тогда будет достаточно простого последовательного интерфейса., @Jaromanda X

@Jot Моя идея состоит в том, чтобы создать устройство, которое я могу подарить своим друзьям и разместить на GitHub, чтобы все могли его использовать. Идея состоит в том, чтобы удалить этап, на котором пользователь должен считывать адреса DS18B20 и помещать их в код. Я хочу использовать тот же метод для настройки нового устройства или замены сломанного датчика., @Misiu

@JaromandaX Я планирую добавить веб-интерфейс, но планировал использовать его только для отображения показаний и статусов реле. Я не думал использовать его для настройки датчиков. Я должен изучить это :), @Misiu


1 ответ


1

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

Если вы не можете легко отключить их, вы можете использовать показания для установки порядка, хотя это зависит от среды. Если, например, все датчики обычно имеют комнатную температуру, тогда код проверяет температуру всех датчиков при запуске. Если он обнаружит, что температура одного датчика меньше 0°C, тогда присвойте этому датчику индекс реле, который был наименее недавно заменен (также хранится в EEPROM).

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

В качестве альтернативы, если у вас есть дополнительный контакт на Arduino, вы можете выполнить процедуру, при которой вы подключаете новый датчик к этому контакту, прежде чем прикреплять его к цепочке. Вы можете создать правило, например, «если вы когда-нибудь увидите датчик на контакте X, запомните его идентификатор устройства и назначьте его реле Y». Существует множество способов выбора Y в пользовательском интерфейсе. Обратите внимание, что для этого даже не нужно никакого дополнительного оборудования.

,