воскресенье, 29 октября 2017 г.

Программируем mBot в Arduino IDE. Управление DC-моторами.


Вступление.

Мне попал в руки на тестирование робототехнический набор Makeblock mBot Educational Robot Kit, благодарю за это Алексея Филимонова. Робот уже был собран, поэтому мне очень интересно было изучить, как он программируется, чтобы прикинуть как с ним можно выстроить учебные занятия по образовательной робототехнике для школьников. 


Прежде всего рассмотрим его характеристики:
Среда программирования Arduino IDE, mBlock (Mac OS, Windows, Linux*), mBlockly for mBot (iPad)
Устройства ввод Датчик света (Light sensor), кнопка (button), инфракрасный приемник (infrared receiver), ультразвоковой дальномер (ultrasonic sensor), датчик линии (line follower)
Устройства вывода Пьезопищалка (buzzer), RGB-светодиоды (RGB LED), инфракрасный передатчик (infrared transmitter), 2 порта для моторов (two motor ports)
Микроконтроллер ATmega328, Arduino UNO-совместимый
Питание 4 AA батарейки по 1,5 Вольт
Беспроводная связь Bluetooth
Размеры 17 х 13 х 9 см
Масса 500 грамм

Поскольку дома работаю на Ubuntu Linux, то первым делом начал установку mBlock с сайта http://www.mblock.cc/download/ (установочный deb-пакет). Установить среду под Linux получилось, но вот загрузить в робота простую тестовую программу сходу не удалось.



Ну, хорошо, попробуем программировать робота в Arduino IDE. Обзор информации и готовых проектов на ресурсах, посвященных Makeblock, привел к пониманию, что для упрощения программирования требуется специальная библиотека, и такая библиотека на просторах интернета была найдена. Приятно, что Makeblock придерживается философии OpenSource!

Скачал библиотеку по ссылке https://github.com/Makeblock-official/Makeblock-Libraries

Начнем знакомиться с примерами, прилагаемыми к библиотеке. Первым делом разберемся с управлением DC-моторами.

Пример 1. Работа с моторами.

Скорость вращения моторами на mBot варьируется в диапазоне от -255 до 255, причем от знака «+» или «-» числового значения скорости зависит направление вращения двигателем.

Если «+» - вращение DC-мотора по часовой стрелке, если смотреть на колесо, прикрепленное к валу двигателя. А если «-», то вращение против часовой стрелки. Учтем это при написании скетча для mBota: двигатели развернуты друг относительно друга на 180 градусов, поэтому, если нам нужно, чтобы робот двигался вперед, то для левого мотора нужно подать отрицательное значение скорости, а для правого — положительное.
Моторы в комплекте mBot без энкодеров, поэтому программировать маневры можно по таймингу (по времени).
Попробуем написать самый простой скетч, исполняя который робот mBot двигался бы по квадрату. Для этого в процедуре loop() нужно, чтобы робот двигался некоторое время вперед, затем поворачивался бы на 90 градусов. Эти два действия робот и будет повторять в цикле loop(). Ниже приведен данный скетч:



/*
Робот mBot движется по квадрату
(c) Sergey Kosachenko
*/
//подключаем библиотеку Makeblock
#include "MeOrion.h"
//определяем двигатели
MeDCMotor motorLeft(M1); //левый двигатель
MeDCMotor motorRight(M2); //правый двигатель
uint8_t motorSpeed = 100;


void setup()
{
}


void loop()
{

//вперед левый мотор
motorLeft.run(-motorSpeed);
//вперед правый мотор
motorRight.run(motorSpeed);


delay(2000); //2 секунды робот едет вперед


//стоп моторы!
motorLeft.stop();
motorRight.stop();
delay(100); // подождем 0,1 секунды пока робот остановится


//поворот налево примерно на 90 градусов на месте
motorLeft.run(motorSpeed); //левый мотор назад
motorRight.run(motorSpeed); //правый мотор вперед


//время для поворота подбирается экспериментально
//и сильно зависит от поверхности, по которой ездит робот
delay(700);


//стоп моторы!
motorLeft.stop();
motorRight.stop();
delay(500); // подождем 0,5 секунды пока робот остановится
}

Чтобы загрузить скетч в контроллер mBot, нужно подключить к нему USB-шнур и включить питание. Затем кликаем по кнопке «Загрузить». После загрузки скетча робот сразу же начнет движение, поэтому придерживайте mBot'а на весу. Если у вас робот осуществляет поворот не точно на 90 градусов, то нужно экспериментально подобрать время поворота. Оно сильно зависит от поверхности, по которой ездит робот и заряда батареек.

Кстати, о батарейках! Блок питания на 4 элемента питания формата AA по 1,5 Вольт (в быту их называют "пальчиковыми батарейками") надежно крепится на «липучке» под контроллером, но часто доставать его для замены батареек или зарядки аккумуляторов не очень удобно. Лайфхак: чтобы батарейки были легкодоступны и не падали, можно закрепить их канцелярской резинкой на крыше робота.

Видео движения mBot по этому скетчу можно посмотреть по ссылке https://youtu.be/v_bA_9u0gVU .

2 комментария:

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

    ОтветитьУдалить
    Ответы
    1. Датчик у mBot не учень удачно расположен, чтобы следовать по лабиринту. Я бы его на 45 градусов вправо повернул, чтобы он измерял расстояние до правой стенки и до передней. Если расстояние сокращается, то поворачивать налево, если увеличивается, то поворачивать направо. Лучше использовать ПД (пропорционально-дифференциальный) регулятор для управления роботом в лабиринте.

      Удалить

Related Posts Plugin for WordPress, Blogger...