И HTC Desire с прошивкой cyanogen 7.1.0 RC1 (Android 2.3.4). На всякий случай напомню, что все что будет описываться дальше - работает только начиная с Android 2.3.4 для телефонов и Android 3.1 для планшетов.

Тут стоит отметить что данный USB Host Shield не совсем удачный, особенно в сочетании с Arduino Mega 2560. Первая проблема заключалась в том что данная плата расширения сделана для Arduino UNO, а она отличается от Mega положениями контактов SPI, поэтому пришлось кидать перемычки (см. фото). Второй проблемой, хотя и вполне ожидаемой, стала потребность во внешнем источнике питания для работы этой платы расширения. Более удачной считается USB Host Shield 2.0 от Circuits@Home, но она и дороже.

Плата с перекинутыми SPI контактами

Настройка Arduino ПО

1. Если еще не установлено, то скачать и установить ПО для Arduino .
2. Скачать и распаковать пакет ADK (содержит DemoKit приложение). Должны появится папки app , firmware , и hardware .
3. Скачать библиотеку CapSense
4. Скопировать firmware/arduino_libs/AndroidAccessory и firmware/arduino_libs/USB_Host_Shield в /libraries/ .
5. Создать директорию CapSense в /libraries/ и скопировать в нее CapSense.cpp и CapSense.h из архива CapSense.

Загрузка прошивки

Google любезно предоставляет свой DemoKit скетч для Arduino. Все что нужно - это открыть его из firmware/demokit/demokit.pde , скомпилировать и залить на плату.

Тестовое Android приложение

В DemoKit пакете также находятся исходники Android приложения для демонстрации возможностей. Google предлагает нам самостоятельно создать Android проект и собрать это приложение. Для начала нам надо будет установить API Level 10 . Дальше все просто - создаем Android проект и указываем путь к папке app , в Build Target указываем Google APIs (Platform 2.3.3 , API Level 10). Собираем приложение и устанавливаем на телефон. Кто не хочет возится со сборкой - может скачать готовый APK .

Запуск

Просто подключаем наш телефон к USB Host Shield. Если мы все сделали правильно, то на экране появится запрос запуска DemoKit приложения.

Само приложение содержит две вкладки - In (кнопки, джойстик и сенсоры) и Out (светодиоды, реле и сервоприводы).

Я решил что для демонстрации вполне достаточно пары светодиодов и кнопки. Как это все чудо работает можно пронаблюдать на видео.

Немного кода

В рассматриваемом примере сообщения, передающиеся по USB, состоят из трех байтов:
1-й байт определяет команду или группу устройств, например светодиоды - 0x2
2-й байт указывает на конкретное устройство, например зеленый светодиод - 0x1
3-й байт содержит значение, передаваемое устройству, например максимальная яркость - 0xff

Arduino

... /* инициализация */ AndroidAccessory acc("Google, Inc.", "DemoKit", "DemoKit Arduino Board", "1.0", "http://www.android.com", "0000000012345678"); void setup() { .... acc.powerOn(); } void loop() { byte msg; /* проверка подключения */ if (acc.isConnected()) { /* получение сообщения от Android устройства */ int len = acc.read(msg, sizeof(msg), 1); if (len > 0) { /* сообщение для светодиодов */ if (msg == 0x2) { if (msg == 0x0) analogWrite(LED3_RED, msg); else if (msg == 0x1) analogWrite(LED3_GREEN, msg); else if (msg == 0x2) analogWrite(LED3_BLUE, msg); } } msg = 0x1; b = digitalRead(BUTTON1); if (b != b1) { msg = 0; msg = b ? 1: 0; /* отправка состояния кнопки */ acc.write(msg, 3); b1 = b; } } }

Android

