Гоночная машинка на Bluetooth управлении.

Содержание
  1. ↑ что нам потребуется для сборки машинки?
  2. ↑ будем строить машинку с ду!
  3. ↑ достойный образец игрушки
  4. ↑ как я выбирал шасси
  5. ↑ как я разбираю пакет
  6. ↑ передача пакета данных
  7. ↑ приём пакета данных
  8. ↑ приложение под android для машинки
  9. ↑ программа микроконтроллера
  10. ↑ файлы
  11. Java приложение
  12. Выбираем компоненты
  13. Гоночная машинка на bluetooth управлении.
  14. Драйвер двигателей
  15. Интерфейс управления на планшете android.
  16. Конструкция, шасси и двигатели робота на ардуино
  17. Контроллер ардуино
  18. Питание робота
  19. Подключаем bluetooth к машинке
  20. Подключаем двигатели и плату
  21. Приложение для android
  22. Пример платформы робота-машины на ардуино
  23. Простая bluetooth машинка на arduino
  24. Робот на ардуино своими руками
  25. Соединяем bluetooth с управляющей платой
  26. Схема электропитания робота автомобиля
  27. Удалённое управление
  28. Шаг 5. ардуино контроллер
  29. Шаг 6. h-мост (модуль lm 298)
  30. Шаг 8. электрические соединения

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

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

2. Bluetooth–модуль «HC-06» .

Мы используем канал Bluetooth для удаленного управления машиной. Модуль “HC-06” представляет собой Bluetooth-мост, последовательный интерфейс, позволяющий передавать данные в обоих направлениях. Входами являются сигналы последовательного интерфейса TTL “RxD” и “TxD” для подключения к микроконтроллеру (целевой плате).

Пультом дистанционного управления будет мобильный телефон, работающий на ОС Android. Давайте напишем нашу собственную программу!

3. Драйвер двигателя TB6612FNG является двухканальным.

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

4. Плата управления MOD-IO (Olimex)

Плата была выбрана потому, что она лежала в ящике и вполне подходит для нашей цели. Входы и выходы разделены на два дискретных сигнала, “RxD” и “TxD”, к которым будет подключен “HC-06”.

Смотрите про коптеры:  Аппаратура управления квадрокоптером, какая бывает и как выбрать - Все о квадрокоптерах | PROFPV.RU

Я скажу прямо, что Olimex MOD-IO трудно продать. Вы можете с таким же успехом использовать обычный

, о чём в продолжении истории!

Программное обеспечение Android для управления платой управления шасси с помощью Bluetooth.

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

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

В результате они обычно предоставляют что-то недорогое. “Недорогие” машины либо слишком быстрые, либо слишком медленные, а танки хлипкие, среди прочих недостатков, как явных, так и скрытых. И, конечно, никакого пропорционального управления.

Однажды машина перестала вращать правое колесо. Она работает, когда я разбираю ее и проверяю двигатель. На плате управления стоят три микросхемы – китайские, я не смог найти документацию на них. В одной микросхеме объединены радиоприемник с логическими выходами и 2 драйвера мостового двигателя. Один из драйверов вышел из строя. Дискретных компонентов для драйвера мостового двигателя не существует.

В местном радиомагазине я не смог найти ничего подходящего. Поэтому я отправился на поиски чудодейственных микросхем в далекие края. Я собрал свои вещи, набил карманы сухарями, налил чашку кофе, запустил браузер и отправился на. Aliexpress. Драйвер двигателя с заданными параметрами был найден, и я заказал сразу два.

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

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

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

Почему? Из-за того, что он продавался в магазине инструментов STIHL. Была также игрушечная версия продукта STIHL, я полагаю, с ограниченной рекламой. Это была вполне вменяемая игрушка, как и ее старший брат.

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

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

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

Я остановился на

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

– 4 колёса.

Редуктор с электродвигателем имеет четыре блока приводов.

– 4 диска с гнездами для датчиков скорости, по одному на колесо

– крепления

Да, это снова Китай. Да, это дешево. Да, он не очень высокого качества. Но сначала надо попробовать. В конце концов, “взрослое” шасси и стоит по-взрослому, мы еще не доросли до него.

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

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

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

Я организовал пакет для приема гостей как структуру.

struct RxPacket
{	uint8_t	StartByte;	uint8_t Command;	int16_t Left_PWM;	int16_t Right_PWM;	uint8_t	StopByte;
} RxPacket;

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

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

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

