1 2 3 4 5 6 7 8 9 10 10/10 10,00оценок: 6

Arduino Mega. Контроллер теплицы. Хроники - 5.0

Тема в разделе "Теплицы и парники", создана пользователем DIYMan, 14.10.19.

Статус темы:
Закрыта.
  1. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891
    Адрес:
    80 км от Краснодара
    В одном модуле - нет, три датчика на модуль максимум. Но модулей может быть много ;)
     
  2. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891
    Адрес:
    80 км от Краснодара
    Саша, в прошивке универсального модуля только три слота под показания. Т. е. - только три датчика максимум. Модулей - да, их может быть сколько угодно.
     
  3. Ден65
    Регистрация:
    15.07.19
    Сообщения:
    165
    Благодарности:
    53

    Ден65

    Живу здесь

    Ден65

    Живу здесь

    Регистрация:
    15.07.19
    Сообщения:
    165
    Благодарности:
    53
    Жаль. Что же, зима долгая, буду модули собирать. ;)
     
  4. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.963
    Благодарности:
    1.959

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.963
    Благодарности:
    1.959
    Адрес:
    г. Москва, Зеленоград.
    В универсальном модуле датчиков - согласен. А вот в модуле имитатора DS1820 устроено немного по другому. Фактически модуль имитатора состоит из одиночных формирователей DS1820 с выходом на на одну линию. Их количество ограничено параметрами микроконтроллера. Пример модуля с 4 датчиками в файле. Проверено, работает. :um:

    IMG_20200903_143915.jpg

    IMG_20200903_143937.jpg
     

    Вложения:

    Последнее редактирование: 03.09.20
  5. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891
    Адрес:
    80 км от Краснодара
    А, ну в этом смысле - да, согласен. Сделать несколько датчиков в одном модуле с разными адресами - и всё. Лишь бы МК успевал и 1-Wire обслуживать, и датчики опрашивать. В любом случае, думаю, кол-во датчиков на такой модуль будет ограничено каким-то разумным числом - штук пять, скажем.

    Да, это ещё один плюс, для использования 1-Wire и простых прошивок.
     
  6. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891
    Адрес:
    80 км от Краснодара
    Обновления

    Обновил прошивку и конфигуратор на гитхабе. Прошивки универсальных модулей - спрятал в подпапку "Universal Modules". Появилась новая папка "1-Wire Modules" - там выложена тестовая прошивка по эмуляции датчика влажности почвы, как старт отсчёта, так сказать.

    Используемая библиотека OneWireHub - приложена, и валяется в папке "1-Wire Modules\libraries". Её надо установить в среду Arduino IDE, чтобы всё компилировалось. Также в прошивке для датчика влажности почвы - тоже есть подпапка "libraries", в коотрой содержатся используемые библиотеки.

    Короче - всё просто. В прошивке - есть комментарии, можете сами побаловаться, и сменой адреса, и добавлением нескольких датчиков на модуль (Александр Васильевич дал пример выше).

    Если возникнут вопросы - пишите. Теперь, при желании - каждый может написать свою прошивку для выдачи показаний в шину 1-Wire. Если таковые желающие найдутся - выкладывайте ваши прошивки, выложу их на гитхаб для всеобщего растерзания, тыксызыть ;)

    З. Ы. Осталось в будущем отказаться от SD в пользу какой-нибудь памяти на SPI - и будет вообще кошерно. Но - пока с этим вопрос сложный: для лёгкого портирования было бы неплохо иметь поддержку файловой системы для таких типов памяти, сейчас этот вопрос изучаем.

    З. З. Ы. У меня дома - лазарет, включая меня. Так что я несколько не в адеквате, и могу тормозить с ответом.
     
  7. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.963
    Благодарности:
    1.959

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.963
    Благодарности:
    1.959
    Адрес:
    г. Москва, Зеленоград.
    Конечно нужны разумные ограничения по количеству. Я все таки повторюсь по поводу автоматической регистрации. Мы можем последние три байта применить для определения что это за датчик и как его прописать в системе. Пример номера датчика.
    auto ds18b20 = DS18B20 (DS18B20:family_code, 0x00, 0x00, 0xB2, 0x18, 0xDA, 0x10);

    К примеру:
    0х18 - индивидуальный номер датчика (0-255)
    0хDA - тип датчика (0-255, влажность, температура, засветка и. т. д.)
    0х10 - номер датчика в системе (0-255)
    Или как то так.
    Составить свою таблицу обозначений и по ним прописывать номера.

    По эти кодам контроллер контроллер может определить что за датчик и что с ним делать. Достаточно с конфигуратора ПК указать пин к которому они подключены и дать команду регистрации.
    Я может немного усложняю. Но у клиента в Ростове сейчас вышел из строя универсальный модуль датчиков. Починить то я его починю, но как ему объяснить порядок регистрации по новой, ума не приложу. Не все дружат с электроникой. :faq:
     
  8. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.963
    Благодарности:
    1.959

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.963
    Благодарности:
    1.959
    Адрес:
    г. Москва, Зеленоград.
    Упс! А я думаю, куда ты пропал? Выздоравливай. :hndshk:
     
  9. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891
    Адрес:
    80 км от Краснодара
    Зачем? Есть параметр
    его и надо использовать для идентификации, и всё. Он для каждого типа датчиков - свой. А использовать байты адресации на шине для идентификации - тупиковый и неправильный путь.

    По поводу автоопределения - не стОит, по моему мнению.
     
  10. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891
    Адрес:
    80 км от Краснодара
    Саша, порядок регистрации - очень простой, и дружить с электроникой тут совсем не надо. Достаточно просто взять - и один раз понять, что такое регистрация. Ты же - понимать этого не хочешь, продавливая своё вновь и вновь. Рассказывать в сотый раз простейшие действия - ну такое себе, не хочу, если честно. Хотя бы потому, что даже подсказок - банально никто не читает, включая тебя. Все хотят "пиндык - и всё". Звиняйте, бананов нет.

    Давай остановимся на том, что ты больше не упоминаешь универсальные модули, ок? Будут простые прошивки для линии 1-Wire - используй их, в чем проблема? Опять не угодил? Опять сложно, что ли, пару полей заполнить? Это уже не смешно, если честно. Никакой регистрации уже не нужно - достаточно только указать, какие типы датчиков висят на линиях по порядку. И это - ПРАВИЛЬНО, из-за особенностей адресации на линии 1-Wire - там нет строгого порядка поиска, понимаешь? Именно поэтому сделано так, и только так, чтобы не было вопросов "почему при подключении нового датчика старый стал показывать не под тем номером?".

    Короче: сделано максимально удобно и просто, раз с регистрацией универсальных модулей у тебя такая нелюбовь. Проще - уже не будет, извини.
     
    Последнее редактирование: 03.09.20
  11. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.963
    Благодарности:
    1.959

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.963
    Благодарности:
    1.959
    Адрес:
    г. Москва, Зеленоград.
    Да ладно, извиняю. :hndshk:
     
  12. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891
    Адрес:
    80 км от Краснодара
    Ну блин, Саш :) Я же не просто так сделал. Это для того, чтобы автоматом сохранялись индексы датчиков. Вот смотри, на примере: указал ты, что первым на линии будет висеть датчик почвы, вторым - датчик освещённости. Вешаешь первый датчик почвы - он появляется, как датчик почвы, ВНЕ ЗАВИСИМОСТИ от порядка, при котором он найден при сканировании на линии, понимаешь?

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

    Ну а далее - самое интересное наступает: если снимешь с линии датчик почвы, то показаний с него больше не будет (надо активную настройку USE_DYNAMIC_SENSORS_RESET_MODULE в прошивке). При этом показания датчика освещённости останутся на том же самом месте, где были, несмотря на то, что при сканировании линии он теперь находится раньше, чем другие. И если повесить другой, новый датчик на линию, то он появится как датчик почвы, ВЗАМЕН отсутствующего (вышедшего из строя).

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

    Короче - не всё так просто с 1-Wire, с его системой адресации на шине. Я уже объяснял, давно, но - объяснял. Наличие нового адреса при сканировании на шине - не даёт ровно никакой информации, что с этим датчиком делать: то ли это новый, то ли - взамен вышедшего из строя. Более того, подключение к линии нового датчика - сбивает порядок поиска датчиков на линии, т. е. на порядок поиска - полагаться просто нельзя, от слова "совсем".

    В общем - механизм ещё надо обкатывать ;)
     
  13. Berendey-70
    Регистрация:
    27.10.17
    Сообщения:
    149
    Благодарности:
    139

    Berendey-70

    Живу здесь

    Berendey-70

    Живу здесь

    Регистрация:
    27.10.17
    Сообщения:
    149
    Благодарности:
    139
    С т. з. удобства замены я бы предложил (или напомнил) использовать eeprom в DIP8 корпусе, например 24С01, на панельке в составе устройтва, датчика или исполнительного. В памяти - номер, номер наклеить на корпус (1,2,3). При замене датчика достаточно переставить микросхему из старого устройства в новое. При запуске новой системы - зашить заранее номера и поставить в панельки.
     
  14. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891
    Адрес:
    80 км от Краснодара
    Да уже всё предусмотрено по замене, если мы говорим об 1-Wire. Достаточно сделать один раз настройки в привязках железа, потом - последовательно, на горячую, первый раз подключить датчики, согласно настройкам.

    В дальнейшем, при выходе датчика из строя - он просто меняется на новый, даже если новый имеет другой физический адрес на шине - он встанет на место вышедшего из строя. Именно так сейчас реализована работа с DS18B20, когда ты не задумываешься о том, какой адрес имеет датчик на шине ;)

    И с микросхемой, по сути, не надо ничего городить. Конечно, механизм сейчас откатывается, но он использует код работы с DS18B20, который, в части сохранения привязок датчиков к порядку, определённому пользователем - работает. Скажем так - полуавтомат, после первичной настройки и подключения датчиков - переходит в автомат, без регистрации и СМС :)
     
  15. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.891
    Адрес:
    80 км от Краснодара
    Обновления

    На гитхабе обновилась прошивка контроллера. Также в папке "1-Wire modules" появились тестовые прошивки для выдачи показаний освещённости и влажности (по 4 байта каждый). Для освещённости - используется BH1750, для влажности - пока фейковые данные, надо проверять правильность получения их контроллером.

    Что было сделано: поковырявшись в библиотеке OneWireHub, увидел, что самый простой путь - это использовать DS18B20 как интерфейс (в штатных примерах даже есть такой скетч, DS18B20_asInterface). Однако, штатные возможности OneWireHub для DS18B20 - куцеваты: используются только два байта скратчпада, из восьми. И никаких внешних интерфейсов, чтобы заюзать эти неиспользуемые байты - тоже нет. Пришлось исправлять ;)

    Обращаю внимание: поскольку у класса DS18B20 библиотеки - есть только метод установки температуры (2 байта в скратчпаде), а остальные байты в скратчпаде - пропадают почём зря - туда были дописаны методы setLuminosity и setHumidity, которые пишут данные в скратчпад, затрагивая неиспользуемые поля скратчпада (поскольку писать в датчик мы ничего не планируем, и всякие пороги устанавливать - тоже). Поэтому, ещё раз обращаю внимание - библиотека OneWireHub изменилась, её надо переустановить с архива, приложенного к проекту!

    Далее: у модулей на линии 1-Wire - теперь ввёдён идентификатор семейства. Я порылся в OneWireHub, и выцепил известные используемые идентификаторы семейств, добавив свои, для понимания, что за датчик на линии. Вот они, добавленные мной - выделены жирным:

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

    Проверил - подключенный оригинальный DS10B20 выдаёт себя за датчик влажности почвы, поскольку данные интерпретируются как температура. Осталось подключить и проверить, как будет себя вести модуль с установленным family code 0xA0, но вроде должно быть норм всё.

    Так что можно пробовать новые модули, если есть у кого желание ;) Обращаю внимание: пока весь этот механизм - обкатывается. То есть пока важно проверить работоспособность всего добра, потом уже будем думать, что со всем этим делать: возможно, где-то упростить, возможно, что-то добавить, и т. п.

    З. Ы. @promavto - Саш, на гугльдиске тоже обновил, можешь качать оттуда. Все примеры новых модулей - в папке "1-Wire Modules", можешь пробовать у себя, как теперь с идентификацией и интерпретацией данных дело обстоит. И да - не забывай, что адреса у всех датчиков на одной линии - должны быть разные, правь последний байт адреса, как вариант. В комментариях в прошивках - всё написано, но кто их читает ;) Короче - пробуй, тестируй, и отпишись по результатам, пж. Подозреваю, что самый тонкий для тебя момент - это первичная настройка, когда датчики надо подключать на горячую последовательно, так, как указано в настройках в конфигураторе. Хоть плакат рисуй :) Если будут непонятки - то зайди в Configuration_DUE.h, найди там DS18B20_EMULATION_STORE_ADDRESS - и поменяй значение на единичку в бОльшую сторону - тогда все сохраненные привязки адресов 1-Wire к индексам на линии - сбросятся, и можно будет начать процесс по новой, так сказать.

    Ещё раз, в заключение, про механизм первичной настройки датчиков 1-Wire на линии:

    1. Зашли в конфигуратор, открыли окно "Привязки железа", на последней вкладке прописали, где что висит. Для простоты - считаем, что используется одна линия, пин 56. Указываем номер пина 56 столько раз, сколько датчиков планируется повесить для начала. Затем, для каждого датчика указываем его тип и результирующий индекс. Допустим, мы планируем подключить три датчика влажности почвы, и один - датчик освещённости. Ну вот так вот и указываем.

    После того, как сохранили данные - перезагружаем контроллер, и подтыкаем на линию 1-Wire один за другим: сначала три датчика влажности почвы, потом - датчик освещённости. Каждый раз при подтыкании датчика - стоит дождаться с него данных.

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

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

    Такая теория, в общем. Как будет на практике - надо тестировать.
     
Статус темы:
Закрыта.