import com.android.future.usb.UsbAccessory; import com.android.future.usb.UsbManager; ... public class DemoKitActivity extends Activity implements Runnable { private UsbManager mUsbManager; UsbAccessory mAccessory; FileInputStream mInputStream; FileOutputStream mOutputStream; ... private void openAccessory(UsbAccessory accessory) { mFileDescriptor = mUsbManager.openAccessory(accessory); if (mFileDescriptor != null) { mAccessory = accessory; FileDescriptor fd = mFileDescriptor.getFileDescriptor(); mInputStream = new FileInputStream(fd); mOutputStream = new FileOutputStream(fd); Thread thread = new Thread(null, this, "AccessoryThread"); thread.start(); } } public void run() { int ret = 0; byte buffer = new byte; int i; while (ret >= 0) { // получение входящих сообщений ret = mInputStream.read(buffer); i = 0; while (i < ret) { int len = ret - i; switch (buffer[i]) { case 0x1: // сообщение от кнопки if (len >= 3) { Message m = Message.obtain(mHandler, MESSAGE_SWITCH); m.obj = new SwitchMsg(buffer, buffer); mHandler.sendMessage(m); } i += 3; break; } } } } // пример использования - включить красный светодиод на полную яркость: // mActivity.sendCommand((byte)2, (byte)0, (byte)255) public void sendCommand(byte command, byte target, int value) { byte buffer = new byte; if (value > 255) value = 255; buffer = command; buffer = target; buffer = (byte) value; if (mOutputStream != null && buffer != -1) { try { mOutputStream.write(buffer); } catch (IOException e) { ... } } } }

Выводы

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

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

Многие сегодня мечтают жить в «умном» доме. Но коммерческие решения в наше время отталкивают своей немалой ценой. К счастью, систему домашней автоматики можно сделать самостоятельно на основе дешевых и легкодоступных компонентов.



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


Для проекта потребуется немного элементов: плата Arduino или любой клон, интерфейсный модуль TTL-UART Bluetooth с рабочим напряжением 5 В, несколько реле и драйвера (цепи управления) к ним, ну и, конечно же, смартфон или планшет на Android.


Этот проект включает в себя две отдельные части: схему управления аппаратным обеспечением и Android-приложение. Связь между цепью управления и приложением для Android осуществляется с помощью беспроводного интерфейса Bluetooth. ASCII команды пересылаются с телефона в Arduino, которые в дальнейшем расшифровываются и представляются командами на включение или отключение определенного бытового прибора.


Разработчики приложений для Android-устройств в большинстве своем знают язык программирования Java, но в данном случае знание этого языка не понадобится, поскольку есть довольно простая и понятная онлайн среда разработки App Inventor, созданная в MIT. Она специально создана для людей, не разбирающихся в программировании на Java, и предлагает собирать приложение визуально из блоков операций. Вот так выглядит наша программа для Android:



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


Теперь нужно собрать схему, как показано на рисунке ниже.



Учтите, что линия RX на Arduino должна быть соединена с линией TX модуля Bluetooth, а линия TX на Arduino должна быть соединена с линией RX модуля Bluetooth.


Для программирования платы Arduino у вас должна быть установлена среда разработки Arduino IDE. Ниже приведен скетч для Arduino.


const int led1 = 2; const int led2 = 3; const int led3 = 4; const int led4 = 5; byte serialA; void setup() { Serial.begin(9600); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); } void loop() { if (Serial.available() > 0) {serialA = Serial.read();Serial.println(serialA);} switch (serialA) { case 1: digitalWrite(led1, HIGH); break; case 11: digitalWrite(led1, LOW); break; case 2: digitalWrite(led2, HIGH); break; case 22: digitalWrite(led2, LOW); break; case 3: digitalWrite(led3, HIGH); break; case 33: digitalWrite(led3, LOW); break; case 4: digitalWrite(led4, HIGH); break; case 44: digitalWrite(led4, LOW); break; } }

После того, как вы записали скетч в Arduino и установили приложение под Android, нужно подключиться с телефона к модулю Bluetooth. Для этого включите питание Arduino и модуля Bluetooth и активируйте Bluetooth на вашем телефоне, сделав его также видимым для всех устройств. После этого в списке поиска других Bluetooth-устройств вы сможете найти этот модуль. Введите код сопряжения, который, как правило, представляет собой «1234» или «0000».



Устройство, с которым вы сопрягаетесь, в данном случае будет носит название. После сопряжения включайте приложение EG-HOME и нажмите на кнопку Bluetooth, чтобы выбрать сопряженное устройство в программе. После этого ваш телефон будет подключен к цепи управления, и, нажимая соответствующие кнопки, вы будете включать или выключать лампы.

Очень часто в ваших проектах возникает необходимость в дистанционном управлении или передачи данных с ваших телефонных гаджетов.

Один из самых популярных и распространенных методов обмена данными посредством Bluetooth.

Сегодня мы разберем простые примеры как можно подключить Bluetooth модуль к Arduino и настроить дистанционное управление с телефона.

Нам понадобится:

  • Набор проводов ПАПА-МАМА
  • HC-06 Bluetooth

Подключать Bluetooth модуль к микроконтроллеру Arduino удобнее всего с помощью проводков ПАПА-МАМА .

Arduino Bluetooth
Pin 1 (TX) RXD
Pin 0 (RX) TXD
GND GND
5V VCC

Будьте внимательны, подключать подключать нужно TX -> RXD ,RX -> TXD .

Теперь необходимо записать пробный код программы:

Во время загрузки скетча необходимо что бы Bluetooth модуль был отключен от микроконтроллера arduino. В противном случае скетч не запишется, потому что связь с Bluetooth модулем происходит по одному и томуже порту RX и TX, что и USB.

Int val; int LED = 13; void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); } void loop() { if (Serial.available()) { val = Serial.read(); // При символе "1" включаем светодиод if (val == "1") { digitalWrite(LED, HIGH); } // При символе "0" выключаем светодиод if (val == "0") { digitalWrite(LED, LOW); } } }

После того как скетч записан и Bluetooth модуль подключен к Arduino, можно перейти к следующему шагу.

Подключение Bluetooth к телефону

Желательно в качестве источника питания для arduino использовать не USB, а внешний Блок питания на 9 В.

  1. Включаем Bluetooth на телефоне и ищем новые устройства
  2. Находим в списке расстройств "HC-06" и подключаемся к нему.
  3. Телефон спросит пин-код. необходимо ввести "1234 " или "0000 "
  4. Ура. Устройство подключено.

Теперь нужно скачать bluetooth terminal на ваш телефон. Мы рассмотрим на примере платформы Android.



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

После того как мы установили терминал, запускаем его выбираем наш bluetooth модуль HC-06 и подключаемся к нему.

Пришло время попробовать проект в деле. Пишем в терминале цифру "0" и отправляем. Светодиод L который находится на плате arduino рядом с pin 13, должен погаснуть. Теперь отправим через терминал цифру "1" и светодиод L должен зажечься.

Демонстрация работы:


Домашняя работа:

  • Изменить скетч так, что бы светодиод зажигался и потухал с помощью одной и той же команды например "G".
  • Дописать скетч и научить его преобразовывать текстовые данные приходящие через блютус в цифровые и реализовать димер, зажигать светодиод с помощью ШИМ, на заданную яркость от 0 до 254 приходящую через bluetooth.

Кто не хочет избавиться от этих громоздких кнопок и запутанных проводов во время работы над проектами? Приложения для удаленного управления Arduino на Android предоставляют графический интерфейс пользователя (GUI) для легкого управления микроконтроллером.

Созданная в 2003 году платформа Arduino быстро попала на глаза сообществам с открытым исходным кодом и любителям радиоэлектроники из-за её низкой цены, тонн онлайн-учебников и многомиллионного поддерживающего сообщества. Платы поставляются с различными микропроцессорами и микроконтроллерами, наиболее популярными среди которых являются с Atmega328. Благодаря большому количеству коммерчески доступных модулей расширения эти итальянские платы стали выбором для новичков для исследования мира встроенных систем.

1. Arduino Bluetooth Controller

Это приложение имеет простой пользовательский интерфейс и его легко настроить. Соедините Android с модулем Bluetooth, подключенным к Arduino. Можно подключаться в 4 разных режимах:

  1. Режим контроллера: этот режим представляет собой интерфейс игрового контроллера. При нажатии любой из экранных кнопок будет отправлена соответствующая команда на Arduino. Легко управляйте своим роботом с помощью этого приятного интерфейса.
  2. Режим переключателя: этот режимсостоит из одной кнопки, которую вы можете использовать для дистанционного управления переключателем.
  3. Режим диммера: режим диммера может отправлять изменяющиеся значения в Arduino. Очень полезно, когда нужно фиксировать такие данные, например, как яркость и скорость.
  4. Режим терминала. Отправьте свои пользовательские команды в этом режиме и напишите несколько строк кода на вашем Arduino, чтобы декодировать команды.

2. Bluetooth Controller 8 Lamp

Благодаря поддержке модулей Bluetooth HC-05, HC-06 и HC-07, это приложение позволяет контролировать до 8 каналов. Оно имеет простой пользовательский интерфейс, состоящий из 8 кнопок для соответствующих каналов.

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

У Arduino недостаточно памяти и вычислительной мощности для эффективного распознавания речи. Что если мы сможем использовать функцию распознавания речи Android для отправки команд на Arduino?

Это именно то, для чего это приложение создано. Оно принимает речевой ввод и отправляет его в Arduino через Bluetooth в виде строки.

4. RemoteXY: Arduino Control

Приложение позволяет управлять Arduino с помощью Bluetooth, Wi-Fi и даже через Ethernet. Создайте свой собственный уникальный графический интерфейс для этого приложения, посетив веб-сайт приложения - remotexy. Получайте удовольствие от создания кнопок, переключателей, слайдеров, джойстиков и других элементов GUI для управления вашим Arduino.

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

5. Virtuino

Virtuino позволяет визуализировать ваши проекты, как никакое другое приложение. Контролируйте одновременно несколько плат Arduino через Bluetooth, Wi-Fi, Интернет или даже через SMS.

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

6. Blynk

Благодаря красивому дизайну Blynk позволяет создавать пользовательские интерфейсы для Arduino и управлять ими с помощью USB, ethernet, Wi-Fi и Bluetooth. Совместное использование проектов стало проще, просто поделитесь ссылкой на него.

7. IoT Wifi Controller

IoT Wifi Controller имеет уникальный интерфейс, который отображает конфигурацию каждого из контактов IO Arduino. Переключайте значения высокого или низкого уровня GPIO и просматривайте его в режиме реального времени. Также отображается значение ADC. Оно подключается к плате, используя ваш телефон или через маршрутизатор.

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

Мы рассмотрели установку и настройку необходимого нам программного обеспечения для разработки под ADK и Android. Теперь, когда у нас все готово для работы, мы можем создать наш первый проект. И по традиции - это будет проект со светодиодом.

Проект будет очень простой - на экране Android-устройства будет отображаться кнопка, при нажатии на которую на отладочной плате будет загораться светодиод, а при отпускании - гаснуть.

Программа для Arduino

Создаем новый проект. Наш исходный код будет очень простой:

#include #include Connection * connection; void adbEventHandler(Connection * connection, adb_eventType event, uint16_t length, uint8_t * data) { if (event == ADB_CONNECTION_RECEIVE) // Если приняли данные { digitalWrite(13, data); // Изменяем состояние LED в зависимости от принятой переменной } } void setup() { pinMode(13,OUTPUT); // Используем встроенный светодиод L платы Seeeduino ADK ADB::init(); connection = ADB::addConnection("tcp:4568", true, adbEventHandler); } void loop() { ADB::poll(); }

Вкратце - мы инициализируем и создаем ADB соединение, а также определяем функцию adbEventHandler() , которая будет вызываться каждый раз, когда будут приниматься данные от Android-устройства. Когда данные приняты, то мы записываем принятый байт при помощи функции digitalWrite() , тем самым зажигая или гася светодиод.

Теперь компилируем скетч и загружаем его в нашу плату.

Программа для Android

Открываем Eclipse IDE и создаем новый проект: New -> Project... Откроется окошко, в котором находим папку Android и выбираем пункт Android Application Project. Нажимаем кнопку Next, и заполняем название проекта и некоторые параметры.

Далее нажимаем Next и формируем иконку приложения и др. После нажатия кнопки Finish ваше приложение готово. Теперь в окне Package Explorer щелкните правой кнопкой на вашем проект и выберите свойства проекта: Properties. Удостовертесь, что в качестве Target Name у вас выбран Google API, а не Android.

Затем открываем файл манифеста AndroidManifest.xml и в нем прописываем строку, для того, чтобы ОС Android дала нам разрешение на доступ к соответствующим службам:

Далее, копируем необходимые библиотеки для обеспечения работы MicroBridge режима: /src/org/microbridge/server и в этой папке 4 файла. Взять их вы можете с архива в конце статьи или с оригинального примера от seeed studio.

Теперь нам необходимо на activity (окно приложения) добавить графические элементы для взаимодействия с пользователем. Пока что у нас будет всего 2 элемента: текст и ToggleButton (кнопка с 2-мя состояниями).
Формировать пользовательский интерфейс можно двумя способами: при помощи графического расположения (простым перетаскиванием и компоновкой) и при помощи XML-файла. Воспользуемся Graphical Layout. Для этого, в окне ресурсов приложения щелкаем по файлу /res/layout/activity_main.xml . И в появившееся окно перетаскиваем ToggleButton:

Теперь открываем наш основной файл /src/com/example/arduino52/MainActivity.java , все в нем удаляем и копируем следующие строки:

Package com.example.arduino52; import java.io.IOException; import org.microbridge.server.Server; import android.os.Bundle; import android.util.Log; import android.app.Activity; import android.widget.ToggleButton; import android.widget.CompoundButton; public class MainActivity extends Activity implements CompoundButton.OnCheckedChangeListener { Server server = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ToggleButton mButton = (ToggleButton)findViewById(R.id.toggleButton1); mButton.setOnCheckedChangeListener(this); // Создаем TCP сервер (на основе сервера MicroBridge LightWeight) try { server = new Server(4568); //Этот же порт необходимо использовать и на ADK-плате server.start(); } catch (IOException e) { Log.e("arduino52", "Unable to start TCP server", e); System.exit(-1); } } @Override protected void onDestroy (){ super.onDestroy(); server.stop(); } public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { byte data; if(isChecked) // Если кнопка нажата { data = 1; } else { data = 0; } try { //Посылаем данные server.send(new byte {(byte) data}); } catch (IOException e) { Log.e("arduino52", "Problem sending TCP message", e); } } }

Приложение на Android несколько сложнее, всю структуру его я расписывать не буду, для этого есть специализированные сайты и книги. Расскажу лишь основные моменты, которые нужны для нашего проекта.
Итак вначале инициализируется наш MicroBridge сервер, которые вешается на 4568 порт. Точно такой же порт должен стоят в вашем скетче Arduino.
Затем обьявляется обработчик onCheckedChanged () , который вызывается каждый раз при изменении состояния нашей кнопки ToggleButton. Далее, в зависимости от состояния кнопки, в переменную data мы сохраняем 1 или 0. И после, происходит попытка отправить эти данные функцией server.send ()

Далее подключаем наше Android устройство к компьютеру, запускаем наш проект Run, выбираем там наше реальное устройство (а не виртуальное) и ждем пока программа скомпилируется и проинсталлируется в ваш телефон или планшет.