Самодельный usb провод. Самодельная флешка

Хочу рассказать о своем небольшом проекте выходного дня, осветить трудности, с которыми пришлось столкнуться, дальнейших планах и получить консультацию более опытных Хабраюзеров. Формат статьи обзорный, так сказать, галопом по Европам. Если будет интерес, пройдусь подробнее по отдельным частям.

Коротко описать работу устройства можно так:

Электретный микрофон → Усилитель Max9812 → Микроконтроллер STM32F103 → Программное детектирование наличия звука → Кодирование звука в Speex → Отправка через ESP8266 на сервер → Скрипт PHP приема данных и оформления в звуковой контейнер Ogg. Кому интересно, прошу под кат.

Зачем все это надо?

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

Возможно кто-то увидит другое применение такой поделке, но уверяю Вас, устройство не создается с целью негласного получения информации (ст.138.1 УК РФ) и любая такая попытка будет преследоваться по закону .

Попрошу сразу не критиковать саму идею, работа со звуком и Wi-Fi мне нужна в другом проекте, над которым я пока только думаю. А это - отдельный кусок, реализованный в самостоятельный девайс.

Корпус

По принципу “Design first” начал думать в каком конструктиве делать устройство. В поисках готовых корпусов на Ali наткнулся на корпуса для usb с отверстием под кабель и подумал про себя, что это идеальный вариант - дырку займет микрофон, а остальное как-нибудь впихнем.

Только вот заказывать 10шт за $5 я не хотел и начал искать варианты. В итоге заказал переходник USB-RS485 в точно таком корпусе за $0.84. А сам переходник пригодится на работе, а то Bolid’ы, стоимостью 1.5 тыс рублей, уходят как расходный материал.

Закупаем все необходимое

Во-первых, при ознакомлении с предметной областью предстоящей поделки, я наткнулся на статью Распознавание речи на STM32F4-Discovery . Там и прочитал про кодек Speex и его применение на микроконтроллерах. Признаюсь, это мой первый опыт работы с микроконтроллерами фирмы STM.

Итак, заказываем самую распространенную отладку с микроконтроллером STM32F103C8T6, к ней отладчик St-link v2, допиливаем его на коленке и уже можно жить. По приблизительным подсчетам ресурсов STM32F103C8T6 должно было хватить, но speex весьма прожорлив, да и сами драйвера HAL не такие уж компактные, в общем памяти для всех библиотек оказалось маловато. В конечном девайсе стоит STM32F103CBT6 с удвоенным количеством flash.

Во-вторых, нужен микрофон. Первой строчкой в поиске берем микрофонный модуль с усилителем max9812, а в довесок горстку более миниатюрных микрофонов типоразмера 6050 (ведь у нас уже есть корпус с отверстием, куда должен пролезть данный микрофон).

В-третьих, нужно подобрать модуль wi-fi, да такой, чтоб влез в купленный корпус. Выбор был сделан на миниатюрный ESP-03 с керамической антенной и несколько штук ESP-12 для макетирования.

Макетирование и программирование

В STM32CubeMX быстренько собираем необходимую периферию и идем дальше, в процессе работы все равно придется часто возвращаться к Кубу. Тут главное писать код в специально отведенных местах /* USER CODE */ и тогда новая генерация проекта никак не скажется на уже написанном.

Семплирование АЦП идет через DMA по триггеру таймера на частоте 8кГц в два кольцевых буфера размером 160 семплов, один буфер получается равен 20мс. Столкнулся с таким моментом, который не знал и потерял на этом время: DMA продолжает работать на брейкпоинте отладчика, при этом оба флага HT (половина передачи) и TC (передача закончена) установлены, а буферы заполнены всегда полностью.

С библиотекой Speex разобрался не сразу, контроллер постоянно вылетал в HardFault. Оказалось просто не хватало размеров стека и кучи. Нашел Application Note от Silicon Labs с описание необходимых ресурсов для кодирования/декодирования, в конце статьи есть ссылка. Установил значения с небольшим запасом CSTACK 0x800 и HEAP 0x1600. На выходе кодирования получаем размер фрейма 20 байт. Собираем их в пакеты для отправки.

