Двигатель nxt


LEGO56 — Оренбургский клуб фанатов LEGO MINDSTORMS » Архив статей » Глава 4. Сервомоторы NXT

Сервомоторы, входящие в комплект MINDSTORMS NXT, настолько интересны и уникальны, что я решил посвятить им отдельную главу. Внешний вид сервомотора можно посмотреть на рисунке 4-1. Сервомотор NXT – это сочетание электродвигателя, шестерёнчатого редуктора и датчика вращения, объединённых в одном корпусе своеобразной формы.

Рисунок 4-1. Сервомотор NXT

Малогабаритные двигатели постоянного тока обычно вращаются слишком быстро, и имеют не очень большую мощность на валу, поэтому нет особого смысла подключать их напрямую к колёсам или другим механизмам. Чтобы понизить скорость вращения и заодно увеличить вращающий момент, обычно используют какой-либо редуктор. Редуктор сервомотора содержит восемь шестерёнок, имеющих суммарное передаточное отношение 1:48 (см. рисунок 4-2, 4-3, 4-4).

Рисунок 4-2. Внутреннее устройства сервомотора NXT

Сервомотор изготовлен неразборным, поэтому, если и вы полезете внутрь с целью посмотреть, как там всё устроено, то ваш сервомотор будет сломан с вероятностью, близкой к 100%. В частности, разделить оранжевые половинки «головы» сервомотора, и не сломать внутренние крепления, невозможно в принципе. Отчаянный парень Даниэль Бенедеттелли (Daniele Benedettelli) пожертвовал одним из своих сервомоторов на благо науки, в результате чего, мы имеем возможность посмотреть внутрь этого чуда инженерной мысли на рисунках с 4-3 по 4-6 (изображения взяты с сайта www.philohome.com и являются собственностью Даниэля Бенедеттелли).

Рисунок 4-3. Сервомотор NXT в разобранном виде.

Рисунок 4-4. Редуктор сервомотора NXT крупным планом.

Находящийся внутри сервомотора датчик вращения (рисунок 4-5, справа) представляет из себя оптико-механический энкодер и состоит из оптической пары (светодиод и фототранзистор) и зубчатого колеса с секторными отверстиями, соединённого непосредственно с первой шестернёй на валу двигателя. Разрешающей способности этого датчика достаточно, чтобы определять положение выходного вала сервомотора с точностью в 1 градус. Если Вы когда-либо разбирали старую компьютерную мышь с шариком (которые были в ходу лет пятнадцать назад), то наверняка видели подобное устройство. Принцип работы у датчиков в компьютерной мыши и в сервомоторе совершенно одинаков – колесо с отверстиями при вращении пересекает луч, испускаемый светодиодом, а фототранзистор определяет наличие или отсутствие луча. Если посмотреть внимательно, то можно обнаружить, что на ведущем валу электромотора установлена шестерня с 10 зубами, а зубчатое колесо энкодера имеет 32 зуба и 12 отверстий. Путем несложных вычислений получаем, что за один оборот выходного вала датчик успевает посмотреть на 48*10/32*12 = 180 отверстий, что ровно в два раза меньше, чем заявленная величина (1 оборот = 360 градусов). Но если учесть, что на каждом отверстии срабатывание датчика происходит дважды (переход от перемычки к отверстию, и от отверстия к перемычке), то всё становится на свои места. Так что действительно, разрешающая способность датчика вращения в 1 градус подтверждается его механическими характеристиками.

Рисунок 4-5. Электромотор с электронным предохранителем (слева), вал мотора, шестерня и датчик вращения (справа).

На небольшой печатной плате (рисунок 4-6) можно увидеть разъём для подключения и электронные компоненты, обеспечивающие работу датчика вращения. На левой фотографии хорошо видна оптическая пара, чёрный прямоугольник – это светодиод, полупрозрачный прямоугольник напротив него – фототранзистор.

Рисунок 4-6. Электромотор с печатной платой.

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

Не стоит забывать, что мощность сервомоторов NXT весьма значительна, и поэтому нужно очень внимательно относиться к построению моделей с повышающими редукторами. Так, при передаточном числе более 10:1 мотор вполне способен сломать неудачно закреплённые и заклинившие балки, штифты, оси, или срезать зубья последней ведомой шестерни. Хоть в сервомоторе и предусмотрена электронная защита от перегрузки (рисунок 4-5, слева), которая срабатывает в случае длительной работы под нагрузкой, близкой к максимальной, или при заклинивании выходного вала, но испытывать судьбу я не рекомендую. Перегрев мотора также вызывает срабатывание защиты, поэтому не удивляйтесь, если в какой-то момент после продолжительной работы один из сервомоторов вдруг перестал нормально крутиться. После остывания или расклинивания вала мотор снова начинает работать в штатном режиме. В любом случае, не следует злоупотреблять способностями сервомотора и перегружать его, так как длительная работа с перегрузками приводит к быстрому износу редуктора и появлению заметного люфта на выходном валу, который и на совершенно новом сервомоторе не так уж и мал (2-3 градуса).

Далее рассмотрим основные физические и механические характеристики сервомотора.Вес сервомотора в сборе – 80.17 грамма.Размеры сервомотора: длина 13.5М, ширина 5М, высота 5.5М. Расстояние между верхними и нижней крепёжными планками: 5М по длине, 3М по высоте. С торца корпуса на стороне, противоположной ведущему валу есть три отверстия, находящиеся на одной линии с осью ведущего вала. Верхние крепёжные планки расположены на 1М выше, а нижняя – на 2М ниже оси вала (вопрос, где у сервомотора верх, а где низ, является риторическим, но мне кажется, что верх всё-таки там, где две крепёжные планки).Центр тяжести расположен на расстоянии 7М по длине и 1.5М по высоте от выходного вала (см. рисунок 4-7).

Рисунок 4-7. Размеры и центр тяжести сервомотора.

Сведения о характеристиках сервомоторов, приведённые далее, были экспериментально добыты Филлипе Харбейном (Phillippe Hurbain), и опубликованы на его сайте, за что ему огромное спасибо.Максимально возможная скорость вращения выходного вала с нагрузкой при включенной регулировке мощности – 120 оборотов в минуту при 9 В питании (новые батарейки ААА), и 90 оборотов в минуту при 7.2 В питании (стандартная перезаряжаемая батарея LEGO или NiMH аккумуляторы).Максимальная скорость вращения выходного вала без нагрузки – 160 оборотов в минуту при 9 В, 130 оборотов в минуту при 7.2 В (см рисунок 4-8).

Рисунок 4-8. Зависимость скорости вращения от подводимой мощности.

