Программируем Arduino с помощью Scratch и mBlock. FLProg – альтернативная среда программирования Arduino

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

Visuino

Visuino - это бесплатная графическая среда, работающая на базе совместимых с Arduino промышленных контроллеров (ПЛК) Controllino. Она дает возможность создания сложных систем автоматизации и решений IoT (Internet of Things, интернета вещей), причем сделать это можно, просто перемещая и соединяя визуальные блоки. Программная среда автоматически генерирует код для промышленных контроллеров.

Итак, что надо сделать. Выбираем компоненты (модули) с панели компонентов и перемещаем их в область проектирования. Затем их необходимо соединить и настроить свойства. Это делается с помощью инспектора объектов.

К плюсам Visuino относится большой набор компонентов для математических и логических функций, сервоприводов, дисплеев, интернета и пр.

Когда ПЛК запрограммирован, графическая среда подсказывает доступный способ подключения к контроллеру. Это может быть последовательный порт, Ethernet, Wi-Fi или GSM.

Наконец ваш проект готов: все контроллеры прописаны, все работает. Теперь, нажав на логотип Arduino, расположенный на верхней панели, вы заставите Visuino создать коды для Arduino и открыть среду его разработки (Arduino IDE), через которую уже можно скомпилировать код и загрузить его в ПЛК.

Совет. Если установленная плата не соответствует вашему Arduino, вы можете изменить ее с помощью команды «Select Board» (Выбрать панель).

Scratch

Эта графическая среда программирования была создана в 2003 году, когда группа сотрудников MIT Media Lab решила разработать язык программирования, доступный абсолютно для всех. В итоге через некоторое время публике был представлен Scratch.

Больше всего, пожалуй, он похож на Lego. По крайней мере, принцип тот же: это объектно ориентированная среда, в которой программы собираются из деталей, разноцветных и ярких. Эти детали можно перемещать, видоизменять, заставлять взаимодействовать различным образом. Основа Scratch - блоки команд, таких как сенсоры, переменные, движение, звук, операторы, внешность, перо, контроль и пр. Встроенный графический редактор дает возможность нарисовать любой объект. Не прошло и пяти лет с момента создания Scratch, как возник проект Scratch для Arduino (сокращённо - S4A), позволяющая программировать ПЛК Arduino.

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

Совет. Для новичков в Scratch существует специальный ресурс: https://scratch-ru.info .

ArduBloсk

Когда человек уже полностью освоил Scratch, но еще не дорос до Wiring, на котором программируются Arduino-совместимые платы, самое время посоветовать ему написанный на Java инструмент ArduBloсk. Особенно хорош он для тех, кто увлекается робототехникой.

В чем же разница? Дело в том, что Scratch не умеет прошивать Arduino, он лишь управляет его ПЛК через USB. Таким образом, Arduino не может работать сам по себе, ведь он зависит от компьютера.

По сути, ArduBloсk - это промежуточный этап между детской Scratch и вполне профессиональной, хоть и доступной Visuino, поскольку так же, как последняя, обладает возможностью перепрошивки Arduino-совместимых контроллеров.

Совет. Не забудьте установить на свой ПК Java-машину . Это не займет много времени.

Итак, больше графических сред - хороших и разных. Да пребудет с вами Arduino.

Фото: компании-производители, pixabay.com

Arduino совместимые платы программируются на языке Wiring, который по синтаксису очень похож на Си. Однако мо моему личному опыту этот язык сложен для освоения ребятами в возрасте 11-13 лет, особенно если до этого ребята создавали программы в LabView перетаскивая блоки на рабочий стол. Многие, увлекающиеся робототехникой, ребята хорошо знакомы с визуальным языком программирования Scratch, на базе которого уже существует множество решений для образования. Среди подобных решений для Arduino создан инструмент написанный на языке Java под названием ArduBloсk.

Да, кто-то может сказать, что еще существует Scratch for Arduino (s4a) и он тоже очень простая графическая среда для программирования Arduino. Но Scratch не прошивает Arduino, а всего лишь управляет им посредством USB кабеля. Arduino зависим от компьютера и не может работать автономно. При создании собственных проектов автономность для Arduino — это главное, особенно при создании роботизированных устройств.