Модуль Esp8266 за раз может принять не более 2048 байт данных. Формат команды отправки: POST-заголовок + данные. Размер пакета данных я ограничил до 1800 байт (90 фреймов по 20мс).

Прием данных сделал на PHP. Мне было стыдновато выкладывать код, тем более это мой первый опыт ООП в жизни. Прошу не хейтить, это не моя область, лучше научите как правильно. Суть скрипта в том, чтобы забрать данные из php://input, сформировать заголовок, посчитать необходимые контрольные суммы и сохранить все в файл Ogg (либо дописать старый, либо создать новый). Но у меня есть жуткое предчуствие, что принимать аудио через POST запросы очень глупо…

Вопрос к сообществу: что посоветуете для серверной части? В перспективе хочется получать стрим аудио в реальном времени. У меня лично есть небольшое желание познакомиться с Node.js.

Принципиальная схема и разводка печатной платы

Схему и разводку нарисовал в бесплатной версии Eagle CAD, благо размер платы небольшой. Вот они. Без комментариев.

Заказ плат

Платы заказал в американском OSH Park . Чем примечателен данный сервис, так это тем, что цена формируется от размера платы ($5 за квадратный дюйм), а доставка бесплатная. Ко всему прочему на сайт можно грузить сам файл.brd из Орла и есть предпросмотр, не надо перегонять в Gerber.

Получилось 3 платы за $3.35. Для макетного образца это выгоднее, чем переплачивать китайцам $15 за ненужные 10шт. До сих пор дома валяются горы ненужных плат от других проектов. Да к тому же пришло все это в фирменном пакете с конфетками внутри. Мелочь, а приятно. Трек номера не было, дошло за 40 дней с момента заказа. В производстве были 10 дней (с 29 декабря по 9 января, возможно праздники как-то сказались на сроках).

Качеством плат я остался доволен. Дорожки 8 mil. Переходные 13 mil. Платы пришли с золочением, слой маски относительно площадок везде ровный.

Сборка и настройка

Пока не понял в чем дело, но модуль Esp-03 практически не ловит сигнал, что странно в условиях наличия керамической антенны и расстояния до телефона (который на работе выступает в качестве раздающего wi-fi) в пределах полуметра, при этом модуль ощутимо греется. При поднесении телефона вплотную начинает обнаруживать сеть и подключается к ней. Заказывать новый или в чем может быть дело?

Дальнейшие планы

1. Доработать алгоритм VAD (Voice Activity Detection, запись при обнаружении звука) до более адекватного.
2. Проверить возможность воспроизведения звука на телефоне.
3. Сделать возможность настройки удаленно. Сейчас это реализовано путем ответа сервера (Settings=40,2000,10,), где задается чувствительность нынешнего алгоритма VAD (сигнал должен 40 раз превысить 2000 бубок) и длительность записи в секундах.

Итоговый вариант

Калькуляция
$2.03 - модуль ESP-03
$2.13 - микроконтроллер STM32F103CBT6
$0.39 - микрофоны типоразмера 6050
$1.12 - микрофонный модуль с MAX9812 и обвязкой
$0.84 - преобразователь USB-RS485 (корпус + usb type A male)
$0.50 - стабилизатор NCP3335A на 3.3V

Итого: $7.01 (~420 руб) на один девайс.

Цены могут отличаться в связи с последними событиями на Ali. В стоимости не учтены программатор и рассыпуха.

Спасибо за внимание!

Вопросы и предложения пишите в комментарии. Также допускается контакт или телеграмм, ник везде один.


Хороший кабель, с хорошим, прочным штекером для зарядки телефона подобрать в магазине крайне не просто. Зачастую, заявленное на упаковке качество товара не соответствует действительности. Если сам штекер micro usb, который подключается к разъёму Вашего телефона, или другого гаджета, выполнен из некачественной стали, он очень скоро разболтается, или погнётся, и будет неплотно сидеть в разъёме, вызвав тем самым сбои при зарядке аккумулятора. Или же перестанет передавать и принимать файлы с других устройств, например, с компьютера или флэш-накопителя. И очень неприятно, когда имеющийся у Вас кабель с хорошим штекером вдруг перестал работать по причине разрыва жил кабеля, возле этого самого штекера. Это случается от постоянных перегибов кабеля при использовании. Когда это произойдёт – вопрос времени. В зависимости от интенсивности использования. Можно пойти, и купить новый, а можно отремонтировать старый – это дело каждого индивидуальное. Лично мне, более по душе второй вариант. Не столько из-за суеты выбора и хождениям по салонам связи, сколько ради собственного интереса. Да и тратиться, опять же, не придётся... В общем, недавно мне принесла такой неисправный кабель дочь. Уж не знаю, что она с ним делала, но повреждён он оказался у оснований сразу обоих штекеров – usb, и micro usb.


