FLProg — объединение плат Arduino в информационное кольцо

в 9:19, , рубрики: arduino, diy или сделай сам, flprog, Блог компании FLProg, Железо, Интернет вещей, передача данных, умный дом

FLProg — объединение плат Arduino в информационное кольцо - 1

Начиная с версии 1.10.5, программа FLProg позволяет объединять несколько плат Arduino в кольцевую UART сеть. Сначала рассмотрим, как это происходит. Платы соединяются между собой в соответствии со схемой, изображённой на заглавной иллюстрации. Предположим, что плата 1 отсылает через UART пакет данных содержащий идентификаторы платы, переменной, а так же значение переменной. Плата 2 принимает данный пакет и если данные из этой переменной ей не нужны, то просто отправляет этот пакет дальше. Если в соответствии с программой значение данной переменной необходимо контроллеру, то значение из пакета копируется во внутреннюю переменную, и пакет так же отправляется дальше по кольцу.
Когда таким образом пакет, пройдя всё кольцо, вернётся к плате, отправившей его, передача пакета прекратится.
Таким образом, данные из пакета доступны любой плате подключённой к кольцу, и инициатором отправки пакета так же может быть любая из плат.

Схема тестового стенда:

FLProg — объединение плат Arduino в информационное кольцо - 2

Логика работы следующая:

  • Arduino №1 получает данные о температуре и влажности c датчиков.
  • Arduino №2 отображает температуру с датчика DS18B20.
  • Arduino №3 отображает температуру и влажность с датчика DHT-22.

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

  • Цифровое значение температуры от датчика DS18B20 ловит Arduino№3, затем преобразует его в строку и отправляет в кольцо. Эту строку ловит Arduino№2 и отображает на дисплее.
  • Цифровое значение температуры от датчика DHT-22 ловит Arduino№2, затем преобразует его в строку и отправляет в кольцо. Эту строку ловит Arduino№3 и отображает на дисплее.
  • Цифровое значение влажности от датчика DHT-22 ловит Arduino№3, затем преобразует его в строку и отображает на дисплее.

Итак, начнём.
Открываем программу FLProg и создаём проект для Arduino№1. На первую плату кидаем блок сканирования шины OneWare (библиотека элементов, папка «Разное»). Этот блок по переднему фронту на входе En производит сканирование шины OneWare и при нахождении на них датчиков складывает обнаруженные адреса в привязанные массивы. Для параметрирования блока вызываем редактор блока (двойной клик на блоке).

FLProg — объединение плат Arduino в информационное кольцо - 3

  1. Сначала создаём новую шину OneWare.
    FLProg — объединение плат Arduino в информационное кольцо - 4
  2. Затем создаём массив. Поскольку датчик у нас на шине планируется один, создаём один массив.
    FLProg — объединение плат Arduino в информационное кольцо - 5

Теперь организуем схему запуска этого блока один раз при старте программы. Для этого соберём такую схему.

FLProg — объединение плат Arduino в информационное кольцо - 6

R – Триггер находится в папке «Триггеры» библиотеки элементов. Он служит для выделения переднего фронта импульса подаваемого на вход. На его выходе будет импульс длительностью один цикл программе при переходе уровня на входе от низкого к высокому.
Затем создаём новую плату и перетаскиваем на неё датчик температуры DS18x2x (библиотека элементов, папка «Датчики»). Вызываем редактор блока и параметрируем датчик.

FLProg — объединение плат Arduino в информационное кольцо - 7

  1. Из выпадающего списка выбираем ранее созданную шину OneWare на пине 4
  2. Выбираем режим задания адреса «Массив»
  3. Выбираем ранее созданный массив «Датчик»
  4. Выставляем периодический режим опроса датчика, с частотой опроса раз в 1 сек.

Теперь полученное с датчика значение необходимо отправить в кольцо.
В программе FLProg подключить контроллер к кольцу можно двумя способами. В данном проекте для Arduino№1 рассмотрим первый способ – через блоки отправки переменной в кольцо.
Вытащим на плату блок «Отправка переменной в кольцо» (библиотека элементов, папка UART), и вызовем для него редактор блока.

