Управление машинкой с телефона

Управление машинкой с телефона

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

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

Инструменты и материалы для сборки:
— паяльник с припоем и флюсом;
— электродрель (подойдет и ручная);
— нож;
— отвертка;
— мультиметр;
— печатная плата;
— выпрямительный диод 1N4007;
— регулятор напряжения 7805v;
— драйвер мотора L293D;
— декодер MT8870 DTMF;
— микросхема 74LS04 NOT gate;
— AVR микроконтроллер ATmega16;
— старые наушники;
— кварцевый резонатор XTAL1 — 3.57MHz;
— нажимной переключатель;
— кварцевый резонатор XTAL2 — 12 МГц;
— штырьковые разъемы «папа», «мама»;
— два моторчика постоянного тока 6В, 50 об/мин с кронштейнами;
— четыре колеса;
— аккумулятор типа 6В, 4.5 А/ч;
— пять светодиодов любого цвета (3 мм);
— соломинка или корпус от пластиковой ручки;
— гайки с болтами на 2 дюйма (4 штуки).




Шаг 4. Установка периферийных деталей
Для того чтобы установить моторчики по углам задней части платы нужно просверлить отверстия. С передней стороны будет находиться ось, это может быть металлическая спица или тонкий карандаш, далее на нее надеваются колеса. На этом же этапе с помощью ранее изготовленного кабеля к машинке можно подключить смартфон. При подключении смартфон нужно перевести в режим автоматического ответа.
После этого можно подключать аккумулятор и включать самоделку. Если все сделано правильно, должны засветиться четыре светодиода.


Кнопка 8 означает движение назад
Кнопка 4 означает движение налево
Кнопка 5 — это стоп
Кнопка 6 — это поворот направо
Кнопка 2 — движение вперед

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

Лучше, чем бортовой компьютер: устройство OBD-2 позволяет более тонко осуществлять настройку и управление электроникой машины. Мы расскажем, как помочь автомобилю и смартфону правильно понимать друг друга, а также покажем соответствующие приложения для iOS и Android.

После подключения к автомобильному разъему OBD-2 смартфон превращается в универсальный инструмент: мобильный телефон может служить в качестве бортового компьютера, диагностического прибора и навигационной системы.

OBD-2-разъем в автомобиле

Apple и Google хотят завоевать автомобили с помощью CarPlay и Android. Однако, предпосылкой к этому является либо дорогостоящий апгрейд, либо новенький автомобиль. Тем не менее, необходимым условием это не является, так как на особые затраты идти вам не придется, если вы захотите умно соединить свой смартфон с машиной: даже старые «тележки» располагают всем необходимым для того, чтобы использовать смартфон в качестве, например, бортового компьютера.

Необходим только лишь маленький модуль с Bluetooth или WLAN, который можно приобрести примерно за 500 рублей. С помощью этого модуля вы быстро получите доступ к системе OBD-2 (On-Board-Diagnose), которой оснащается каждый бензиновый автомобиль, выпущенный не ранее 2001 года, и каждый дизельный — начиная с 2004 года. Место, в котором располагается разъем OBD-2, зависит от производителя и конкретной модели, но чаще всего его можно найти под панелью приборов со стороны водителя.

Так мобильный телефон превращается в бортовой компьютер

Чтобы получить возможность использовать мобильный телефон в качестве бортового компьютера и диагностического прибора, вы должны подключить его через Bluetooth или WLAN к разъему OBD-2.

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

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

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

Примечание: из-за ограничений, которые имеют Bluetooth-протоколы под iOS, с iPhone совместимы только OBD-2-модули с WLAN-связью.

OBD-2-приложения для Android и iOS

Смартфон должен обладать способностью правильно обмениваться информацией с автомобилем, то есть с модулем, подключенным к разъему OBD-2 — и для этого необходимо соответствующее приложение.

Несколько интересных программ, которые могут предложить что-то действительно стоящее, мы собрали для вас воедино в нижеприведенной таблице для Android (Google Play) и iOS (Appstore).

