Управление ардуино с телефона


Как подключить Bluetooth модель HC-06 или HC-05 рассказывал в Уроке 11 — Bluetooth модуль HC-06. Управление Arduino с телефона.

В уроке мы использовали стороннее приложения для Android телефона или планшета. Сегодня мы напишем свое приложение в mit app inventor. Подправим скетч из Arduino урока11, для работы с низкоуровневым реле. С высоко уровненным рее работать будет без изменения скетча. Чем отличаются высоко уровневые реле от низко уровневых. Низко уровневые включается, когда на сигнальны Пин реле подается LOW. Высоко уровневый включается, когда подадим HIGH. Конструктивные особенности и более подробную информацию ищите в интернете.

Приступим к приложению для Андроида , для этого воспользуемся самым простым решением app inventor 2. Если у вас возникли сложности с данной средой разработки у меня на сайте есть боле простые примеры написания приложений в данной среде разработки : Wi-Fi реле на NodeMCU. Управление Android приложением
Интерфейс программы будет выглядеть вот так.


Интерфейс программы app inventor 2
В приложение нужно добавить: BluetoothClient1 и Clock1 с интервалом обновления 100.
Кнопка «Bluetooth» осуществляет подключение к hc-06 модулю.
Копка «Disconnect» разрывает соединение.
Кнопки «On» и «Off» включают и выключают реле.
Блоки программы для подключения и отключения модулю HC-06 :

Блоки программы для подключения и отключения модулю HC-06:
Блок управления и вывода информации на дисплей.

Блок управления и вывода информации на дисплей.
Копка включения отправляет по блютуз каналу значение равное 1. Кнопка отключения отправляет 0.
Cloc1 это часы, проверяют информацию которая пришла по Bluetooth и выводит ее в текстовое поле Info.
Приложение на Android устройстве выгладить вот так.


Приложение на Android устройстве
После нажатия на кнопку «Bluetooth». У вас откроется окно выбора устройства.

После нажатия на кнопку «Bluetooth». У вас откроется окно выбора устройства.

Выбираете ваше устройство. После чего можно управлять реле. При нажатии на кнопку «On».

При нажатии на кнопку «On»

В поле Info выведется информация «Rele On — Portal-Pk.ru». При выключении реле на экран телефона будет строка «Rele Off — Portal-Pk.ru»

При выключении реле на экран телефона будет строка «Rele Off — Portal-Pk.ru»
Подключаем к Arduino UNO реле и модуль по схеме.


Подключаем к Arduino UNO реле и модуль по схеме
Если у вас Arduino NANO, то реле и bluetooth модуль hc 06 подключить по схеме.

Arduino NANO, то реле и bluetooth модуль hc 06 подключить по схеме
Скетч bluetooth реле ардуино будет вот таким.