Мотор не нагружен, питание 9 вольт. Обратите внимание на линейную зависимость между уровнем мощности и скоростью двигателя. В отличие от мотора RCX, который без нагрузки развивал максимальные обороты уже на втором уровне мощности, мотор NXT ведёт себя более предсказуемо. Так как нет нагрузки, регулировка мощности (Power Control) не оказывает на скорость никакого эффекта.

Мотор не нагружен, но на этот раз питание 7.2 вольта (как при использовании NiMH аккумуляторов). Само собой, скорость вращения мотора пропорционально уменьшилась, но всё равно зависимость осталась линейной.

Мотор под нагрузкой 11.5 Н•см, регулировка мощности отключена, питание 9 вольт. Вплоть до 40% мощности мотор не вращается, но как только мощности становится достаточно для преодоления нагрузки, скорость вращения увеличивается пропорционально.

Мотор под нагрузкой 11.5 Н•см, питание 9 вольт, регулировка мощности включена. Эта линия наглядно показывает эффективность схемы регулировки мощности: Вплоть до 70% скорость вращения мотора такая же, как без нагрузки. После 70% линия графика становится горизонтальной, так как мотор работает на максимально возможной мощности.

Мотор под нагрузкой 11.5 Н•см, питание 7.2 вольта, регулировка мощности включена. До 50% мощности график совпадает со скоростью вращения при 9 вольтах (и эта скорость явно больше, чем при питании 7.2 вольта, но без регулировки мощности). Горизонтальный участок этого графика лежит ниже, чем у предыдущего, потому что мощности при 7.2 вольтах явно меньше, чем при 9 вольтах.

На рисунке 4-9 показан график мощности, выдаваемой мотором в зависимости от нагрузки на выходном валу. Максимально возможный момент на валу 165 Н•см (при 9 В питания), 130 Н•см (при 7.2 В питания).

Рисунок 4-9. Зависимость мощности на валу от нагрузки на валу.

Сила тока, потребляемого моторами, линейно зависит от нагрузки на валу. Минимальный ток составляет 60 мА (без нагрузки). При питании 9В максимальный ток – 800 мА (при нагрузке 25 Н•см), а при питании 7.2 вольта – 650 мА (при нагрузке 20 Н•см).

Настоятельно не рекомендуется применять к моторам долговременную нагрузку свыше 15 Н•см. В противном случае, во-первых сработает защита от перегрузки, а во-вторых, ваш мотор долго не проживёт. Максимальные ток и нагрузка, показанные на графике, допустимы только кратковременно, да и то крайне нежелательны.

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

lego56.ru

Функции двигателей NXT. RobotC на русском. Перевод документации.

bFloatDuringInactiveMotorPWM

bool bFloatDuringInactiveMotorPWM

(bool) Логическая переменная. True двигатели будут продолжать двигаться по инерции если питание отключено (мощность на 0). False двигатели останавливаются если энергия не подаётся. Лучшим выбором будет False.

bFloatDuringInactiveMotorPWM = true;   //двигатели будут продолжать двигаться

bFloatDuringInactiveMotorPWM = false;  //двигатели останавливаются без энергии

bMotorReflected

bool bMotorReflected

(bool) Логический Массив. Используется когда необходимо изменить направление вращения. Полезно когда в процессе доработки понадобилось отразить вращения двигателя. Так же данную настройку можно изменить в ROBOTC меню Motors and Sensor Setup.

bMotorReflected[motorA] = true;   // Направление двигателя сменено

bMotorReflected[motorA] = false;  // Направление двигателя в нормальное

motor

int motor[tMotor motor]

(int) Массив целочисленных значений. Содержит значения текущей мощности двигателя или уровня скорости (-100 ...+100). Отрицательное значение - обратное направление, положительное - прямое. Уровень мощности 0 (ноль) останавливает моторы.

Parameter Explanation Data Type

motor A motor port or name tMotor

motor[motorA] = 100;   // запустить мотор A на мощности 100 (вперёд)

motor[motorA] = -100;  // запустить мотор A на мощности -100 (назад)

nMaxRegulatedSpeedNXT

int nMaxRegulatedSpeedNXT

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

nMaxRegulatedSpeedNXT = 500;  // Максимальная скорость ограничена в половину

nMotorEncoder

long nMotorEncoder

(long) Массив длинных целочисленных значений. Содержит текущее значение энкодеров двигателей. Изменяется от -32768 до 32767, так что сбрасывается на 0 примерно через 90 оборотов. Пользовательская программа должна достаточно часто сбрасывать значение  энкодера, чтобы избежать переполнения переменной и сброса её на 0.

nMotorEncoder[motorB] = 0;          // сброс значения энкодера двигателя B

while(nMotorEncoder[motorB] < 360)  // пока энкодера двигателя B меньше 360:

{

  motor[motorB] = 75;  // двигатель B установить мощность на 75

  motor[motorC] = 75;  // двигатель C установить мощность на 75

}

motor[motorB] = 0;     // двигатель B установить мощность на 0 (остановить)

motor[motorC] = 0;     // двигатель C установить мощность на 0 (остановить)

nMotorEncoderTarget

long nMotorEncoderTarget

(long) Массив длинных целочисленных значений. nMotorEncoderTarget используется для установки цели по достижении которой двигатель переводить в холостой режим или режим остановки. Цель заданная значение 0 (ноль) понимается как без ограничения. В первом примере просматривается только один датчик для простого перемещения. Во втором контролируются оба датчика моторов, чтобы оба мотора достигли цели.

nMotorEncoder[motorB] = 0;        // сбросить значение энкодера мотора B

nMotorEncoderTarget[motorB] = 360;// установить цель энкодера B на 360

motor[motorB] = 75;               // запустить мотор B с мощностью 75

motor[motorC] = 75;               // запустить мотор C с мощностью 75

 

while(nMotorRunState[motorB] != runStateIdle)// пока мотор B остаётся запущенным

{

  // ничего не делаем, ждём остановки мотора

}

motor[motorB] = 0;            // двигатель B остановить уровнем мощностью 0

motor[motorC] = 0;            // двигатель C остановить уровнем мощностью 0

С двумя моторами:

nMotorEncoder[motorB] = 0;         // сброс значения энкодера двигателя B

nMotorEncoder[motorC] = 0;         // сброс значения энкодера двигателя C

nMotorEncoderTarget[motorB] = 360; // установить цель энкодера B на 360

nMotorEncoderTarget[motorC] = 360; // установить цель энкодера C на 360

motor[motorB] = 75;                // запустить мотор B с мощностью 75

motor[motorC] = 75;                // запустить мотор C с мощностью 75

 

while(nMotorRunState[motorB] != runStateIdle && nMotorRunState[motorC] != runStateIdle)  

// пока мотор B И мотор C остаются запущенными (еще не достигли своей цели):

{

  // ничего не делать

}

