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. Однако, к сожалению, такой микросхемы под рукой не оказалось, так что продолжение эпопеи будет изложено в статьях, которые последуют далее.


0 комментариев на «“KAPing (часть 1: Подключаем arduino к компьютеру через… звуковую карту!?)”»

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

  1. Хороший способ! классика фрикинга 😉
    но сделайте лучше на Bluetooth, действительно удобно и не дорого! и вообще в хозяйстве робототехника вещь необходимая.

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

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

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение