Замени мозги в Lego Mindstorms. Полный аналог микроконтроллера EV3

Замени мозги в Lego Mindstorms. Полный аналог микроконтроллера EV3

27.01.2023

Если у вас возникнут какие-то вопросы, какие бы вы хотели узнать о новом конструкторе (как что-то конкретное работает, провести эксперимент с датчиками или моторами) - пишите нам - мы попробуем опробовать ваши предложения. Таким образом вы сможете узнать о EV3 гораздо больше еще до начала его продаж.

Сейчас же начнется все с обзора программного обеспечения EV3 блока (EV3 firmware).

Одна из особенностей нового блока - его долгое включение и выключение. По времени процесс соизмерим с включением сотового телефона или домашнего маршрутизатора, т.е. секунд 20-30. После включения, появляется следующее меню:


Как видно, по сравнению с NXT блоком, многое изменилось: улучшилось качество шрифтов, более прорисованные графические элементы, оконный интерфейс. В первую очередь, это из-за того, что размер экрана теперь увеличился - он стал 178 на 128 точек, вместо 100 на 64, как у NXT блока. По наличию оконного интерфейса с неотъемлемыми для него кнопками и полосами прокрутки можно предположить, что такие устройства, как внешняя сенсорная панель теперь даже будет иметь больший смысл.


Из первого окна есть возможность вызывать загруженные на блок программы, так и программы созданные прямо на блоке. Т.е. для того, чтобы запустить программу теперь нужно выполнять меньше нажатий, чем было на NXT блоке.

Перемещение по загруженным программам, а также ко второму и последующим экранам (пунктам меню) осуществляется посредством кнопок управления, коих теперь 4.


Второй экран - позволяет перемещаться по объектам файловой системы на блоке. Файловая система теперь поддерживает традиционную иерархию: файлы и каталоги.


Третий экран содержит подменю - приложения, позволяющие выполнять с блоком разные действия:


В текущей версии ПО блока таких приложений четыре:

  • Просмотр датчиков
  • Управление моторами
  • Удаленное управление
  • Программирование на блоке
Четвертый экран - конфигурационный. Помимо базовых настроек: уровня звука, таймера бездействия, включения BlueTooth и WiFi, позволяет узнать информацию о ПО блока:



Выбор какого-то конкретного пункта меню/приложения происходит средней кнопкой на клавиатуре. А чтобы выйти из любого пункта меню или приложения нужно нажать кнопку "Выход", которая теперь находится отдельно от основных кнопок - с левой стороны под экраном.

Теперь же следует вернуться обратно на третий экран и начать знакомиться с приложениями. Итак, приложение "Просмотр датчиков" (Port View).

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

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

Датчик касания:


Гироскопический датчик:


Датчик цвета в режиме замера отраженного света:


Ультразвуковой датчик расстояния:

Здесь, кстати, видно, что датчик теперь заявляет, что может измерять расстояние с точностью до миллиметров, а минимальное измеряемое расстояние теперь от 3 см.

Информация с енкодера левого мотора.


Следующее приложение - управление моторами. По сути позволяет кнопками вращать двигатели. Центральной кнопкой нужно выбрать, какие двигатели вращать. А потом парами кнопок вверх-вниз или влево-вправо вращать конкретные моторы.


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


Конечно же, самым интересным приложением является - программирование на блоке. Оно было значительно переработано: программа теперь может содержать до 16 программных элементов (блоков), и созданные программы можно сохранять и, естественно, открывать заново для изменения.


Когда открывается приложение написания программы - отображается пустой цикл выполнения (будет выполняться только одна итерация) и предложение вставить первый блок. Вставить блок можно кнопкой "Вверх".


В появившемся окне выбора блока доступно 17 блоков (6 блоков действия и 11 блоков ожидания) плюс действие удаления текущего блока.



Порядок выбора и следования блоков определяется программистом. Он не подразумевает, что за каждым блоком действия должен быть блок ожидания, как это было раньше на NXT блоке.