FLProg — объединение плат Arduino в информационное кольцо - 8

  1. Сначала добавляем контроллер к кольцу.
    FLProg — объединение плат Arduino в информационное кольцо - 9
    В открывшемся окне необходимо выбрать порт подключения к кольцу, скорость порта, и задать имя устройства в кольце. Так же для удобства работы с проектом желательно создать файл списка переменных кольца, через который будут синхронизироваться все контроллеры, участвующие в нём.
  2. Затем создаем переменную, которая будет передаваться в кольцо
    FLProg — объединение плат Arduino в информационное кольцо - 10
    В окне создания переменной необходимо задать имя переменной и её тип.
  3. После этого задаём периодический режим отправки переменной, с периодом в 1 сек.

После параметрирования блока соединяем блоки датчика и отправки между собой и устанавливаем на входе En блока отправки переменной константу true.

FLProg — объединение плат Arduino в информационное кольцо - 11

Создаём новую плату и перетаскиваем на неё датчик DHT-22 (библиотека элементов, папка «Датчики»). Вызываем редактор блока и параметрируем датчик.

FLProg — объединение плат Arduino в информационное кольцо - 12

  1. Выбираем пин подключения датчика
  2. Выбираем тип датчика
  3. Задаём наличие выходов температуры и влажности
  4. Задаём периодический способ опроса датчика с периодичностью в 1 секунду

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

FLProg — объединение плат Arduino в информационное кольцо - 13

FLProg — объединение плат Arduino в информационное кольцо - 14

Поле чего соединим блоки между собой, и поставим константы true на входы En блоков отправки переменных.

FLProg — объединение плат Arduino в информационное кольцо - 15

С проектом для Arduino№1 закончили. Должна получится такая схема:

FLProg — объединение плат Arduino в информационное кольцо - 16

Теперь создаём новый проект для Arduino№2.
Сразу подключаем плату к кольцу. Здесь воспользуемся вторым методом, через дерево проекта. Раскрываем дерево до ветки «Коммуникации» включительно и делаем клик правой кнопкой по пункту «Кольца». В появившемся контекстном меню выбираем пункт «Добавить кольцо».

FLProg — объединение плат Arduino в информационное кольцо - 17

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

FLProg — объединение плат Arduino в информационное кольцо - 18

FLProg — объединение плат Arduino в информационное кольцо - 19

Все параметры кольца можно изменить через дерево проекта, вызывая контекстное меню на соответствующих ветках.
Согласно алгоритму Arduino№2 ловит переменную о температуре от датчика DHT-22, превращает её значение в строку и отправляет в кольцо. Для этого перетащим на схему блок «Получение переменной из кольца» (библиотека элементов, папка «UART»)и вызовем для него редактор.

FLProg — объединение плат Arduino в информационное кольцо - 20

В редакторе выберем кольцо и соответствующую переменную.
Затем перетащим на схему блок «Преобразование строк» (библиотека элементов, папка «Конвертация типов») и соединим вход этого блока с выходом блока «Получение переменной из кольца»

FLProg — объединение плат Arduino в информационное кольцо - 21

После чего вызовем редактор для блока «Преобразование строк».
FLProg — объединение плат Arduino в информационное кольцо - 22

Поскольку на входе этого блока значение типа Float, у нас есть возможность задать количество знаков после запятой при преобразовании в строку. Я думаю, одного знака после запятой нам хватит.
Затем вытаскиваем на схему блок «Отправка переменной в кольцо» (библиотека элементов, папка UART), и помощью редактора выбираем кольцо, и создаем новую переменную, которая будет отправляться в кольцо. Так же выставляем периодический режим отправки, с периодом в 1 сек.

FLProg — объединение плат Arduino в информационное кольцо - 23

FLProg — объединение плат Arduino в информационное кольцо - 24