motor[motorB] = 0;           // двигатель B остановить уровнем мощностью 0

motor[motorC] = 0;           // двигатель C остановить уровнем мощностью 0

nMotorPIDSpeedCtrl

TMotorRegulation nMotorPIDSpeedCtrl

(TMotorRegulation) массив значений перечисления TMotorRegulation. nMotorPIDSpeedCtrl используется для включения и отключения регулировки скорости двигателей. Это необходимо, чтобы быть уверенным, что двигатели двигаются одинаково, несмотря на особенности поверхность и встречное сопротивление. Speed Regulation can be set in the Motors and Sensor Setup menu in ROBOTC. To make things easier, by default PID is enabled for LEGO motors.

nMotorPIDSpeedCtrl[motorA] = mtrSpeedReg;  // включить ПИД на моторе A

nMotorRunState

TNxtRunState nMotorRunState

(TNxtRunState) Массив содержит состояние двигателей NXT. Используется для поверки завершения команды движения мотора. Имеет три различных состояния:

runStateRunning - двигатель вращается

runStateHoldPosition - (догадка в документации не прописано) двигатель держит позицию при bFloatDuringInactiveMotorPWM = false

runStateIdle - двигатель завершил движение

nMotorEncoder[motorB] = 0;        // сбросить значение энкодера мотора B

nMotorEncoderTarget[motorB] = 360;// установить цель энкодера B на 360

motor[motorB] = 75;               // запустить мотор B с мощностью 75

motor[motorC] = 75;               // запустить мотор C с мощностью 75

 

while(nMotorRunState[motorB] != runStateIdle)// пока мотор B остаётся запущенным

{

  // ничего не делаем, ждём остановки мотора

}

motor[motorB] = 0;            // двигатель B остановить уровнем мощностью 0

motor[motorC] = 0;            // двигатель C остановить уровнем мощностью 0

nPidUpdateInterval

int nPidUpdateInterval

(int) Интервал в миллисекундах между обновлениями значения ПИД. По умолчанию 25. Слишком малое значение вызовет частое обновление, что может привести к движению двигателей рывками. Слишком большое значение приведёт к редкому опросу ПИД и будет казаться, что регулировка не происходит.

nPidUpdateInterval = 20;  // наилучшее значение 20

nSyncedMotors

TSynchedMotors nSyncedMotors

(TSynchedMotors) Используется для синхронизации двух NXT мотров. Значение синхронизации имеет вид "synchXY", где X порт ведущего мотора, а Y порт ведомого мотора.

nSyncedMotors = syncBC;  // Синхронизировать B и C, где B ведущий, C ведомый

nSyncedTurnRatio = 50;  // Подчинённый мотор будет получать половину от того, что приходит на ведущий.

nSyncedTurnRatio

int nSyncedTurnRatio

(int) Устанавливает какая часть мощности приходится на подчинённый мотор. +100 мощность устанавливается как на ведущий мотор. Нулевое значение - двигатель будет стоять. -100 Будет работать с той же мощностью, только в обратном направлении. Значения между 0 и 100 определяют в какой пропорции давать мощность на подчинённый двигатель, относительно ведущего.

nSyncedMotors = syncBC;  // Синхронизировать B и C, где B ведущий, C ведомый

nSyncedTurnRatio = 50;  // Подчинённый мотор будет получать половину от того, что приходит на ведущий.

sites.google.com

RobotC - Робототехника

bFloatDuringInactiveMotorPWM

bool bFloatDuringInactiveMotorPWM

(bool) Логическая переменная. True двигатели будут продолжать двигаться по инерции если питание отключено (мощность на 0). False двигатели останавливаются если энергия не подаётся. Лучшим выбором будет False.

bFloatDuringInactiveMotorPWM = true;   //двигатели будут продолжать двигаться

bFloatDuringInactiveMotorPWM = false;  //двигатели останавливаются без энергии

bMotorReflected

bool bMotorReflected

(bool) Логический Массив. Используется когда необходимо изменить направление вращения. Полезно когда в процессе доработки понадобилось отразить вращения двигателя. Так же данную настройку можно изменить в ROBOTC меню Motors and Sensor Setup.

bMotorReflected[motorA] = true;   // Направление двигателя сменено

bMotorReflected[motorA] = false;  // Направление двигателя в нормальное

motor

int motor[tMotor motor]

(int) Массив целочисленных значений. Содержит значения текущей мощности двигателя или уровня скорости (-100 ...+100). Отрицательное значение - обратное направление, положительное - прямое. Уровень мощности 0 (ноль) останавливает моторы.

Parameter Explanation Data Type

motor A motor port or name tMotor

motor[motorA] = 100;   // запустить мотор A на мощности 100 (вперёд)

motor[motorA] = -100;  // запустить мотор A на мощности -100 (назад)

nMaxRegulatedSpeedNXT

int nMaxRegulatedSpeedNXT

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

nMaxRegulatedSpeedNXT = 500;  // Максимальная скорость ограничена в половину

nMotorEncoder

long nMotorEncoder

(long) Массив длинных целочисленных значений. Содержит текущее значение энкодеров двигателей. Изменяется от -32768 до 32767, так что сбрасывается на 0 примерно через 90 оборотов. Пользовательская программа должна достаточно часто сбрасывать значение  энкодера, чтобы избежать переполнения переменной и сброса её на 0.

nMotorEncoder[motorB] = 0;          // сброс значения энкодера двигателя B

while(nMotorEncoder[motorB] < 360)  // пока энкодера двигателя B меньше 360:

{

  motor[motorB] = 75;  // двигатель B установить мощность на 75

  motor[motorC] = 75;  // двигатель C установить мощность на 75

}

motor[motorB] = 0;     // двигатель B установить мощность на 0 (остановить)

motor[motorC] = 0;     // двигатель C установить мощность на 0 (остановить)

nMotorEncoderTarget

long nMotorEncoderTarget

(long) Массив длинных целочисленных значений. nMotorEncoderTarget используется для установки цели по достижении которой двигатель переводить в холостой режим или режим остановки. Цель заданная значение 0 (ноль) понимается как без ограничения. В первом примере просматривается только один датчик для простого перемещения. Во втором контролируются оба датчика моторов, чтобы оба мотора достигли цели.

nMotorEncoder[motorB] = 0;        // сбросить значение энкодера мотора B

nMotorEncoderTarget[motorB] = 360;// установить цель энкодера B на 360

motor[motorB] = 75;               // запустить мотор B с мощностью 75

motor[motorC] = 75;               // запустить мотор C с мощностью 75

 

while(nMotorRunState[motorB] != runStateIdle)// пока мотор B остаётся запущенным

{

  // ничего не делаем, ждём остановки мотора

}