Выбранный блок в программе выглядит следующим образом:


Поведение блока можно уточнить, если нажать центральную кнопку. У данного блока, например, можно поменять угло направление поворота робота или же вообще остановить моторы (например, после предыдущего блока ожидания).


Переместив "курсор" влево или вправо можно вставить еще один блок:


Например, блок ожидания события на датчике расстояния:


И изменить его поведение (событие наступит, если расстояние стало больше 60 см.):


Блоки можно вставлять между уже существующими блоками или даже в начале программы.


Вот еще примеры блоков ожидания:

Блок ожидания по времени (можно задавать сколько именно ждать):


Или блок ожидания события от гироскопического датчика (можно задать угол поворота датчика).


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

Если программа должна выполняться несколько раз, то количество итераций управляющего цикла может быть изменено:


Запуск программы осуществляется путем выбора самого первого блока:


При запуске программы на экране будет отображаться следующее:


Программу можно сохранить, причем можно задать имя файла, для ее последующего поиска:



Буквы выбираются с помощью клавиатуры (привет, тачпад!)

Если попытаться закрыть несохраненную программу, будет выдаваться следующее не очень понятное сообщение и выдаваться противный звук:


В дальнейшем созданную программу можно открыть и внести в нее изменения.


Естественно, открываются только программы, созданные на блоке.

В заключение, хочется показать, как выглядит выключение блока:


Подключение USB

LEGO Mindstorms EV3 может подключаться к ПК или другому EV3 посредством USB-соединения. Скорость соединения и стабильность в данном случае лучше, чем при любом другом способе, включая Bluetooth.

LEGO Mindstorms EV3 имеет два порта USB.

Связь между LEGO EV3 и другими блоками LEGO EV3 в режиме подключения шлейфом.

Режим подключения шлейфом служит для соединения двух и более блоков LEGO EV3.

Данный режим:

  • предназначен для подключения более одного LEGO Mindstorms EV3;
  • служит для подключения большего количества датчиков, моторов и других устройств;
  • позволяет осуществить связь между несколькими LEGO Mindstorms EV3 (до 4), что даёт нам до 16 внешних портов и такое же количество внутренних портов;
  • даёт возможность управлять всей цепочкой с главной LEGO Mindstorms EV3;
  • не может функционировать при активном подключении Wi-Fi или Bluetooth.

Для включения режима подключения шлейфом перейдем в окно настройки проекта и поставим галочку.

Когда выбран этот режим, то для любого мотора мы можем выбрать блок EV3, который будет задействован, и необходимые датчики.

В таблице приведены варианты применения блоков EV3:

Действие

Средний мотор

Большой мотор

Рулевое управление

Независимое управление

Гироскопический

Инфракрасный

Ультразвуковой

Вращения мотора

Температуры

Счетчик энергии

Звуковой

Подключение через Bluetooth

Bluetooth позволяет LEGO Mindstorms EV3 подключиться к ПК, другому LEGO Mindstorms EV3, смартфонам и другим Bluetooth-устройствам. Дальность связи по каналу Bluetooth – до 25 м.

К одному LEGO Mindstorms EV3 можно подключить до 7 блоков. Главный блок EV3 позволяет отправлять и получать сообщения для каждого подчинённого EV3. Подчинённые EV3 могут только отправлять сообщения на главный блок EV3, но не между собой.

Последовательность соединения EV3 через Bluetooth

Для того чтобы соединить два и более блоков EV3 между собой по Bluetooth, нужно выполнить следующие действия:

1. Открыть вкладку Настройка .

2. Выберите Bluetooth и нажмите центральную кнопку.

3. Ставим Флажок видимости Bluetooth.

4. Проверьте, что знак Bluetooth ("<") виден на верхней левой стороне.

5. Сделайте упомянутую выше процедуру для нужного количества блоков EV3.

6. Войдите во кладку Подключение (Connection):

7. Нажмите на кнопку Поиск (Search):

8. Выберите EV3, которое вы хотите подключить (или к которому вы хотите подключиться) и нажмите центральную кнопку.

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