Приложение ссылка на онлайн-магазин цена
Torque Lite (OBD2 & Car) для Android, для iOS бесплатно
Smart Control Lite для Android, для iOS бесплатно
DashCommand для Android, для iOS бесплатно
EOBD Facile для Android, для iOS бесплатно
DashCommand для Android, для iOS бесплатно
OBD Car Doctor для Android, для iOS бесплатно

Фото: компании-производители

Вот что у меня получилось в итоге: проходимое шасси, управляемое — ТА-ДА. — с моего смартфона на Андроиде.

«Я и прямо, я и боком,
С поворотом, и с прискоком,
И с разбега, и на месте,
И двумя ногами вместе…»

Сегодня мы соберём забавную машинку с дистанционным управлением по Bluetooth. Исходники программы управления под Android в комплекте.

Читайте также:  Биошок будет ли продолжение

Содержание / Contents

↑ Достойный образец игрушки

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

Почему так? Наверное потому что эта пила продавалась в магазине инструментов «STIHL». Как я полагаю, «STIHL» сделал игрушечный аналог своей продукции небольшим рекламным тиражом. В результате появилась на свет вполне вменяемая игрушка, очень похожая на своего старшего брата. Цепь резиновая – крутится, процентов на 80 реализованы органы управления. Есть даже шнур с ручкой для завода пилы, выключатель, кнопка газа. В комплекте есть запасная цепь и инструмент для смены цепи.

О чём это я? Ах, да, об архитектуре! Это я к тому, что при желании отличную игрушку сделать можно. И есть на что равняться.

↑ Будем строить машинку с ДУ!

Практический и технический интерес вызывают игрушки с радиоуправлением. Однако, ребёнку в возрасте 4-6 лет не будут дарить игрушки со «взрослым» пропорциональным управлением. Скорее всего, игрушка будет сломана, а деньги выкинуты на ветер.
В итоге, обычно дарят что-то недорогое. Из всего этого – «недорогого» — машинки или шибко быстрые или тормозные; танки хилые; и прочие очевидные и скрытые недостатки. И уж конечно никакого пропорционального управления.

В один прекрасный день у одной из машинок перестало вращаться правое колесо. Разобрал, проверил моторчик – исправный.
На плате управления три микросхемы – Китай голимый, вменяемой документации найти не смог. Один чип – приёмник радиосигнала с логическими выходами и два мостовых драйвера двигателей. Один из драйверов вышел из строя. Сваять сходу мостовой драйвер двигателя из дискретных компонентов у меня не получилось.

В местном магазине радиодеталей ничего подходящего не было. Вот я и подался в дальние страны за чудо-микросхемами. Собрал пожитки, набил карманы сухарями, налил чашечку кофе, запустил браузер и пошел… на Алиэкспресс .
Нашел подходящий по параметрам драйвер двигателя, заказал сразу два. На всякий случай, вдруг один будет неисправен или сам спалю. Вот тогда и начала зарождаться мысль о своей машинке. После того, как посылка дошла из славного Китая, я успешно заменил драйвер и машинка была отремонтирована.

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

↑ Как я выбирал шасси

В комплекте поставки шасси:
• две пластины из акрила с кучей технологических отверстий для крепления все возможных датчиков, плат управления и прочих компонентов
• 4 колеса
• 4 привода в сборе (электродвигатель + редуктор)
• 4 диска с прорезями для датчиков скорости, по одному на каждое колесо
• крепеж
Да, это снова Китай. Да, дешёвый. Да, нешибко качественный. НО! Нам бы для начала попробовать. Ведь «взрослое» шасси и стоит по-взрослому, мы до него ещё не доросли.

↑ Болото мыслей и Техзадание

Когда держишь в руках перспективную вещь, например, в плане возможностей по обвесу модели всевозможными датчиками, серво и пр., начинаешь тонуть в болоте мыслей и трясине перспектив. Но, скажем себе — СТОП! И составим себе мини-ТЗ на прототип с кратким описанием всех узлов.
У нас должна получиться RC-модель наземного траспортного средства с управлением по Bluetooth, с возможностью реверса и плавного регулирования скорости вращения колес.