После чего соединяем блоки между собой и устанавливаем константу true на входе En блока отправки переменной.

FLProg — объединение плат Arduino в информационное кольцо - 25

Создадим новую плату и перетащим на неё блок «Получение переменной из кольца» (библиотека элементов, папка «UART»)и вызовем для него редактор. В редакторе выберем подключенное кольцо. Поскольку в соответствии с алгоритмом значение для отображения на дисплее нам готовит Arduino№3, создадим новую переменную, которую нам этот контроллер будет отправлять.

FLProg — объединение плат Arduino в информационное кольцо - 26

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

FLProg — объединение плат Arduino в информационное кольцо - 27

  1. Создадим новый дисплей
  2. Зададим подключение согласно схеме
  3. Зададим параметры дисплея
  4. Настроим отображение данных с входа блока
  5. Настроим отображение по центру первой строки

После этого соединим блоки и установив константу true на входе En блока дисплея.

FLProg — объединение плат Arduino в информационное кольцо - 28

С проектом для Arduino№2 закончили. Должна получится такая схема:

FLProg — объединение плат Arduino в информационное кольцо - 29

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

FLProg — объединение плат Arduino в информационное кольцо - 30

Согласно алгоритма, контроллер Arduino№3 ловит значение температуры с датчика DS18B20 от Arduino№1 и преобразует его в строку и отправляет эту строку в кольцо для Arduino№2. Все необходимые переменные для этого у нас уже существуют. Поэтому, аналогично Arduino№2. перетаскиваем на схему блоки «Получение переменной из кольца» (библиотека элементов, папка «UART»), «Преобразование строк» (библиотека элементов, папка «Конвертация типов») и блок «Отправка переменной в кольцо» (библиотека элементов, папка UART). После чего параметрируем их.
«Получение переменной из кольца»

FLProg — объединение плат Arduino в информационное кольцо - 31

«Преобразование строк»

FLProg — объединение плат Arduino в информационное кольцо - 32

«Отправка переменной в кольцо»

FLProg — объединение плат Arduino в информационное кольцо - 33

После этого собираем их в схему

FLProg — объединение плат Arduino в информационное кольцо - 34

Создаём новую плату для отображения температуры с датчика DHT-22. Так же аналогично Arduino№2 перетаскиваем «Получение переменной из кольца» (библиотека элементов, папка «UART») и «Дисплей на чипе HD44780» (библиотека элементов, папка «Дисплеи»). Параметрируем их.
«Получение переменной из кольца»

FLProg — объединение плат Arduino в информационное кольцо - 35

«Дисплей на чипе HD44780»

FLProg — объединение плат Arduino в информационное кольцо - 36

Соединяем между собой.

FLProg — объединение плат Arduino в информационное кольцо - 37

Создаём новую плату для отображения влажности.
Так же перетаскиваем на плату блок «Получение переменной из кольца» (библиотека элементов, папка «UART») и параметрируем.

FLProg — объединение плат Arduino в информационное кольцо - 38

Затем перетаскиваем блок «Преобразование строк» (библиотека элементов, папка «Конвертация типов»), соединяем его с блоком «Получение переменной из кольца» и то же параметрируем.

FLProg — объединение плат Arduino в информационное кольцо - 39

FLProg — объединение плат Arduino в информационное кольцо - 40

Ну и в последнюю очередь перетаскиваем блок «Дисплей на чипе HD44780» (библиотека элементов, папка «Дисплеи»). При параметрировании блока выбираем уже существующий дисплей и выводим значение влажности по центру второй строки.

FLProg — объединение плат Arduino в информационное кольцо - 41

Соединяем блоки между собой.

FLProg — объединение плат Arduino в информационное кольцо - 42

Создание программы для Arduino№3 законченно.
Конечный результат.

FLProg — объединение плат Arduino в информационное кольцо - 43

Спасибо за внимание.

Автор: FLProg

Источник

Поделиться новостью

* - обязательные к заполнению поля