motor[motorB] = 0;            // двигатель B остановить уровнем мощностью 0

motor[motorC] = 0;            // двигатель C остановить уровнем мощностью 0

С двумя моторами:

nMotorEncoder[motorB] = 0;         // сброс значения энкодера двигателя B

nMotorEncoder[motorC] = 0;         // сброс значения энкодера двигателя C

nMotorEncoderTarget[motorB] = 360; // установить цель энкодера B на 360

nMotorEncoderTarget[motorC] = 360; // установить цель энкодера C на 360

motor[motorB] = 75;                // запустить мотор B с мощностью 75

motor[motorC] = 75;                // запустить мотор C с мощностью 75

 

while(nMotorRunState[motorB] != runStateIdle && nMotorRunState[motorC] != runStateIdle)  

// пока мотор B И мотор C остаются запущенными (еще не достигли своей цели):

{

  // ничего не делать

}

motor[motorB] = 0;           // двигатель B остановить уровнем мощностью 0

motor[motorC] = 0;           // двигатель C остановить уровнем мощностью 0

nMotorPIDSpeedCtrl

TMotorRegulation nMotorPIDSpeedCtrl

(TMotorRegulation) массив значений перечисления TMotorRegulation. nMotorPIDSpeedCtrl используется для включения и отключения регулировки скорости двигателей. Это необходимо, чтобы быть уверенным, что двигатели двигаются одинаково, несмотря на особенности поверхность и встречное сопротивление. Speed Regulation can be set in the Motors and Sensor Setup menu in ROBOTC. To make things easier, by default PID is enabled for LEGO motors.

nMotorPIDSpeedCtrl[motorA] = mtrSpeedReg;  // включить ПИД на моторе A

nMotorRunState

TNxtRunState nMotorRunState

(TNxtRunState) Массив содержит состояние двигателей NXT. Используется для поверки завершения команды движения мотора. Имеет три различных состояния:

runStateRunning - двигатель вращается

runStateHoldPosition - (догадка в документации не прописано) двигатель держит позицию при bFloatDuringInactiveMotorPWM = false

runStateIdle - двигатель завершил движение

nMotorEncoder[motorB] = 0;        // сбросить значение энкодера мотора B

nMotorEncoderTarget[motorB] = 360;// установить цель энкодера B на 360

motor[motorB] = 75;               // запустить мотор B с мощностью 75

motor[motorC] = 75;               // запустить мотор C с мощностью 75

 

while(nMotorRunState[motorB] != runStateIdle)// пока мотор B остаётся запущенным

{

  // ничего не делаем, ждём остановки мотора

}

motor[motorB] = 0;            // двигатель B остановить уровнем мощностью 0

motor[motorC] = 0;            // двигатель C остановить уровнем мощностью 0

nPidUpdateInterval

int nPidUpdateInterval

(int) Интервал в миллисекундах между обновлениями значения ПИД. По умолчанию 25. Слишком малое значение вызовет частое обновление, что может привести к движению двигателей рывками. Слишком большое значение приведёт к редкому опросу ПИД и будет казаться, что регулировка не происходит.

nPidUpdateInterval = 20;  // наилучшее значение 20

nSyncedMotors

TSynchedMotors nSyncedMotors

(TSynchedMotors) Используется для синхронизации двух NXT мотров. Значение синхронизации имеет вид "synchXY", где X порт ведущего мотора, а Y порт ведомого мотора.

nSyncedMotors = syncBC;  // Синхронизировать B и C, где B ведущий, C ведомый

nSyncedTurnRatio = 50;  // Подчинённый мотор будет получать половину от того, что приходит на ведущий.

nSyncedTurnRatio

int nSyncedTurnRatio

(int) Устанавливает какая часть мощности приходится на подчинённый мотор. +100 мощность устанавливается как на ведущий мотор. Нулевое значение - двигатель будет стоять. -100 Будет работать с той же мощностью, только в обратном направлении. Значения между 0 и 100 определяют в какой пропорции давать мощность на подчинённый двигатель, относительно ведущего.

nSyncedMotors = syncBC;  // Синхронизировать B и C, где B ведущий, C ведомый

nSyncedTurnRatio = 50;  // Подчинённый мотор будет получать половину от того, что приходит на ведущий.

sites.google.com

LEGO56 — Оренбургский клуб фанатов LEGO MINDSTORMS » Архив статей » Глава 5. Внутреннее устройство портов NXT

Эта глава является очень близким к оригиналу пересказом первой части главы «Making a Connection» из книги «Extreme NXT». Сразу отвечу на вопрос «Почему не всей главы, а лишь её части?». Во-первых, глава слишком длинная, и читать её «в полный рост» было бы явно неудобно. Во-вторых, я отделил информацию о характеристиках портов от информации о том, как изготовить самодельные коннекторы и кабели. Не беспокойтесь, в следующей главе об этом обязательно будет рассказано. Теперь ближе к делу.Перед тем, как начать конструировать самодельные датчики и расширители выходов, будет неплохо узнать, как устроены входные и выходные порты блока NXT, и как физически к ним подключиться. В этой главе я расскажу о назначении контактов портов, какие сигналы эти порты передают и принимают, приведу некоторые полезные характеристики, и покажу на схемах, как интеллектуальный блок управляет сервомоторами.

■ Порты NXT

С нижней стороны блок имеет четыре входных порта, пронумерованных от 1 до 4 и предназначенных для подключения датчиков (рисунок 5-1).

Рисунок 5-1. Входные порты NXT

С верхней стороны расположены три выходных порта для подключения моторов, обозначенные буквами A, B и C (рисунок 5-2), и порт USB для подключения блока к компьютеру, но он нас пока не интересует.

Рисунок 5-2. Выходные порты NXT

Если вы посмотрите сквозь прозрачную часть разъёма на концах стандартного кабеля, входящего в комплект, то увидите шесть цветных проводов: белый, чёрный, красный, зелёный, жёлтый и синий (рисунок 5-3). Назначение каждого их этих проводов зависит от того, подключен кабель к порту датчиков или к порту моторов. Также назначение может отличаться в зависимости от типа датчика, подключенного к блоку.

Рисунок 5-3. Стандартный разъём NXT

■ Входы датчиков: назначение контактов и описание сигналов

В таблице 5-1 указаны номера контактов, цвета проводов и назначение каждого провода для кабеля, подключенного к входным портам.

Таблица 5-1. Цвета и имена входных контактов

Номер контакта Цвет провода Имя Назначение
1 Белый AN Аналоговый вход/Питание 9 Вольт
2 Чёрный GND Общий
3 Красный GND Общий
4 Зелёный 4.3V Power Питание 4.3 Вольта
5 Жёлтый DIGI0 Цифровой вход 0
6 Синий DIGI1 Цифровой вход 1