Итак, что же такое ArduBloсk? Это графическая среда программирования. Практически полностью переведена на русский язык. Но в ArduBloсk изюминка не только это, но и то, что написанную нами программу ArduBloсk конвертирует в код Arduino IDE. Эта программа встраивается в среду программирования Arduino IDE, т. е. это плагин!

Ниже приведен пример мигающего светодиода и конвертированной программы в Arduino IDE. Вся работа с программой очень проста и разобраться в ней сможет любой школьник.


В результате работы на программе можно не только программировать Arduino, но и изучать непонятные нам команды в текстовом формате Arduino IDE, ну а если же «лень» писать стандартные команды — стоит быстрыми манипуляциями мышкой набросать простенькую программку в ArduBlok, а в Arduino IDE её отладить.

Чтобы установить ArduBlok, необходимо выполнить инструкцию которая описана ниже, но все же вам придется совершить некоторые танцы с бубном, так как в последних версиях Arduino IDE этот плагин не работает. Если вы не желаете танцевать с бубнами, то предлагаю вам скачать архив с уже интегрированным инструментом ArduBloсk для Arduino IDE 1.6.11. Эта версия не требует установки. Вам нужно только разархивировать папку в удобное место и запустить Arduino IDE. И НЕ ЗАБУДЬТЕ установить виртуальную машину Java, она необходима для нормальной работы этого плагина скачать Java можно с официального сайта , установка 1-2 минуты.

Скачать Arduino IDE 1.6.11 with ArduBloсk

Инструкция для танцев с бубном: Для начала загрузить и установить Arduino IDE с официального сайта Arduino и разобраться с настройками при работе с платой Arduino UNO. Как это сделать описано на том же сайте или же на Амперке , либо посмотреть на просторах YouTube. Ну, а когда со всем этим разобрались, необходимо скачать ArduBlok с официального сайта, вот .

Затем, скачанный файл переименовываем в ardublock-all и в папке «документы». Создаем следующие папки: Arduino > tools > ArduBlockTool > tool и в последнюю кидаем скачанный и переименованный файл. ArduBlok работает на всех операционных системах, даже на Linux, проверял сам лично на XP, Win7, Win8, все примеры для Win7. Установка программы для всех систем одинакова.

Я рассказал о предыстории появления проекта FLProg. Сейчас я хочу поподробнее рассказать о проекте и его состоянии на сегодняшний день.
Основной целью проекта является включение в круг пользователей плат Arduino людей незнакомых с программированием. Это возможно благодаря опыту промышленного программирования, который накапливался годами производителями промышленных контроллеров.
Проект состоит из двух частей. Первая часть это десктоп приложение FLProg представляющее собой графическую среду программирования плат Arduino. Во вторых, это сайт FLProg.ru , с помощью которого члены сообщества пользователей программы могут пообщаться между собой, узнать последние новости проекта, скачать последнюю версию программы, ну и найти необходимую информацию по работе с приложением.

Начнем по порядку.
Программа FLProg позволяет создавать прошивки для плат Arduino с помощью графических языков FBD и LAD, которые являются стандартом в области программирования промышленных контроллеров.

Описание языка FBD

FBD (Function Block Diagram) - графический язык программирования стандарта МЭК 61131-3. Программа образуется из списка цепей, выполняемых последовательно сверху вниз. При программировании используются наборы библиотечных блоков. Блок (элемент) - это подпрограмма, функция или функциональный блок (И, ИЛИ, НЕ, триггеры, таймеры, счётчики, блоки обработки аналогового сигнала, математические операции и др.). Каждая отдельная цепь представляет собой выражение, составленное графически из отдельных элементов. К выходу блока подключается следующий блок, образуя цепь. Внутри цепи блоки выполняются строго в порядке их соединения. Результат вычисления цепи записывается во внутреннюю переменную либо подается на выход контроллера.


Описание языка LAD

Ladder Diagram (LD, LAD, РКС) - язык релейной (лестничной) логики. Синтаксис языка удобен для замены логических схем, выполненных на релейной технике. Язык ориентирован на инженеров по автоматизации, работающих на промышленных предприятиях. Обеспечивает наглядный интерфейс логики работы контроллера, облегчающий не только задачи собственно программирования и ввода в эксплуатацию, но и быстрый поиск неполадок в подключаемом к контроллеру оборудовании. Программа на языке релейной логики имеет наглядный и интуитивно понятный инженерам-электрикам графический интерфейс, представляющий логические операции, как электрическую цепь с замкнутыми и разомкнутыми контактами. Протекание или отсутствие тока в этой цепи соответствует результату логической операции (истина - если ток течет; ложь - если ток не течет). Основными элементами языка являются контакты, которые можно образно уподобить паре контактов реле или кнопки. Пара контактов отождествляется с логической переменной, а состояние этой пары - со значением переменной. Различаются нормально замкнутые и нормально разомкнутые контактные элементы, которые можно сопоставить с нормально замкнутыми и нормально разомкнутыми кнопками в электрических цепях.


