Типовые роботы Лего и их микроконтроллерные аналоги. Часть 1 «Плюсы и минусы Lego Mindstrorms».

АВТОР: Чуйкин Александр. При перепечатке ссылка на сайт обязательна.

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


ПЛЮСЫ

МИНУСЫ

сразу 17 конструкций!!! Эта игрушка займет ребенка надолго. В коробке лежит одна скромная инструкция, но зато на сайте Lego еще целых 16 разнообразных поделок.

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

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

возможность обучения основам алгоритмического программирования — поможет развить логическое мышление и в целом приблизит ребенка к пониманию сути програмиирования.

легкость освоения — для большинства детей не составит проблем собрать любую конструкцию

поддержка со стороны производителя и пользователей — новые конструкции с подробнейшими инструкциями постоянно появляются и обновляются. Сторонние производители выпускают множество Lego-совместимых деталей и модулей.

широкая распространенность — найти в сети Интернет Lego-робота на любой вкус можно за минуту. А еще за пару минут пошаговую инструкцию по его изготовлению и (если надо) программированию.

самый большой минус — цена. Стоимость базового набора на начало лета 2016 составляет от 22000 до 31000 рублей. Зарядное устройство, цена которому 200 рублей в базарный день, продают за 2000 р.

ограниченный набор датчиков — в базовую комплектацию входит всего 2 датчика (датчик цвета, датчик касания). А в продвинутую версию Education еще 2 (гироскоп и ультразвуковой датчик расстояния). Это сильно ограничивает Вашу свободу творчества, так как собранный робот, будет иметь очень ограниченную автономность и по сути все собранные роботы будут отличаться только механикой. Но если Вы готовы выложить от 3000 рублей за каждый новый датчик, то тогда конечно ограничения снимаются. В общем, это тот же минус, что и предыдуший.

урезанные возможности программирования — программированием это можно назвать с большой натяжкой. Раскладка блоков на экране позволяет выполнять некоторые простые задачи, но только в рамках того функционала, что заложен в Lego производителем. Продвинутые пользователи конечно могут возразить, что для Lego созданы куча компиляторов разных языков, но разве тот, кто способен программировать на Си и Ассемблере станет всерьез заниматься Lego?

скромное количество портов ввода и вывода — к одному микрокомпьютеру Lego можно подключить всего 4 датчика и 4 исполнительных устройства (двигатели или сервомоторы, как правило). Хотите подключить больше? Будьте готовы заплатить еще 20000 рублей за еще один блок.

 

Подытоживая, можно сказать, что в Lego Mindstorms несомненно больше плюсов чем минусов. Назвать минусом невозможность полноценного программирования скорее всего нельзя. Производитель не ставил задачи создать инструмент для обучения программированию. Нельзя забывать, что Lego Mindstorms — это всё же игрушка. Применяемый алгоритмический способ программирования вполне подходит для решения определенного круга задач. И этого достаточно.
Главный минус один: цена. Функциональные аналоги роботов на Arduino или других микроконтроллерных платформах обходятся пользователю на порядки дешевле. В дальнейших статьях мы рассмотрим стандартных роботов Lego и их микроконтроллерные аналоги.

Ставропольские ученые научили робота видеть и распознавать предметы

СТАВРОПОЛЬ, 3 июня. /ТАСС/. Исследователи Северо- Кавказского федерального университета (СКФУ) в Ставрополе научили антропоморфного робота распознавать некоторые предметы. Об этом ТАСС сообщил в пятницу завкафедрой организации и технологии защиты информации Института информационных технологий и телекоммуникаций СКФУ, доцент Вячеслав Петренко.

Подробнее на ТАСС:
http://tass.ru/nauka/3337591

Созданный в Томске робот-«паук» может определять лица хозяев и некоторые предметы