struct TxPacket
{	uint8_t StartByte;	uint8_t Rc5System;	uint8_t Rc5Command;	uint8_t StopByte;
} TxPacket;

Каждый байт имеет стартовый и стоповый байты, а также информационный байт. Приемник USART уже инициализирован. Чтобы инициировать передачу пакета – вызовите функцию

void send_packet()
{	// Запись стартового байта в регистр UDR	UDR = START_BYTE;
}

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

Кроме того, когда передатчик USART передаст все байты из регистра UDR, будет вызван обработчик прерываний.

ISR(USART_TXC_vect)
{	unsigned char *Pointer = (unsigned char *)&(TxPacket);	static unsigned char TxIndex = 1;	if ( TxIndex < sizeof(TxPacket) )	{	UDR = *(Pointer TxIndex);	TxIndex ;	}	else TxIndex = 1;
}

Обработчик объявляет переменную-указатель, которая связана со структурой TxPacket. Затем объявляется статическая переменная, которая содержит индекс отправляемого байта, и в объявлении ей присваивается значение 1. Поскольку мы отправили первый байт из структуры, мы начинаем с 1.

Условие

if ( TxIndex < sizeof(TxPacket) )

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

UDR = *(Pointer TxIndex);

Инкрементировать TxIndex. Следующий байт снова будет передан USART, и следующий байт из структуры также будет отправлен, таким образом, все байты из структуры будут отправлены. Если TxIndex больше размера структуры – условие не будет истинным, и мы получим следующий результат

else TxIndex = 1;

Где TxIndex будет инициализирован, но в регистр UDR ничего не будет записано, поэтому обработчик не будет вызван снова до начала передачи следующего пакета. Таким образом, процесс полностью автоматический, и даже если мы изменим структуру пакетов, обработчик не нужно будет переписывать.

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

#define _WGM13 0
#define _WGM12 1
#define _WGM11 0
#define _WGM10 1
// Timer 1 init
TCCR1A = ( 1 << COM1A1 ) | ( 0 << COM1A0 ) | ( 1 << COM1B1 ) | ( 0 << COM1B0 ) | ( _WGM11 << WGM11 ) | ( _WGM10 << WGM10 );
TCCR1B = ( 0 << CS12 ) | ( 0 << CS11 ) | ( 1 << CS10 ) | ( _WGM13 << WGM13 ) | ( _WGM12 << WGM12 );	TCNT1 =0x0000;	OCR1A = 0;	OCR1B = 0;

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

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

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

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

void drive(int leftPWM, int rightPWM)
{	// Движение ВПЕРЁД левое колесо	if ( leftPWM > 0 ){	ClearBit( A2_PORT, A2_PIN );	SetBit( A1_PORT, A1_PIN );	}	// Движение НАЗАД левое колесо	if ( leftPWM < 0 ){	ClearBit( A1_PORT, A1_PIN );	SetBit( A2_PORT, A2_PIN );	}	// Движение ВПЕРЁД правое колесо	if ( rightPWM > 0 ){	ClearBit( B2_PORT, B2_PIN );	SetBit( B1_PORT, B1_PIN );	}	// Движение НАЗАД правое колесо	if ( rightPWM < 0 ){	ClearBit( B1_PORT, B1_PIN );	SetBit( B2_PORT, B2_PIN );	}	// Остановка	if ( leftPWM == 0 ){	ClearBit( A1_PORT, A1_PIN );	ClearBit( A2_PORT, A2_PIN );	}	// Остановка	if ( rightPWM == 0 ){	ClearBit( B1_PORT, B1_PIN );	ClearBit( B2_PORT, B2_PIN );	}	set_PWM( (uint8_t)(abs(leftPWM)), (uint8_t)(abs(rightPWM)) );
}

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

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

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

Функция обработчика прерывания USART должна только поместить полученный байт в кольцевой буфер. Позже мы разберем пакет.

ISR(USART_RXC_vect)
{	uint8_t Data = UDR;	RB_push_char( Data );	// Складываем принятый байт в кольцевой буфер
}

До сих пор я не проверял раму.

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

ISR(TIMER0_OVF_vect)
{	TCNT0 = 0x64;	ReadRingBuffer = 1;
}

Добавление условия к основному циклу обеспечит проверку флага.