Я немного расширил классический функционал этих языков, добавив функциональные блоки, отвечающие за работу с внешними устройствами. Они являются обертками, над библиотеками, предназначенными для работы с ними.
Проект в FLProg представляет собой набор плат, на каждой, из которой собран законченный модуль общей схемы. Для удобства работы каждая плата имеет наименование и комментарии. Так же каждую плату можно свернуть (для экономии места на рабочей зоне, когда работа над ней закончена), и развернуть. Красный индикатор в наименовании платы указывает на то, что в схеме платы есть ошибки.

Вид окна программы в режиме языка FBD

Вид окна программы в режиме языка LAD

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

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

При работе с программой пользователю нет необходимости заниматься написанием кода, контролем за использованием входов – выходов, проверкой уникальности имен и согласованностью типов данных. За всем этим следит программа. Так же она проверяет корректность проекта целиком и указывает на наличие ошибок.
Для работы с внешними устройствами создано несколько вспомогательных инструментов. Это инструмент инициализации и настройки часов реального времени, инструменты для чтения адресов устройств на шинах OneWire и I2C а так же инструмент для чтения и сохранения кодов кнопок на ИК пульте. Все определённые данные можно сохранить в виде файла и в последующем использовать в программе.

Список функциональных блоков существующих на сегодняшний день в языке FBD

Базовые элементы



Специальные блоки

Тригеры



Таймеры


Счетчики


Математика



Алгебра






Сравнение

Com - Порт

Send
SendVariable
ReceiveVariable

Переключатель


Моторы

ServoMotor
StepMotor

Часы реального времени


Дисплеи

Дисплей на чипе НD44780
Подсветка дисплея на чипе НD44780 I2C

Строки

Сложение строк

Датчики



SD карта

Запись переменной на SD карту
Выгрузка файла с SD карты

Конвертация типов

Преобразование строк
Преобразование Float в Integer

Микросхемы расширений

Расширитель выводов 74HC595

Операции с битами

Шифратор
Дешифратор
Чтение бита
Запись бита

Разное

Матричная клавиатура

Список функциональных блоков существующих на сегодняшний день в языке LAD

Базовые блоки

Контакт
Катушка
Защита от дребезга
Выделение переднего фронта

Специальные реле

Двустабильное реле
Реле времени
Генератор
Реле сравнения

Алгебра

SIN
COS
TAN
ABS
MAX
MIN
SQ
SQRT
POW
RANDOM

Аналоговые блоки

Масштабирование
Математика
Счетчик
Аналоговый переключатель
Переключатель много к одному
Переключатель один ко многим
Аналоговый вход контроллера
Аналоговый выход контроллера
Вход аналогового соеденителя
Выход аналогового соединителя
Скоростной счетчик

ComPort

Передача в ComPort
Передача переменной через ComPort
Прием переменной через ComPort

Моторы

Сервомотор
Шаговый двигатель

Часы реального времени

Получить данные
Будильник
Установка времени

Дисплеи

Дисплей на чипе HD44780
Блок управления подсветкой дисплея на чипе HD4480 I2C
Блок декодирования семи сегментного индикатора

Строки

Сложение строк

Датчики

Ультразвуковой дальномер HC-SR04
Датчик температуры и влажности DHT11 (DHT21, DHT22)
Датчик температуры DS18x2x
IR Ressive
BMP-085

В данном уроке мы научимся программировать Ардуино на языке программирования Scratch с использованием mBlock. Но во-первых, давайте быстро рассмотрим, что такое Arduino и Scratch, соответственно.

Arduino - небольшая плата, предназначенная в первую очередь для создания прототипов, которая воплощает любые идеи в жизнь. Используя Arduino, можно создать робота, электронный гаджет и многое другое. Нет предела! На фото ниже плата .