int LED = 5;  int val = 0;  void setup() {   Serial.begin(9600); //Инициирует последовательное    //соединение и задает скорость передачи данных в бит/c (бод)   pinMode(LED, OUTPUT);   digitalWrite(LED, HIGH);  }  void loop() {   if (Serial.available() > 0) // пришли данные   {   val = Serial.read();   if (val=='1') // если 1 то включаем светодиод   {   digitalWrite(LED,LOW);   Serial.print("Rele On - "); // вывод данных   Serial.println("Portal-Pk.ru"); // вывод данных с переносом строки   }   if (val=='0') // если 0 то выключаем светодиод   {   digitalWrite(LED,HIGH);   Serial.print("Rele Off - "); // вывод данных   Serial.println("Portal-Pk.ru"); // вывод данных с переносом строки   }   }  }  

Если вы сделали все правильно, то у вас получиться вот такой результат.


Arduino из урока: Bluetooth модуль HC-06. Управление Arduino с телефона

bluetooth реле ардуино
Подключенная нагрузка будет включаться и выключаться . Если у вас работает наоборот возьмите код для Arduino из урока: Bluetooth модуль HC-06. Управление Arduino с телефона.

Сегодня мы разобрали связку ардуино андроид bluetooth . Планирую сделать машину с управлением по bluetooth . И много другое.

Источник: portal-pk.ru

Шаг 1: Материалы и инструменты


Управление ардуино с телефона

Материалы:

Кабель USB-A – USB-B 
Кабель USB-Host (OTG-кабель)
Arduino
1 светодиод (для тестирования)
Android устройство, версия ОС Android 4.0.0+ (или c поддержкой режима host)

Программное обеспечение:

ArduinoDroid или ArduinoCommander, которые можно загрузить из магазина Google Play

Шаг 2: Кабель USB-Host

Управление ардуино с телефона

Кабель USB-Host в основном аналогичен кабелю USB, но в разъеме micro USB установлены другие резисторы. Внутренние резисторы позволяют Android устройству активировать режим USB-Host. В этом режиме вы также можете использовать USB-флешки или другие устройства с поддержкой usb интерфейса. Это очень полезная функция, и теперь можно подключать даже usb-принтер.

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

Шаг 3: Соединения

Управление ардуино с телефона

Управление ардуино с телефона

Управление ардуино с телефона

Этот очень простой шаг и не требует особого внимания. Просто вставьте кабель USB-A – USB-B в USB разъем типа мама Host кабеля. Затем вставьте USB-B разъем в Arduino, а Micro USB в Android устройство.

Шаг 4: Включение Arduino


Управление ардуино с телефона

Все соединения должны быть выполнены как на фотографии. Далее можно включить ваш Arduino и загрузить в него последний скачанный код. На своем Arduino я использовал Blink скетч. Если Arduino не запускается, тогда проверьте правильность соединений.

Шаг 5: Приложения

Управление ардуино с телефона

Теперь Arduino уже готов к загрузке кода, но ваше Android устройство пока нет…

Давайте изменим эту ситуацию!

На данный момент существует два приложения, которые позволяют работать с нашим Arduino через режим Host.

Для их загрузки перейдите на сайт Play Store, затем в строке поиска введите «Arduino». Далее щелкните на «Apps», после этого будут отображаться только приложения. Нам нужно два приложения: «ArduinoDroid» и «ArduinoCommander». Установите их, затем запустите «ArduinoDroid». Это приложение должно обновить IDE, на что понадобится некоторое время. Приложение «ArduinoCommander» потребуется далее.

Примечание: Оба приложения использовать одновременно необязательно, просто я хочу показать работу обеих!

Шаг 6: ArduinoCommander, автор программы Антон Смирнов

Управление ардуино с телефона


Ну, что ж, начнем с приложения «ArduinoCommander». Его разработал Антон Смирнов для версии Andorid 2.2 или выше.

https://play.google.com/store/apps/details?id=name…

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

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

Однако некоторые функции не работают. Надеюсь, в дальнейших версиях приложения эти баги будут исправлены. Загрузка скетча прошла успешно!

Ставлю данному приложению 4.0 из 5 звездочек.

Теперь давайте кратко рассмотрим подключение к Arduino.

Шаг 7: Часть 1

Управление ардуино с телефона

Сначала запустим приложение. Далее появится синее окно с 4 опциями. Поскольку нам необходимо подсоединиться через USB интерфейс, щелкните на «USB-Device» (на изображении на немецком языке).

Другие опции включают:
Ethernet
Bluetooth
USB-extras

Шаг 8: Часть 2

Управление ардуино с телефона

Управление ардуино с телефона

Теперь щелкните на «Autodetect». Android устройство начнет автоматический поиск Arduino, затем покажет его на экране. А сейчас выберем наш Arduino (просто щелкнем на нем).

Шаг 9: Часть 3


Управление ардуино с телефона

После выполнения предыдущего шага на экране будет показан наш Arduino. Обычно он отображается в цвете, и вы можете щелкать на выводы, чтобы изменить их режим. Однако у меня выбор режимов не работал, и эту проблему у меня не получилось устранить; возможно, у вас все будет работать без сбоев. Когда вы щелкните в нижнем правом углу, то перейдете в меню, с помощью которого сможете загрузить ваши скетчи с SD-карты. Эта функция работает очень хорошо.

Шаг 10: ArduinoDroid

Управление ардуино с телефона

Теперь перейдем к рассмотрению другого приложения, которое позволяет загружать скетчи в ваш Arduino. Это приложение называется «ArduinoDroid» и работает для версии Android 4.2.2 или выше. Автор этого приложения также Антон Смирнов!

https://play.google.com/store/apps/details?id=name…

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

После написания кода, его можно скомпилировать, нажав кнопку «Lightning-Button». Для компиляции потребуется некоторое время, но функция работает без сбоев.

После завершения компиляции, нажмите кнопку для загрузки (справа).

Загрузка будет длиться всего несколько секунд.

После этого мой Arduino запустит на выполнение новый код —> Он работает прекрасно!

Для тестирования я использовал «Blink» скетч.

Ниже вы можете посмотреть короткое видео компиляции в приложении и загрузки скетча

Шаг 11: Окончание!


Управление ардуино с телефона

Теперь вы сами убедились, как легко писать, компилировать и загружать скетч в Arduino с помощью Android устройств.

А теперь я хочу выразить особую БЛАГОДАРНОСТЬ Антону Смирнову, который создает такие полезные приложения для ОС Android!

Оригинал статьи

Источник: cxem.net

Добрый день!

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

Моё видение системы выглядит так:
Управление ардуино с телефона

Думаю стоит совместить домашний и веб-серверы, прикупив статический айпишник, но на первое время сойдет и так. Начнем с простого – научимся удаленно управлять светодиодом и LCD-дисплеем.


Web-server

На веб-сервере создаем БД с двумя таблицами – leds и texts. Таблица leds содержит 2 поля – id и status. Она содержит одну запись с актуальным состоянием светодиода. Таблица texts содержит 2 поля – id и text. Она также содержит одну запись с текстом, который в данный момент отображается на LCD-дисплее.

Теперь напишем пару скриптов, которые будем вызывать с телефона и передавать информацию для БД. Пишем на php.

Скрипт led.php (управление светодиодом):

<?php $hostname = "localhost"; $username = "имя_пользователя"; $password = "пароль"; $database = "имя_бд";  $connect_DB = mysql_connect($hostname, $username, $password); //соединяемся с БД if (!$connect_DB) { //если не получилось соединиться  exit; // закрыть скрипт }  mysql_select_db($database); //выбираем БД changeLED(); //вызываем функцию, меняющую состояние светодиода mysql_close($connect_DB); //закрываем соединение с БД  function changeLED() //меняем состояние светодиода { 	$query = "SELECT `status` FROM leds WHERE `id` = '1'"; //делаем запрос с БД к таблице leds (id = 1 - наш светодиод) 	$result = mysql_query($query); 	while ($_row = mysql_fetch_array($result,MYSQL_NUM)) //обходим выборку из результата запроса 	{ 		//инвертируем состояние светодиода 		$st = (int)$_row[0]; 		if ($st == 0) 			$st = 1; 		else 			$st = 0; 	} 	$query = "UPDATE leds SET `status` = '$st' WHERE `id` = '1'"; //записываем инвертированное значение в БД 	$result = mysql_query($query); } ?>

Скрипт msg.php (управление LCD-дисплеем):

<?php $hostname = "localhost"; $username = "имя_пользователя"; $password = "пароль"; $database = "имя_бд";  $connect_DB = mysql_connect($hostname, $username, $password); //соединяемся с БД if (!$connect_DB) { //если не получилось соединиться  exit; // закрыть скрипт }  mysql_select_db($database); //выбираем БД changeText(); //вызываем функцию, меняющую текст, отображжаемый на LCD-дисплее mysql_close($connect_DB); //закрываем соединение с БД  function changeText() { 	$st= $_GET["msg"]; //GET-параметр msg содержит текст, переданный с телефона 	$query = "UPDATE texts SET `text` = '$st' WHERE `id` = '1'"; //меняем соответствующее поле в таблице texts для записи с id = 1 (наш LCD-дисплей) 	$result = mysql_query($query); } ?>

Я думаю, что из комментариев ясно, как работают эти скрипты. Это все, что находится на веб-сервере. Теперь перейдем к домашнему серверу (или говоря проще, компьютеру, к которому подключен ардуино).

Домашний сервер

На нем будет постоянно работать программка (можно даже назвать ее – демон), посылающая запросы к БД и при изменении находящейся там информации, посылающая на COM-порт с ардуино соответствующую команду. Программку напишем на языке Processing:

import processing.serial.*; //библиотека для работы с COM-портом import de.bezier.data.sql.*; //библиотека для работы с БД MySQL  Serial port; MySQL dbconnection; int prevLEDState = 0; //предыдущее состояние светодиода String prevS = ""; //предыдущий текст, отпаврленный на LCD-дисплей  void setup() {  port = new Serial(this, "COM4", 9600); //инициализируем COM-порт 4 (на не прицеплена ардуина), скорость обмена - 9600 бод  port.bufferUntil('n');    String user = "имя_пользователя";  String pass = "пароль";  String database = "имя_бд";   dbconnection = new MySQL( this, "ваш_домен.ru", database, user, pass ); //соединяемся с БД  dbconnection.connect(); }  void draw() {  //следим за информацией о светодиоде в БД  dbconnection.query( "SELECT * FROM leds WHERE id = '1'" ); //делаем запрос к таблице leds  while (dbconnection.next()) //обходим выборку из результата запроса  {  int n = dbconnection.getInt("status"); //получаем значение из поля status  if (n != prevLEDState) //если оно изменилось по сравнению с предыдущем "тактом" работы программы, то посылаем команду на COM-порт  {  prevLEDState = n;  port.write('1'); //первый переданный символ будет означать код выполняемой операции: 1 - управление светодиодом, 2 - управление LCD-дисплеем  port.write(n);  }  }    //следим за информацией о LCD-дисплее в БД  dbconnection.query( "SELECT * FROM texts WHERE id = '1'" ); //делаем запрос к таблице texts  while (dbconnection.next())//обходим выборку из результата запроса  {  String s = dbconnection.getString("text"); //получаем значение из поля text  if (s != prevS)  {  prevS = s;  port.write('2');  port.write(s);   }  }    delay(50); //делаем задержку в 50 мс, чтобы не слать запросы непрерывно }

Пояснять этот код я тоже не стану, все и так понятно.
Еще 1 важный момент. Чтобы программа с нашего компьютера могла обращаться к БД, расположенной на удаленном сервере, надо это разрешить. Вводим наш ip в список разрешенных:
Управление ардуино с телефона

Далее по плану – приложение для телефона.

Приложение для телефона

Телефон у меня андроиде, для него и пишем. Не буду сильно вдаваться в подробности (очень хорошо как о установке среды программирования, так и о написании первого приложения написано вот в этой статье — ссылка).

Внешний вид приложения выглядит довольно скромненько, но в данном случае это не главное:
Управление ардуино с телефона

Приведу только отрывки кода программы под Android. Функция, вызывающая скрипт, управляющий светодиодом:

public void changeLED()  {  	try  	{ 	 	URL url1 = new URL("http://ваш_домен.ru/led.php"); 	 	HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection();  		try {  		 InputStream in = new BufferedInputStream(urlConnection.getInputStream());  		}  		 finally {  		 urlConnection.disconnect();  		 }  	}  	catch (Exception e)  	{  	}  	  } 

Функция, отсылающая текст для отображения на LCD-дисплее:

public void submitMsg()  {  	final EditText tt = (EditText) findViewById(R.id.editText1);  	try  	{ 	 	URL url1 = new URL("http://ваш_домен.ru/msg.php?msg="+tt.getText()); 	 	HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection();  		try {  		 InputStream in = new BufferedInputStream(urlConnection.getInputStream());  		}  		 finally {  		 urlConnection.disconnect();  		 }  	}  	catch (Exception e)  	{  	}  	  }

Ну и главная функция, в которой происходит привязка обработчиков событий к кнопкам:

public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);    final Button btn1 = (Button) findViewById(R.id.button1);   btn1.setOnClickListener(new Button.OnClickListener() {   public void onClick(View v) // клик на кнопку  {  	changeLED();  }  });    final Button btn2 = (Button) findViewById(R.id.button2);  btn2.setOnClickListener(new Button.OnClickListener() {   public void onClick(View v) // клик на кнопку  {  	submitMsg();  }  });    }

И еще один важный момент – добавить разрешение приложению на выход в интернет. Для этого в файл AndroidManifest.xml (он находится в директории нашего андроид-приложения) надо добавить строчку:

<uses-permission android:name="android.permission.INTERNET"/>

Экспортируем наше приложение в файл APK и устанавливаем на телефон. Пульт управления умным домом готов!

Arduino

Ну и наконец последнее, но не по значению – подключение ардуино и ее прошивка. Схема подключения LCD-экрана и светодиода к Arduino Uno выглядит следующим образом:
Управление ардуино с телефона

Резистор берем на 220 Ом. Более подробно про подключение LCD-экрана можно прочитать здесь — ссылка

А вот как это все выглядит в реальности:
Управление ардуино с телефона

Правда красиво?

Задача ардуино состоит в прослушивании того, что программа-демон на домашнем сервере посылает на COM-порт, к которому и подключена ардуино (хотя фактически подключение идет по USB-кабелю, но компьютер распознает его как последовательный порт). После получения каких-либо данных с компьютера, контроллер по первому символу переданной информации распознает код команды (т.е. чем сейчас предстоит управлять – LCD-дисплеем или светодиодом). Далее в зависимости от кода и следующей за ним информации выполняется либо включение/выключение светодиода, либо вывод на дисплей переданного сообщения. Итак, вот собственно код:

#include <LiquidCrystal.h> //встроенная библиотека для работы с LCD-дисплеем  boolean isExecuting = false; //переменная, отражающая, что уже идет выполнение какой-то команды //Cразу поясню, для чего это нужно. За каждый "такт" цикла loop ардуино считывает с COM-порта код одного символа. //Поэтому строка будет передаваться за несколько тактов. При этом перед каждой из двух возможных команд (смена состояния светодиода и передача текста на дисплей) //передается код этой команды (1 и 2 соответственно). Чтобы отделить коды команд от передаваемой далее информации (состояния светодиода или текста для дисплея), //используется эта переменная.  LiquidCrystal lcd(4,5,10,11,12,13); //инициализация дисплея  int ledPin = 8; //номер пина ардуино, на к которому подсоединен светодиод int prevLEDStatus = 0; //предыдущий статус светодиода (вкл/выкл) int newLEDStatus = 0; //новый статус светодиода int cmd = 0; //код выполняемой команды  void setup() {  Serial.begin(9600); //инициализация COM-порта (9600 - скорость обмена в бодах)  pinMode(ledPin,OUTPUT); //инициализация 8-го пина ардуино как выхода  lcd.begin(20,4); //инициализация LCD-дисплея (4 строки по 20 символов) }  void loop() {  if (Serial.available() > 0) //если на COM-порт пришла какая-то информация  {  if (isExecuting == false) //если в данный момент не идет выполнение никакой команды  {  cmd = Serial.read() - '0'; //считываем код выполняемой команды  isExecuting = true; //теперь переменная показывает, что началось выполнение команды  }    if (cmd == 1) //управление светодиодом  {  newLEDStatus = (int) Serial.read(); //считываем новый статус светодиода  if (newLEDStatus != prevLEDStatus) //если он изменился по сравнению с текущим статусом, то меняем текущий статус  {  digitalWrite(ledPin,newLEDStatus);   prevLEDStatus = newLEDStatus;  }  }  else //управление дисплеем  {  if (isExecuting == false) //если в данный момент не идет выполнение никакой команды  {  lcd.clear(); //очищаем экран  }  else  {  lcd.print((char)Serial.read()); //выводим символ на дисплей  }  }  }  else //если на COM-порт не пришла никакая информация  {  delay(50); //делаем задержку в 50 мс  if (Serial.available() <= 0) //если информации по-прежнему нет  isExecuting = false; //считаем, что никакая команда не выполняется  }   }

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

Источник: habr.com

Arduino Software (IDE)[/b]
Андроид-устройство[/b], которое поддерживает режимUSB-хоста[/b](проверено на MotorolaXoom.
А так же паяльник, прямые руки, ножницы.

Что надо для изготовления рамы

Рама квадрокоптер делается из бамбуковых шашлычных палочек

Крепления двигателей к раме делаются из палочек для коктейля.

Изолента- используется для крепления платы приемника, электродвигателей к раме. Нитки нужны для скрепления деталей перед склейкой. Цианакриловый клей. Резинка для крепления аккумулятора к раме.

Список электроники для квадрокоптера.

Все эти детали могут быть повреждены во время пробных запусков или во время полетов, поэтому заказывайте с запасом. Ссылки даны для примера. Есть много поставщиков.
Лопасти для вертолета
Двигатели. Я не нашел двигатели с размерами 4х7 мм на Алиэкспресс нашел вот такие. Моторы должны быть без щеточные.

Плата приемника эта плата содержит все компоненты- гироскоп, акселометр, ESC (система курсовой устойчивости), CPU который все эти компоненты объединяет. Литий полимерный аккумулятор:1 x 240mah 1S ‘LiPo. Можно использовать разные аккумуляторы с меньшей или большей емкости. Если вы решите построить октакоптер, то вам понадобиться более емкая батарея.

Список аппаратного контроля квадрокоптера.

Это те части вашего будущего вертолета, которые позволят ему принимать ваши команды.
Приемопередатчик Учтите что в комплекте должны быть два модуля. И это не тоже самое что NRF24L01, что бы ни утверждал продаван.

Arduino DUE[/b]или аналогичный, он будет использоваться для связи вашего Андроид-устройства и A7105. Автор использовал именно эту плату Arduino потому, что она имеет USB подключенный к последовательному порту и может работать с 3.3в логикой, хотя можно применить преобразователь уровней 5-3.3в.

Макетная плата-на ней вы будете монтировать радио модуль и подключать его к Arduino. Резистор 22кОм- значение его не особо критично. Провода для соединения радио модуля. OTG переходник для вашего андроид устройства.

OTG
Hubsan-пульт дистанционного управления-это не обязательно, но удобно.

Создание каркаса.

Каркас изготавливается из бамбуковых палочек, скрепленных крест на крест с трубочками от коктейлей. Все это склеивается вместе супер клеем.
1: Распечатайте шаблон SVG в прикрепленном файле. Он сложнее, чем должен быть, но также используется для строительства октокоптера. Шаблон нужен, чтобы сделать правильный квадрат.

2. Отрежьте нитку по длине вашего предплечья.

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

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

5. Возьмите еще две палочки для канапе и закрепите их как в предыдущем шаге , только на расстоянии 4 пальцев от ранее прикрепленных. Точное расстояние не важно, вы исправите его далее.


6. Положите шаблон на ровную поверхность, лучше использовать стекло.

7. Разместите ваши связанные вместе палочки, как показано на фото.

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

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

9. Повторите все тоже самое для второго кронштейна.

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

11. Обрежьте палочки примерно на длину 2 см с обеих сторон.

12. Отрежьте 4 палочки по 1.5 см , склейте их вместе квадратом, особо прочная склейка не нужна, это будет кронштейн для платы и батареи питания.

Следующий этап состоит из пайки ваших 4 моторов к плате 4Х приемника. Первое, что надо — это припаять провода питания на нижнюю часть платы. Далее мы будем ссылаться на эту ориентацию (плата лежит на “спине”)

Как подключать моторы.

На Hubsan х 4 платах есть контактные площадки для подключения светодиодов и моторов. Те, что для светодиодов имеют обозначение LED, туда НЕНАДО подключать моторы. Контакты для моторов помечены+ve[/b]и–ve.[/b]

Возьмите один из ваших 4 моторов с черным и белым проводами и припаяйте их кЛЕВЫМ НИЖНИМ[/b]контактам платы, белым проводом к левому контакту пары. Возьмите мотор с красным и синим проводами и припаяйте его кЛЕВЫМ ВЕРХНИМ[/b]контактам, красным проводом к левому контакту пары.. Возьмите мотор с черными и белыми проводами и припаяйте их кПРАВЫМ ВЕРХНИМ[/b]контактам, черным проводом к левому контакту. Возьмите мотор с красным и синим проводами и припаяйте его кПРАВЫМ НИЖНИМ[/b]контактам, красным проводом к левому контакту пары.

В схеме подключения белый провод это черная пунктирная линия. Провода надо закрепить каплей горячего клея. Закрепите моторы двумя полосками изоленты шириной 5мм. Не стоит особо волноваться по поводу одинакового расположения моторов по высоте. После того,как моторы закреплены, надо надеть на оси пропеллеры. Используйте белый пропеллер для «переда»с противоположной стороны от проводов батареи) и чёрный пропеллер для»зада». Это не так просто, как кажется, так. как одни лопасти сделаны для вращения по часовой стрелке, а другие , для вращения против часовой стрелки. На лопастях есть обозначения. Используйте лопасти с буквой «А[/b]» для левого верхнего и правого нижнего моторов. С буквой «В[/b]», соответственно, для правого верхнего и левого нижнего моторов. Теперь вы можете прикрепить батарею к нижней части платы, автор использует для этой части резинку. Если у вас есть оригинальный hubsan контроллер, вы сможете поднять квадро в воздух. Если вертолёт трясёт в воздухе, значит, моторы стоят не строго вертикально. Подкладывая кусочки свернутой бумаги, можно выравнять моторы.

Сборка радиоуправления на arduino.

Этот пункт проекта расскажет как управлять вертолетом с помощью Андроид устройства,через последовательный порт Arduino.

Вам нужны 6 контактов на плате А7105. Слева GND. Справа-SDIO, SCK, SCS, GND, VCC.

Припаяйте жесткий одножильный провод, длиной 2 см, к каждому указанному выводу. Вставьте А7105 в макетную плату, так как показано на фото. Соедините выводы GND на плате arduino и два на А7105. Соедините вывод 3.3V на Arduino c выводом VCC на плате А7105. На разъеме SPI Arduino, соедините вывод MOSI с одним из выводов резистора , другой конец резистора соедините с пином SIDO на А7501.

По этой ссылке можно посмотреть где находится вывод MOSI
Вывод SCK Arduino c выводом SCK А7105 , SCS с платы А7105 на пин 10 Arduino . Синий резистор на фото не является частью проекта.

Arduino софт

Нижеследующий скетч использует хакнутую версию PhracturedBlue’s hubsan X4 и A7105 оригинал кода можно посмотреть здесь.

Подключить Ваш DUO к компьютеру через ‘Programming Port’. Скачайте зип фаил, загрузите скетч в Arduino и выгрузите его в DUO. Этот скетч обрабатывает команды с последовательного порта и преобразует их в команды платы управления вашего квадрокоптера. Этот скетч связывается с платой Hubsan по радио без последовательного порта, так что, если включите ваш коптер, а затем Arduino, и огни на коптере перестанут моргать, значит все в порядке.

Программное обеспечение для Андроид

Это программноеобеспечениедает вам простой контролер полета на базе андроид устройства. Для управления используется акселерометр и сенсорный экран вашего устройства. Планшет или телефон будет обмениваться данными с Arduino через порт USB.

Установка софта:
1 Надо разрешить отладку по USB и разрешить установку приложений не google play. Скачать приложение можно здесь
2Подключитесвое устройство через переходник OTG к Arduino, он будетзапитыватьсяот вашего телефона или планшета, поэтому проверьте, чтобы аккумулятор был полностью заряжен.
3 Подключите аккумулятор к коптеру и положите его на плоскую поверхность. Если огни перестали моргать, значит все в порядке.
4 Большой палец левой руки медленно сдвиньте по экрану, пропеллеры должны начать вращаться. Уберите палец и пропеллеры остановятся.
5 Проделайте все тоже самое, только разместите большой палец правой руки тоже на экране. Это позволит вам управлять вертолетом с помощью акселерометра, наклоняя ваше устройство вперед/назад, влево/вправо. Перемещая большой палец правой руки влево или вправо, вы будете закручивать вертолет влево или вправо вокруг оси. Если убрать правую руку с экрана, вертолет должен выровняться, не зависимо от положения акселерометра. Попробуйте. Перемещайте палец левой руки до тех пор, пока вертолет не взлетит. Помните — если убрать оба пальца- моторы остановятся.

Программное обеспечение для ПК
В архиве программа, которая управляет коптером через последовательный порт. Управляется коптер с помощью курсорных кнопок, и кнопок “A”/”Z”- дроссель. Автор сделал попытку заставить следовать коптер за объектом определенного цвета, но это пока не работает. Обещал выкладывать обновления.

Источник: USamodelkina.ru

Что потребуется

  • смартфон на Android с поддержкой режима USB хоста (т.е. поддержка OTG) – большинство устройств, работающих с Android 3.1 и выше, поддерживают этот режим. Проверьте свой телефон с помощью USB Host Diagnostics App из Play Store;
  • Arduino – любая версия. Я буду использовать Uno R3;
  • USB кабель для Arduino;
  • USB OTG кабель – он необходим вам, чтобы подключить USB кабель Arduino к порту micro-USB телефона;
  • Android Studio – вам необходимо установить его. Это довольно просто сделать. Android Studio делает разработку приложений проще, благодаря своим предположениям и генерации кода. Это одна из лучших IDE. Вы также можете использовать эту статью в качестве руководства по установке Android IDE.

Основные компоненты приложения для Android

В Android приложении есть три основных файла:

MainActivity.java
Здесь находится выполняемый код на Java, который управляет тем, как будет функционировать приложение.
activity_main.xml
Содержит макет приложения, то есть, компоненты: кнопки, компоненты отображения текста и т.д.
AndroidManifest.xml
Здесь вы определяете, когда приложение должно запускаться, в какие права ему нужны, и к какому аппаратному обеспечению ему необходимо получить доступ.

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

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

Макет

Макет Android приложения для взаимодействия с Arduino
Макет Android приложения для взаимодействия с Arduino

Мы будем использовать тот же макет, что и в USB App и Bluetooth App. Он прост и содержит минимум виджетов, необходимых для проверки соединения между устройствами.

Как вы можете видеть, он содержит виджет EditText для получения данных от пользователя, кнопки для запуска соединения, передачи данных, завершения соединения и очистки TextView. Полученные данные отображаются в TextView (пустое пространство под кнопками).

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"   android:layout_height="match_parent"    android:paddingLeft="@dimen/activity_horizontal_margin"   android:paddingRight="@dimen/activity_horizontal_margin"   android:paddingTop="@dimen/activity_vertical_margin"   android:paddingBottom="@dimen/activity_vertical_margin"    tools:context=".MainActivity">     <EditText   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:id="@+id/editText"   android:layout_alignParentTop="true"   android:layout_alignParentRight="true"   android:layout_alignParentEnd="true"   android:layout_alignParentLeft="true"   android:layout_alignParentStart="true" />     <Button   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text="Begin"   android:id="@+id/buttonStart"   android:layout_below="@+id/editText"   android:layout_alignParentLeft="true"   android:layout_alignParentStart="true"   android:onClick="onClickStart"/>     <TextView   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:id="@+id/textView"   android:layout_below="@+id/buttonSend"   android:layout_alignParentLeft="true"   android:layout_alignParentStart="true"   android:layout_alignRight="@+id/editText"   android:layout_alignEnd="@+id/editText"   android:layout_alignParentBottom="true" />    </RelativeLayout>

Я использовал здесь RelativeLayout, а это означает, что каждый виджет расположен относительно виджетов вокруг него. Макет может быть легко воссоздан на вкладке Design Tab, где вы можете перетащить виджеты туда, куда хотите. Нам необходимо описать, что будет происходить при нажатии на кнопку. Для этого используется метод onClick. Укажите имя метода в XML коде для кнопки. Для этого добавьте строку:

android:onClick="onClickMethod"

Теперь наведите курсор мыши на эту строку, слева должно будет появиться предупреждение, похожее на это:

Предупреждение в Android Studio
Предупреждение в Android Studio

Нажмите на варианте «Создать onClick…». Это автоматически добавит код метода onClick в MainActivity.java. Вам необходимо выполнить это для каждой кнопки.

Библиотека USB Serial

Настройка последовательного соединения в Android довольно трудоемка, так как требует от вас ручной настройки множества вещей, поэтому я нашел несколько библиотек, которые делают всё это автоматически. Я протестировал несколько из них и, наконец, остановился на библиотеке UsbSerial от Github пользователя felHR85. Среди подобных библиотек, что я нашел, она единственная до сих пор обновляется. Ее довольно легко настроить и использовать. Чтобы добавить библиотеку в свой проект, скачайте последнюю версию JAR файла на Github. Поместите его в подкаталог libs в каталоге вашего проекта. Затем в файловом проводнике в Android Studio кликните правой кнопкой мыши на JAR файле и выберите «Добавить как библиотеку» (Add as Library). Вот и всё!

Алгоритм выполнения программы

Алгоритм выполнения Android программы для взаимодействия с Arduino
Алгоритм выполнения Android программы для взаимодействия с Arduino

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

Открытие соединения

Во-первых, давайте определим метод onClick для кнопки Begin. При нажатии необходимо выполнить поиск всех подключенных устройств, а затем проверить, совпадает ли VendorID подключенного устройства (ID поставщика) с VendorID Arduino. Если совпадение найдено, то у пользователя должно быть запрошено разрешение. Каждое ведомое USB устройство имеет ID поставщика (Vendor ID) и ID продукта (Product ID), которые могут быть использованы для определения того, какие драйвера должны использоваться для этого устройства. Vendor ID для любой платы Arduino равен 0x2341 или 9025.

public void onClickStart(View view) {     HashMap usbDevices = usbManager.getDeviceList();   if (!usbDevices.isEmpty()) {   boolean keep = true;   for (Map.Entry entry : usbDevices.entrySet()) {   device = entry.getValue();   int deviceVID = device.getVendorId();   if (deviceVID == 0x2341) //Arduino Vendor ID   {   PendingIntent pi = PendingIntent.getBroadcast(this, 0,    new Intent(ACTION_USB_PERMISSION), 0);   usbManager.requestPermission(device, pi);   keep = false;   } else {   connection = null;   device = null;   }     if (!keep)   break;   }   }  }

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

// Приемник широковещательных сообщений для автоматического запуска и закрытия последовательного соединения.  private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {    @Override   public void onReceive(Context context, Intent intent) {   if (intent.getAction().equals(ACTION_USB_PERMISSION)) {   boolean granted =    intent.getExtras().getBoolean(UsbManager.EXTRA_PERMISSION_GRANTED);   if (granted) {   connection = usbManager.openDevice(device);   serialPort = UsbSerialDevice.createUsbSerialDevice(device, connection);   if (serialPort != null) {   if (serialPort.open()) { //Установить параметры последовательного соедниения.   setUiEnabled(true); //Включить кнопки в UI.   serialPort.setBaudRate(9600);   serialPort.setDataBits(UsbSerialInterface.DATA_BITS_8);   serialPort.setStopBits(UsbSerialInterface.STOP_BITS_1);   serialPort.setParity(UsbSerialInterface.PARITY_NONE);   serialPort.setFlowControl(UsbSerialInterface.FLOW_CONTROL_OFF);   serialPort.read(mCallback); //   tvAppend(textView,"Serial Connection Opened!n");     } else {   Log.d("SERIAL", "PORT NOT OPEN");   }   } else {   Log.d("SERIAL", "PORT IS NULL");   }   } else {   Log.d("SERIAL", "PERM NOT GRANTED");   }   } else if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {   onClickStart(startButton);   } else if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {   onClickStop(stopButton);   }   };  };

Если первое условие IF выполняется, и если пользователь дал разрешение, то начать соединение с устройством, у которого Vendor ID совпадает с необходимым нам Vendor ID. Кроме того, если принято широковещательное сообщение о подключении или отключении устройства, вручную вызывать методы onClick для кнопок Start и Stop. SerialPort определяется с использованием устройства и соединения в качестве аргументов. В случае успеха открыть SerialPort и установить соответствующие параметры. Значения параметров для Arduino Uno равны: 8 бит данных, 1 стоповый бит, бита четности нет, управление потоком выключено. Скорость передачи данных может быть 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200 бит/с, но мы будем использовать стандартные 9600 бит/с.

Прием данных от устройства

Во фрагменте кода выше обратите внимание на строку, содержащую serialPort.read(mCallback). Здесь функции read передается ссылка на объект Callback, который будет автоматически срабатывать при обнаружении входящих данных.

UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() {    // Определение метода обратного вызова, который вызывается при приеме данных.   @Override   public void onReceivedData(byte[] arg0) {   String data = null;   try {   data = new String(arg0, "UTF-8");   data.concat("/n");   tvAppend(textView, data);   } catch (UnsupportedEncodingException e) {   e.printStackTrace();   }   }  };

Полученные данные будут в форме необработанных байтов. Нам придется перекодировать их в читаемый формат, например, UTF-8. Затем они добавляются в TextView с помощью специального метода tvAppend(). Это делается так потому, что любые изменения в пользовательском интерфейсе могут выполняться только в потоке пользовательского интерфейса. Так как данный Callback будет запущен, как фоновый поток, то он не может напрямую повлиять на пользовательский интерфейс.

private void tvAppend(TextView tv, CharSequence text) {    final TextView ftv = tv;    final CharSequence ftext = text;      runOnUiThread(new Runnable() {    @Override public void run() {    ftv.append(ftext);    }    });     } 

Передача данных на устройство

Передача данных относительно проста по сравнению с чтением данных с устройства. Это простой вызов функции с байтами данных, которые необходимо передать, в качестве аргумента. Это будет реализовано в методе onClick кнопки Send.

serialPort.write(string.getBytes());

Закрытие соединения

Чтобы закрыть соединение, просто закройте последовательный порт.

serialPort.close();

Манифест приложения

Манифест объявляет, какие дополнительные разрешения могут потребоваться приложению. Единственное необходимое нам разрешение – это разрешение сделать телефон USB хостом. Добавьте следующую строку в манифест:

<uses-feature android:name="android.hardware.usb.host" />

Приложение можно заставить запускаться автоматически, добавив фильтр интентов в главную активность MainActivity. Этот фильтр интентов будет срабатывать при подключении любого нового устройства. Вид устройства может быть указан явно с помощью ID поставщика (Vendor ID) и/или ID продукта (Product ID) в XML файле.

<?xml version="1.0" encoding="utf-8"?>   <activity   android:name=".MainActivity"   android:label="@string/app_name" >      <intent-filter>   <action android:name="android.intent.action.MAIN" />   <category android:name="android.intent.category.LAUNCHER" />   </intent-filter>      <intent-filter>   <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />   </intent-filter>     <meta-data   android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"   android:resource="@xml/device_filter" />     </activity>

Обратите внимание на строку "android:resource="@xml/device_filter". Она говорит компилятору, что он может найти свойства устройства в файле с именем device_filter в каталоге src/main/res/xml, поэтому создайте подкаталог "xml" в каталоге src/main/res и поместите в него файл со следующим содержанием:

<resources>   <usb-device vendor-id="9025" />   <!-- Vendor ID для Arduino -->  </resources>

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

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

void setup()   {    Serial.begin(9600);   }     void loop()   {    char c;   if(Serial.available())    {    c = Serial.read();    Serial.print(c);    }   } 

Теперь подключите Arduino к microUSB порту телефона, используя OTG кабель. Приложение должно запуститься автоматически. Попробуйте послать какой-нибудь текст, и те же данные будут возвращены обратно!

Тестирование Android приложения для взаимодействия с Arduino
Тестирование Android приложения для взаимодействия с Arduino

Заключение

Данная статья показывает, как Arduino может общаться с вашим смартфоном. И возможности использования этого бесконечны! В случае, когда необходимы данные с любого датчика, которого нет среди встроенных в смартфон, можно воспользоваться любым микроконтроллером для считывания данных с этого датчика и передачи их на смартфон. В следующей статье будет показано, как подключить смартфон к Arduino, используя популярный bluetooth модуль HC05.

Оригинал статьи:

  • Hariharan Mathavan. Communicate with Your Arduino Through Android

Источник: radioprog.ru


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.