ТОМСК, 6 июня. /ТАСС/. Молодые ученые из Томска создали прототип робота-«паука» для спасательных операций, который уже может распознать лица хозяев и некоторые предметы. Полноценный гексапод будет готов в начале 2017 года, также планируется разработать систему дистанционного управления для него, сообщил ТАСС один из разработчиков, Дмитрий Мяхор из Томского политехнического университета (ТПУ).
«Готов третий прототип нашего робота, финальную версию планируем реализовать уже через полгода — год. Совсем недавно мы начали разработку устройства, которое позволит оператору управлять Androмедой (название робота — прим. ТАСС) взмахом руки или изменением угла наклона ладони. Новый проект будет представлять собой что-то вроде «умных часов». А в качестве основных датчиков задействуем акселерометр и гироскоп», — сказал Мяхор, добавив, что в дальнейшем не исключается возможность коммерциализации разработок.

Подробнее на ТАСС:
http://tass.ru/nauka/3341844

Юные робототехники из Калининграда вошли в первую пятерку лучших в России

Юные робототехники из Калининграда вошли в первую пятерку лучших в России

Управление семисегментным индикатором через ТМ1637.

2016-04-06_23-31-157segs
В этой короткой статье я поясню как именно микросхема TM1637 управляет семисегментным индикатором. Управление происходит путем записи в регистры ТМ1637 однобайтовых слов. Каждый регистр отвечает за отображение одного знака, состоящего из семи сегментов ABCDEF и десятичной точки dp — итого 8 сегментов, как раз по числу битов в байте. Зажигает нужный нам сегмент установленный в «1» разряд байта. Сегменту А соответствует самый младший разряд, десятичной точке dp — самый старший.
2016-04-14_22-03-31

Таким образом, записывая байты в соответствующие регистры можно управлять каждым сегментом в отдельности. Запишем в регистр знакоместа байт 00000110 — он зажжет сегменты В и С, которые образуют знак «1», запишем 00000111 — включатся сегменты А, В и С, образуя цифру «7».  Если же отправить 01100011, то загорятся сегменты A, B, F и G, образуя маленький нолик, который можно использовать как значок градусов Цельсия при отображении температуры.Пример программы в прилагаемом файле, а на видео — пример работы этой программы.

Управление TM1637. AVR (Си)

2016-04-06_23-31-15TM1637Краткое содержание предыдущей серии: купил модули, очень красивые, вроде работают, а вроде и не очень. К Ардуине вроде как прикручиваются, но не совсем. То ли библиотека не очень подходящая, то ли модули недоработанные. Написал продавцу, так мол и так, или не работает ваше добро как надо или библиотеку пришлите нормальную. Писал, как надо, на английском, мозг аж вспотел, а продавец возьми да и ответь на русском, типа: «всё нормально, дядя, модули исправные, зуб даю, а вот библиотеки у нас нет…».
Ладно, думаю, разберемся… Взял и напрямую прозвонил выводы — пожалуй, продавец был не прав — похоже, что на индикаторе просто нет светодиодов в десятичных точках. Ну да и ладно — первый блин комом, если эти модули нужны для индикации целых чисел, то не пугайтесь — покупайте. А вот если нужно отображать, что-то с плавающей точкой, то увы — ничего не выйдет.Итак, как я уже говорил, библиотеки для микроконтроллеров AVR в среде AtmelStudio я не нашел, а потому был вынужден переписать ардуиновскую. Для этого надо было переписать с C++ на Си полиморфную функцию Display, которая занимается отображением как единичных разрядов, так и всех четырех, а также выводит на дисплей целые и дробные (ха-ха, три раза) числа.

Библиотеку переписывать в полном объеме я не стал, а реализовал лишь служебные функции, а также несколько публичных функций — Display(), осуществляющих вывод знаков на экран. Дисплей применялся мной для отображения текущей скорости вращения двигателей двухколесного шасси для робота. Особенностью этого шасси является то, что ровно оно не едет из-за того, что колеса имеют разные угловые скорости. Для того, чтобы заставить ездить её ровно, я решил управлять с помощью ШИМ (широтно-импульсной модуляции) скоростью вращения каждого колеса. Установленный на машинку дисплейчик в левых двух символах показывает скорость левого колеса, а правые два символа — скорость правого.