Например, для запуска двигателей с заданными интервалами может использоваться плата Arduino, которая подключается к четырем двигателям (плюс к двигателю управления). Вы должны поручить Arduino управлять двигателями с использованием языка программирования, где вы пропишите шаги, а готовую программу загрузите в плату, чтобы проект заработал.

Микроконтроллер имеет собственный язык программирования, хотя этот язык состоит из функций, выведенных из C/C++.

Однако вы можете использовать другие языки для программирования Arduino, как правило, используя сторонний инструмент, такой как Snap4Arduino, ArduBlock и другие. Одной из таких программ является mBlock, которая позволяет использовать визуальный язык программирования Scratch с Arduino.

В этом уроке мы рассмотрим основы использования mBlock для программирования Arduino с Scratch.

Scratch (Скретч) - это язык программирования, разработанный для детей, чтобы они могли изучать программирование в интерактивном режиме. В Scratch вы присоединяете помеченные блоки (которые служат фрагментами кода) для написания полноценной программы или игры.


Используя Scratch, некоторые пользователи разработали еще одно дополнение, называемое mBlock. Разница между mBlock и Scratch заключается в том, что mBlock позволяет вам запрограммировать Arduino простым и интерактивным способом.

Интересная вещь mBlock заключается в том, что вы можете увидеть исходный код на C++ после программирования Arduino.


Мигаем светодиодом с использованием mBlock

Давайте используя mBlock начнем с малого, сделав программу, которая заставит мигать светодиод.

Проверьте, насколько это просто:

В приведенной выше программе вы можете увидеть, что мы разместили блок Arduino и "вечный блок" (англ. - forever). Эти два блока являются обязательными для программирования Arduino.

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

Внутри блока forever установите, какой цифровой контакт будет использоваться. Этот может обеспечить высокое или низкое напряжение пина. Итак, если у меня есть светодиод, подключенный к контакту номер 13 Arduino (смотрите ниже), и я хочу включить его, я буду использовать «set digital pin 13 output HIGH », и мой светодиод загорится.

Эта программа использует задержки (delays ) для приостановки программы в течение одной секунды между состояниями ON и OFF . Таким образом, мы можем видеть, как светодиод мигает.

Попробуйте подключить Arduino к светодиоду, как показано выше, и запустить код после подключения Arduino к компьютеру (убедитесь, что вы выбрали правую плату и последовательный порт с mBlock). Для этого вам обязательно нужна программная среда .

Затем запустите код. Вы сможете увидеть, что светодиод мигает.

Это хороший инструмент для начинающих. Попробуйте изучить другие блоки и посмотреть, что вы можете сделать!

Я рассказал о предыстории появления проекта FLProg. Сейчас я хочу поподробнее рассказать о проекте и его состоянии на сегодняшний день.
Основной целью проекта является включение в круг пользователей плат Arduino людей незнакомых с программированием. Это возможно благодаря опыту промышленного программирования, который накапливался годами производителями промышленных контроллеров.
Проект состоит из двух частей. Первая часть это десктоп приложение FLProg представляющее собой графическую среду программирования плат Arduino. Во вторых, это сайт FLProg.ru , с помощью которого члены сообщества пользователей программы могут пообщаться между собой, узнать последние новости проекта, скачать последнюю версию программы, ну и найти необходимую информацию по работе с приложением.

Начнем по порядку.
Программа FLProg позволяет создавать прошивки для плат Arduino с помощью графических языков FBD и LAD, которые являются стандартом в области программирования промышленных контроллеров.

Описание языка FBD

FBD (Function Block Diagram) - графический язык программирования стандарта МЭК 61131-3. Программа образуется из списка цепей, выполняемых последовательно сверху вниз. При программировании используются наборы библиотечных блоков. Блок (элемент) - это подпрограмма, функция или функциональный блок (И, ИЛИ, НЕ, триггеры, таймеры, счётчики, блоки обработки аналогового сигнала, математические операции и др.). Каждая отдельная цепь представляет собой выражение, составленное графически из отдельных элементов. К выходу блока подключается следующий блок, образуя цепь. Внутри цепи блоки выполняются строго в порядке их соединения. Результат вычисления цепи записывается во внутреннюю переменную либо подается на выход контроллера.


Описание языка LAD