Контакт 1 – Белый – ANВы можете использовать этот контакт для двух целей: как аналоговый вход, или как выход питания 9 вольт. Блок подаёт напряжение питания на этот контакт в течение 3-х миллисекунд, а затем считывает аналоговое значение в течение 0.1 мс. Когда Вы используете этот контакт как аналоговый вход, сигнал подключается к аналого-цифровому преобразователю (АЦП). Входной сигнал должен быть в пределах от 0 до 5 вольт, и его значение преобразуется в число от 0 до 1023. На время считывания сигнала контакт «подтягивается» к линии +5 вольт через резистор номиналом 10 кОм (находящийся внутри блока), что значительно упрощает схемотехнику большинства датчиков.

Если Вы будете использовать первый контакт в качестве источника питания 9 Вольт для датчиков, учтите, что напряжение питания на этом контакте будет равно напряжению на батареях блока NXT, и, если вы используете никель-металлогидридные (NiMH) аккумуляторы, то вы сможете получить с этого контакта напряжение около 7.2 вольта или меньше. Это напряжение используется для питания стандартных и самодельных датчиков, которым недостаточно 5 вольт, в частности, ультразвуковой датчик NXT использует его для увеличения мощности своего передатчика. На всякий случай имейте в виду, что все датчики RCX, подключаемые через адаптер (переходник), используют для своей работы именно эту линию.Поскольку питание на этот контакт подаётся с перерывами, датчику обычно требуется конденсатор, чтобы поддерживать напряжение питания на время чтения данных. Ограничение по току нагрузки на этом контакте составляет примерно 14 мА на каждый порт. Если ток нагрузки превышает это значение, напряжение значительно падает, и датчик может работать не так, как Вам этого хотелось бы.

Контакты 2 и 3 – Чёрный и Красный – GNDВторой и третий контакты – общая земля. Эти два контакта соединены вместе внутри блока NXT и внутри стандартных сенсоров ЛЕГО. Все сигналы измеряются и формируются относительно этих общих контактов. Ваш самодельный датчик может использовать любой из этих контактов, или сразу оба.

Контакт 4 – Зелёный – Питание 4.3 ВольтаЭто основная линия питания для стандартных датчиков NXT. Новые цифровые микросхемы, рассчитанные на 5-вольтовую логику, вполне могут быть запитаны от него, но бывают случаи, когда этого напряжения оказывается недостаточно для стабильной работы. В отличие от 9-вольтовой линии питания, этот выход обеспечивает суммарный ток 180 мА для всех входных и выходных портов. Каждый порт может использовать в среднем 25 мА (180 / 7 = 28.71 мА), но вполне допустимо увеличить потребление одного или нескольких портов, если остальные порты потребляют меньше или не задействованы.В таблице 5-2 приведены значения потребляемого тока для всех стандартных датчиков NXT, и тахометров, встроенных в сервомоторы NXT.

Таблица 5-2. Потребление тока датчиками и тахометрами NXT

Устройство Потребляемый ток
Датчик касания 0
Датчик звука 1.7 мА
Датчик освещения (подсветка выкл.) 2.6 – 3 мА
Датчик освещения (подсветка вкл.) 16.3 мА
Ультразвуковой датчик 4 мА
Тахометр мотора 9 – 12 мА
Все моторы и датчики RSX (через адаптер) 0

Контакты 5 и 6 – Жёлтый и Синий – DIGI0 и DIGI1Эти контакты используют цифровые сигналы уровня 3.3 В и непосредственно подключены к микропроцессору блока NXT. Они в основном используются для связи по протоколу I2C, который будет подробно обсуждаться в одной из следующих глав, но также могут использоваться как обычные сигнальные линии. Когда контакты используются как выходы, необходимо учитывать ограничение в 3.3 Вольта. Когда эти контакты используются как входы, блок NXT сам ограничивает уровень сигналов, чтобы уберечь электронику от повреждений. Эти цепи имеют ограничительные резисторы по 4.7 кОм, включенные последовательно в каждую линию. В результате этого, даже если напряжение сигнала от датчика слишком высокое, ток на входе будет достаточно низким, и процессор не будет повреждён. Это утверждение не относится к случаям, когда Ваш здравый смысл не сможет убедить Вас, что не стоит подключать к порту контроллера 220 Вольт напрямую из розетки.В дополнение к протоколу I2C, контакт DIG0 используется датчиком освещенности для переключения состояния подсветки – включено (отраженный свет) или выключено (окружающий свет). Он также используется датчиком звука для переключения между режимами DB (абсолютная громкость звука) и DBA (уровень звука, приравненный к чувствительности человеческого уха).

■ Выходы моторов: назначение контактов и описание сигналов

В таблице 5-3 указаны номера контактов, цвета проводов и назначение каждого провода.

Таблица 5-3. Цвета и имена выходных контактов

Номер контакта Цвет провода Имя Назначение
1 Белый M1 Питание мотора
2 Чёрный M2 Питание мотора
3 Красный GND Общий
4 Зелёный 4.3V Power Питание 4.3 Вольта
5 Жёлтый TACHO0 Цифровой вход 0
6 Синий TACHO1 Цифровой вход 1

Контакты 1 и 2 – Белый и Чёрный – M1 и M2Эти контакты подают питание к мотору. Максимальное напряжение равно напряжению батарей блока (9 В для стандартных батареек, 7.2 В для аккумуляторов). Мотор управляется цепью, называемой Н-мостом (микросхемы LB1836M и LB1930M). Н-мост состоит из четырех транзисторов, на последующих схемах транзисторы пронумерованы от 1 до 4.Управляющая цепь построена так, что транзисторы 1 и 2 с одной стороны, и 3 и 4 с другой стороны не открываются одновременно, чтобы избежать короткого замыкания в цепи. Схема 5-4 показывает состояние транзисторов при движении вперёд, открыты транзисторы 1 и 4. Схема 5-5 показывает движение назад, открыты транзисторы 2 и 3. Схема 5-6 показывает направление тока при торможении, открыты транзисторы 1 и 2. Схема 5-7 соответствует свободному вращению мотора - все транзисторы закрыты, ток отсутствует.

Схема 5-4. Движение вперёд (Forward)

Схема 5-5. Движение назад (Reverse)

Схема 5-6. Торможение(Brake)

Схема 5-7. Свободное вращение (Coasting)

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

Схема 5-8. Диаграмма ШИМ для обеспечения 35% скорости мотора

Со стандартной прошивкой длина цикла ШИМ составляет 128 нс. Это соответствует частоте 7800 Гц, которая находится в слышимом диапазоне, в результате Вы иногда можете слышать «писк», исходящий от мотора. Для стандартных сервомоторов NXT зависимость между скоростью вращения мотора и приложенным напряжением – линейна. Допустимый ток на выходных портах составляет примерно 800 мА для порта А, и 500 мА для портов В и С. Микросхема драйвера имеет тепловую защиту, которая ограничивает ток при перегрузке или перегреве.