Взялся я за это дело, ещё и потому, что этот кабель был "родной" от её телефона, который шёл в комплекте с телефоном, зарядкой и наушниками. Пользоваться другим она категорически отказалась, из-за боязни испортить телефон. И покупать оригинальный кабель тоже не захотела. Пришлось отдать ей свой (благо, у нас телефоны одинаковые), а себе ремонтировать сломанный. Работа заняла у меня около часа.

Понадобится

  • Паяльник, олово и флюс.
  • Ножницы.
  • Нож канцелярский.
  • Секундный клей.
  • Термоусадочная трубка (желательно под цвет кабеля).
  • Зажигалка.
  • Маленькие кусачки.

Ремонт кабеля

Для начала, не церемонясь, отрезаем повреждённый штекер от кабеля. В моём случае оба штекера.


Далее, при помощи канцелярского ножа, разрезаем штекер по шву. У меня корпусы штекеров были спаянные по шву, по этому, мне пришлось повозиться. Но бывают штекеры с разборным корпусом – тут кому как повезёт. Тем не менее, проведя несколько раз новым лезвием канцелярского ножа по швам корпуса, я отделил его довольно легко и быстро. Сняв корпус, разбираем штекер на составляющие части.



Тут надо быть внимательным. В плане контактов штекера: к какому из них припаян какой провод. Чтобы не запутаться, можно помечать контакты разноцветными маркерами, в цвет проводов. Мне это ни к чему, я давно знаю раскладку usb наизусть... Вот на всякий случай:


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


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


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


Далее, надеваем на кабель (с другого конца) термоусадочную трубку, и усаживаем её зажигалкой. Ещё одно примечание: если Вы ремонтируете только один штекер, позаботьтесь о том, чтобы термотрубка оказалась надета на кабель раньше, чем Вы припаяете штекер к кабелю и приклеите корпус, иначе потом, придётся всё заново разбирать, чтобы исправить этот недосмотр. После усадки, трубка плотно обхватит кабель вместе с резиновым уплотнителем; получится почти монолитная оплётка, как раньше.



Теперь второй штекер – micro usb. Продеваем заранее термотрубку на кабель, чтобы потом не забыть. Разбираем штекер. Так же, как и предыдущий: при помощи канцелярского ножа.


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


Далее собираем штекер воедино, как и предыдущий.


Надеваем на нарушенную оплётку кабеля термотрубку, которую мы заранее продели на кабель. Усаживаем трубку.


Вот и всё – сломанный кабель снова в строю, с теми же функциями, для которых он и предназначен инструкцией. Причём без каких-либо внешних и видимых нарушений оплётки, типа намотанной изоленты. Выглядит как новый. Подключаем к телефону, и пользуемся с удовольствием!

Практически вся современная аппаратура управления радиомоделями (как то Futaba, Hitec, Multiplex, FlySky и др.) имеет на своем борту разъем «TRAINER», с выходом РРМ сигнала (аналоговым принципом кодирования), который используется для подключения к компьютеру передатчика (пульта управления) в режиме обычного джойстика, благодаря чему можно виртуально тренироваться в управлении виртуальной моделью самолета, вертолета и др. не рискуя разбить настоящую модель. Для подключения пульта к компьютеру применяются специальные покупные кабели-адаптеры. (как этот)


Но мы Самоделкины можем сделать самодельный аналог кабеля-адаптера, одна из лучших вариантов схем, это USB кабель на микроконтроллере atmega8, по проекту Олега Семенова, Вадима Кушнира, Виталия Пузрина. Их программное обеспечение умеет работать с любым количеством канальных импульсов от пульта (передатчика) и не зависит от полярности подачи, даже не все покупные адаптеры умеют так.