Ladder Diagram (LD, LAD, РКС) - язык релейной (лестничной) логики. Синтаксис языка удобен для замены логических схем, выполненных на релейной технике. Язык ориентирован на инженеров по автоматизации, работающих на промышленных предприятиях. Обеспечивает наглядный интерфейс логики работы контроллера, облегчающий не только задачи собственно программирования и ввода в эксплуатацию, но и быстрый поиск неполадок в подключаемом к контроллеру оборудовании. Программа на языке релейной логики имеет наглядный и интуитивно понятный инженерам-электрикам графический интерфейс, представляющий логические операции, как электрическую цепь с замкнутыми и разомкнутыми контактами. Протекание или отсутствие тока в этой цепи соответствует результату логической операции (истина - если ток течет; ложь - если ток не течет). Основными элементами языка являются контакты, которые можно образно уподобить паре контактов реле или кнопки. Пара контактов отождествляется с логической переменной, а состояние этой пары - со значением переменной. Различаются нормально замкнутые и нормально разомкнутые контактные элементы, которые можно сопоставить с нормально замкнутыми и нормально разомкнутыми кнопками в электрических цепях.


Я немного расширил классический функционал этих языков, добавив функциональные блоки, отвечающие за работу с внешними устройствами. Они являются обертками, над библиотеками, предназначенными для работы с ними.
Проект в FLProg представляет собой набор плат, на каждой, из которой собран законченный модуль общей схемы. Для удобства работы каждая плата имеет наименование и комментарии. Так же каждую плату можно свернуть (для экономии места на рабочей зоне, когда работа над ней закончена), и развернуть. Красный индикатор в наименовании платы указывает на то, что в схеме платы есть ошибки.

Вид окна программы в режиме языка FBD

Вид окна программы в режиме языка LAD

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

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

При работе с программой пользователю нет необходимости заниматься написанием кода, контролем за использованием входов – выходов, проверкой уникальности имен и согласованностью типов данных. За всем этим следит программа. Так же она проверяет корректность проекта целиком и указывает на наличие ошибок.
Для работы с внешними устройствами создано несколько вспомогательных инструментов. Это инструмент инициализации и настройки часов реального времени, инструменты для чтения адресов устройств на шинах OneWire и I2C а так же инструмент для чтения и сохранения кодов кнопок на ИК пульте. Все определённые данные можно сохранить в виде файла и в последующем использовать в программе.

Список функциональных блоков существующих на сегодняшний день в языке FBD

Базовые элементы



Специальные блоки

Тригеры



Таймеры


Счетчики


Математика



Алгебра






Сравнение

Com - Порт

Send
SendVariable
ReceiveVariable

Переключатель


Моторы

ServoMotor
StepMotor

Часы реального времени


Дисплеи

Дисплей на чипе НD44780
Подсветка дисплея на чипе НD44780 I2C

Строки

Сложение строк

Датчики



SD карта

Запись переменной на SD карту
Выгрузка файла с SD карты

Конвертация типов

Преобразование строк
Преобразование Float в Integer

Микросхемы расширений

Расширитель выводов 74HC595

Операции с битами

Шифратор
Дешифратор
Чтение бита
Запись бита

Разное

Матричная клавиатура

Список функциональных блоков существующих на сегодняшний день в языке LAD

Базовые блоки

Контакт
Катушка
Защита от дребезга
Выделение переднего фронта

Специальные реле

Двустабильное реле
Реле времени
Генератор
Реле сравнения

Алгебра

SIN
COS
TAN
ABS
MAX
MIN
SQ
SQRT
POW
RANDOM

Аналоговые блоки

Масштабирование
Математика
Счетчик
Аналоговый переключатель
Переключатель много к одному
Переключатель один ко многим
Аналоговый вход контроллера
Аналоговый выход контроллера
Вход аналогового соеденителя
Выход аналогового соединителя
Скоростной счетчик

ComPort

Передача в ComPort
Передача переменной через ComPort
Прием переменной через ComPort

Моторы

Сервомотор
Шаговый двигатель

Часы реального времени

Получить данные
Будильник
Установка времени

Дисплеи

Дисплей на чипе HD44780
Блок управления подсветкой дисплея на чипе HD4480 I2C
Блок декодирования семи сегментного индикатора

Строки

Сложение строк

Датчики

Ультразвуковой дальномер HC-SR04
Датчик температуры и влажности DHT11 (DHT21, DHT22)
Датчик температуры DS18x2x
IR Ressive
BMP-085