lego_mindstorms_nxt_2_0_9797_manual_rus
ТЕХНОЛОГИЯ ИНТЕРАКТИВНЫЕ СЕРВОМОТОРЫ Три интерактивных сервомотора обеспечивают роботу возможность перемещаться. Встроенный датчик оборотов Каждый мотор оснащён встроенным датчиком оборотов, что позволяет очень точно управлять движениями робота. Датчик производит измерения в градусах или в количестве полных оборотов (точность измерения +/−один градус). Один полный оборот соответствует 360 градусам, следовательно, если вы зададите мотору поворот на 180 градусов, его вал сделает пол оборота. Возможные применения Встроенные датчики оборотов, наряду с возможностью управления мощностью моторов (в программе настольного компьютера, см. с. 53–55) позволяют задавать различную скорость вращения и обеспечивают высокую точность движений робота. View Проверьте способность датчика оборотов измерять расстояния, используя меню View . Подключите мотор к NXT. Откройте на экране NXT меню View .
Выберите значок Motor | Выберите порт, к которому подключен мотор. А теперь закрепите на валу мотора колесо и |
rotations (Обороты мотора). | определите количество оборотов, прокатив его по полу. |
Корпус мотора | Ступица с осевым |
отверстием | |
для установки колеса. | |
Встроенная | |
зубчатая передача |
Try Me Чтобы быстро проверить, как работает мотор, воспользуйтесь соответствующей программой меню Try Me (см. с. 17). NXT Program Функция NXT Program (Программы NXT) позволяет выполнять прямое программирование блока NXT без помощи компьютера. Для создания программ с использованием мотора обратитесь к разделу NXT Program на с. 15.
ТЕХНОЛОГИЯ ЛАМПЫ Лампы можно включать и выключать, создавая сверкающие модели. Их можно также применять для активации датчика освещённости, или для индикации включения мотора, или для контроля состояния датчиков, или для «оживления» «глаз» робота, или для других подобных целей. Подключайте лампы к разъёмам А, В или С через кабелипереходники. В наборе имеется три переходника и три лампы. View Применим лампы для активации датчика освещённости. Выберите Ambient Light (Освещенность).
1 | 2 | 3 |
Используйте лампы для активации | Зажгите лампу вблизи датчика | Обратите внимание: показания |
датчика освещённости. Выберите | освещённости. | датчика изменяются. |
Ambient Light (Окружающее | ||
освещение). |
33 |
Bluetooth – это технология беспроводной связи. При помощи функции Bluetooth можно установить беспроводное соединение между микрокомпьютером NXT и другими устройствами, обладающими устройством Bluetooth, например, с другими NXT, с мобильными телефонами или с компьютерами.
Установив соединение Bluetooth, вы можете: • загружать программы с компьютера без кабеля USB; • отправлять программы с других устройств (не с компьютера), в том числе и с вашего NXT; • отправлять программы как на отдельные NXT, так и на их группы. Группа может состоять не более чем из трёх NXT.
Если ваш мобильный телефон имеет функцию Bluetooth, то с его помощью можно управлять роботом. Более того, вы даже можете применять телефон в качестве усовершенствованного датчика, например, используя его встроенную камеру. Более подробную информацию о требованиях, предъявляемых к мобильным телефонам, можно найти на сайте www.MINDSTORMSeducation.com .
34 |
ТЕХНОЛОГИЯ ИСПОЛЬЗОВАНИЕ BLUETOOTH Прежде чем устанавливать беспроводное соединение Bluetooth, удостоверьтесь, что ваш компьютер оснащён функцией Bluetooth. Если компьютер не имеет Bluetooth, можно воспользоваться внешним Bluetooth USB устройством. Более подробную информацию о различных типах внешних устройств Bluetooth можно найти на сайте www.MINDSTORMSeducation.com . Установка соединения с ПК
1 | 2 |
Убедитесь, что микрокомпьютер NXT включен. Также проверьте настройки: функция Bluetooth должна быть включена ( ON ), для NXT должно быть установлено состояние Visible (Видим) (порядок работы в меню Bluetooth описан на с. 40). Удостоверьтесь, что устройство Bluetooth установлено на ПК и активировано.
В открывшемся окне нажмите кнопку Scan (Сканирование). Компьютер автоматически начнёт поиск устройств Bluetooth. После небольшой паузы в окне появится список устройств. Выберите из этого списка устройство, с которым следует установить соединение, и нажмите кнопку Connect (Соединить). Примечание: нажимая кнопку Scan несколько раз, можно увеличить количество выбранных устройств.
5 При первом подключении к устройству, открывается окно ввода пароля ( Enter Passkey ). Введите пароль, который будет использоваться с данным устройством (его значение по умолчанию 1234), и нажмите кнопку ОК .
36 |
ТЕХНОЛОГИЯ ИСПОЛЬЗОВАНИЕ BLUETOOTH 6 На микрокомпьютере NXT введите пароль и нажмите оранжевую кнопку. Если выбран пароль, заданный по умолчанию, оранжевую кнопку можно нажимать сразу. В Программе для ПК в окне NXT window состояние 7 NXT Available (Доступен) сменится на Connected (Подключен). Теперь ПК и NXT соединены между собой и могут обмениваться информацией. Установка соединения с компьютером Макинтош
1 | 2 |
Убедитесь, что микрокомпьютер NXT включен. Также проверьте настройки: функция Bluetooth должна быть включена ( ON ), для NXT должно быть установлено состояние Visible (Видим) (порядок работы в меню Bluetooth описан на с. 40). Удостоверьтесь, что устройство Bluetooth установлено на настольном компьютере и активировано.
На пульте управления Программы для настольного компьютера нажмите кнопку NXT window (она находится слева вверху).
Нажмите кнопку Scan (Сканирование). Откроется окно Bluetooth . В окне Select Bluetooth Device появится список устройств. Выберите из этого списка устройство, с которым следует установить соединение, и нажмите кнопку Select . Микрокомпьютер NXT, с которым вы хотите установить соединение, отобразится в окне NXT как доступное устройство. Нажмите кнопку Connect .
ТЕХНОЛОГИЯ ИСПОЛЬЗОВАНИЕ BLUETOOTH 6 7 8 На микрокомпьютере NXT введите пароль и нажмите оранжевую кнопку. Если выбран пароль, заданный по умолчанию, оранжевую кнопку можно нажимать сразу.
Откроется окно Pair with Bluetooth Device . Выберите NXT и нажмите кнопку Pair . При первом подключении к устройству, открывается окно ввода пароля ( Enter Passkey ). Введите пароль, который будет использоваться с данным устройством (его значение по умолчанию 1234), и нажмите кнопку ОК . 9 Теперь ваш Макинтош и микрокомпьютер NXT соединены между собой и могут обмениваться информацией.
ТЕХНОЛОГИЯ ИСПОЛЬЗОВАНИЕ BLUETOOTH Меню Bluetooth на экране микрокомпьютера NXT Bluetooth Выберите меню Bluetooth на экране NXT. Search (Поиск) Произведите поиск других устройств Bluetooth. После выбора команды Search (Поиск) микрокомпьютер NXT автоматически начнёт поиск других устройств Bluetooth, к которым он может подсоединиться.
My Contacts (Мои контакты) В этом списке перечислены все устройства, к которым NXT подключался ранее. Устройства из этого списка могут автоматически соединяться с NXT и обмениваться с ним данными, не требуя ввода пароля. Чтобы добавить новые устройства к списку My Contacts (Мои контакты), используйте функцию поиска.
Connections (Соединения) В этом списке перечисляются все устройства, к которым NXT подсоединён в настоящий момент. Одновременно можно подключиться к трем устройствам (Линии 1, 2 и 3), но к NXT может быть подключено только одно устройство (Линия 0). Вы можете «общаться» одновременно только с одним устройством.
Bluetooth-connection between Android and Lego Mindstorm NXT
Does anybody know, how to build a bluetooth connection between Android and LEGO-Mindstorm-NXT? The connection between two NXTs works fine. But the other Connection-type likes not so easy. I am working with the LeJOS Firmware 0.85 and the Android SDK Tools (2.2 Froyo).
See below in my answer how does it works. By the first run or the first connect to the NXTs, the Smartphone will be automaticly pair to the NXT and ask you to the key from the nxt to pair with it.
2 Answers 2
So i’ve solved it and will show all how does it works, because i’ve seen that a lot of people have problems with that.
The class includes 4 functions:
- Bluetooth enable if not enabled before -> enableBT()
- Connect to 2 NXTs -> connectToNXTs()
- Write Message to one of the NXTs -> writeMessage(byte msg, String nxt)
- Read Message from one of the NXTs -> readMessage(String nxt)
Here is the code for the android device (BT_comm.java):
package de.joen.android.CubeScan; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.UUID; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.util.Log; public class BT_Comm < //Target NXTs for communication final String nxt2 = "00:16:53:04:52:3A"; final String nxt1 = "00:16:53:07:AA:F6"; BluetoothAdapter localAdapter; BluetoothSocket socket_nxt1, socket_nxt2; boolean success = false; // Enables Bluetooth if not enabled public void enableBT()< localAdapter = BluetoothAdapter.getDefaultAdapter(); // If Bluetooth not enable then do it if (!localAdapter.isEnabled()) < localAdapter.enable(); while(!(localAdapter.isEnabled())); >> // Connect to both NXTs public boolean connectToNXTs() < // Get the BluetoothDevice of the NXT BluetoothDevice nxt_2 = localAdapter.getRemoteDevice(nxt2); BluetoothDevice nxt_1 = localAdapter.getRemoteDevice(nxt1); // Try to connect to the nxt try < socket_nxt2 = nxt_2.createRfcommSocketToServiceRecord(UUID .fromString("00001101-0000-1000-8000-00805F9B34FB")); socket_nxt1 = nxt_1.createRfcommSocketToServiceRecord(UUID .fromString("00001101-0000-1000-8000-00805F9B34FB")); socket_nxt2.connect(); socket_nxt1.connect(); success = true; >catch (IOException e) < Log.d("Bluetooth","Err: Device not found or cannot connect"); success=false; >return success; > public void writeMessage(byte msg, String nxt) throws InterruptedException < BluetoothSocket connSock; // Swith nxt socket if (nxt.equals("nxt2")) < connSock=socket_nxt2; >else if(nxt.equals("nxt1")) < connSock = socket_nxt1; >else < connSock=null; >if (connSock!=null) < try < OutputStreamWriter out = new OutputStreamWriter(connSock.getOutputStream()); out.write(msg); out.flush(); Thread.sleep(1000); >catch (IOException e) < // TODO: Auto-generated catch block e.printStackTrace(); >> else < // Error >> public int readMessage(String nxt) < BluetoothSocket connSock; int n; // Swith nxt socket if (nxt.equals("nxt2")) < connSock=socket_nxt2; >else if (nxt.equals("nxt1")) < connSock=socket_nxt1; >else < connSock=null; >if (connSock!=null) < try < InputStreamReader in = new InputStreamReader(connSock.getInputStream()); n = in.read(); return n; >catch (IOException e) < // TODO: Auto-generated catch block e.printStackTrace(); return -1; >> else < // Error return -1; >> >
To get messages from the Android Smartphone you must have a read call on the NXT-side. Here is the code from the NXT-side wich will accept the connection from the Smartphone and read messages from it:
Boolean isrunning = true; // Main loop while (true) < LCD.drawString(waiting,0,0); LCD.refresh(); // Listen for incoming connection NXTConnection btc = Bluetooth.waitForConnection(); btc.setIOMode(NXTConnection.RAW); LCD.clear(); LCD.drawString(connected,0,0); LCD.refresh(); // The InputStream for read data DataInputStream dis = btc.openDataInputStream(); // Loop for read data while (isrunning) < Byte n = dis.readByte(); LCD.clear(); LCD.drawInt(n, 4, 4); >dis.close(); // Wait for data to drain Thread.sleep(100); LCD.clear(); LCD.drawString(closing,0,0); LCD.refresh(); btc.close(); LCD.clear(); >
Hope this will help others.
Android, NXT и Bluetooth
Уже многие распаковывали, описывали и программировали для Mindstorms NXT, поэтому круг поклонников данной серии довольно широк. Сегодня пришло время расширить этот круг описанием особенности данного конструктора — bluetooth, благодаря которому конструктор может спокойно управляться с телефона.
Статья будет полезна тем, кто хочет просто поиграть с чем-нибудь механическим в свободное от работы время.
Вступление
С детства люблю различные конструкторы, поэтому этим летом решил купить себе Mindstorms 8547, благо цена устраивала и в описании упоминался bluetooth. К моему великому разочарованию выяснилось, что абсолютно не интересно сидеть и складывать кубики вместе — чувствуешь бездарное расходование времени. Но программная сторона вопроса манила. Чтение User Guide показало, что должна быть возможность управления роботом с помощью bluetooth, хотя бы банальными движениями — вперёд/назад/вправо/влево. В Google Play уже достаточно программ управления, но задача в том, чтобы сделать такую самостоятельно.
Дано:
1. Телефон на базе Android (LG P970)
2. Машинка из Mindstorms NXT 2.0
Реализация
После нескольких ночей в google выяснилось, что сайт Lego содержит всю необходимую информацию (не надеялся на такого подарок). Есть описание всего внутреннего содержимого блоков, сенсоров и протоколов передачи данных. Нас интересует только «Bluetooth Developer Kit». Внутри 4 файла:
• LEGO MINDSTORMS NXT Bluetooth Developer Kit.pdf
• Appendix 1-LEGO MINDSTORMS NXT Communication protocol.pdf
• Appendix 2-LEGO MINDSTORMS NXT Direct commands.pdf
• Appendix 3-LEGO MINDSTORMS NXT ARM7 Bluetooth Interface specification.pdf
Итого, вся задача сводится к тому, чтобы:
1. установить сопряжение телефона и блока управления NXT
2. подключиться к блок NXT
3. передать правильную команду.
4. получить ответ
Формат команды:
byte 0: младшая часть длины команды
byte 1: старшая часть длины команды
byte 2: тип команды
byte 3: команда
byte . аргументы, зависят от команды.
Примеры:
Получение заряда батареи:
GETBATTERYLEVEL
Byte 0: 0x00 or 0x80
Byte 1: 0x0B
Return package:
Byte 0: 0x02
Byte 1: 0x0B
Byte 2: Status Byte
Byte 3-4: Voltage in millivolts (UWORD)
код:
byte[]command = new byte[] 0x02, 0x00, 0x00, 0x0b
>;
mmOutStream.write(command);
mmOutStream.flush();
Движение вперёд:
byte[]command = new byte[] 0x0C,
0x00,
Запуск залитой программы:
Зная протокол обмена, реализация уже не представляет проблемы. Задача подключения к блоку управления тривиальна и описана на сайта Android, единственный интересный момент — это создание сокета. Создать его получилось, используя следующий код:
Method m = device.getClass().getMethod(«createRfcommSocket», new Class[] < int.class >);
BluetoothSocket sendSocket = (BluetoothSocket) m.invoke(device, 1);