Контакт 3 – Красный – GNDЭто общий «земляной» контакт. Контакты 2 и 3 соединены между собой в датчиках, но не в моторах. Если датчик будет случайно подключен к порту мотора, питание мотора будет закорочено на землю. К счастью, в блоке есть защита на этот случай, но лучше лишний раз не ошибаться.

Контакт 4 – Зелёный – Питание 4.3 ВольтаЭтот контакт подключен к линии питания 4.3 В, общей для всех портов блока. Питание с этого контакта используется тахометром сервомотора.

Контакты 5 и 6 – Жёлтый и Синий – DIGI0 и DIGI1Эти два входа используются для получения сигналов от оптического тахометра, встроенного в мотор NXT. Тахометры генерируют прямоугольные импульсы, которые позволяют блоку NXT определить скорость и направление вращения мотора. Два импульса сдвинуты относительно друг друга на четверть полной длины импульсного цикла. На схеме 5-9 показан сигнал от мотора, вращающегося вперёд, а на 5-10 – назад. Частота импульсов зависит от скорости вращения мотора. Один полуцикл сигнала соответствует одному градусу поворота мотора.

Схема 5-9. Импульсы при вращении мотора вперёд

Схема 5-10. Импульсы при вращении мотора назад

lego56.ru

NiNoXT: NXT и Python: включаем моторы

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

Чтобы узнать, какие функции модуля nxt-python нужно использовать, чтобы заставить робота двигаться, можно использовать два способа. В одном случае, можно воспользоваться свойством открытости - языки с открытым исходным кодом тем и хороши, что позволяют зайти в любой модуль, любую функцию и посмотреть для чего она нужна и что она делает. Другой способ, воспользоваться встроенной в Python функцией подсказки - например, через терминал, предоставляющий доступ к командной строке в Linux:

$ python Python 2.7.2 (default, Oct 27 2011, 01:36:46) [GCC 4.6.1 20111003 (Red Hat 4.6.1-10)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import nxt.motor >>> help(nxt.motor) Итак, что можно почерпнуть из этих источников? Например, можно увидеть - прежде, чем осуществлять передвижение робота, загружаются внутренний модуль motor. Фактически, в коде это будет выглядеть, как import nxt.motorилиfrom nxt.motor import *Данный модуль предоставляет несколько классов для работы с моторами и соответствующими методами.

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

engine = Motor(mybrick, PORT_A)Здесь,
engineИмя переменной, которая будет ссылаться на объект связанный с мотором
mybrickПеременная указывающая на объект, отвечающий за NXT блок, к которому присоединен мотор. Как инициализировать NXT блок написано в этой заметке.
PORT_AКонстанта, определяющая к какому порту подключен мотор.
Тогда для работы с мотором доступны следующие методы:

engine.turn(80, 720)В данном примере ось мотора повернется на 720 градусов со мощностью 80. Мощность можно задавать отрицательными числами, если необходимо вращать мотор в противоположную сторону - engine.turn(-100, 1080). Также можно указать третий параметр, который позволит не тормозить мотор при достижении нужного количества градусов, а просто отключить от него напряжение: engine.turn(50, 90, False) - тогда мотор по инерции еще будет продолжать вращаться.

engine.run(90) или engine.run(-60)Этот метод включит данный мотор с указанной мощностью и передаст управление следующей команде в программе. Чтобы после этого, при наступлении какого-то события, остановить мотор - нужно использовать методы: engine.idle() или engine.brake(). brake - резкое торможение, а idle просто отключает подачу питания.

engine.get_tacho()Позволяет узнать текущие показатели енкодера двигателя. Лучше всего работу этого метода и другого, но с ним связанного, - reset_position, рассмотреть на примере. После текста программы этого примера будет приведено, то, что программа выводит на экран.

#!/usr/bin/env python   import nxt.locator from nxt.motor import * from time import sleep   def output_tacho(motor): tacho=motor.get_tacho() print "Tacho Count:\t\t", tacho.tacho_count print "Block Tacho Count:\t", tacho.block_tacho_count print "Rotation Count:\t\t", tacho.rotation_count   def do_step(motor): motor.run() sleep(.5) motor.brake()   b = nxt.locator.find_one_brick()   back = Motor(b, PORT_A) # Assuming that the NXT block just turned on # and counters are zero   print "Before motor starts" output_tacho(back)   do_step(back) print "1st step finished" output_tacho(back)   back.reset_position(False) print "Here reset_position called with False"   do_step(back) print "2nd step finished" output_tacho(back)   back.reset_position(True) print "Here reset_position called with True"   do_step(back) print "3rd step finished" output_tacho(back)   sleep(.5) back.idle()Программа трижды запускает мотор, и в последние два запуска перед включением моторов сбрасываются показатели енкодера. Какой конкретно из показателей сбрасывается определяется флагом, передаваемым в reset_position.Before motor starts Tacho Count: 0 Block Tacho Count: 0 Rotation Count: 0 1st step finished Tacho Count: 342 Block Tacho Count: 342 Rotation Count: 342 Here reset_position called with False 2nd step finished Tacho Count: 746 Block Tacho Count: 746 Rotation Count: 399 Here reset_position called with True 3rd step finished Tacho Count: 1148 Block Tacho Count: 397 Rotation Count: 801 Видно, что вызов функции сброса никак не влияет на показатель Tacho Count - он показывает абсолютную позицию мотора после активации NXT блока. Запуск функции с параметром False, скорее всего, нужно делать в начале каждой программы - это позволит отсчитывать относительную позицию двигателя Rotation Count с начала работы программы. Ну и наконец, внутри циклов, других методов или функций имеет смысл выставлять параметр в True при использовании reset_position - при этом относительная позиция программы сохраниться, а относительная позиция внутри данного блока Block Tacho Count может быть использована для навигации.

Работа сразу с двумя моторами, синхронизированными друг с другом, несколько сложнее. За нее отвечает класс SynchronizedMotors. Дело в том, что как распределяется мощность между моторами задается при инициализации класса:

left_engine = Motor(mybrick, PORT_B) right_engine = Motor(mybrick, PORT_C)   vehicle = SynchronizedMotors(left_engine, right_engine, 0)Иными словами, сначала нужно проинициализировать каждый мотор, а потом связать их вместе. Последний параметр "0" как раз и задает распределение мощности. В примере выше, "0" означает, что на оба мотора будет подаваться одинаковая скорость.

Если потом в программе возникнет необходимость поменять распределение, то нужно будет объект заново инициализировать:

vehicle = SynchronizedMotors(left_engine, right_engine, -70)Результирующая программа будет выглядеть, например, так:#!/usr/bin/env python   import nxt.locator from nxt.motor import * from time import sleep   mybrick = nxt.locator.find_one_brick()   left_engine = Motor(mybrick, PORT_B) right_engine = Motor(mybrick, PORT_C)   vehicle = SynchronizedMotors(left_engine, right_engine, 0)   vehicle.turn(100, 180) sleep(.5) vehicle.turn(-100, 180)   vehicle = SynchronizedMotors(left_engine, right_engine, 25)   vehicle.turn(100, 90) sleep(.5) vehicle.turn(-100, 90)   sleep(.5) vehicle.idle()Как видно, при синхронизированный моторах используются все те же самые методы, что и для одиночного мотора:
  • turn - повернуть моторы на определенное количество градусов
  • run - включить моторы с определенной базовой мощностью и передать управление следующей команде
  • brake - затормозить
  • idle - отключить питание
В завершение, хочется обратить внимание на одну важную деталь - brake/торможение все время держит моторы под нагрузкой, чтобы обеспечить их неподвижность. Это будет продолжаться даже если программа закончила свое выполнение. Именно поэтому в примерах выше перед концом каждого скрипта выполняется idle - это не только поможет руками крутить моторы, например, чтобы поставить их в какое-то начальное положение, но и будет экономить разряд батареи - энергия на моторы перестанет подаваться.

nnxt.blogspot.ru

LEGO Mindstorms - это... Что такое LEGO Mindstorms?

«Робот-игрок в гольф» — робот построеный с использованием набора NXT. «Робот-рука» — робот построеный с использованием набора NXT.

LEGO Mindstorms — это конструктор (набор сопрягаемых деталей и электронных блоков) для создания программируемого робота. Впервые представлен компанией LEGO в 1998 году. Через 8 лет (2006) в свет вышла модель LEGO Mindstorms NXT, а в 2009 — LEGO Mindstorms NXT 2.0.

Наборы

Наборы LEGO Mindstorms комплектуются набором стандартных деталей LEGO (палки, оси, колеса, шестерни) и набором, состоящим из сенсоров, двигателей и программируемого блока. Наборы делятся на базовый набор и расширенный.

Базовый набор поставляется в двух версиях: версия для широкой продажи и базовый обучающий набор. Оба набора могут быть использованы для участия в соревнованиях робототехники (например во Всемирной олимпиаде роботов (англ. World Robot Olympiad)). Расширенный набор содержит большее количество деталей.

Управляющие инструменты

В состав наборов могут входить управляющие блоки различных версий. В настоящее время их 2. Также у блоков существуют модификации (обозначается 1.0; 2.0 и т. д.)

RCX NXT

Сенсоры

Наборы LEGO Mindstorms располагают огромным количеством сенсоров как компании LEGO, так и сторонних производителей (HiTechnic, Mindsensors). Примеры стандартных сенсоров для LEGO Mindstorms NXT.

Программы

В комплект набора LEGO Mindstorms входит стандартное ПО NXT-G и Robolab, но также сторонние компании создали свои ПО для программирования роботов LEGO Mindstorms. Языки программирования для LEGO Mindstorms бывают графические и текстовые.

Соревнования

Во многих странах широко распространено обучение в школах и колледжах с использованием наборов LEGO Mindstorms. С развитием этого опыта стали популярны соревнования роботов, где каждое учебное учреждение могло выставить на соревнования свои команды.

В России соревнования по робототехнике стали проводиться примерно с 2000 года. Сначала проходят соревнования в регионах, затем в Москве (МСР — Московские Соревнования Роботов) (где собираются победители всех регионов), а после финалисты Московского этапа едут в другие страны для участия в соревнованиях на мировом уровне. Это соревнование называется WRO (World Robot Olympiad — Всемирная Олимпиада Роботов). Команды из России имеют достаточно хорошие результаты и не раз занимали призовые места на WRO. В Санкт-Петербурге самые известные соревнования проходят осенью и весной в Физико-Математическом Лицее № 239

Вид соревновательного поля Вид робота

См. также

Ссылки

dic.academic.ru

NiNoXT: Самый ожидаемый продукт года

Также в образовательный набор включили довольно полезную деталь - Ball Wheel. Это опорное колесо, которое позволяет поворачивать роботу в любых направлениях. На данном фото еще не хватает металлического шара, который вставляется внутрь полости.

Датчики и моторы

Как уже было отмечено, в наборе также будет 3 мотора, но один из них будет отличаться от остальных, как по размерам так и по техническим характеристикам.

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

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

Характеристики датчиков и моторов представлены ниже.

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

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

Датчик цвета

Он различает 7 цветов и может определить отсутствие цвета. Как и в прошлой версии он может работать как датчик освещенности.
  • Измеряет отраженный красный свет и окружающее освещение
  • Способен определять различия между белым и черным или цветами: синим, зеленым, желтым, красным, белым и коричневым
  • Частота работы: 1 кГц
ГироскопОн доступен в образовательной версии набора. Этот цифровой датчик измеряет вращательное движение робота и изменение его положения.
  • Может использоваться для определения текущего направления вращения
  • Точность: +/- 3 градуса на 90 градусов оборота (в режиме измерения наклона)
  • Может определить максимум 440 градусов/c (в режиме гироскопа)
  • Частота работы: 1 кГц
Ультразвуковой датчик расстоянияК основной функции данного сенсора - определения расстояния, добавилась еще одна - он также может слушать ультразвуковые колебания, испускаемые другими датчиками ультразвука.
  • Может измерять расстояние в диапазоне 3 - 250 см.
  • Точность измерений : +/- 1 см
  • Дискретность результата измерений: 0.1 см.
  • Может быть использован для поиска других активных ультразвуковых датчиков (режим прослушивания)
  • Красная LED подсветка вокруг "глаз"
Инфракрасный датчик расстояния (IR Seeker)Данный цифровой датчик измеряет расстояние и считывает сигналы, посылаемый инфракрасным маячком.
  • Может измерять расстояние приблизительно до 70 см.
  • Может быть использован в качестве приемника сигналов от инфракрасного маячка
  • Может измерять расстояние до маячка (до 2 метров)
  • Может принимать команды от блока управления \ маячка
  • Поддерживает 4 сигнальных канала

Инфракрасный маячок / блок управления

Был разработан для использования с инфракрасным датчиком расстояния IR Seeker. Маячок посылает инфракрасные сигналы, которые датчик может принимать. Маячок также может быть использован в качестве пульта управления EV3 блока. В этом случае команды также передаются инфракрасными сигналами и обрабатываются инфракрасным датчиком.
  • Для работы требуется 2 батарейки типа AAA
  • 4 индивидуальных канала
  • Кнопка маяка позволяет включать и выключать его
  • Автоматическое выключение, если маячок не использовался 1 час
  • Рабочая дистанция - 2 метра
  • Может использоваться в качестве маячка
  • Может использоваться для управления роботом (для этого предусмотрены 2 синие и 2 красные кнопки)
Большой моторМотор очень похож на предыдущую версию мотора NXT, однако корпус мотора стал чуть больше (виртуально он теперь занимает 14x7x5 отверстий против бывших 14x6x5). Также были изменены места крепления моторов и их тип.
  • 160- 170 об\мин
  • Заданный крутящий момент - 40 Н/см
  • Реальный крутящий момент - 20 Н/см
  • Датчик угла поворота мотора с точностью 1 градус
Средний моторДанный мотор основан на Power Function моторе аналогичного размера. Дополнительное место потребовали только датчик угла поворота и порт для подключения. Этот мотор отлично подойдет для работы под низкими нагрузками и высокими скоростями.
  • 240- 250 об\мин
  • Заданный крутящий момент - 12 Н/см
  • Реальный крутящий момент - 8 Н/см
  • Датчик угла поворота мотора с точностью 1 градус
Еще раз об изменившемся креплении моторов и датчиков: круглое отверстие посередине было заменено на крестообразное для фиксации осей. Также у больших моторов крепление было смещено на одно отверстие относительно оси.NXT датчики, моторы и кабели совместимы с EV3, таким образом все ранее построенные роботы могут управляться новым блоком.

Программируемый блок EV3

Серьезные изменения произошли и с программируемым блоком. По сравнению с NXT, EV3 имеет более быстрый процессор, больше памяти. Прошивка блока и программы сохраняются во флеш-памяти. Внутренне firmware EV3 базируется на свободно распространяемой ОС Linux, что позволит Lego-сообществу создавать свои прошивки для блока. Подключение с компьютером осталось практически прежним. Добавился еще один способ подключения: теперь кроме подключения блока к компьютеру (по USB или Bluetooth) возможно подключать блоки между собой (по USB). Также будет доступно подключение по WiFi c помощью USB-адаптера, подключаемого к блоку.

Следует отметить, что EV3 с NXT по BlueTooth связать не получится.

Ниже представлена сравнительная таблица характеристик NXT и EV3:

NXT EV3
Процессор Atmel 32-Bit ARM AT91SAM7S25648 MHz256 KB FLASH-RAM64 KB RAM ARM9300MHz16 MB Flash64 MB RAM
Со-процессор Atmel 8-Bit AVR, ATmega488 MHz4 KB FLASH-RAM512 Byte RAM -
Операционная система Проприетарная Linux
Порты ввода (для датчиков) 4 портаПоддерживают аналоговые, цифровые датчикиСкорость передачи данных: 9600 бит/с (I2C)4 портаПоддерживают аналоговые, цифровые датчикиСкорость передачи данных: до 460.8 Кбит/с (UART)
Порты вывода (для моторов) 3 порта 4 порта
Передача данных по USB  Используется режим full speed: 12 Мбит/c Используется режим high speed: 480 Мбит/с
Подключение USB устройств - Возможно последовательное подключение до 3 устройств, в том числе сетевых карт wi-fi и flash карт
Устройство для чтения SD карт - Поддерживает miniSD карты, максимальный объем - 32 Гб
Подключение к мобильным устройствам к устройствам с ОС Android к устройствам с ОС Android и iOS (iPhone, iPad)
Экран LCD, монохромный100 * 64 пикселей LCD, монохромный178 * 128 пикселей
Взаимодействие BluetoothUSB 2.0 Bluetooth v2.1 DERUSB 2.0 (при подключении к ПК)USB 1.1 (при последовательном подключении нескольких устройств)

Среда программирования

С EV3 в комплекте поставляется новая среда разработки на базе LabView, похожая на NXT-G. Работать она будет, как и NXT-G, на ОС Windows и Mac. Но есть и множество различий. Появилось такое понятие как проект, который содержит программу для робота, документацию и результаты экспериментов. В проект можно добавлять новый и уже существующие программы. Также был добавлен инструмент zoom, который позволяет масштабировать программу, чтобы, например, увидеть всю программу целиком. Можно программировать NXT блок с помощью новой среды EV3, однако он поддерживает не все особенности нового языка программирования.

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

Тесная интеграция между P-блоком (новое название, вместо NXT блока) и средой программирования:

  • Специальная страница с подключенным оборудованием позволяет отслеживать его статус и получать значения на датчиках в реальном времени
  • Причем оборудование автоматически распознается при подключении, благодаря функции auto-id (автоматическое определение оборудования). Т.е. не надо указывать, что к такому-то порту подключен такой-то датчик или мотор
Новый режим отладки:
  • Подсветка места исполнения позволит определить в каком конкретном месте алгоритма исполняется сейчас программа
  • Специальный символ будет отображаться на соответствующем программном блоке, если с заданным портом используется не тот датчик или мотор. Это опять же достигнуто с помощью auto-id функциональности
  • Есть возможность просматривать значения, передаваемые через каналы данных (data wires)
Новые возможности программных блоков:
  • Сцепление блоков друг с другом позволило отказаться от "балки исполнения", на которой располагались блоки в среде NXT-G
  • У блоков нет такого понятия, как панель настройки, - поведение теперь настраивается непосредственно на блоке, что привело к увеличению их размера. Удобство заключается в том, что программу теперь становиться легче читать - видно сразу на что датчик реагирует или как ведет себя мотор
  • Появились блоки "ждать изменения", которые позволяют реагировать просто на изменение, а не на изменение до определенного значения (обычные блоки Ожидания/Wait в NXT-G)
  • Улучшения в передачи данных от блока к блоку позволяют упростить преобразование типов (помните, блок "Число в Строку" в NXT-G?)
  • Есть возможность работать с массивами
  • Стал возможен досрочный выход из цикла
Кроме нового языка программирования появились программы под Android и iPhone\iPad для управления роботом. Также на базе программы Autodesk Invertor Publisher создана программа для создания и просмотра пошаговых 3D инструкций. В этой программе можно масштабировать и вращать модель на каждом этапе сборки, что позволяет строить более сложных роботов по инструкциям.

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

Базовые роботы

В коробочную версию набора будут включены инструкции для сборки 5 роботов:

EV3RSTORM

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

Классическая задача по сортировке предметов (в данном случае - Lego деталей) по цвету.

Робот-сигвей, использующий гироскоп для балансировки.

Puppy Робот-собачка, которую можно гладить, кормить. Спать и справлять нужду она также умеет :) Напоминает тамагочи.

nnxt.blogspot.ru


Смотрите также