Если сделать всё правильно, то в верхнем левом углу появится значок "<>", аналогично выполняется подключение других блоков EV3, если их больше двух.

Если вы выключили LEGO EV3, то связь пропадет и вам все пункты необходимо будет повторить.

Важно: для каждого блока должна быть написана своя программа.

Пример программы:

Первый блок: при нажатии датчика касания первый блок EV3 передает текст на второй блок с задержкой 3 секунды (главный блок).

Пример программы для 2 блока:

Второй блок ожидает принятия текста с первого блока, и как только он его получил, выведет на экран слово (в нашем примере это слово "Hello") в течение 10 секунд (подчинённый блок).

Подключение через Wi-Fi

Более дальняя связь возможна при подключении Wi-Fi Dongle к порту USB на EV3.

Чтобы использовать Wi-Fi, нужно установить на блок EV3 специальный модуль, используя USB-разъем (Wi-Fi адаптер (Netgear N150 Wireless Adapter (WNA1100), а также можно подключить Wi-Fi Dongle.

Традиционно роботы, построенные на платформе Lego Mindstorms EV3 , программируются с использованием графической среды LabVIEW. В этом случае программы запускаются на контроллере EV3 и робот работает автономно. Здесь я расскажу про альтернативный способ управления роботом - использование платформы.NET, запущенной на компьютере.

Но прежде чем мы перейдем непосредственно к программированию, давайте рассмотрим случаи, когда это может быть полезно:

  • Требуется удаленное управление роботом с ноутбука (например, по нажатию кнопок)
  • Требуется собирать данные с контроллера EV3 и обрабатывать их на внешней системе (например, для IoT-систем)
  • Любые другие ситуации, когда хочется написать алгоритм управления на.NET и запускать его с компьютера, подключенного к контроллеру EV3

LEGO MINDSTORMS EV3 API for .NET

Управление контроллером EV3 из внешней системы осуществляется путем отправки команд в последовательный порт. Сам формат команд описан в Communication Developer Kit .

Но реализация этого протокола вручную - дело скучное. Поэтому можно воспользоваться готовой.NET-оберткой , которую заботливо написал Brian Peek. Исходные коды этой библиотеки размещены на Github , а готовый к использованию пакет можно найти в Nuget .

Подключение к контроллеру EV3

Для связи с контроллером EV3 используется класс Brick . При создании этого объекта в конструктор требуется передать реализацию интерфейса ICommunication - объект, описывающий способ подключения к контроллеру EV3. Доступны реализации UsbCommunication , BluetoothCommunication и NetworkCommunication (подключение через WiFi).

Наиболее популярный способ подключения - через Bluetooth. Рассмотрим поподробнее этот способ подключения.

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

После того, как контроллер подключен, идём в настройки Bluetooth и выбираем вкладку COM-порты. Находим наш контроллер, нам нужен исходящий порт. Его и будем указывать при создании объекта BluetoothCommunication .

Код для подключения к контроллеру будет выглядеть так:

Public async Task Connect(ICommunication communication) { var communication = new BluetoothCommunication("COM9"); var brick = _brick = new Brick(communication); await _brick.ConnectAsync(); }

Опционально можно указать таймаут подключения к контроллеру:

Await _brick.ConnectAsync(TimeSpan.FromSeconds(5));

Подключение к блоку через USB или WiFi осуществляется аналогично, за тем исключением, что используются объекты UsbCommunication и NetworkCommunication .

Все дальнейшие действия, выполняемые с контроллером, осуществляются через объект Brick .

Покрутим моторами

Для выполнения команд на контроллере EV3 обратимся к свойству DirectCommand объекта Brick . Для начала попробуем запустить моторы.

Предположим, что наш мотор подключен к порту A контроллера, тогда запуск этого мотора на мощности 50% будет выглядеть так:

Await _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50);

Есть и другие методы для управления мотором. Например, можно повернуть мотор на заданный угол, используя методы StepMotorAtPowerAsync() и StepMotorAtSpeedAsync() . Всего доступно несколько методов, которые являются вариациями на режимы включения моторов - по времени, скорости, мощности и т.д.

Принудительная остановка осуществляется методом StopMotorAsync() :

Await _brick.DirectCommand.StopMotorAsync(OutputPort.A, true);

Второй параметр указывает на использование тормоза. Если его установить в false , то мотор будет останавливаться «накатом».

Чтение значений с датчиков

Контроллер EV3 имеет четыре порта для подключения сенсоров. Дополнительно к этому, моторы также имеют встроеные энкодеры, что позволяет использовать их как сенсоры. В итоге мы имеем 8 портов, с которых можно считывать значения.

Доступ к портам для считывания значений можно получить через свойство Ports объекта Brick . Ports - это коллекция портов, доступных на контроллере. Поэтому для работы с конкретным портом нужно его выбрать. InputPort.One ... InputPort.Four - это порты для датчиков, а InputPort.A ... InputPort.D - это энкодеры моторов.

Var port1 = _brick.Ports;

Датчики в EV3 могут работать в разных режимах. Например, датчик цвета EV3 можно использовать для измерения внешнего освещения, измерения отраженного света или для определения цвета. Поэтому, чтобы «сообщить» сенсору о том, как именно мы хотим его использовать, нужно задать его режим:

Brick.Ports.SetMode(ColorMode.Reflective);

Теперь, когда датчик подключен и режим его работы задан, можно считать из него данные. Получить можно «сырые» данные, обработанное значение и значение в процентах.

Float si = _brick.Ports.SIValue; int raw = _brick.Ports.RawValue; byte percent = _brick.Ports.PercentValue;

Свойство SIValue возвращает обработанные данные. Здесь все зависит от того, какой именно датчик используется и в каком режиме. Например, при измерении отраженного света мы получим значения от 0 до 100 в зависимости от интенсивности отраженного света (черный/белый).

Свойство RawValue возвращает «сырое» значение, полученное с АЦП. Иногда удобнее использовать именно его для последующей обработки и использования. Кстати, в среде разработки EV3 тоже есть возможность получения «сырых» значений - для этого нужно воспользоваться блоком из синей панели.

Если используемый датчик предполагает получение значений в процентах, то можно также воспользоваться свойством PercentValue .

Выполнение команд «пачкой»

Предположим, в нашем распоряжении есть робот-тележка с двумя колесами и мы хотим развернуть его на месте. В этом случае два колеса должны вращаться в противоположном направлении. Если мы воспользуемся DirectCommand и последовательно отправим две команды контроллеру, между их выполнением может пройти некоторое время:

Await _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50); await _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B, -50);

