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

Простое удалённое управление с компьютера роботом

Здравствуй, Хабрахабр! Я сидел вечером 11 июня, смотрел фильм. Неожиданно для себя я обнаружил, что мне написала незнакомая мне ранее женщина с предложением сделать робота для их нового квеста. Суть заключается в том, что нужно разгадывать головоломки, исследовать тайники, правильно применять подсказки, использовать доступные вещи и в итоге добывать ключи и открывать двери… От меня требовалось сделать робота, управляемого с компьютера с помощью отдельной программы. У мебя были сомнения по поводу некоторых проблем, например: успею ли я и как именно сделать беспроводную передачу данных (беспроводной передачей данных я занимался до этого только на NXT)? Взвесив все за и против я согласился. После этого я стал думать над передачей данных. Поскольку требовалось сделать робота быстро, то вспоминать и доосваивать, например, Delphi не было времени, поэтому возникла идея сделать модуль который будет заниматься отправкой команд. От компьютера требуется просто посылать данные в СОМ-порт. Этот способ странный, но наиболее быстрый. Его я и хочу описать здесь. Так же я приложу 3 программы которые помогут сделать радиоуправляемую машинку.

Сборка передатчика и его программа.

Я сделал модуль для компьютера из FTDI Basic Breakout 5/3.3V от DFrobot, довольно распространённого микроконтролера ATMEGA 328P-PU с загрузчиком Arduino и радиомодуля на основе микросхемы nRF24L01. По-сути это просто Arduino Uno с радиомодулем. Что есть, то есть. У радиомодуля есть особенность, которую я не сразу заметил: входное напряжение должно быть в диапазоне от 3 до 3.6 вольт (хотя подача на него 5 вольт его не убьёт, но работать не будет), верхняя граница логической единицы составляет 5В. Это означает то, что для подключения радиомодуля к меге не нужен преобразователь уровней между 3.3В и 5В, а вот стабилизатор на 3.3В установить нужно. У FTDI есть встроенный стабилизатор, от него я и подпитал радиомодуль.

Так выглядит сам модуль (внутри и в сборке) :

Программа состоит из инициализации, стартового сообщения и обработки команд из программы управления. Так было в моём случае. Основные команды библиотеки Mirf:

Mirf.csnPin = 4 — задаёт номер пина, отвечающего за «разрешение общаться» радиомодуля и МК
Mirf.cePin = 6 — задаёт номер пина, отвечающего за режим работы радиомодуля (приёмник/передатчик)
Mirf.spi = &MirfHardwareSpi — настраивает линию SPI
Mirf.init() — инициализирует радиомодуль
Mirf.payload = 1 — размер в байтах одного сообщения (поумолчанию 16, максимум 32)
Mirf.channel = 19 — задаёт канал (0 — 127, по умолчанию 0)
Mirf.config() — задаёт параметры передачи

Mirf.setTADDR((byte *)«serv1») — переводит радиомодуль в режим передатчика
Mirf.setRADDR((byte *)«serv1») — переводит радиомодуль в режим приёмника

Mirf.send(data) — отправляет массив типа byte
Mirf.dataReady() — сообщает об окончании обработки принятых данных
Mirf.getData(data) — записать принятые данные в массив data

Mirf.setTADDR((byte *)«serv1») — переводит радиомодуль в режим передатчика
Mirf.setRADDR((byte *)«serv1») — переводит радиомодуль в режим приёмника

Mirf.send(data) — отправляет массив типа byte
Mirf.dataReady() — сообщает об окончании обработки принятых данных
Mirf.getData(data) — записать принятые данные в массив data

Прилагаю код программы передатчика.

char active;
byte data[1];

void setup()
<
Serial.begin(19200);

Mirf.csnPin = 4;
Mirf.cePin = 6;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.payload = 1;
Mirf.channel = 19;
Mirf.config();

//сигнальное сообщение о начале работы
data[0]=7;
Mirf.send(data);
delay(200);
>

void loop()
<
if (Serial.available()) //Если данные готовы к считыванию
active=Serial.read(); // Запись данных в переменную
>

Mirf.send(data); //Отсылаем данные
while(Mirf.isSending()); // Ждём пока данные отсылаются
>

Программа управления.

