ScratchDuino, ArduBlock и Arduino. Снимаем показания с датчиков scar169 / 04.12.2015 Добрый день. Продолжим тему использования плагина визуального программирования ArduBlock для программирования устройств на Arduino. Напомню, что плагин дополняет возможности Arduino IDE и позволяет собирать программы в виде блоков, затем перекидывает их в виде кода в Arduino IDE, компилирует и загружает в устройство. С учебной точки зрения здесь есть очень важный аспект - при сохранении и загрузке программа из ArduBlock переводится в код и отображается уже в окне Arduino IDE. Вносить изменения можно и в блочном и в кодовом варианте. Через некоторое время использования ученики большей частью доводку и модификацию программы проводят в коде, так быстрее и удобнее.Разумеется, здесь не обязательно использовать робоплатформу ScratchDuino, технология использования универсальна. Для данной же платформы она позволяет добавить возможность программировать автономное поведение робота и упростить переход с блочного программирования к коду. И даже хорошо, что пока разработчики не добавили свои блоки к плагину, значит, мы используем только стандартные операции, т.е. учимся работе с ЛЮБЫМ устройством на основе Arduino. О том, как добавить плагин ArduBlock к Arduino IDE я писал ранее: ScratchDuino - новые горизонты с ArduBlock ScratchDuino и ArduBlock. Используем цифровые порты, добавляем "фары" - сигнализаторы. По итогам - мы получили возможность управлять двумя моторами (питание и направление), отправлять управляющие сигналы на цифровые порты. В случае ScratchDuino схема управления выглядит следующим образом: Про особенности управления двигателями я еще напишу отдельный материал, а сейчас разберемся с тем, как получить данные с датчиков, которые мы можем располагать на площадках A0-A4 (в данном случае - с аналоговых портов). Расположим на площадке A3 любой датчик, например датчик света, и попробуем снять с него показания. Для этого используем функцию Serial.println Функция Serial.println и в ArduBlock и в коде Arduino используется для вывода значений в последовательный порт. Соберем в ArduBlock следующую конструкцию (показана слева на рисунке, правее показан соответствующий код после загрузки программы). В нашей конструкции функция Serial.println выводит «приклеенные» (glue) к ней значения с аналогового порта 3.Здесь «glue» (клей, склеивать) – стыковочный узел из группы Числа/Константы с нужным вырезом для указания значения аналогового порта (для цифрового вырез другой, так что если будете задействовать цифровые пины - учитывайте). Загрузим программу в память робота. Далее потребуется открыть окно монитора последовательного порта, что можно сделать из Arduino IDE Перед вами откроется окно монитора, в котором и будет отображаться значение, снимаемое в данный момент с датчика на А3. Попробуйте перекрыть световой поток к датчику, убедитесь, что показания меняются. Точно так же можно снять значения с любого другого порта, например, переставьте датчик на А2 и измените программу (можно сразу в коде) для получения новых данных. Загрузив ее в робота и открыв окно монитора последовательного порта, убедитесь, что все работает. Работает, но несколько неудобно. Значения меняются слишком быстро. Добавим паузу между отображением значений. Например, в 1 с (=1000 мс), добавив в программу блок «Пауза». Посмотрите окно монитора последовательного порта, теперь показания датчика сменяются один раз в секунду, можно спокойно проводить калибровку. Рассмотрим и реализацию функции в коде Arduino (правая часть предыдущего рисунка). В блоке Setup видно функцию Serrial.begin() с указанием в скобках скорости передачи данных в бодах, в нашем случае – 9600. В блоке Loop добавилась конструкция, в которой указывается, что Serial.print принимает значения с аналогового порта А3, а затем функция Serial.println выводит эти данные в монитор последовательного порта. Независимо от того, будете ли вы в последующем использовать конструкцию в ArduBlock или текстовый код Arduino – мы получаем прекрасный механизм для калибровки датчиков, расположенных на любом посадочном месте робоплатформы. Теперь можно создавать программы для автономного робота с использованием для управления показаний любых датчиков комплекта! Дополнительно рассмотрим, как одновременно можно выводить в окно монитора показания всех интересующих нас датчиков, причем еще и оформляя вывод удобным образом. Например: вывод показаний датчиков с портов А0 и А4 (например, два датчика линии), причем с пробелами и надписями А0= и А4=. Русский язык не поддерживается ((( В коде это будет выглядеть так (обратите внимание на пробелы в кавычках, просто для удобства просмотра столбиков данных): При использовании ArduBlock для той же цели есть небольшая проблема – отсутствие просто Serial.print без перевода строки. Поэтому получается так: Решается легко, но только в коде. Т.е. собрали в ArduBlock, он перебросил в код, а там просто убираем лишний перевод строки и добавляем пробелы перед «А4=» ( « А4=»). Выделил убираемое: И все работает! Понятно, что данные блоки можно не только использовать для предварительной калибровки датчиков, но можно и вставлять в тело больших программ, чтобы контролировать показания датчиков. Ну вот, по сути робот стал совсем автономным, можно писать программы с контролем скорости и направления моторов и учетом показаний датчиков.В предыдущих выпусках:ScratchDuino.Робоплатформа и Scratch ScratchDuino. Робоплатформа на СПО. Установка ScratchDuino. Робоплатформа на СПО. Первый запуск ScratchDuino. Робоплатформа на СПО. Соединение по BluetoothScratchDuino. Робоплатформа на СПО. Датчик светаScratchDuino. Робоплатформа на СПО. Датчик касания. ScratchDuino. Робоплатформа на СПО. Датчик линии ScratchDuino -2015. Новости проектаScratchDuino.Робоплатформа и ArduBlockScratchDuino - новые горизонты с ArduBlockScratchDuino и ArduBlock. Используем цифровые порты, добавляем "фары" - сигнализаторы.ScratchDuino. Методика и дополнения.ScratchDuino - учителю. Рабочая программа по внеурочной деятельности в 5 классе.ScratchDuino - родителям. Творим вместе с детьми. ВведениеScratchDuino. Лаборатория.ScratchDuino. Лаборатория. Введение. ArduBlock Scratchduino датчики монитор порта