В этом примере мы отправляем команду для вращения мотора A на скорости 50, после успешного окончания отправки этой команды, повторяем то же самое с мотором, подключенным к порту B. Проблема в том, что отправка команд происходит не моментально, поэтому моторы могут начать крутиться в разное время - пока передается команда для порта B, мотора A уже начнет крутиться.

Если для нас критически важно заставить крутится моторы одновременно, можно отправлять команды контроллеру «пачкой». В этом случае следует воспользоваться свойством BatchCommand вместо DirectCommand:

Brick.BatchCommand.TurnMotorAtPower(OutputPort.A, 50); _brick.BatchCommand.TurnMotorAtPower(OutputPort.B, -50); await _brick.BatchCommand.SendCommandAsync();

Теперь подготавливается сразу две команды, после чего они отправляются на контроллер одним пакетом. Контроллер, получив эти команды, начнет вращение моторов одновременно.

Что ещё можно сделать

Кроме вращения моторов и считывания значений сенсоров, можно выполнять ещё ряд действий на контроллере EV3. Не буду подробно останаливаться на кадом из них, перечислю только список того, что можно сделать:

  • CleanUIAsync() , DrawTextAsync() , DrawLineAsync() и др. - манипуляция встроенным экраном контроллера EV3
  • PlayToneAsync() и PlaySoundAsync() - использование встроенного динамика для воспроизведения звуков
  • WriteFileAsync() , CopyFileAsync() , DeleteFileAsync() (из SystemCommand) - работа с файлами