↑ Что нам потребуется для сборки машинки?

Для дистанционного управления машинкой используем канал Bluetooth. Модуль «HC-06» — это мост Bluetooth, последовательный интерфейс, позволяющий передавать данные в обе стороны. На входе — TTL-сигналы последовательного интерфейса «RxD» и «TxD» для подключения к микроконтроллеру (целевой плате).
В качестве пульта дистанционного управления будет служить сотовый телефон с Android. Напишем свою программу!


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

Выбрана эта плата т.к. валялась в ящике стола и полностью подходит для нашей цели. Есть дискретные входы/выходы, выведены сигналы МК «RxD» и «TxD», куда будет подключен «HC-06“.
Забегая вперёд скажу, что продукт Олимекс MOD-IO — это жёсткий перебор. Прекрасно можно будет применить и обычную платку Ардуино Нано , о чём в продолжении истории!

Итого: шасси + плата управления + Bluetooth-модуль + программа управления под Android.

↑ Общая схема подключения

↑ Схема в Протеусе

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

↑ Программа микроконтроллера

Программа МК умеет принимать команды по последовательному интерфейсу с Bluetooth-модуля.
И, в соответствии с командами, управлять левой и правой парой приводов. Реверс и управление скоростью работают при помощи ШИМ.

Код в достаточной мере прокомментирован. Хочу отдельно остановиться на моей реализации обмена данными.
Приём данных у меня реализован через кольцевой буфер. Вещь не новая и реализаций много.

Читайте также:  Имена в инстаграм для девушек с переводом

Функции кольцевого буфера у меня вынесены в отдельную библиотеку состоящую из:
заголовочного файла ring_buffer.h и файла реализаций функций ring_buffer.с
Для использования библиотеки её нужно подключить в main.c

Далее, в заголовочном файле необходимо настроить библиотеку. Для настройки необходимо задать всего четыре директивы:

Собственно настраивать больше нечего.

Использование кода В main.c настраиваем USART микроконтроллера.
Вызываем функцию настройки USART

↑ Приём пакета данных

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

Да, я пока пренебрег всякими проверками фрейма.

Теперь нам остается время от времени проверять наш буфер. Для этого я инициировал таймер, в котором я устанавливаю флаг разрешающий проверку кольцевого буфера

В основном цикле добавляем условие для проверки флага.

Функция RB_read_buffer проверяет кольцевой буфер, если размер пакета, стартовый и стоповые байты находятся на своих местах — пакет считается валидным, функция возвращает "1». В качестве аргумента, функция принимает указатель, куда складывать принятый пакет.
Для пущей надежности, пакет можно снабдить контрольной суммой, в одном из своих коммерческих проектов я так и сделал. То есть к проверке размера, старт/стопового байтов прибавляется еще проверка контрольной суммы. Но пока обойдемся без неё.

↑ Как я разбираю пакет

Теперь самое интересное, как я разбираю пакет. В пакете могут передаваться данные размерностью больше байта, знаковые данные, данные с плавающей точкой.
Объясню на примере пакета для управления шасси. Кроме стартового и стопового байтов, в своём пакете мне необходимо передавать одну команду, и два значения ШИМ, для левой и правой стороны приводов. Для команды мне достаточно одного байта, а для каждого значения ШИМ, я передаю int16 — 16 бит, знаковый тип. То есть, я не передаю флаг (байт/признак) направления. Для смены направления, я передаю положительное или отрицательное значение ШИМ.

Приёмный пакет у меня организован в виде структуры.

Вызывая функцию RB_read_buffer ( (uint8_t*)&RxPacket ), в качестве аргумента передаем указатель на структуру приёмного пакета. То есть, при принятом пакете, будет все разложено по своим полочкам в структуре RxPacket. Дальше остается прочитать эти данные из структуры например так:

↑ Передача пакета данных

Хоть в моей программе передача пока не используется, тем не менее, возможность передачи реализована. Передавать данные проще. Точно также, как и для приемного пакета, создадим структуру:

Где, есть стартовый и стоповый байт и информационная часть. Мы уже инициализировали приемник USART.
Для инициирования передачи пакета — вызываем функцию

В данном примере, в этой функции, я записываю только стартовый байт в регистр UDR. Вроде бы немного, но в этой же функции можно реализовать подготовку пакета или еще что-то полезное. И это, на мой взгляд более логично. Логично в плане самодокументирования кода. То есть, если я в коде, просто запишу значение в регистр UDR это может быть воспринято, как передача всего одного байта, а вызывая самоговорящую функцию send_packet () — я говорю о том, что я отправляю пакет данных.

Далее, когда передатчик USART отправит весь байт из регистра UDR — будет вызван обработчик прерывания по передаче.

В обработчике я объявляю переменную указателя и присваиваю её адрес структуры TxPacket. Далее объявляется статическая переменная — индекс передаваемого байта, которой при объявлении присвоено значение 1. Начинаем с одного потому, что первый байт из структуры мы уже отправили. В целом, в структуре можно обойтись и без стартового байта, все равно я его отправляю отдельно, но объявления этого байта оставлено в структуре для понимания того как выглядит пакет.

Условие проверяет, что индекс меньше чем размер пакета. Если условие верно, то записываем байт в регистр UDR:
инкрементируем TxIndex. Когда USART передаст очередной байт, то мы снова попадём в обработчик, но будет передан уже следующий байт из структуры и так будут переданы все байты структуры. Когда TxIndex будет больше чем размер структуры — условие будет не верно и мы попадем в Где будет проинициализирован TxIndex, но в регистр UDR уже ничего не записывается, соответственно обработчик больше не будет вызван до следующего инициирования передачи пакета. Таким образом, процесс передачи полностью автоматический, и даже, если мы изменим структуру пакета, то обработчик переписывать не придётся.

В рамках описания программы МК осталось рассказать про реализацию управления драйверами. Драйвер управляется тремя сигналами: A1 (B1), A2 (B2) и PWMA (PWMB). A1 и A2 предназначены для включения/выключения драйвера и для изменения полярности выхода. На вход PWMA подается ШИМ сигнал с МК — можно управлять скоростью вращения. Для ШИМ сигнала я задействовал два аппаратных ШИМа таймера 1.

Таймер 16-битный, но ШИМ инициализирован на 8 бит. И как вы наверное уже заметили, в приёмном пакете у меня есть два значения для задания ШИМ, для левого и правого привода соответственно. Переменные знаковые 16-битные.
Объясню почему я так сделал.

Во-первых, это пошло от программы под Андроид. Дело в том что в Java нет без знаковых типов и я уже наступал на эти грабли. И для передачи числа от 0 до 255 мне пришлось бы как то извернуться. Я решил пойти более простым путем — отсылаю знаковое 16-бит число. При этом, 16 бит знакового типа это от -32786 до 32768, нам хватит.

Читайте также:  На какое расстояние действует wifi роутер

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

И в-третьих, как не крути, для наших целей меньше чем в три байта не уложиться. Пожертвуем еще одним байтом, зато всё становится понятно, положительное значение ШИМ — прямое вращение, отрицательное значение — обратное вращение.

Для управления приводами я написал функцию drive (int leftPWM, int rightPWM);.

В соответствии со значением ШИМ, осуществляется управление сигналами A1 (B1), A2 (B2) и устанавливается значение ШИМ вызовом функции set_PWM (leftPWM, rightPWM).

Уфф, выдохся…
Подытожим: приняли пакет, разобрали, передали значение ШИМ в функцию drive.

↑ Приложение под Android для машинки

Нет, так подробно, как программу для МК я разбирать не буду. В разработке ПО под Android я ещё новичок и не готов рассказывать достаточно компетентно и глубоко.

Основная функция программы — передача данных модулю HC-06 по каналу Bluetooth. Программа имеет не замысловатый интерфейс.

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

Дальше кнопка «Выкл» — включает/отключает связь с «HC-06». Ниже слева направо: передаваемое значение ШИМ левого канала, тип датчика, значение правого канала. Ниже два слайдера регулировки чувствительности скорости и поворота.

