Вы находитесь на странице: 1из 27

Главная тема: Nginx vs Рамблер

Блог компании FLProg, Компьютерное железо, Интернет вещей, DIY или Сделай сам

totuin 9 марта 2016

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


кольцо
Tutorial

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

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

+16 100 46
Логика работы следующая:
Arduino №1 получает данные о температуре и влажности c датчиков.

Arduino №2 отображает температуру с датчика DS18B20.

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

Что бы избежать гневных комментариев о том, что такая логика не нужна и является
бредом, уточню, что данный проект чисто учебный и предназначен для объяснения
принципов передачи данных через информационное кольцо. Для этого внесём еще
немного бреда в логику работы.
Цифровое значение температуры от датчика DS18B20 ловит Arduino№3, затем
преобразует его в строку и отправляет в кольцо. Эту строку ловит Arduino№2 и
отображает на дисплее.
+16 100 46
Цифровое значение температуры от датчика DHT-22 ловит Arduino№2 затем
Цифровое значение температуры от датчика DHT 22 ловит Arduino№2, затем
преобразует его в строку и отправляет в кольцо. Эту строку ловит Arduino№3 и
отображает на дисплее.

Цифровое значение влажности от датчика DHT-22 ловит Arduino№3, затем


преобразует его в строку и отображает на дисплее.

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

1. Сначала создаём новую шину OneWire.

+16 100 46
2. Затем создаём массив. Поскольку датчик у нас на шине планируется один, создаём
один массив.

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

R – Триггер находится в папке «Триггеры» библиотеки элементов. Он служит для


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

+16 100 46
1. Из выпадающего списка выбираем ранее созданную шину OneWire на пине 4

2. Выбираем режим задания адреса «Массив»

3. Выбираем ранее созданный массив «Датчик»

4. Выставляем периодический режим опроса датчика, с частотой опроса раз в 1 сек.

Теперь полученное с датчика значение необходимо отправить в кольцо.


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

+16 100 46
1. Сначала добавляем контроллер к кольцу.

В открывшемся окне необходимо выбрать порт подключения к кольцу, скорость


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

2. Затем создаем переменную, которая будет передаваться в кольцо

+16 100 46
В окне создания переменной необходимо задать имя переменной и её тип.

3. После этого задаём периодический режим отправки переменной, с периодом в 1 сек.

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


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

Создаём новую плату и перетаскиваем на неё датчик DHT-22 (библиотека элементов,


папка «Датчики»). Вызываем редактор блока и параметрируем датчик.

+16 100 46
1. Выбираем пин подключения датчика

2. Выбираем тип датчика

3. Задаём наличие выходов температуры и влажности

4. Задаём периодический способ опроса датчика с периодичностью в 1 секунду

Затем перетащим на третью плату два блока отправки переменной в кольцо, в


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

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

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

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

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

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

После чего вызовем редактор для блока «Преобразование строк».

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

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

Создадим новую плату и перетащим на неё блок «Получение переменной из кольца»


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

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

+16 100 46
1. Создадим новый дисплей

2. Зададим подключение согласно схеме

3. Зададим параметры дисплея

4. Настроим отображение данных с входа блока

5. Настроим отображение по центру первой строки

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

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

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

Согласно алгоритма, контроллер Arduino№3 ловит значение температуры с датчика


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

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

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

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

Создаём новую плату для отображения температуры с датчика DHT-22. Так же


аналогично Arduino№2 перетаскиваем «Получение переменной из кольца» (библиотека
элементов, папка «UART») и «Дисплей на чипе HD44780» (библиотека элементов, папка
«Дисплеи»). Параметрируем их.
«Получение переменной из кольца»

+16 100 46
«Дисплей на чипе HD44780»

+16 100 46
Соединяем между собой.

Создаём новую плату для отображения влажности.


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

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

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

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

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


Конечный результат.

+16 100 46
Спасибо за внимание.

Теги: arduino, flprog, передача данных, diy или сделай сам, умный дом

+16 19,5k 100

53 0,1
Карма Рейтинг

Сергей @totuin
Пользователь

90 подписчиков

Поделиться публикацией

Поддержать автора

Отправить деньги

+16 Комментарии
100 46 46