Заключение

Использование.NET для управления роботами Mindstorms EV3 хорошо демонстрирует как технологии «из разных миров» могут работать совместно. В качестве результата исследования EV3 API для.NET было создано небольшое приложение, которое позволяет управлять роботом EV3 с компьютера. К сожалению, аналогичные приложения существуют для NXT, а EV3 они обошли стороной. В то же время они полезны на сорвнованиях управляемых роботов, например в футболе роботов.

Приложение можно загрузить и установить по этой ссылке:

Выберите режим экрана

Выбор режима
Текстовое поле блока
Вводы
Кнопка предварительного просмотра

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

Вы можете щелкнуть на кнопке «Предварительный просмотр», чтобы просмотреть то, что отобразит блок «Экран» на экране EV3. Вы можете оставить просмотр открытым во время выбора входящих значений для блока.

Экранные координаты

Многие из режимов блока «Экран» используют координаты X и Y для определения месторасположения элемента. Координаты определяют положение пикселей на экране модуля EV3. Положение (0, 0) находится в верхнем левом углу экрана, как показано на рисунке ниже.

Размеры экрана: 178 пикселей в ширину и 128 пикселей в высоту. Диапазон значений X координат: от 0 на экране слева до 177 справа. Диапазон значений Y координат: от 0 сверху до 127 снизу.

Советы и подсказки

Вы можете использовать кнопку «Предварительный просмотр» в верхнем левом углу блока «Экран» для помощи в поиске правильных экранных координат.

Текст – Пиксели

Режим «Текст – Пиксели» позволяет отобразить текст в любом месте экрана модуля EV3.

Окно сброса настроек

Режим «Окно сброса настроек» возвращает экран модуля EV3 к стандартному информационному экрану, показываемому во время работы программы. Этот экран показывает имя программы и другую информацию обратной связи. Когда вы запускаете программу на модуле EV3, этот экран отображается до выполнения первого блока программы «Экран».

Обеспечение видимости отображаемых элементов

После завершения программы EV3 экран модуля EV3 очищается и возвращается к экрану меню модуля EV3. Любой текст или графика, отображаемые программой, будут стерты. Если, например, ваша программа имеет один блок «Экран» и ничего более, то экран будет так быстро очищен сразу после завершения программы, что вы не увидите результаты блока «Экран».

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

Отображение нескольких элементов

Если вы хотите отобразить на экране одновременно несколько текстовых или графических элементов, важно не очищать экран модуля EV3 между элементами. Каждый режим блока «Экран» имеет ввод «Очистить экран» . Если «Очистить экран» – истина, то весь экран будет очищен перед отображением элемента. Это значит, что для отображения нескольких элементов, вы должны настроить «Очистить экран» на «Ложь» для каждого блока «Экран», кроме первого.

Отображение чисел