if ( ReadRingBuffer )
{
if ( RB_read_buffer((uint8_t*)&RxPacket) == 1 ) Чтение буфера	{ // Разбираем пакет, делаем что-нибудь	}	ReadRingBuffer = 0;	}

Проверяя размер, начальный и стоповый байты пакета, функция RB_read_buffer гарантирует, что прочитан правильный пакет, и возвращает “1”. В качестве аргумента функции указывается указатель, куда поместить полученный пакет.

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

Нет, я не буду так подробно разбирать программу MK. Только начав разрабатывать программное обеспечение для Android, я еще не готов достаточно грамотно и глубоко делиться информацией.

Данные передаются через Bluetooth на модуль HC-06 с помощью этой программы. Программа имеет несложный интерфейс.

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

Следующая кнопка, “Off”, включает/выключает связь с “HC-06”. Справа налево: передаваемое значение ШИМ, тип датчика, значение правого канала. Расположенные ниже ползунки позволяют регулировать скорость и чувствительность вращения.

В программе реализованы два типа управления машиной. Чтобы изменить тип датчика, коснитесь надписи названия датчика: “Tilt” или “Shuffle”.

1. Чтобы управлять аппаратом, наклоните телефон. Телефоны находятся в горизонтальном положении, когда они находятся в нулевом положении. Значение ШИМ увеличивается от 0 до 255 пропорционально наклону телефона вперед. Значение ШИМ уменьшается пропорционально наклону назад в диапазоне 0-255 при наклоне телефона назад.

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

2. Сенсорное управление. Shuffle – фирменное название этого элемента управления.

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

Нет никаких “прелестей” или уловок. Это практически все.

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

Команды Bluetooth могут приниматься через последовательный интерфейс программой МК.

В результате управление левой и правой парой приводов осуществляется в соответствии с командами. ШИМ используется для реверса и управления скоростью.

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

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

#include "ring_buffer.h"

В заголовочном файле необходимо настроить библиотеку. Необходимо настроить следующие четыре директивы:

#define RX_PACKET_SIZE	7	// Размер RxD пакета
#define BUFFER_SIZE	16
// Размер приёмного буфера. Должен быть в два раза больше RX_PACKET_SIZE
#define START_BYTE	's' // Стартовый байт
#define STOP_BYTE	'e' // Стоповый байт

Вам больше ничего не нужно делать.

Это делается путем модификации кода в файле main.c для настройки USART микроконтроллера.

USART_Init(MYUBRR);
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
void USART_Init( unsigned int ubrr )
{	/* Set baud rate */	UBRRH = (unsigned char)( ubrr >> 8 );	UBRRL = (unsigned char)ubrr;	/* Enable receiver and transmitter */	UCSRB = (1 << TXCIE) | (1 << RXCIE)| (1 << TXEN) | (1 << RXEN);	/* Set frame format: 8data, 2stop bit */	UCSRC = (1 << URSEL) | (0 << USBS) | (3 << UCSZ0);
}

↑ файлы

Документация на драйвер двигателя, PDF
 300.88 Kb ⇣ 24

Схема платы MOD-IO, PDF 🎁 mod-io-schematic.pdf 46.37 Kb ⇣ 23

Исходные коды программы микроконтроллера🎁 carmcu.7z 98.25 Kb ⇣ 23

Исходные коды программы для телефона🎁 carcontrolandroidsrc.7z 4.96 Mb ⇣ 25

Установочный файл для телефона, apk🎁 car-control_apk.7z 896.35 Kb ⇣ 22

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

Java приложение

Возможность управлять оборудованием через ПК с помощью Bluetooth является большим новшеством, но сотовые телефоны также поддерживают Bluetooth. Проект лазерной головки использовал Java для передачи последовательных инструкций на ПК по Bluetooth. Использование Bluetooth для подключения модулей GPS рассматривается в этом учебнике.

Был взят исходный код программы, я выяснил, как она должна работать, а затем упростил ее, чтобы получить нужную мне программу. После этого процесс формирования меню управления и отправки команд по Bluetooth с телефона был достаточно простым. На моем k750i программа работает отлично. Однако оно плохо работает на телефоне k810i моего отца и работает только на N73 моей мамы.

Поэтому я не могу ручаться за универсальность решения. Я считаю, что проблема кроется в антивирусе смартфона N73 и наборе ограничительных разрешений на K810i, которые не позволяют java-апплетам работать с последовательным портом.

Некоторые прошивки, вероятно, даже не позволяют java-приложению использовать Bluetooth. Само java-приложение написано в бесплатной и полностью открытой среде Netbeans. Я приложил исходные файлы вместе с моими комментариями, чтобы объяснить, что есть что.Скачайте полный пакет, включая схемы, программное обеспечение, мобильное приложение и исходный код.

Выбираем компоненты

В прошлом мы с коллегами

Собственная прошивка робота Lego Mindstorms NXT, позволяющая дистанционно управлять роботом через bluetooth с коммуникатора Android. Для экспериментов использовалась отладочная плата Olimex SAM7 с ARM7, которая на этот раз может быть использована в качестве контроллера.

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

Потребовался модуль Bluetooth. Я хотел получить результаты быстро, поэтому выбрал единственный доступный в то время BTM-112, хотя он был относительно дорогим.

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

Он является суммой наших компонентов:

Теперь у нас есть все, что нам нужно.

Гоночная машинка на bluetooth управлении.

Всем привет. Сегодня я расскажу вам о детской машине, управляемой через bluetooth с помощью телефона или планшета.

Продавец сделал мне скидку после того, как я отправила ему ссылку на обзор конструктора, поэтому я поставила п.18. Так как посылка шла так долго, я подумала, что она потерялась, или потому что я привыкла, что почта в последнее время работает хорошо. Коробку можно дарить в подарок, так как она не помялась при доставке. Коробка также служит витриной для игрушки, как и любая другая упаковка для игрушек из Китая. На каждой стороне коробки размещено изображение всех возможных вариантов машинки. На одной стороне находится QR-код со ссылкой для загрузки приложения для Android и iOS.

Гоночная машинка на Bluetooth управлении.

И что же предлагает производитель?

● Масштаб 1:20
● Два ведущих колеса
● Управление через блютуз
● Голосовое управление
● Программируемое движение

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

Гоночная машинка на Bluetooth управлении.

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

Гоночная машинка на Bluetooth управлении.
Гоночная машинка на Bluetooth управлении.
Гоночная машинка на Bluetooth управлении.
Гоночная машинка на Bluetooth управлении.

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

Гоночная машинка на Bluetooth управлении.

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

Гоночная машинка на Bluetooth управлении.
Гоночная машинка на Bluetooth управлении.

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

Гоночная машинка на Bluetooth управлении.

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

Гоночная машинка на Bluetooth управлении.

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

Гоночная машинка на Bluetooth управлении.
Гоночная машинка на Bluetooth управлении.
Гоночная машинка на Bluetooth управлении.
Гоночная машинка на Bluetooth управлении.
Гоночная машинка на Bluetooth управлении.

Я протестировал аппарат после загрузки QR-кода приложения. Немного о приложении, понятно, что написано на стенде, но оно работает, хоть и не часто, но бывают сбои. Помимо кнопок управления на экране, доступно и голосовое управление, но это только для извращенцев). Команды простые – бежать, влево, стоп. У меня, видимо, плохое произношение, так как мои команды прозвучали через копейку. Кроме того, есть конструктор маршрутов, который позволяет добавлять участки к маршруту, например, 2 секунды прямо направо, и машина будет следовать по этому маршруту. По сравнению с голосовым управлением, этот вариант мне понравился больше. Ниже приведены скриншоты из приложения.

Гоночная машинка на Bluetooth управлении.
Гоночная машинка на Bluetooth управлении.
Гоночная машинка на Bluetooth управлении.

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

Даже если скинуть пять баксов, это будет хорошая игрушка для ребенка, если предположить, что я купил ее, когда она стоила $16. И ковер, и асфальт – одинаково хорошие поверхности для автомобиля, особенно ровный асфальт. Пороги в квартире преодолимы. Не слишком резвый, можно обойтись и без телефона. Время автономной работы около 20 минут. Сын решил сначала окатать, а не брать у меня (машинку планировал сразу отдать маленькому племяннику). Это просто интересная игрушка для ребенка, а не RC-гоночный автомобиль для заядлых фанатиков. На этом все практически закончилось, на видео вы увидите, как она катится. Если снова появятся скидки, то можно будет взять ребенку. Всем спасибо за прочтение.

Обзор товара был предоставлен мне магазином. Согласно пункту 18 Правил сайта, обзор будет опубликован.

Драйвер двигателей

Драйвер двигателя L298N
Драйвер двигателя L298N

Arduino – это хрупкое устройство, которое не терпит больших токов. Невозможно избежать неприятностей, когда вы подключаете его к “зверски” мощным моторам. Поэтому для совместной работы этих компонентов нам необходимо интегрировать компонент, управляющий двигателями: подающий и отключающий ток на их обмотки.

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

Интерфейс управления на планшете android.

В статье Arduino tank with bluetooth control я написал подробную инструкцию по разработке интерфейса управления с помощью HmiKaskada Android. Ссылка кликабельна.

Вы можете использовать HmiKaskada на устройствах Android (ссылка на ЯндексДиске). Изначально он предназначался для замены дорогостоящих промышленных панелей HMI. Однако любопытные умы со временем обнаружили, что она способна управлять чем угодно.

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

На форуме FLProg есть огромное обсуждение совместимости с KaScada, а разработчик активен и коммуникабелен. Не вижу смысла выкладывать скриншот панели управления, так как в видео он есть.

Конструкция, шасси и двигатели робота на ардуино

Единственный способ, которым что-то может двигаться или перемещаться, – это колеса, гусеницы или манипуляторы. Здесь нет никаких ограничений, вы можете использовать абсолютно любую комбинацию платформ и комбинаций. Для начала мы обычно используем готовые наборы с AliExpress.

Двигатель шасси ардуино
Двигатель, шасси и колеса машинки на ардуино

Если вы не хотите использовать стандартный набор, вы можете сконструировать свою собственную платформу с нуля. Например, вы можете разобрать игрушки или моторы любого напряжения (5-12 вольт с редуктором или без). Также можно самостоятельно изготовить колеса, что также может стать интересным проектом.

Контроллер ардуино

Проекты на этой платформе требуют этого. Роботы-машины обычно работают на платах Arduino Uno и Nano. Mega будет слишком большой, Pro Mini сложнее подключить к компьютеру и соединить с другими компонентами, а Leonardo требует дополнительных навыков в программировании, они дороже и их главное преимущество (тесная интеграция с компьютером в качестве периферийного устройства) в данном случае не слишком востребовано.

Также есть возможность использовать плату ESP8266 или ESP32, чтобы машиной можно было управлять через WiFi. Сами платы и их программирование требуют определенных навыков, в этой статье мы сосредоточимся на Uno или Nano.

Питание робота

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

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

Питание робота
Питание робота на Ардуино

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

  • Обычные батарейки типа АА. Обратите внимание, что платы Arduino Uno, Nano и большинство двигателей, используемых в роботах Arduino, требуют напряжения в диапазоне 6-9 вольт. Поэтому необходимо последовательно соединить не менее 4 батарей 1,5 В, а сами батареи должны быть хорошего качества и обеспечивать достаточную мощность для работы. Например, большинство батарей для соленой воды не соответствуют этим критериям. Батарейки AAA почти никогда не используются для машин Arduino из-за их меньшей емкости (хотя они могут использоваться в миниатюрных моделях, где размер имеет большое значение).
  • Батарея AA. Здесь существуют еще большие ограничения по напряжению и току. Большинство батарей выдают 1,2 вольта, поэтому для “сбора урожая” необходимых 6-9 вольт требуется больше. Несомненным преимуществом является то, что их можно перезаряжать.
  • Литиевые аккумуляторы 18650. Это уже “серьезная артиллерия”, обеспечивающая длительное время автономной работы, возможность перезарядки и приемлемые характеристики тока и напряжения. Рабочее напряжение таких батарей составляет 3,7 В, что позволяет построить полную цепь питания всего из двух элементов.
  • Другие источники питания. Они могут варьироваться от более мощных и громоздких никель-металлгидридных и кадмиевых батарей до многочисленных “плоских” литий-ионных вариантов, используемых в дронах, смартфонах и других портативных цифровых устройствах.

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

Подключаем bluetooth к машинке

Мы собираемся использовать модуль Bluetooth через SoftwareSerial (библиотеку SoftwareSerial.h), поэтому подключаем модуль блютуз к 3 и 4 цифровым пинам ардуино. RX к D3, TX к D4

Схема ардуино робота машинки 5
Схема подключения Bluetooth к ардуино машинке

Платформа робота готова! Приложение для смартфона RC CAR и прошивка для Arduino – это последние части, которые нужно загрузить. Мы провели обзор приложений для Android, совместимых с Arduino, на нашем сайте.

Подключаем двигатели и плату

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

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

Ардуино робот драйвер
Драйвер двигателя для Ардуино робота

Затем установите держатель и плату BMC. Не забудьте оставить место спереди для последующей установки любых датчиков. То же самое касается модуля зарядного устройства и зарядного устройства. Аналогично для модулей зарядки аккумуляторов.

Электроэнергию для контроллера Arduino и других электронных компонентов предоставляет драйвер двигателя.

Приложение для android

Поскольку последним моим приобретением стал HTC Hero, восхищения которому нет предела, я разработал приложение по управлению машинкой и под Android. Конечно, Android Market – полный отстой, но это все аргументы против самого Android. Их Dev Guide (руководство разработчика) оказался действительно полезным, с ним учиться программировать под Android очень легко. В любом случае, чтобы мой Android-смартфон оправдал свою ценность, он просто обязан был уметь управлять этой машинкой. Первая программа, которую я создал для тренировки, была маленьким приложением для звуковой карты. Затем, когда я уже понял основы,  единственной трудностью для меня была реализация самого управления посредством Bluetooth. В конечном итоге мне пришлось взять за основу один из примеров (Bluetooth Chat). У меня получилось приложение, которое использует встроенный акселерометр телефона для управления рулем, а две большие кнопки – для управления направлением движения (вперед и назад). Куда более легкое устройство управления, чем на k750i.Что касается самого приложения, поиск Bluetooth-устройств осуществляется благодаря «DeviceListActivity.java», взятого с примера с чатом. Оно просто ищет парные устройства и те, которые находятся поблизости, отображает их в меню. Экранные кнопки формируют состав битовой последовательности, которая отсылается к машинке. Если интересно, вот исходный код этого приложения – blu_car.java. Опять же, надеюсь, моих комментариев будет достаточно, чтобы его понять. Если вы хотите откомпилировать исходный код, вам понадобиться DeviceListActivity.java вместе с графикой для иконок и текстовыми элементами. При необходимости, могу предоставить доступ к этому проекту. Готовая к установке программа есть здесь: blu_car.apk. Использование Bluetooth требует Android версии 2.0 и выше. Наверное, многие из вас удивятся, как же я тогда использовал свой Hero? Ответ найдете здесь: VillainROM 10.0
Гоночная машинка на Bluetooth управлении.

Пример платформы робота-машины на ардуино

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

Робот на Ардуино
Робот на Ардуино

Для реализации проекта вам потребуются:

  • Контроллер Arduino (в нашем случае Arduino Nano).
  • Контроллер двигателя L298N.
  • Двигатели с редуктором.
  • Корпус и рама для установки колес и оборудования
  • Корпус для аккумуляторов 18650 с выключателем.
  • Кабельный переключатель.

Для выполнения проекта потребуется дополнительное оборудование:

  • Датчик расстояния и привод, на котором он установлен.
  • Инфракрасные линейные датчики.
  • Индикатор и лампочки “красоты”.
  • Пьезоэлектрический динамик – пищалка.
  • Модуль Bluetooth (если вы собираетесь управлять машиной дистанционно).
  • Экранирование датчика (облегчает переключение).
  • Зарядка аккумулятора и зарядный модуль.
  • Сами батареи.
Схема ардуино-робота машинки 1
Общая схема машинки на Ардуино

Простая bluetooth машинка на arduino

Широкая доступность и низкая стоимость платформы Arduino и различных роботизированных платформ позволили любителям создавать радиоуправляемые автомобили всех видов. А широкое распространение смартфонов позволило использовать их в качестве контроллеров для этих машин. Основной проблемой для многих энтузиастов Arduino является отсутствие опыта программирования под Android. Сегодня я расскажу, как легко решить эту проблему с помощью визуальной среды разработки приложений для Android App Inventor 2.

Постройку любой машинки надо начинать с «железа», поэтому вкратце опишу, что использовал для своей машинки:
arduino nano
bluetooth module HC-05
Z-Mini Motor Sensor Shield L293D
2WD Motor Chassis
Конфигурация «железа» не играет большой роли в этом проекте, поэтому шасси, шилд и саму ардуино можно заменить на любые аналоги.

Давайте теперь создадим приложение для Android. Визуальной средой разработки приложений для Android, работающей из Интернета, является App Inventor. Создайте новый проект, войдя в свой аккаунт Google, разрешив доступ к своей учетной записи Google и нажав кнопку “создать” на сайте. В новом проекте методом “Drag and Drop” создайте четыре кнопки, одну для выбора направления движения и одну для подключения к нашему модулю Bluetooth. Примерно так:

image

В правом верхнем углу нажмите “Блоки”, чтобы создать логику нашего приложения для android, используя тот же метод “перетаскивания”.

image

Теперь осталось скомпилировать приложение, нажав кнопку “Build”.

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

скетч

Интенсивное значение ;

int IN1 = 4;

int IN2 = 7;

int EN1 = 6;

int EN2 = 5;

void setup()
{
Serial.begin(9600);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(EN1, OUTPUT);
pinMode(EN2, OUTPUT);

}
void loop()
{
if (Serial.available())
{
val = Serial.read();

// Задаём движение вперёд
if (val == ‘W’) // При нажатии клавиши «W»
{
// Выводы конфигурируются согласно работе Motor Shield’а
// Моторы крутятся вперед
digitalWrite(EN1, HIGH);
digitalWrite(EN2, HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
}

// Задаём движение назад
if ( val == ‘S’)
{
digitalWrite(EN1, HIGH);
digitalWrite(EN2, HIGH);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
}

// Задаём движение вправо
if ( val == ‘D’)
{
digitalWrite(EN1, HIGH);
digitalWrite(EN2, HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
}

// Задаём движение влево
if ( val == ‘A’)
{
digitalWrite(EN1, HIGH);
digitalWrite(EN2, HIGH);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
}

// Стоп режим
// При отпускании клавиш в программе в порт шлется «T»
if ( val == ‘T’) // При нажатии клавиши «T»
{
// Выводы ENABLE притянуты к минусу, моторы не работают
digitalWrite(EN1, LOW);
digitalWrite(EN2, LOW);
}
}
}

Вот так я получил машину:

Гоночная машинка на Bluetooth управлении.

Вы можете изменить дизайн приложений, если они вам нравятся. Разобраться в этом самостоятельно несложно, поэтому я не буду вдаваться в подробности. Скажу только, что файлы .png нужно использовать вместо .jpegs, которые не поддерживают прозрачные фоны. Неподготовленный человек может, например, сделать такой дизайн за полчаса или час:

image

P.S. Если вы не знакомы с разработкой приложений в App Inventor 2, я сделал более подробное руководство по разработке приложений (смотрите на YouTube).

https://www.youtube.com/watch?v=y2jAJ05s2EQ

P.P.S. Сборник из более 100 обучающих материалов по ардуино для начинающих и профи тут.
Онлайн курс по ардуино на гиктаймс здесь.
UPD 1.02.2023: выложил приложение на play market.
Аналогичные проекты с другими шилдами здесь.

Робот на ардуино своими руками

Автомобили-роботы (Arduino Cars) требуют гораздо больше навыков и знаний для работы, чем другие проекты, поэтому настоятельно рекомендуется не начинать создавать автомобили сразу, не получив базовых навыков работы с Arduino.

Робот машина на Ардуино
Робот машина на Ардуино

Я перечислил основные компоненты, которые будут входить в проект.

Соединяем bluetooth с управляющей платой

Начнем с настройки доставки команд на блок управления. Модуль Bluetooth легко подключается к контроллеру UART. Он представляет собой не что иное, как UART с некоторыми управляющими ножками, поэтому вам нужно только подключить его к UART-контроллеру.

Программное обеспечение не намного сложнее. Модуль пишет “CONNECT RE:MO:TE:BT:MA:CC xxx rn” при подключении и “DISCONNECT xxx rn” при отключении. Драйверы отслеживают потоки символов и, если соединение активно, передают их управляющим приложениям.

Схема электропитания робота автомобиля

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

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

Схема ардуино робота машинки 2
Схема питания и подключения двигателей в ардуино автомобиле

Это довольно стандартное решение, и в Интернете можно найти десятки подобных примеров. Однако у такой схемы есть один существенный недостаток – если батареи полностью разряжены, их нельзя использовать.

Машинка на Ардуино
Машинка на Ардуино

Эта схема должна быть изменена для добавления контроллера разряда:

Схема ардуино робота машинки 3
Схема питания с контролем разряда аккумулятора

Теперь можно защитить батареи, но зарядить их здесь нельзя.

Питание ардуино
Питание робота Ардуино

Вы можете заряжать массив с помощью модуля повышения напряжения от 5 В до желаемого уровня зарядки, который будет зависеть от количества используемых серий батарей. Мы рекомендуем установить отдельное пятивольтовое гнездо для последующей зарядки, если микро USB используется часто. Для зарядки двух литий-ионных батарей выходное напряжение должно быть установлено на 8,4 вольта.

Схема питания ардуино робота машинки
Схема питания с модулем зарядки для ардуино робота машинки

Удалённое управление


Как было обещано, удаленное управление осуществляется с помощью Android-коммуникатора.

В нашем последнем приложении для Android мы использовали акселерометр для отслеживания наклона коммуникатора и отправки соответствующих команд на NXT (который также работал через Bluetooth) для управления им. В этом случае решением было добавить протокол управления машиной в существующее приложение.

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

Шаг 5. ардуино контроллер

На основе микроконтроллера ATmega328P компании Microchip сайт Arduino.cc разработал плату микроконтроллера Arduino UNO с открытым кодом.

Контакты ввода/вывода (I/O) на плате позволяют подключать ее к различным платам расширения (экранам), а также к другим схемам. Плата программируется с помощью Arduino IDE (интегрированной среды разработки) и имеет 14 цифровых и 6 аналоговых выводов.

Эталонный аппаратный дизайн Arduino распространяется по лицензии Creative Commons Attribution-ShareAlike 2.5. Некоторые версии аппаратного обеспечения поставляются с макетными и производственными файлами. Название “Uno” было выбрано в честь выпуска программного обеспечения Arduino (IDE).

Uno – это первая плата Arduino с USB и эталонная модель для последующих платформ. В Arduino Uno встроен ATmega328 с предварительно запрограммированным загрузчиком, поэтому вы можете загружать новый код без аппаратного программатора, используя протокол STK500.

Языки программирования C и C часто используются для программирования микроконтроллеров. Помимо использования инструментария компилятора, проект Arduino также предоставляет интегрированную среду разработки (IDE).

Шаг 6. h-мост (модуль lm 298)

На графике Н-моста появляется слово “Н-мост”. На рисунке выше видно, как Н-мост может управлять двигателями постоянного тока прямого и обратного направления.

Электронный переключатель состоит из 4 электронных компонентов (транзисторы, МОП-транзисторы и IGBT). Когда переключатели S1 и S4 замкнуты (и S2 и S3), на двигатель подается положительное напряжение. Таким образом, он вращается вперед.

Примечание. Никогда не должно быть двух или более выключателей в одном плече (S1, S2 или S3, S4), так как это приведет к короткому замыканию.

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

Выход 1: Двигатель постоянного тока 1″ или шаговый двигатель A

A Двигатель постоянного тока 1 “-” или шаговый электродвигатель A-

Вход 3: двигатель постоянного тока 2 ” или шаговый двигатель B

Выход 4: Двигатель B отключен

Розетка 12В: вход 12В, но можно использовать от 7 до 35В

GND: земля

Выход 5 В: Выход 5 В, если установлена перемычка 12 В, идеально подходит для питания вашего Arduino

Сигнал EnA разрешает подачу питания ШИМ на двигатель A

IN1: включение двигателя A

IN2: угловой редукторный двигатель A

IN3: включение мотора B

IN4: включает электродвигатель B.

Ш ИМ-сигнал для двигателя B включается через EnB

Шаг 8. электрические соединения

Для соединения двух устройств необходимы провода-перемычки. Обязательно соедините вместе красные провода двигателей (с каждой стороны) и черные тоже. Теперь с каждой стороны есть по две клеммы. И правый, и левый двигатели подключены к MOTORA; соответственно, оба двигателя подключены к MOTORB. Следующие инструкции помогут вам в этом процессе.

Подсоединения к двигателю

Out1 -> Красный провод левого бокового мотора ( )

Черный провод левого двигателя (-) – Out2

Подключите красный провод к правой стороне двигателя (Выход3)

Провод Out4 -> Черный провод на правой стороне двигателя (-)

LM298 -> Arduino

IN1 -> D5

IN2-> D6

IN2 -> D9

IN2-> D10

Модуль Bluetooth -> Arduino

Rx-> Tx

Tx -> Rx

GND -> GND

Vcc -> 3,3 В

Питание

12 В -> Подключите красный кабель аккумулятора

GND -> Подключите черный провод аккумулятора и вывод Arduino GND

5V -> Подключение к контакту Arduino 5V

Оцените статью
Радиокоптер.ру
Добавить комментарий