Мне всегда нравилось запускать воздушных змеев, и с развитием техники я всё чаще стал задумываться о постройке своего собственного аппарата для 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. Однако, к сожалению, такой микросхемы под рукой не оказалось, так что продолжение эпопеи будет изложено в статьях, которые последуют далее.
0 комментариев на «“KAPing (часть 1: Подключаем arduino к компьютеру через… звуковую карту!?)”»
http://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 кнопок хватит чтобы пробросить в телефон много чего
http://www.dealextreme.com/p/wireless-bluetooth-rs232-ttl-transceiver-module-80711
Блютуз не такой уж и дорогостоящий…
Спасибо за ссылки. 🙂
Однако, что касается первой ссылки — моей задачей стояла организация управления с телефона, а не приём данных телефоном. Вторая ссылка хороша, однако микросхема усилителя уже заказана — посмотрю, как она себя поведёт (самому жутко интересно), а там может быть, и модуль блютуса в конструкции попробую использовать.
Хороший способ! классика фрикинга 😉
но сделайте лучше на Bluetooth, действительно удобно и не дорого! и вообще в хозяйстве робототехника вещь необходимая.
Очень нравится Ваша панорама с морем =)
А где можно посмотреть на эту панораму?