Общение с ТМ637 происходит по протоколу I2C. В библиотеке он реализован программно, тоже самое я сделал и для себя. Это нужно для того, чтобы цеплять дисплей на любые выводы контроллера, так как аппаратная поддержка данного протокола в микроконтроллерe Atmega8 поддерживается только на двух пинах — SDA и SCL. Использовать мой перевод библиотеки можно путем копирования из файла описанных ниже функций:

//СЛУЖЕБНЫЕ ФУНКЦИИ (секция Private)
void TM1637_writeByte(int8_t wr_data) // служебная функция для общения с дисплеем по протоколу I2C
void TM1637_start(void) // служебная функция для общения с дисплеем по протоколу I2C
void TM1637_stop(void) // служебная функция для общения с дисплеем по протоколу I2C
void TM1637_coding_all(uint8_t DispData[])// служебная функция — шифратор
int8_t TM1637_coding(uint8_t DispData) //служебная функция — шифратор

//ПОЛЕЗНЫЕ ФУНКЦИИ (секция Public)
void TM1637_display_all(uint8_t DispData[]) // полезная функция, пожалуй даже самая полезная. Выводит содержимое массива на индикаторы
void TM1637_display(uint8_t BitAddr,uint8_t DispData) // выводит один знак на указанное место на индикаторе
void TM1637_display_int_decimal(int16_t Decimal) //выводит целое десятичное число
void TM1637_display_float_decimal(double Decimal) // должна выводить десятичное число с плавающей точкой
void TM1637_clearDisplay(void) // чистит дисплей
void TM1637_init(uint8_t DispType,uint8_t Clk, uint8_t Data) // инициализация глобальных переменных: DispType — Тип дисплея как правило равна 1, Clk — номер пина SCL, Data — номер пина SDA. Порт по умолчанию — PORTC, но можете поставить тот, который Вам нужен, кое-что поменяв в коде
void TM1637_set(uint8_t brightness)// ставим яркость от 0 до 7

Собственно, скачать эти функции можно здесь. Там же заодно и пример работы с ними.
На видео как раз и показана работа программы.

«TM1637.h» — Библиотека для Arduino
Аналог библиотеки на Си для AVR
Управление TM1637. AVR (Си).— предыдущая статья на эту же тему

Управление TM1637. Arduino.

2016-04-06_23-31-15TM1637На просторах китайского интернет-ширпотреба можно найти кучу полезных в нашем деле вещей. Речь сегодня как пойдет именно о такой полезной вещи — модуле семисегментных индикаторов на четыре знакоместа на базе драйвера ТМ1637, позволяющем управлять всем модулем всего по двум проводам. Данная микросхема родилась в недрах китайской электронной промышленности и была предназначена для управления отображением времени и счетчика в видеоплеерах. Соответственно datasheet на неё придумывали китайцы и (вы не поверите!) на китайском языке.
Производитель то ли микросхемы, то ли модуля (я так и не разобрал) порадовал потенциальных пользователей своего продукта небольшим куском кода в даташите, а также скромной, но вполне годной библиотекой «TM1637.h», позволяющей выводить на экранчик как отдельные цифры, так и числа целиком (положительные, отрицательные, целые и с плавающей точкой). Если внимательно приглядеться ко второй картинке, можно увидеть, что индикатор имеет как десятичные точки в каждом знакоместе, так и сдвоенные точки между вторым и третьим разрядом, предназначенные для отображения времени. И по заявлению продавца, продавшего мне сие чудо, все сегменты индивидуально управляемые. Кстати, купил я эти модули примерно за 120 рублей за штучку, это что-то около 1,6 бакса. Модули были доступны в трёх цветах — зеленом, красном и желтом. Все цвета красивые и радующие глаз. Если интересно, то вот магазин . Радость от покупки была не очень долгой. После того, как я порадовался эстетичной пайке и красивому внешнему виду, я решил испытать их на деле.