Для отображения числового значения в вашей программе подсоедините шину данных к вводу «Текст» блока «Отображение текста». Шина числовых данных будет автоматически конвертироваться в текст с помощью преобразования типа шины данных (более подробную информацию см. в разделе

Описание презентации по отдельным слайдам:

1 слайд

Описание слайда:

2 слайд

Описание слайда:

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

3 слайд

Описание слайда:

Интерфейс: Меню EV3 имеет меню, которое состоит из 4-ех частей: Недавние программы (Recent Programs) Менеджер файлов (File Navigation) Программы Блока Управления (Brick Applications) Настройки Блока Управления (Brick Settings)

4 слайд

Описание слайда:

Недавние программы Запускайте недавно загруженные с настольного ПК программы. Это окно будет оставаться пустым до тех пор, пока вы не начнете загружать и запускать программы. В этом окне будут отображаться программы, которые вы запускали недавно. Программа вверху списка, которая выбирается по умолчанию, - это программа, запускавшаяся последней.

5 слайд

Описание слайда:

Менеджер файлов Доступ и управление всеми файлами, хранящимися в памяти микрокомпьютера, а также на карте памяти. Из этого окна вы будете осуществлять доступ и управление всеми файлами в вашем модуле EV3, включая файлы, хранящиеся на SD-карте. Файлы организованы по папкам проектов, которые помимо собственно программных файлов также содержат звуки и изображения, используемые в каждом проекте. Файлы можно перемещать или удалять с помощью навигатора по файлам. Программы, созданные с использованием среды программирования модуля и приложений регистрации данных модуля, хранятся отдельно в папках BrkProg_SAVE и BrkDL_SAVE.

6 слайд

Описание слайда:

Приложения Блока Управления EV3 имеет 4 предустановленных приложений: А. Представление порта. Б. Управление моторами. В. ИК управление. Г. Среда программирования модуля.

7 слайд

Описание слайда:

А. Представление порта В первом окне приложения «Представление порта» вы можете быстро просмотреть, к каким портам подсоединены датчики или моторы. С помощью кнопок управления модулем EV3 перейдите к одному из занятых портов, и вы увидите текущие показания, полученные с датчика или мотора. Установите несколько датчиков и моторов и поэкспериментируйте с разными настройками. Для того чтобы посмотреть или изменить текущие настройки для установленных моторов и датчиков, нажмите центральную кнопку. Для возврата к основному окну приложений модуля нажмите кнопку «Назад».

8 слайд

Описание слайда:

Б. Управление мотором Управляйте прямым или обратным движением любого мотора, подключенного к одному из четырех портов вывода. Существует два различных режима. В одном режиме вы сможете управлять моторами, подключенными к порту А (с помощью кнопок «Вверх» и «Вниз») и к порту D (с помощью кнопок «Влево» и «Вправо»). В другом режиме вы управляете моторами, подключенными к порту B (с помощью кнопок «Вверх» и «Вниз») и к порту С (с помощью кнопок «Влево» и «Вправо»). Переключение между этими двумя режимами осуществляется с помощью центральной кнопки. Для возврата к основному окну приложений модуля нажмите кнопку «Назад».

9 слайд

Описание слайда:

ИК-управление Управляйте прямым или обратным движением любого мотора, подключенного к одному из четырех портов вывода, используя удаленный инфракрасный маяк в качестве дистанционного управления и инфракрасный датчик в качестве приемника (инфракрасный датчик должен быть подключен к порту 4 в модуле EV3). Существует два различных режима. В одном режиме вы будете использовать каналы 1 и 2 на удаленном инфракрасном маяке. На канале 1 вы сможете управлять моторами, подключенными к порту В (используя кнопки 1 и 2 на удаленном инфракрасном маяке) и к порту С (используя кнопки 3 и 4 на удаленном инфракрасном маяке). На канале 2 вы сможете управлять моторами, подключенными к порту А (используя кнопки 1 и 2) и к порту D (используя кнопки 3 и 4). В другом режиме вы можете управлять моторами точно так же, вместо этого используя каналы 3 и 4 на удаленном инфракрасном маяке. Переключение между этими двумя режимами осуществляется с помощью центральной кнопки. Для возврата к основному окну приложений модуля нажмите кнопку «Назад».

10 слайд

Описание слайда:

Среда программирования модуля Модуль EV3 поставляется с установленным на нем программным. Приложением аналогично программному обеспечению, установленному на вашем компьютере. Данные инструкции содержат основную информацию, которая понадобиться вам для начала работы.

11 слайд

Описание слайда:

Настройки Модуля EV3 Это окно позволяет просматривать и корректировать различные общие настройки в модуле EV3.

12 слайд

Описание слайда:

Настройка громкости Вы можете увеличивать и уменьшать Громкость (Volume) во вкладке Настройки (Settings) в EV3.

13 слайд

© 2024 soundpad-voice.ru - Компьютер. Ноутбуки. ОС. Программы