Здравей, Хабр! Ние вече за платформата LEGO MINDSTORMS Education EV3. Основните цели на тази платформа са обучението с практични примери, развитието на уменията за STEAM и формирането на инженерно мислене. Чрез нея могат да се провеждат лабораторни упражнения по механика и динамика. Лабораторните стендове от LEGO тухли и инструментите за запис и обработка на данни правят експериментите още по-интересни и визуални, помагайки на децата да разберат по-добре физиката. Например, учениците могат да събират данни за температурата на топене и с помощта на приложение да ги систематизират и представят под формата на графика. Но това е само началото: днес ще ви разкажем как да допълните този комплект с програмна среда MicroPython и да я използвате за обучение по роботика.

Учим програмиране с EV3
Съвременните ученици искат да видят цветен резултат. Да, скучно им е, ако програмата извежда числа в консолата, и те искат да разглеждат цветни графики, диаграми и да създават истински роботи, които се движат и изпълняват команди. Обикновен код също изглежда на децата твърде сложен, затова обучението е по-добре да започне с нещо по-лесно.
Основната среда за програмиране EV3 е изградена на базата на графичния език LabVIEW и позволява задаването на алгоритми за робота визуално: командите са представени под формата на блокове, които могат да бъдат плъзгани и свързвани.

Този метод работи добре, когато трябва да се покаже как се изграждат алгоритми, но не е подходящ за програми с голям брой блокове. При усложняване на сценария е необходимо да се премине на програмиране с помощта на код, но децата трудно правят тази стъпка.
Тук има няколко трика, един от които е да се покаже, че кодът изпълнява същите задачи като блоковете. В средата EV3 това може да се постигне благодарение на интеграцията с MicroPython: децата създават една и съща програма в основната среда за програмиране с блокове и на езика Python в Visual Studio Code на Microsoft. Те виждат, че двата метода работят по един и същ начин, но с код е по-удобно да се решават сложни задачи.
Преминаваме към MicroPython
Средата EV3 е изградена на базата на ARM9 процесор и разработчиците специално оставиха архитектурата отворена. Това решение позволи инсталирането на алтернативни фърмуери, един от които е образът за работа с MicroPython. Той позволява използването на Python за програмиране на EV3, което прави работата с комплекта още по-близка до задачите от реалния живот.
За да започнете работа, трябва да изтеглите на всяка microSD карта, да я поставите в микрокомпютъра EV3 и да го включите. След това трябва да инсталирате за Visual Studio. И можете да започнете работа.
Програмиране на първия робот с MycroPython

