KAPing (часть 1: Подключаем arduino к компьютеру через... звуковую карту!?)

Мне всегда нравилось запускать воздушных змеев, и с развитием техники я всё чаще стал задумываться о постройке своего собственного аппарата для KAPing-а. Смотреть на парящего воздушного змея интересно, а смотреть с воздушного змея — ещё интереснее.

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

Соответственно встала проблема выбора концепции и минимизации финансовых затрат. Нам нужны:
— камера;
— устройство связи с землёй;
— устройство управления.

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

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

Устройство управления должно ориентировать камеру в пространстве (в идеале иметь гироскопы), а также уметь обрабатывать команды с земли. Для вращения камеры можно применить серводвигатели, аналогичные использовавшимся в статье "Управление сервами с геймпада". Соответственно серводвигателями вполне порулит arduino.

Начинает вырисовываться каркас проекта… Нам нужны: arduino, пара серводвигателей (на 180 градусов каждый). Остается вопрос со связью и камерой (желательно на халяву). Взгляд останавливается на моём сотовом (Nokia 5800)! У него уже имеется неплохая камера (3 мегапикселя — хватит для начала), а также встроенный WiFi и гироскопы. Хороша находка — сотовый телефон позволяет выполнять программы, написанные на Python, а на нём мы много всякого реализовать сможем (если не сильно сложное и производительное требуется).

Итак, мы уже решили практически все вопросы кроме одного — как подключить Nokia 5800 к arduino. Современные смартфоны имеют возможность быть ведущими в связке двух USB-устройств (можно управлять подключаемым устройством), но мой телефон такого не умеет. Для подключения можно использовать тот же WiFi или блютус, но понадобится дорогостоящий шилдт. ИК-порта нет. Остаётся всякое извращенство, например, управлять яркостью сектора экрана под фототранзистором, который в свою очередь подключен к arduino. Но пока от подобного воздержимся, а попробуем использовать аудиовыход сотового телефона.

Не очень хочется реализовывать свою функцию обработки каких-либо сигналов (скорее всего аналоговых), а хочется воспользоваться готовой библиотекой arduino. Вот хорошо бы общаться с сотовым телефоном как с COM-портом. Внимательно смотрим на arduino и видим, что у нас имеется 1 COM-порт (который заведен на плате на микросхему USB-COM преобразователя) — его использовать как-то не хочется (через него мы arduino программируем). Смотрим ещё внимательнее… да у нас же множество ножек неиспользованных! Эти ножки тоже можно использовать в качестве входов-выходов СОМ-порта, вот только он будет реализовываться на микроконтроллере не аппаратно, а программно. Для подобной реализации служит библиотека SoftwareSerial.

Отлично, мы имеем на arduino ещё один COM-порт, через который можем посылать ей команды, но как быть с сотовым? На сотовом такого порта нет, зато, как мы видели, есть бесхозный аудиовыход. Нам надо на вход arduino послать поток «0» и «1», причём «0» передаётся нулём, а «1» — +5 вольтами. Итого, нам нужно выдать на аудиовыход сотового телефона в определенной последовательности набор напряжений " 0 " и " +5 ". Это уже лучше — мы можем попробовать записать соответствующий аудиотрек и воспроизвести его на сотовом. Но есть проблема… Ну не может сотовый телефон выдать требуемые +5 вольт — слабоват его аудиовыход. И тут нам поможет знание стандартов логики микросхем.

Если взять даташит на практически любую цифровую схему, то окажется что для неё и ноль и единица передаются не конкретным напряжением, а скорее некими диапазонами напряжений, которые разделены областью нечувствительности. Данные диапазоны значительно зависят от того как была реализована логика в микросхеме и значительно колеблются от микросхеме к микросхеме, но для нас важно что логическая «1» может быть передана не только +5 вольтами, но и значительно меньшим напряжением (например +3,3 вольта). Зачастую это позволяет подключать между собой микросхемы, принадлежащие разным логикам (TTL и CMOS; только очень осторожно!!!).

Итак, теперь мы знаем, что теоретически возможно принять сообщение на программный COM-порт arduino с сотового телефона — приступим к практике. В комплекте к arduino IDE идёт пример работы с программным COM-портом — используем его в качестве основы:
#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);

void setup()  
{
  Serial.begin(57600);
  Serial.println("Goodnight moon!");

  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);
  mySerial.println("Hello, world?");
}

void loop() // run over and over
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

Как видно пример достаточно прост. Сначала создаем объект «mySerial», который является программным портом (использует ножки 2 и 3), а потом используем его совместно с аппаратным «Serial». Программа просто пересылает данные из одного порта в другой.

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

Итак… Жмём запись в Audacity и пробуем передать данные в arduino, используя стандартный serial monitor (передача на аппаратный порт). Эти данные пересылаются внутри arduino в программный порт, пересылаются на компьютер и записываются Audacity. У нас есть запись!

Как-то она не впечатляюще выглядит, но разобрать «1» и «0» вполне можно (передавался 1 символ). Мы разобрали, а может ли это сделать arduino??? Теперь подключаем arduino к аудиовыходу ПК и теперь уже пробуем воспроизвести только что записанный файл. В результате можно наблюдать, как на serial monitor приходят данные. У нас получилось!!!

А теперь проделаем аналогичную операцию с сотовым телефоном. После того как на сотовый телефон был записан соответствующий аудиотрек и подключена arduino можно приступать к пробе…

Ан нету результата…

Попытки за попытками, не результата нет… и не будет. Используя осциллограф, мы можем наблюдать, что сигнал на выходе сотового значительно ниже сигнала на выходе ПК. Естественным решением является использование усилителя, например TDA7050. Однако, к сожалению, такой микросхемы под рукой не оказалось, так что продолжение эпопеи будет изложено в статьях, которые последуют далее.

Комментарии (5)

RSS свернуть / развернуть
+
+1
www.dealextreme.com/p/stylish-headset-w-microphone-volume-control-for-nokia-5800-n8-5230-n86-n97-3-5mm-jack-80cm-cable-54516?item=44
5 кнопок хватит чтобы пробросить в телефон много чего
www.dealextreme.com/p/wireless-bluetooth-rs232-ttl-transceiver-module-80711
Блютуз не такой уж и дорогостоящий…
avatar

maxistar

  • 30 мая 2012, 00:26
+
0
Спасибо за ссылки. :)
Однако, что касается первой ссылки — моей задачей стояла организация управления с телефона, а не приём данных телефоном. Вторая ссылка хороша, однако микросхема усилителя уже заказана — посмотрю, как она себя поведёт (самому жутко интересно), а там может быть, и модуль блютуса в конструкции попробую использовать.
avatar

ZloAlien

  • 30 мая 2012, 15:41
+
+1
Хороший способ! классика фрикинга ;)
но сделайте лучше на Bluetooth, действительно удобно и не дорого! и вообще в хозяйстве робототехника вещь необходимая.

Очень нравится Ваша панорама с морем =)
avatar

RoboZeka

  • 31 мая 2012, 22:16
+
0
Очень нравится Ваша панорама с морем =)
А где можно посмотреть на эту панораму?
avatar

conysSM

  • 12 ноября 2012, 14:18

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.