Раскопал в закромах китайский аналог Arduino Nano 3.0, прикрутил библиотеку, прошил скетч из примеров, прилагавшихся к уже вышеупомянутой библиотеке и, о чудо!.. Ничего не заработало… Я прошил еще один — та же ерунда. Лишь третий скетч под названием NumberFlow, так уж и быть, заработал. Это выглядело как одолжение со стороны разработчика модуля или библиотеки, но тем не менее это позволило мне проверить работоспособность купленных модулей. Так что если перед Вами стоит задача проверить модули на исправность, то
— смело качайте библиотеку и прикручивайте её к Arduino IDE,
— подсоединяйте к Вашей Arduino модуль ТМ1637, по умолчанию тактовый вход (CLK) цепляется на 3-й цифровой пин, а вход данных (DIO) на 2-й цифровой пин;
— берите пример NumberFlow и прошивайте им свою Arduino.
— радуйтесь тому, как шестнадцатеричные цифры бегут по индикатору.

В целом библиотека для Arduino позволяет:
— выводить шестнадцатеричный знак в любое знакоместо — функция Display(x,y) где x — номер разряда от 0 до 3, y — знак 0..9, A,b,C,d,E,F
— выводить сразу группу из 4-х шестнадцатеричных знаков- функция Display(x[]) где x[] — массив из 4 элементов, по числу знаков.
— выводить десятичное целое число — функция Display(x) где x — целое от -999 до 9999
— выводить десятичное число с плавающей точкой — функция Display(x) где x — число с плавающей точкой от -999 до 9999
— очищать дисплей — функция clearDisplay(x) — дело в том, что информация на индикаторе сохраняется до тех пока не запишешь новую
— устанавливать яркость индикатора функция set(x) где x — яркость от 0 до 7, по умолчанию яркость равна 2.

Пример простейшего кода:

#include <TM1637.h>

#define CLK 3 //определим константы как номера пинов на которые будут соединены с одноименными пинами на модуле
#define DIO 2 //это нужно будет позже

TM1637 tm1637(CLK,DIO);//создаем экземпляр объекта типа «TM1637», с которым будем далее работать и задаем пины.
// можно было и не определять константы, а написать проще — вместо трёх предыдущих строк одну:
// TM1637 tm1637(3,2);, но так как мы сделали наглядней

void setup()
{
tm1637.init();// инициализация библиотеки «TM1637.h»
tm1637.set(BRIGHT_TYPICAL);//установка яркости указанная константа равна 2, значение по умолчанию
}void loop()
{
tm1637.display(1234);//выводим на индикатор целое «1234»
delay(3000);//ждём 3 секунды
tm1637.display(0,9);//выводим на первое знакоместо индикатора (с индексом 0) знак «9», таким образом у нас на экранчике — «9234»
delay(3000);}//опять ждём 3 секунды, чтобы заценить результат

Ладно, хорошо. На Arduino вроде работает. Но меня интересовало подключение к «голому» микроконтроллеру AVR. Попытка раскопать аналогичную библиотеку на Си для Atmel Studio вообще ни к чему не привела. Мало того, кое-как я умудрился нарыть перевод datasheet’а на английский язык. Ага, на английский с небольшим кантонским диалектом. Но тем не менее, кое-что разобрать было можно и я решил с помощью datasheet’а переписать ардуиновскую библиотеку на Си для AVR.

Но про это в другой статье, а пока для ленивых все ссылки из текста:

«TM1637.h» — Библиотека для Arduino
RoboDyne — магазин
Управление TM1637. AVR (Си). — следующая статья на эту же тему

P.S. Пока писалась статья, выяснилось, что я никак не могу заставить отображать этот модуль десятичные точки. Вот это поворот! Пишу это немного забегая вперед, так как я уже полностью перекопал библиотеку и подрихтовал её в соответствии с даташитом. Но даже записывая в микросхему напрямую, в обход библиотечных функций, команды, прямо указывающие отобразить десятичные точки, я не получал нужного мне результата. Так, что вывод простой — полноценной функциональности от связки модуля с приложенной библиотекой вы не добьетесь. Будем копать и стараться исправить.