Есть одна интересная штука — Processing. Синтаксис такой же как в Arduino, только вместо void loop() там расположился void draw(). Но она становилась ещё более интересной в моей ситуации с библиотекой processing Serial, которая позволяет работать с сериал-портом. Прочитав уроки на сайте Spurkfun`а, я поигрался с миганием светодиода на подключенной к компьютеру ардуинке по клику мышки. После этого я написал программу управления роботом с клавиатуры. Прилагаю код управления с помощью стрелок. В нём, в принципе, ничего необычного нет.

import processing.serial.*;
import cc.arduino.*;

Serial myPort;
PFont f=createFont(«LetterGothicStd-32.vlw», 24);

void setup()
size(360, 160);
stroke(255);
background(0);
textFont(f);

String portName = «XXXX»; // Сюда нужно написать имя вашего порта
myPort = new Serial(this, portName, 19200);
>

void draw() if (keyPressed == false)
clear();
myPort.write(‘6’);
println(«6»);
>
>

void keyPressed()
// 10 — enter
// 32 — probel
// 37/38/39/40 — keys
clear();

fill(255);
textAlign(CENTER);
//text(keyCode, 180, 80);

switch(keyCode)
case 37:
text(«Edem vlevo», 180, 80);
myPort.write(‘1’);
break;

case 38:
text(«Edem pryamo», 180, 80);
myPort.write(‘2’);
break;

case 39:
text(«Edem vpravo», 180, 80);
myPort.write(‘3’);
break;

case 40:
text(«Edem nazad», 180, 80);
myPort.write(‘4’);
break;

default:
text(«Takoy kommandi net», 180, 80);
myPort.write(‘6’);
break;
>
>

Программа приёмника.

Инициализация этой программы отличается от инициализации программы передатчика буквально одной строчкой. Ключевая команда в бесконечном цикле Mirf.getData(data). Дальше полученная команда сравнивается с числами, которым соответствуют какие-либо действия робота. Ну а дальше робот действует точно по командам. Прилагаю код программы приёмника машинки.

void setup()
Serial.begin(9600);

pinMode(13, OUTPUT); //LED

Mirf.csnPin = 10;
Mirf.cePin = 9;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.payload = 1;
Mirf.channel = 19;
Mirf.config();
Mirf.setRADDR((byte *)«serv1»);
>

void loop()
byte data[1];

switch (data[0])
case 1:
motors(-100, 100); // поворачиваем влево
break;

case 2:
motors(100, 100); // едем прямо
break;

case 3:
motors(100, -100); // поворачиваем вправо
break;

case 4:
motors(-100, -100); // едем назад
break;

default:
motors(0, 0); // стоим
break;
>

Заключение.

Что из этого всего вышло:

Этого робота я сделал для «Клаустрофобии». Они проводят квесты в реальности в разных городах, и как раз для одного из таких квестов организаторам понадобился радиоуправляемый робот-сапер. Мне понравилось. Это, конечно, ущербно, т.к. на фоне управления с помощью встроенных в ноутбук средств связи, но зато своё, сделанное весьма быстро и без особых проблем. Надеюсь эта статья поможет сделать нечто подобное, а, может, даже сложнее. Тут уж кому что захочется.

USB подключение EV3 к ПК

В комплект базового или домашнего набора Lego EV3 входит USB кабель типа «USB — miniUSB». Этот кабель предназначен для прямого соединения компьютера с роботом. Нужно включить модуль EV3 и вставить разъем miniUSB в порт модуля. USB разъем необходимо соединить с USB портом персонального компьютера.

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

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

Подключение EV3 к компьютеру остается самым надежным видом соединения. Основным недостатком такого соединения является небольшая длина соединительного кабеля. Кабель не дает возможности на большом расстоянии заливать программу в робота и производить отладку программы.

Простое удалённое управление с компьютера роботом

Здравствуй, Хабрахабр! Я сидел вечером 11 июня, смотрел фильм. Неожиданно для себя я обнаружил, что мне написала незнакомая мне ранее женщина с предложением сделать робота для их нового квеста. Суть заключается в том, что нужно разгадывать головоломки, исследовать тайники, правильно применять подсказки, использовать доступные вещи и в итоге добывать ключи и открывать двери… От меня требовалось сделать робота, управляемого с компьютера с помощью отдельной программы. У мебя были сомнения по поводу некоторых проблем, например: успею ли я и как именно сделать беспроводную передачу данных (беспроводной передачей данных я занимался до этого только на NXT)? Взвесив все за и против я согласился. После этого я стал думать над передачей данных. Поскольку требовалось сделать робота быстро, то вспоминать и доосваивать, например, Delphi не было времени, поэтому возникла идея сделать модуль который будет заниматься отправкой команд. От компьютера требуется просто посылать данные в СОМ-порт. Этот способ странный, но наиболее быстрый. Его я и хочу описать здесь. Так же я приложу 3 программы которые помогут сделать радиоуправляемую машинку.

Сборка передатчика и его программа.

Я сделал модуль для компьютера из FTDI Basic Breakout 5/3.3V от DFrobot, довольно распространённого микроконтролера ATMEGA 328P-PU с загрузчиком Arduino и радиомодуля на основе микросхемы nRF24L01. По-сути это просто Arduino Uno с радиомодулем. Что есть, то есть. У радиомодуля есть особенность, которую я не сразу заметил: входное напряжение должно быть в диапазоне от 3 до 3.6 вольт (хотя подача на него 5 вольт его не убьёт, но работать не будет), верхняя граница логической единицы составляет 5В. Это означает то, что для подключения радиомодуля к меге не нужен преобразователь уровней между 3.3В и 5В, а вот стабилизатор на 3.3В установить нужно. У FTDI есть встроенный стабилизатор, от него я и подпитал радиомодуль.

Так выглядит сам модуль (внутри и в сборке) :

Программа состоит из инициализации, стартового сообщения и обработки команд из программы управления. Так было в моём случае. Основные команды библиотеки Mirf:

Mirf.csnPin = 4 — задаёт номер пина, отвечающего за «разрешение общаться» радиомодуля и МК
Mirf.cePin = 6 — задаёт номер пина, отвечающего за режим работы радиомодуля (приёмник/передатчик)
Mirf.spi = &MirfHardwareSpi — настраивает линию SPI
Mirf.init() — инициализирует радиомодуль
Mirf.payload = 1 — размер в байтах одного сообщения (поумолчанию 16, максимум 32)
Mirf.channel = 19 — задаёт канал (0 — 127, по умолчанию 0)
Mirf.config() — задаёт параметры передачи

Mirf.setTADDR((byte *)«serv1») — переводит радиомодуль в режим передатчика
Mirf.setRADDR((byte *)«serv1») — переводит радиомодуль в режим приёмника

Mirf.send(data) — отправляет массив типа byte
Mirf.dataReady() — сообщает об окончании обработки принятых данных
Mirf.getData(data) — записать принятые данные в массив data

Mirf.setTADDR((byte *)«serv1») — переводит радиомодуль в режим передатчика
Mirf.setRADDR((byte *)«serv1») — переводит радиомодуль в режим приёмника

Mirf.send(data) — отправляет массив типа byte
Mirf.dataReady() — сообщает об окончании обработки принятых данных
Mirf.getData(data) — записать принятые данные в массив data

Прилагаю код программы передатчика.

char active;
byte data[1];

void setup()
<
Serial.begin(19200);

Mirf.csnPin = 4;
Mirf.cePin = 6;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.payload = 1;
Mirf.channel = 19;
Mirf.config();

//сигнальное сообщение о начале работы
data[0]=7;
Mirf.send(data);
delay(200);
>

void loop()
<
if (Serial.available()) //Если данные готовы к считыванию
active=Serial.read(); // Запись данных в переменную
>

Mirf.send(data); //Отсылаем данные
while(Mirf.isSending()); // Ждём пока данные отсылаются
>

Программа управления.

Есть одна интересная штука — Processing. Синтаксис такой же как в Arduino, только вместо void loop() там расположился void draw(). Но она становилась ещё более интересной в моей ситуации с библиотекой processing Serial, которая позволяет работать с сериал-портом. Прочитав уроки на сайте Spurkfun`а, я поигрался с миганием светодиода на подключенной к компьютеру ардуинке по клику мышки. После этого я написал программу управления роботом с клавиатуры. Прилагаю код управления с помощью стрелок. В нём, в принципе, ничего необычного нет.