В программе реализовано два типа управления машинкой. Для переключение типа датчика нужно коснуться надписи названия датчика: «Наклон» или «Шаркать».

1. Управление машинкой с помощью наклона телефона. Нулевое положение телефона — горизонтальное. При наклоне телефона вперед значение ШИМ увеличивается пропорционально наклону в диапазоне от 0 до 255 . При наклоне телефона назад значение ШИМ уменьшается пропорционально наклону в диапазоне от 0 до -255

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

2. Управление касанием. Моё фирменное название для такого управления — «шаркать».

Можно воспринимать как тачпад. При касании в сером квадрате, значение ШИМ увеличивается/уменьшается в зависимости от места касания, чем дальше от центра вниз или вверх тем больше/меньше значение.

Никаких «красивостей» и наворотов нет. Вот вроде бы и всё.

↑ Немножко дёгтя на «лыжи»

Есть косяк у моего телефона. Ага, телефон «лыжа» — LG G2 mini. На нём соединение по Bluetooth устанавливается неадекватно. Соединение устанавливается нормально только, если Bluetooth был включен непосредственно перед запуском приложения.
Я сделал так: при запуске приложении проверяю включен ли Bluetooth, если выключен — делаю запрос на включении. А при «сворачивании», закрытии приложения — принудительно выключаю Bluetooth.
И еще один момент, при смене ориентации экрана, Bluetooth выключается и снова выдается запрос на включения, приходится выключать автоматическое переключение разворота экрана.

↑ Резюме

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

Есть еще поле для деятельности, есть куда расти. Можно «наворачивать» шасси, можно модернизировать и улучшать ПО для телефона.
И об этом будет продолжение!

↑ Файлы

Здравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.
Уже более 10 лет наш журнал существует только на мои средства.


Спасибо за внимание!
Игорь Котов, учредитель журнала «Датагор»

Схема платы MOD-IO, PDF
▼ mod-io-schematic.pdf 🕗 05/04/16 ⚖️ 46,37 Kb ⇣ 17

Здравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.
Уже более 10 лет наш журнал существует только на мои средства.


Спасибо за внимание!
Игорь Котов, учредитель журнала «Датагор»

Исходные коды программы микроконтроллера
▼ carmcu.7z 🕗 05/04/16 ⚖️ 98,25 Kb ⇣ 14

Здравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.
Уже более 10 лет наш журнал существует только на мои средства.


Спасибо за внимание!
Игорь Котов, учредитель журнала «Датагор»

Исходные коды программы для телефона
▼ carcontrolandroidsrc.7z 🕗 05/04/16 ⚖️ 4,96 Mb ⇣ 17

Здравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.
Уже более 10 лет наш журнал существует только на мои средства.


Спасибо за внимание!
Игорь Котов, учредитель журнала «Датагор»

Установочный файл для телефона, apk
▼ car-control_apk.7z 🕗 05/04/16 ⚖️ 896,35 Kb ⇣ 16

Здравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.
Уже более 10 лет наш журнал существует только на мои средства.


Спасибо за внимание!
Игорь Котов, учредитель журнала «Датагор»

Ссылка на основную публикацию
Сканер ricoh sp 220snw
Компания Ricoh — далеко не новичок на рынке печатающих устройств. Это глобальная корпорация со штаб-квартирой в Токио и представительствами во...
При каком альфа векторы компланарны
Единого обозначения компланарность не имеет. Свойства компланарности Пусть — векторы пространства . Тогда верны следующие утверждения: Если хотя бы один...
При каком значении m прямая параллельна плоскости
Точка C(—3, 4,1) найдена. 6. Написать уравнение плоскости, проходящей через точки M1(1, —2, 1), M2(4, 2, 3) и параллельной вектору...
Сколько дают на ютубе за 1000 просмотров
Многих пользователей YouTube, а также начинающих видеоблогеров справедливо интересует вопрос: «А сколько YouTube платит за тысячу или миллион просмотров?» Если...
Adblock detector