Шаг 1. Что нам необходимо.

Материалы:

  • Микроконтроллер atmega8
  • Транзистор BC 547 (или КТ315, КТ3102)
  • Два стабилитрона на 3,3-3,6в. (например, 1N5226 , 1N5527, КС133)
  • Резисторы 68Ом.-2 шт., 2,2к., 4,7к., 10к., 200к., конденсатор 0,22
  • Керамический или кварцевый резонатор на 12мГц
  • USB удлинитель 1м. или больше (на запчасти), S-video кабель (на запчасти)

Инструменты:

  • Паяльные принадлежности, текстолит для платы.

Шаг 2. Изготовление штекера для разъема «TRAINER».

Для разъема TRAINER идеально подходит штекер от кабеля S-video, только его надо сперва правильно распаять.

На фото: Так выглядит стандартная распайка S-video кабеля.

На фото: А нам надо переделать его по следующей схеме ниже, этот вариант подходит для пультов от FlySky, для других производителей пультов распиновку кабеля надо смотреть-сверять дополнительно в интернет.

Для работы с симулятором нужен только 1pin — PPM сигнал и GND.

Берем кабель s-video и отрезаем нужный нам штекер.

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

Поэтому вынимаем все внутренности.


Вынимаем ножки (пины) и разъединяем их.


Берем заготовленный USB удлинитель, отрезаем разъем Тип «А» с 20 см. куском кабеля и откладываем пока в сторону для дальнейшего присоединения к плате.

Берем остальную половину кабеля, длиной не менее 80 см., разделываем концы для присоединения к штекеру.

Сразу надеваем оболочку на кабель.

Зачищенные провода облагораживаем кусочком термоусадки.

Припаиваем ножки разъема и вставляем их на место в соответствии со схемой подключения к пульту.


Собираем разъем, закрепляем все на термоклей и надеваем оболочку корпуса на место.



Для ремонта разрезанного корпуса, надеваем несколько трубок термоусадки и обжимаем нагревом.




Проверяем работоспособность полученного кабеля тестером, если цепь звонится, замыкания нет, значит кабель готов.

Теперь надо вставить штекер с кабелем в разъем TRAINER, включаем пульт (передатчик) и замеряем на выходе провода PPM сигнала наличие напряжения, оно должно быть около 3 вольт, если этого нет, надо проверить напряжение непосредственно на выходе самого пульта и настроить выход в меню.


Шаг 3. Изготовление платы адаптера.

Вот основная схема адаптера.

По принципиальной схеме проектируем монтажную плату.

У меня получилась вот такая небольшая плата, сделана она в программе Sprint-Layout.

Изготавливаем саму плату одним из доступных вас способом, ЛУТ, ЧПУ или др.


Получилась такая платка.

Шаг 4. Распайка платы.

Не спешите сразу покупать кварц на 12 мГц, у каждого дома есть ненужная usb компьютерная мышь, старая флешка или другой ненужный USB девайс, проверьте их внутри, наверняка там есть то, что Вам надо.

Мой кварц из этой мыши.




Впаиваем все детали на плату, припаиваем наш изготовленный кабель с s-video штекером и заготовленный 20 см. USB шнурок.



Покрываем плату лаком.

Шаг 5. Прошивка микроконтроллера.

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

Прошиваем МК через программатор или просто через LPT порт по схеме ниже.




В моём распоряжении были следующие коннекторы: USB гнездо, предназначенное для установки в печатную плату и 80 сантиметровый кусок кабеля с USB вилкой на конце.


Вначале, я попытался изготовить гибкий удлинитель из 4-метрового аудио-видео кабеля, но попытка не увенчалась успехом. Когда я вставил флэшку в этот кабель, ОС «сказала», что устройство работает неправильно.



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

Для передачи сигнала и питания в формате USB2.0, на расстояние до 5-ти мтеров, вполне достаточно всего двух витых пар. Оставшиеся витые пары можно не использовать.


Однако если сопротивление жил кабеля велико, а подключенное к концу кабеля устройство потребляет значительный ток, то можно пустить питание сразу по двум или даже трём витым парам.


Давайте рассмотрим этот момент подробнее.

Например, если потребляемый USB устройством ток составляет 400мА, а сопротивление одной пары 2 Ома (в оба конца), то сопротивление USB устройства будет равно:


5 / 0,4 = 12,5 (Ом)


При этом падение напряжения на кабеле составит:


5 * 2/ (12,5 + 2) ≈ 0,69 (Вольт)


Что, конечно, многовато.


Но, если использовать сразу три пары:


2 / 3 ≈ 0,67 (Вольт)

5 * 0,67/ (12,5 + 0,67) ≈ 0,25 (Вольт)


То падение напряжения на кабеле снизится и уже не будет столь критичным.

О цоколёвке (распиновке) USB вилок и гнёзд

На картинке показана цоколёвка гнезда и вилки USB 2.0.


Для передачи данных (+Data и –Data) можно использовать любую из четырёх имеющихся витых пар.


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


Как закрепить гнездо USB на жёстком сетевом кабеле

Сборка моего кабеля несколько осложнилась в связи с тем, что в моём распоряжении оказалось не кабельное USB гнездо, а гнездо для печатных плат.


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


А потом и от нижней стенки корпуса (на фото показано сверху).

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


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


Должно получиться примерно так. Образовавшиеся «лепестки» должны быть расположены в виде креста.


Затем можно припаять концы витых пар к соответствующим выводам.


Крепим «лепестки» к корпусу гнезда швейными нитками. Конец нитки закрепляем канифолью.

Теперь можно облагородить гнездо, надев термоусадочную трубку или покрыв полиэтиленом (из пистолета).

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


Сначала я намотал на край кабеля медный провод диаметром 1,3мм. Потом припаял концы этого провода к боковым стенкам гнезда USB.


Для придания дополнительной жёсткости конструкции, покрыл место соединения кабеля с гнездом USB низкотемпературным термоклеем.



Для придания более благообразной формы и улучшения внешнего вида разъёма, покрыл его термоусадочной трубкой. В

Внимание! Во время усадки трубки, термоклей может просочиться через щели во внутреннюю часть гнезда. Чтобы это предотвратить, можно вставить прокладку между трубкой и корпусом гнезда или вилку в гнездо. Тогда не придётся выковыривать термоклей из гнезда.


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

Сегодня хочу представить вашему вниманию OTG – переходник.

Для начала хочу рассказать Вам что такое OTG? Это способ подключения к вашему планшету или телефону который поддерживает функцию OTG, принтер, флешку и даже жесткий диск. Еще это подключение называют - USB-host.

Также можно подключить клавиатуру или мышь к Вашему гаджету, если гаджет такую функцию поддерживает.

И так, для создания этого чудо кабеля, нам понадобится:
Старый удлинитель USB
Micro USB разъем (достать можно из обычного USB кабеля для вашего девайса)
Паяльник и паяльные принадлежности

И так, поехали, чтобы нам сделать такой кабель, нам будет необходимо соединить 4й контакт с 5м контактом разъема micro USB

Мы должны добраться до четвёртого контакта и соединить его перемычкой с проводом GND так как показано на картинке


После того как мы соединим перемычкой 4й и 5й контакты, наш гаджет будет выполнять функцию активного устройства и будет понимать, что к нему собираются подключить другое пассивное устройство. Пока мы не поставим перемычку то гаджет и дальше будет выполнять роль пассивного устройства и не будет видеть ваши флешки.

Но это еще не всё, чтобы подключить к телефону или планшету жесткий диск, этого переходника нам будет недостаточно. Для подключения устройств у которых потребление больше чем 100мА, а именно 100мА может выдать порт вашего устройства, нам потребуется подключить к нашему OTG-кабелю дополнительное питания которого должно быть достаточно чтобы ваш жесткий диск заработал.

Вот схема такого переходника


Теперь пора приступить к сбору
Берем старый удлинитель USB и разрезаем его не сильно далеко от разъема 2.0, так как ток всего лишь 100мА, чтобы избежать больших потерь. Отрезаем приблизительно в том месте как показано на фото


После зачищаем наш провод



Я соединил каплей припоя 4 и 5 контакты.

Ну и вот весь наш кабель в сборе


Осталось только проверить работоспособность, берем планшет, вставляем «переходник» и вставляем в него флешку, все работает о чем нам говорит мигающий светодиод на флешке и планшет определяющий флешку.