import processing.serial.*;
import cc.arduino.*;

Serial myPort;
PFont f=createFont(«LetterGothicStd-32.vlw», 24);

void setup()
size(360, 160);
stroke(255);
background(0);
textFont(f);

String portName = «XXXX»; // Сюда нужно написать имя вашего порта
myPort = new Serial(this, portName, 19200);
>

void draw() if (keyPressed == false)
clear();
myPort.write(‘6’);
println(«6»);
>
>

void keyPressed()
// 10 — enter
// 32 — probel
// 37/38/39/40 — keys
clear();

fill(255);
textAlign(CENTER);
//text(keyCode, 180, 80);

switch(keyCode)
case 37:
text(«Edem vlevo», 180, 80);
myPort.write(‘1’);
break;

case 38:
text(«Edem pryamo», 180, 80);
myPort.write(‘2’);
break;

case 39:
text(«Edem vpravo», 180, 80);
myPort.write(‘3’);
break;

case 40:
text(«Edem nazad», 180, 80);
myPort.write(‘4’);
break;

default:
text(«Takoy kommandi net», 180, 80);
myPort.write(‘6’);
break;
>
>

Программа приёмника.

Инициализация этой программы отличается от инициализации программы передатчика буквально одной строчкой. Ключевая команда в бесконечном цикле Mirf.getData(data). Дальше полученная команда сравнивается с числами, которым соответствуют какие-либо действия робота. Ну а дальше робот действует точно по командам. Прилагаю код программы приёмника машинки.

void setup()
Serial.begin(9600);

pinMode(13, OUTPUT); //LED

Mirf.csnPin = 10;
Mirf.cePin = 9;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.payload = 1;
Mirf.channel = 19;
Mirf.config();
Mirf.setRADDR((byte *)«serv1»);
>

void loop()
byte data[1];

switch (data[0])
case 1:
motors(-100, 100); // поворачиваем влево
break;

case 2:
motors(100, 100); // едем прямо
break;

case 3:
motors(100, -100); // поворачиваем вправо
break;

case 4:
motors(-100, -100); // едем назад
break;

default:
motors(0, 0); // стоим
break;
>

Заключение.

Что из этого всего вышло:

Этого робота я сделал для «Клаустрофобии». Они проводят квесты в реальности в разных городах, и как раз для одного из таких квестов организаторам понадобился радиоуправляемый робот-сапер. Мне понравилось. Это, конечно, ущербно, т.к. на фоне управления с помощью встроенных в ноутбук средств связи, но зато своё, сделанное весьма быстро и без особых проблем. Надеюсь эта статья поможет сделать нечто подобное, а, может, даже сложнее. Тут уж кому что захочется.

VEX EDR Clawbot

Сборка

Инструкцию по сборке можно найти здесь.

Установка ПО

Для работы с этим роботом надо скачать программу ROBOTC для VEX Robotics.

источник:http://www.robotc.net/download/vexrobotics/

источник:http://www.robotc.net/download/vexrobotics/

Screenshot 3.png

Screenshot 4.png

Screenshot 5.png

Screenshot 6.png

Screenshot 7.png

Screenshot 8.png

Шаг 9
Откроется черная консоль. В ней ничего писать не надо, подождите окна с кнопкой «Установить».

Screenshot 9.png

Далее надо подождать, нажать «Установить» еще раз и нажать «Finish».

Начало работы

Шаг 1
На рабочем столе у вас появятся 4 иконки. Запустите выделенную.

Screenshot 10.png

Подключите робота к компьютеру или ноутбуку через кабель. Для робота — USB, для компьютера любой (зависит от имеющихся разъемов). Потом включите робота с помощью переключателя на контроллере. Светодиоды должны мигать зеленым.

Шаг 2
Находим в программе вкладку Robot нажимаем на неё и проходим по следующему пути:
Robot->Platform type->Vex Robotics->Vex 2.0 Cortex

Рис 10.png

Шаг 3
Загрузите в робота прошивку (1) и создайте новый файл (2).

Screenshot 11.png

Шаг 4
Нажмите на кнопку:

Screenshot 12.png