На нашия има няколко урока за овладяване на основните понятия в робототехниката. Моделите на EV3 запознават децата с основите, които се използват в самоуправляващи се автомобили, заводски роботи-събирачи, CNC машини.
Ще вземем за пример чертежна машина, която може да бъде обучена да рисува шарки и геометрични фигури. Този случай е опростена версия на възрастни роботи-сварчици или фрезери и показва как може да се използва EV3 заедно с MicroPython за обучение на учениците. А чертежната машина може да размечи дупки в печатна платка за татко, но това е друг нивото, което изисква математически изчисления.
За работа ни трябват:
- основен комплект LEGO MINDSTORMS Education EV3;
- голям лист квадратна хартия;
- цветни маркери.
Сглобяването на самия робот е в , а ние ще разгледаме пример за програмиране.
Първо инициализираме библиотеката на модулите EV3:
#!/usr/bin/env pybricks-micropython
from pybricks import ev3brick as brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor, GyroSensor)
from pybricks.parameters import Port, Stop, Direction, Color, ImageFile
from pybricks.tools import wait
Настройваме платформата, която върти ръката, като мотор в порт B. Задаваме предавателното отношение на двустепенната зъбна предавка с 20-12-28 зъби съответно.
turntable_motor = Motor(Port.B, Direction.CLOCKWISE, [20, 12, 28])
Настройваме механизма за повдигане на ръката като мотор в порт C:
seesaw_motor = Motor(Port.C)
Настройваме гироскоп, измерващ ъгъла на наклона на ръката в порт 2:
gyro_sensor = GyroSensor(Port.S2)
Настройваме цветния сензор в порт 3. Сензорът се използва за определяне на бялата хартия под чертежната машина:
color_sensor = ColorSensor(Port.S3)
Настройваме сензора за допир в порт 4. Роботът започва да рисува, когато сензорът е натиснат:
touch_sensor = TouchSensor(Port.S4)
Определяме функциите, които повдигат и свалят ръката:
def pen_holder_raise():
seesaw_motor.run_target(50, 25, Stop.HOLD)
wait(1000)
def pen_holder_lower():
seesaw_motor.run_target(50, 0, Stop.HOLD)
wait(1000)
Определяме функция за завъртане на дръжката до зададен ъгъл или до определен ъгъл:
def pen_holder_turn_to(target_angle):
if target_angle > gyro_sensor.angle():
Ако целевият ъгъл е по-голям от текущия ъгъл на гироскопичния сензор, продължаваме движението по часовниковата стрелка с положителна скорост:
turntable_motor.run(70)
while gyro_sensor.angle() < target_angle:
pass
elif target_angle < gyro_sensor.angle():
Ако целевият ъгъл е по-малък от текущия ъгъл на гироскопичния сензор, движе се обратно на часовниковата стрелка:
turntable_motor.run(-70)
while gyro_sensor.angle() > target_angle:
pass
Спираме въртящата се платформа, когато целевият ъгъл бъде достигнат:
turntable_motor.stop(Stop.BRAKE)
Установяваме началното положение на дръжката в горно положение:
pen_holder_raise()
Сега идва основната част на програмата — безкраен цикъл. Първо EV3 очаква, когато сензорът за цвят открие бяла хартия или синя стартираща клетка, и сензорът за допир бъде натиснат. След това рисува шаблон, връща се в начално положение и всичко се повтаря.
Когато устройството не е готово, светодиодите на контролера светят червено, а на LCD екрана се показва изображение на 'палеца надолу':
while True:
brick.light(Color.RED)
brick.display.image(ImageFile.THUMBS_DOWN)
Изчакваме сензорът за цвят да отчете син или бял цвят, настройваме цвета на светодиодите на зелено, показваме на LCD екрана изображение на 'палеца нагоре' и уведомяваме, че устройството е готово за работа:
while color_sensor.color() not in (Color.BLUE, Color.WHITE):
wait(10)
brick.light(Color.GREEN)
brick.display.image(ImageFile.THUMBS_UP)
Изчакваме натискане на сензора за допир, задаваме на гироскопичния сензор стойност на ъгъл 0 и започваме рисуването:
while not touch_sensor.pressed():
wait(10)
gyro_sensor.reset_angle(0)
pen_holder_turn_to(15)
pen_holder_lower()
pen_holder_turn_to(30)
pen_holder_raise()
pen_holder_turn_to(45)
pen_holder_lower()
pen_holder_turn_to(60)
Вдигаме дръжката и я връщаме в начален статус:
pen_holder_raise()
pen_holder_turn_to(0)
Ето каква лесна програма сме написали. Сега я стартираме и наблюдаваме как роботът-дизайнер работи.
Каква полза дават такива примери

EV3 е инструмент за професионално ориентиране в рамките на STEM професиите и входна точка към инженерните специалности. Тъй като на него могат да се решават практически задачи, децата получават опит в техническите разработки и изграждането на индустриални роботи, учат се да моделират реални ситуации, да разбират програми и да анализират алгоритми, усвояват основни конструкции на програмирането.
Поддръжката на MicroPython прави платформата EV3 подходяща за обучение в старшите класове. Учениците могат да опитат да се поставят в ролята на програмисти на един от най-популярните съвременни езици, да се запознаят с професиите, свързани с програмирането и инженерното проектиране. Комплектите EV3 показват, че писането на код не е страшно, подготвят за сериозни инженерни задачи и помагат да се направи първата стъпка към усвояване на техническите специалности. А за тези, които работят в училище и са свързани с образованието, ние сме подготвили и учебни материали. В тях е подробно описано какви умения се формират при изпълнение на определени задачи и как придобитите умения съответстват на стандартите за обучение.
Източник: habr.com