1 — Выберите вкладку «Motors»;
2 — Напишите название мотора, для дальнейшего обращения к нему в коде программы;
3 — Нажмите и выберите из открывшегося списка тип вашего мотора;
Номер порта (самая левая колонка) зависит от того, к какому порту на контроллере вы подключили мотор.

Screenshot 13.png

Аналогично указываются названия и типы подключенных датчиков во вкладке «Devices».
В конце нажмите «ОК».

Шаг 5
Теперь можем приступить к написанию первой программы. Подробный синтаксис языка можно посмотреть перейдя по ссылке. Также в этой ссылке можно найти пару примеров. Для ознакомления напишем программу для движения робота по прямой со скоростью 50, с ограничением по времени, в нашем случае — пару секунд. Выглядит она следующим образом:

Рис 11.png

Открытие ранее созданных программ

Нажмите на кнопку «Открыть» (1). Откроется окно проводника. Найдите необходимый файл визуальной программы с расширением «.abp», выберете его (2) и нажмите на кнопку «Open» (3). (Можете использовать программу из набора готовых алгоритмов, см. окончание данной статьи)

18.png

Программа открылась и готова к загрузке. Перед загрузкой удостоверьтесь, что контроллер подключен к компьютеру и на нем горит зеленый светодиод «5V», сигнализирующий о наличии питания:

18-1.png

Запуск приложения ev3-scratch-helper-app

Перед запуском редактора Scratch 2 у вас всегда должно быть запущено приложение ev3-scratch-helper-app. Для его запуска сделайте следующее:

    1. Запустите окно консоли и поменяйте текущую папку на папку, в которой установлено приложение ev3-scratch-helper-app. У меня это папка «C:ev3-scratch-helper-app», поэтому я вызвал команду «cd C:ev3-scratch-helper-app».
    2. Выполните команду «gradlew.bat bootRun». При первом выполнении к вам на компьютер будут скачаны и установлены необходимые библиотеки, поэтому удостоверьтесь, что компьютер подключен к Интернету. Первый запуск займёт продолжительное время, наберитесь терпения.

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

    Для последующих запусков для удобства можно создать ярлык, например, на рабочем столе. Вот так выглядят свойства ярлыка для установленного приложения в папке «C:ev3-scratch-helper-app»:

    Свойства ярлыка для запуска приложения ev3-scratch-helper-app

    При запуске приложение ev3-scratch-helper-app подключается к первому доступному модулю EV3 в сети. Если ни один модуль не обнаружен, то приложение ждёт, пока такой появится.

    Возможные проблемы и способы их решения

    Самые распространенные проблемы, с которыми сталкиваются пользователи при попытке перепрошить робот-пылесос:

    • Процесс прошивки заканчивается ошибкой. Если используется смартфон, то с большой долей вероятности потребуется просто его перезагрузить. Чаще всего это происходит, если приложение XVacuum было установлено буквально 1 – 2 минуты назад и не добавлено в автозапуск.
    • Если прошивка заканчивается ошибкой при использовании ПК, то в 99% случаев «виновником» является включенный в Windows брандмауэр. Он ограничивает сетевой доступ для подключаемых устройств, так как расценивает это как попытку несанкционированного получения контроля над операционной системой.
    • После установки нового голосового пакета робот-пылесос «возвращается» обратной к стандартному набору голосовых оповещений. Такое происходит чаще всего, если в MiHome была разрешена автоматическая установка обновлений. Для таких случаев рекомендуется использовать модифицированные версии MiHome, где данная функция полностью отключена. На функциональность робота-пылесоса это никоим образом не влияет, управлять им можно будет как и прежде (включая его интерактивной картой помещения).

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

    Для установки стороннего языкового пакета потребуется использовать специальное приложение XVacuum Firmware или WIN-MiRobot.

    Подключение робота-пылесоса Сяоми к приложению «Умный дом»

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

    HomeKit от Apple

    Основой управления является MiHome. Все умные приборы Xiaomi в доме объединяются в одну единую сеть, а управление происходит из общего центра. Утилита для робота Сяоми адаптирована для работы в блоке. Чтобы воспользоваться тем или иным прибором, нужно нажать соответствующую иконку.

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

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector