Управление на двигателя на ардуино машина. CxemCAR - управление на автомобил с Android чрез Bluetooth

Управление на двигателя на ардуино машина.  CxemCAR - управление на автомобил с Android чрез Bluetooth
Управление на двигателя на ардуино машина. CxemCAR - управление на автомобил с Android чрез Bluetooth

Да не купуваме лоши играчки от китайците, а да купим от тях евтин конструктор-шаси, няколко модула и да се сложим на ръце!

Ето какво получих в крайна сметка: проходимо шаси, управляемо - ТА-ДА!!! - от моя смартфон с Android.


„Аз съм прав, аз съм настрани,
С завой и скок,
И от бягане, и на място,
И два крака заедно..."

Днес ще построим забавна кола с дистанционно управление чрез Bluetooth. Включени са източници на контролната програма за Android.

Достоен пример за играчка

Имам две деца, дъщеря и син. И двамата получават играчки за рождените си дни. Това, което дават на дъщерите ми, като правило не предизвиква моите негативни реакции. И на сина, както се очаква, се дават всякакви коли, танкове и друга техника. От цялата тази лавина с китайски неща, единственото, към което нямам оплаквания, е играчката моторен трион, която си подарих.

Защо така? Вероятно защото този трион се продаваше в магазина за инструменти на STIHL. Вярвам, че STIHL направи аналог на играчките на своите продукти в малко промоционално издание. В резултат на това се роди напълно разумна играчка, много подобна на по-големия си брат. Гумената верига се върти, 80 процента от контролите са изпълнени. Има дори жило с дръжка за навиване на триона, ключ, копче за газ. Комплектът включва резервна верига и инструмент за смяна на веригата.


Ето една играчка трион

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

Нека построим кола с дистанционно управление!

Радиоуправляемите играчки представляват практически и технически интерес. Въпреки това, на дете на възраст 4-6 години няма да се дават играчки с пропорционално управление „за възрастни“. Най-вероятно играчката ще бъде счупена и парите ще бъдат похарчени.
В резултат на това те обикновено дават нещо евтино. От всичко това - "евтино" - колите са или много бързи, или бавни; резервоарите са крехки; и други явни и скрити недостатъци. И със сигурност няма пропорционален контрол.

В един прекрасен ден дясното колело на една от колите спря да се върти. Разглобих го и проверих мотора - работи.
На контролната платка има три микросхеми - Китай е голем, не можах да намеря разумна документация. Единият чип е приемник на радиосигнал с логически изходи и два драйвера на мостови двигатели. Един от драйверите е повреден. Не успях да натрупам моторен драйвер за мост от отделни компоненти веднага.

В местния магазин за радиочасти нямаше нищо подходящо. Така че отидох в далечни страни за чудодейни микросхеми. Опаковах вещите си, натъпках джобовете си с крекери, налях си едно кафе, пуснах браузъра и отидох ... .
Намерих драйвер за двигател, подходящ за параметрите, поръчах два наведнъж. За всеки случай, изведнъж някой ще се окаже дефектен или ще се изгоря. Тогава започва да се заражда идеята за неговата пишеща машина. След като пакетът пристигна от славния Китай, успешно смених драйвера и машината беше ремонтирана.

Без отлагане дълга кутияидеята за моята машина, отново се насочих към избора на основата - шасито на бъдещата машина. Има различни шасита за наземен транспорт: верижни, колесни, с две, три, четири колела и др.

Как избрах шасито

Първо, избрах наземен вид транспорт, което означава, че ще имам наземно шаси. Верижните шасита обикновено са по-скъпи и не много бързи. Дву- или триколесните превозни средства ми се струват лошо проходими, такова шаси може да се движи само по равна повърхност.
Спрях се на . Според мен такова шаси ще има отлична маневреност и скорост.


Включено шаси:
две акрилни плочи с куп технологични отвори за монтиране на всички възможни сензори, контролни платки и други компоненти
4 колела
4 сглобени задвижвания (електромотор + скоростна кутия)
4 диска с гнезда за датчици за скорост по един за всяко колело
закопчалка
Да, пак е Китай. Да, евтино. Да, доста добро качество. НО! По-добре първо да опитаме. В крайна сметка едно „пораснало“ шаси струва като възрастен, все още не сме дорасли до него.

Блато от мисли и техническо задание

Когато държите нещо обещаващо в ръцете си, например по отношение на възможностите за оборудване на модела с всякакви сензори, серво и т.н., започвате да се давите в блато от мисли и блато от перспективи. Но нека си кажем - СТОП! И ние ще изготвим спецификация на мини-спецификация за прототип с Кратко описаниевсички възли.
Трябва да имаме RC модел на сухопътно превозно средство, управлявано чрез Bluetooth, с възможност за заден ход и плавен контрол на скоростта на колелото.

Какво ни трябва, за да сглобим машината?

.


Няма въртящи се колела, което означава, че управлението на завиването ще бъде като на верижен автомобил. Тоест, за движение напред/назад дясната и лявата страна на задвижванията се въртят с еднаква скорост. И за да направите завой, скоростта на въртене от едната страна трябва да бъде по-малка или по-голяма.


За дистанционноУстройството използва Bluetooth канал. Модулът “HC-06” е Bluetooth мост, сериен интерфейс, който позволява прехвърляне на данни в двете посоки. Входът съдържа TTL сериен интерфейс сигнали “RxD” и “TxD” за свързване към микроконтролера (целевата платка).
Ще служи като дистанционно управление клетъчен телефонс android. Нека напишем наша собствена програма!



Водачът е двуканален, за лява и дясна двойка колела. Драйверът има логически входове за промяна на полярността на изхода (посока на въртене) и PWM вход, ще бъде възможно да се контролира скоростта на въртене.


Тази дъска е избрана, защото лежеше в чекмеджето на бюрото и е напълно подходящ за нашата цел. Има дискретни входове/изходи, извеждат се МК сигнали “RxD” и “TxD”, където ще бъде свързан “HC-06”.
Гледайки напред, ще кажа, че продуктът Olimex MOD-IO е сериозен излишък. Би било чудесно да използвате обикновения, както ще говорим в продължението на историята!

Обща сума:шаси + контролна платка + Bluetooth модул + управляваща програма за Android.

Обща схема на свързване

Не диаграма в чист вид, а схема на свързване, тъй като имаме готови всички дъски и остава само да ги свържем заедно.

Схема в Протей


Няма да описвам какво съм свързал и къде. Най-вероятно ще имате различен контролен панел. Прилагам изходния код, така че можете да редактирате фърмуера. Е, ако някой не може да компилира фърмуера за своята платка, моля, свържете се с мен - ще помогна, ако имам свободно време.

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

Програмата MK може да получава команди чрез серийния интерфейс от Bluetooth модула.
И в съответствие с командите управлявайте лявата и дясната двойка задвижвания. Заден ход и контрол на скоростта работят с помощта на ШИМ.

Кодът е достатъчно коментиран. Бих искал да се спра отделно на моята реализация на обмен на данни.
Получавам данни чрез пръстен буфер. Нещото не е ново и има много реализации.

Поставих функциите на пръстенния буфер в отделна библиотека, състояща се от:
заглавен файл 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
USART_Init(MYUBRR);

#define BAUD 9600 #define MYUBRR F_CPU/16/BAUD-1 void USART_Init(unsigned int ubrr) ( /* Задаване на скорост на предаване */ UBRRH = (unsigned char)(ubrr >> 8); UBRRL = (unsigned char)ubrr; /* Разрешаване на приемник и предавател */ UCSRB = (1<< TXCIE) | (1 << RXCIE)| (1 << TXEN) | (1 << RXEN); /* Set frame format: 8data, 2stop bit */ UCSRC = (1 << URSEL) | (0 << USBS) | (3 << UCSZ0); }

Получаване на пакет данни

Във функцията за обработване на прекъсвания за получаване на байт USART, ние просто трябва да поставим получения байт в пръстенния буфер. Ще анализираме пакета по-късно.
ISR(USART_RXC_vect) ( uint8_t данни = UDR; RB_push_char(данни); // Добавяне на получения байт в пръстен буфер)
Да, засега съм пренебрегнал всички проверки на рамката.

Сега всичко, което трябва да направим, е да проверяваме нашия буфер от време на време. За да направя това, стартирах таймер, в който зададох флаг, който позволява проверка на буфера за звънене
ISR(TIMER0_OVF_vect) (TCNT0 = 0x64; ReadRingBuffer = 1; )

В основния цикъл добавяме условие за проверка на флага.
if (ReadRingBuffer) ( if (RB_read_buffer((uint8_t*)&RxPacket) == 1) Четене на буфера ( // Анализирайте пакета, направете нещо) ReadRingBuffer = 0; )

функция RB_четен_буферпроверява пръстенния буфер, ако размерът на пакета, началните и стоп байтовете са на място - пакетът се счита за валиден, функцията връща "1". Като аргумент функцията взема указател къде да добави получения пакет.
За по-голяма надеждност пакетът може да бъде оборудван с контролна сума; в един от моите търговски проекти направих точно това. Тоест, в допълнение към проверката на размера и старт/стоп байтовете, се добавя и проверка на контролната сума. Но засега ще минем без него.

Как да разглобя пакета

Сега интересната част е как разглобявам опаковката. Пакетът може да предава данни, по-големи от байт, данни със знак или данни с плаваща запетая.
Ще обясня на примера на пакет за управление на шасито. В допълнение към байтовете за стартиране и спиране, в моя пакет трябва да предам една команда и две стойности на ШИМ за лявата и дясната страна на устройствата. За команда един байт ми е достатъчен и за всяка стойност на ШИМ предавам int16- 16 бита, тип със знак. Тоест, аз не предавам флаг за посока (байт/знак). За да променя посоката, предавам положителна или отрицателна стойност на ШИМ.

Моят приемен пакет е организиран под формата на структура.
struct RxPacket ( uint8_t StartByte; uint8_t команда; int16_t Left_PWM; int16_t Right_PWM; uint8_t StopByte; ) RxPacket;

Извикване на функция RB_read_buffer ((uint8_t*)&RxPacket), като аргумент подаваме указател към структурата на приемащия пакет. Тоест, когато пакетът бъде получен, всичко ще бъде сортирано на собствените си места в структурата на RxPacket. Тогава всичко, което остава, е да прочетете тези данни от структурата, например така:
lCmd = RxPacket.Command; lLPWM = RxPacket.Left_PWM; lRPWM = RxPacket.Right_PWM;

Предаване на пакети данни

Въпреки че предаването все още не се използва в моята програма, въпреки това възможността за предаване е реализирана. Прехвърлянето на данни е по-лесно. По същия начин, както при получаването на пакета, нека създадем структурата:
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); статичен unsigned char TxIndex = 1; if (TxIndex< sizeof(TxPacket)) { UDR = *(Pointer + TxIndex); TxIndex++; } else TxIndex = 1; }

В манипулатора декларирам променлива указател и й присвоявам адреса на структурата TxPacket. След това се декларира статична променлива - индексът на предавания байт, на който се присвоява стойността при деклариране 1 . Започваме с един, защото вече сме изпратили първия байт от структурата. Като цяло структурата може да мине без началния байт; така или иначе го изпращам отделно, но декларацията на този байт остава в структурата, за да се разбере как изглежда пакетът.

Условие if (TxIndex< sizeof(TxPacket)) проверяет, что индекс меньше чем размер пакета. Если условие верно, то записываем байт в регистр UDR: UDR = *(Pointer + TxIndex);
увеличаване на TxIndex. Когато USART предаде следващия байт, ние отново ще влезем в манипулатора, но ще бъде предаден следващият байт от структурата и така ще бъдат предадени всички байтове от структурата. Когато TxIndex е по-голям от размера на структурата, условието няма да е вярно и ще завършим в else TxIndex = 1; Където TxIndex ще бъде инициализиран, но нищо няма да бъде записано в UDR регистъра, така че манипулаторът вече няма да бъде извикан, докато не бъде инициирано следващото предаване на пакет. По този начин процесът на трансфер е напълно автоматичен и дори да променим структурата на пакета, манипулаторът няма да се налага да се пренаписва.

Като част от описанието на програмата MK, остава да говорим за внедряването на управление на драйвери. Драйверът се управлява от три сигнала: A1 (B1), A2 (B2) и PWMA (PWMB). A1 и A2 са предназначени да включват/изключват драйвера и да променят полярността на изхода. PWM сигнал от MK се подава към PWMA входа - можете да контролирате скоростта на въртене. За PWM сигнала използвах два хардуерни PWM таймера 1.
#define _WGM13 0 #define _WGM12 1 #define _WGM11 0 #define _WGM10 1 // Таймер 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;

Таймерът е 16-битов, но ШИМ се инициализира на 8 бита. И както вероятно вече сте забелязали, в пакета за получаване имам две стойности за настройка на ШИМ, съответно за левия и десния диск. Подписаните променливи са 16-битови.
Ще обясня защо направих това.

Първо, идваше от програма за Android. Факт е, че в Java няма подписани типове и аз вече стъпих на този рейк. И за да предам числа от 0 до 255, ще трябва някак да се измъкна. Реших да избера по-прост път - изпращам подписано 16-битово число. В същото време 16 бита от подписан тип са от -32786 до 32768, което е достатъчно за нас.

Второ, според мен е по-прозрачен - скоростта на въртене и посоката се описват само с една променлива.

И трето, каквото и да се каже, за нашите цели е невъзможно да го запазим в по-малко от три байта. Нека пожертваме още един байт, но всичко става ясно: положителна стойност на ШИМ означава въртене напред, отрицателна стойност означава въртене назад.

За да контролирам устройствата, написах функция устройство (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); ) // Преместване НАЗАД дясно колело ако (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))); }
В съответствие със стойността на PWM, сигналите A1 (B1), A2 (B2) се управляват и стойността на PWM се задава чрез извикване на функцията set_PWM(лява ШИМ, дясна ШИМ).

Уф, останах без дъх...
За да обобщим: получи пакета, анализира го, предаде стойността на ШИМ на функцията шофиране.

Android приложение за автомобили

Не, няма да навлизам в толкова подробности, колкото програмата за MK. Все още съм нов в разработката на софтуер за Android и не съм готов да говоря достатъчно компетентно и задълбочено.

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

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

След това бутонът “Off” включва/изключва комуникацията с “HC-06”. Долу отляво надясно: предавана ШИМ стойност на левия канал, тип сензор, стойност на десния канал. По-долу има два плъзгача за регулиране на скоростта и чувствителността на въртене.

Програмата реализира два вида управление на машината. За да превключите типа сензор, трябва да докоснете името на сензора: „Накланяне“ или „Разбъркване“.

1. Управлявайте машината, като накланяте телефона.Нулевата позиция на телефона е хоризонтална. Когато телефонът е наклонен напред, стойността на ШИМ се увеличава пропорционално на наклона в диапазона от 0 до 255. Когато наклоните телефона назад, стойността на ШИМ намалява пропорционално на наклона в диапазона от 0 до -255


За да завъртите наляво или надясно, трябва да наклоните телефона напред или назад и в същото време съответно наляво или надясно. Да, точно както в истинска кола, тя не завива, докато не настъпите газта.

2. Сензорно управление.Моето търговско наименование за този тип управление е „разбъркване“.


Може да се разглежда като тъчпад. Когато докоснете сив квадрат, стойността на ШИМ се увеличава/намалява в зависимост от местоположението на докосването; колкото по-надолу или нагоре от центъра, толкова по-висока/по-ниска е стойността.

Няма звънци и свирки. Изглежда това е всичко.

Малка муха в мехлема на „ски“

Има проблем с телефона ми. Да, "ски" телефонът е LG G2 mini. Не установява подходяща Bluetooth връзка. Връзката се установява нормално само ако Bluetooth е бил включен непосредствено преди стартиране на приложението.
Направих това: когато стартирам приложението, проверявам дали Bluetooth е включен, ако е изключен, правя заявка за включване. И когато „минимизирам“ или затворя приложението, принудително изключвам Bluetooth.
И още нещо, когато промените ориентацията на екрана, Bluetooth се изключва и отново ви подканват да го включите, трябва да изключите автоматичното превключване на въртенето на екрана.

Резюме

Вярвам, че постигнах целта си! С не много усилия създадох RC модел с разумно пропорционално управление. Дори възрастен може да си играе с колата с ентусиазъм, като прави завои на място, изпълнява сложни пируети, забавя и ускорява, ако е необходимо.
И лесно се поправя, ако се счупи.

Има още място за активност, има накъде да се развиваме. Можете да персонализирате шасито, можете да надстроите и подобрите софтуера за вашия телефон.
И това ще има продължение!

Машина на arduino и Bluetooth без редактиране на код. Ще използваме специализиран безплатен софтуер за създаване на скицата. Освен това не е необходимо да купувате шаси за нашия кораб; почти всеки дефектен радиоуправляем модел на автомобил или танк ще свърши работа.

Предлагам да гледате видеоклип с общ преглед на управляваната с Bluetooth машина и нейното съдържание.

Така че, нека да разгледаме пример на живо как да направите машина със собствените си ръце, дистанционно управлявана чрез bluetooth от таблет или смартфон с Android. Статията, колкото и да е странно, е предназначена за начално ниво на знания. Няма ръководство за редактиране на код в Arduino IDE и ние ще го използваме само за попълване на нашия код. И ние ще съставим контролния алгоритъм в програма, наречена FLProg. Програма за управление от смартфон - HmiKaskada_free. Но първо, за хардуера, от който се нуждаем.

Машина на arduino и Bluetooth - хардуер.

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

За да управляваме електрическите двигатели на нашето бъдещо творение, ще ни трябват H-мост на чип L298NЛинк към Али, взех този от. Картината може да се кликне.

H-мост за ардуино

Може да управлява два двигателя в диапазон на напрежение 5 - 35 волта. Поддържа PWM, тоест можете да регулирате оборотите на двигателя. Платката има стабилизирано изходно напрежение от 5 волта за захранване на Arduino.

Схемата на свързване е проста и непретенциозна:

Следващата неразделна част от електронното попълване на нашия проект е bluetooth модул HC-06.Най-често срещаният модул за Arduino, той е толкова популярен, че не се нуждае от допълнително описание.

HC-06 bluetooth за arduino

Основният елемент и мозък в моя случай е ардуино нано, дори няма да публикувам снимки тук, защото всеки знае за него и знае как да работи с него. Между другото, всяка платка на Arduino ще свърши работа, стига да пасне в кутията 😀

Батериите и проводниците за запояване не изискват спецификация. Изборът на батерии зависи от работното напрежение на електродвигателите.

Машина на arduino и Bluetooth - изготвяне на скица.

Пак казвам - тук няма да има ровене в кода. Ще използваме популярната програма FLProg. Можете да изтеглите последната му версия от официалния уебсайт. Интерфейсът на програмата е прост и непретенциозен, но има огромна функционалност и поддръжка за почти всички популярни модули. Няма да пиша как да го използвам, защото ще отнеме няколко статии. Нека само да кажа, че не съм срещал по-удобна и достъпна програма за създаване на скици за arduino и неговите клонинги. Екран на интерфейса:

FLProg интерфейс

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

Моят проект за кола с дистанционно управление може да бъде изтеглен от Yandex disk.

Машина на arduino и Bluetooth - интерфейс за управление на таблет с Android.

Поради многобройни искания, в статията написах подробни инструкции за разработване на контролен интерфейс, базиран на HmiKaskada android. Връзката може да се кликне.

За устройства с Android има програма, наречена HmiKaskada (връзка към YandexDisk). Първоначално е разработен като алтернатива на скъпите индустриални HMI панели. Но любознателните умове бързо разбраха, че тя може да контролира всичко. В нашия случай пишеща машина. Поддържа Wi-Fi и Bluetooth безжични интерфейси, като можете да свържете устройството и директно през USB.

Има платени и безплатни версии на програмата. Имам и двете, но основно направих проекта в безплатната версия, за да ви покажа и още веднъж да се уверя, че безплатната версия е абсолютно функционална. Основната разлика между безплатната и PRO версията е, че работи само чрез Bluetooth.

Във форума на FLProg има огромна тема относно съвместимостта с KaScada и разработчикът е активен и общителен. Не виждам смисъл да публикувам екранна снимка на контролния панел - има го във видеото.

Много често във вашите проекти има нужда от дистанционно управление или пренос на данни от вашите телефонни джаджи.

Един от най-популярните и разпространени методи за обмен на данни чрез Bluetooth .

Днес ще разгледаме прости примери за това как да свържете Bluetooth модул към Arduino и конфигуриране на дистанционно управление от вашия телефон.

Ще ни трябва:

  • Комплект проводници MALE-MAMA
  • HC-06 Bluetooth

Свържете Bluetooth Модулът към микроконтролера Arduino е най-удобен с помощта на окабеляване MALE-MALE.

Ардуино Bluetooth
Пин 1 (TX) RXD
Пин 0 (RX) TXD
GND GND
5V VCC

Внимавайте, трябва да се свържете TX -> RXD ,RX -> TXD .

Сега трябва да запишете тестовия код на програмата:

При зареждане на скицата е необходимо Bluetooth модулът да е изключен от микроконтролера arduino. В противен случай скицата няма да бъде записана поради връзката с Bluetooth Модулът комуникира чрез същите RX и TX портове като USB.

Int val; int LED = 13; void setup() ( Serial.begin(9600); pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); ) void loop() ( if (Serial.available()) ( val = Serial.read(); / / Когато символът е "1", включете светодиода if (val == "1") ( digitalWrite(LED, HIGH); ) // Когато знакът е "0", изключете светодиода if (val == "0") ( digitalWrite(LED, LOW ); ) ) )

След скицата се записва и Bluetooth Модулът е свързан към Arduino, можете да преминете към следващата стъпка.

Свързване на Bluetooth към вашия телефон

Препоръчително е да използвате не USB като източник на захранване за arduino, а външно 9 V захранване.

  1. Включете Bluetooth на телефона си и потърсете нови устройства
  2. Намираме в списъка с разстройства " HC-06" и се свържете с него.
  3. Телефонът ще поиска ПИН код. трябва да въведете " 1234 " или " 0000 "
  4. Ура. Устройството е свързано.

Сега трябва да изтеглите bluetooth терминала на телефона си. Ще разгледаме примера на платформата Android.



Можете да инсталирате различни bluetooth терминали, като правило те се различават само в различни дизайни, функционалността не се променя. Можете също да намерите терминал за iOS продукти.

След като инсталираме терминала, стартираме го, избираме нашия bluetooth модул HC-06 и се свързваме с него.

Време е да изпробвате проекта в действие. Пишем числото „0“ в терминала и изпращаме. LED L, който се намира на платката arduino до пин 13, трябва да изгасне. Сега изпращаме числото „1“ през терминала и L светодиодът трябва да светне.

Демонстрация на работа:


Домашна работа:

  • Променете скицата, така че светодиодът да свети и да изгасва, като използвате същата команда, например „G“.
  • Завършете скицата и го научете да преобразува текстови данни, идващи през bluetooth, в цифрови данни и да внедри димер, да запали LED с помощта на PWM, при дадена яркост от 0 до 254, идващи чрез bluetooth.

Широко разпространената и ниска цена на платформата Arduino и различни роботизирани платформи позволи на любителите да създават радиоуправляеми автомобили за всеки вкус. А широкото разпространение на смартфоните направи възможно използването им като контролери за тези машини. Основният проблем за много ентусиасти на Arduino е липсата на опит в програмирането за Android. Днес ще ви кажа как лесно да разрешите този проблем с помощта на средата за визуална разработка App Inventor 2 за приложения за Android.



Конструкцията на всяка машина трябва да започне с хардуера, така че ще опиша накратко какво използвах за моята машина:
ардуино нано
bluetooth модул HC-05
Z-Mini Motor Sensor Shield L293D
2WD моторно шаси
Хардуерната конфигурация не играе голяма роля в този проект, така че шасито, щитът и самият Arduino могат да бъдат заменени с всякакви аналози.

Сега нека да преминем към създаването на приложение за Android. App Inventor е визуална среда за разработка на Android приложения, работи от браузъра. Отиваме на сайта, разрешаваме достъп до нашия акаунт в Google, кликваме върху бутона „създаване“ и създаваме нов проект. В новия проект по метода “Drag and Drop” създаваме 4 бутона за избор на посоката на движение и един за свързване с нашия bluetooth модул. така:

Сега всичко, което остава, е да компилирате приложението, като щракнете върху бутона „Изграждане“.

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

скица

int val;
int IN1 = 4;
int IN2 = 7;
int EN1 = 6;
int EN2 = 5;

Празна настройка()
{
Serial.begin(9600);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(EN1, ИЗХОД);
pinMode(EN2, ИЗХОД);

}
void loop()
{
ако (Serial.available())
{
val = Serial.read();

// Задайте движение напред
if (val == "W") // Когато се натисне клавишът "W".
{
// Пиновете се конфигурират според работата на Motor Shield
// Двигателите се въртят напред
digitalWrite(EN1, HIGH);
digitalWrite(EN2, HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
}

// Задаване на движението назад
ако (val == "S")
{
digitalWrite(EN1, HIGH);
digitalWrite(EN2, HIGH);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
}

// Задайте движението надясно
ако (val == "D")
{
digitalWrite(EN1, HIGH);
digitalWrite(EN2, HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
}

// Задайте движението наляво
ако (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);
}
}
}


И така, това е машината, която получих:

Тези, които харесват дизайна в приложенията, могат да променят малко. Няма да описвам подробно как да направите това, не е трудно да го разберете сами. Нека само да кажа, че за това основно трябва да използвате .png файлове вместо .jpeg файлове, които не поддържат прозрачен фон. Например, всеки необучен човек може да направи такъв дизайн за половин или час:

P.S. За тези, които не са срещали разработка на приложения в App Inventor 2, направих по-подробно ръководство за разработката на това приложение (трябва да отидете в YouTube, за да го видите).

P.P.S. Колекция от повече от 100 образователни материали за Arduino за начинаещи и професионалисти

В тази статия ще разгледаме свързването и управлението на Arduino чрез bluetooth.

Широко разпространеният HC-06 ще се използва като Bluetooth модул.

В нашия проект ще включваме и изключваме светодиода, свързан към порт 13 чрез bluetooth.

Нека започнем с написването на приложение за смартфон с Android. Приложението ще бъде написано в удобна и проста среда за програмиране App Inventor. Програмите ще бъдат компилирани онлайн.

Следвайте връзката http://ai2.appinventor.mit.edu/. Там ще бъдете помолени да влезете в акаунт в Google, който ще трябва да създадете, ако все още нямате такъв.

След като влезете, ще бъдете отведени до програмата, където можете да създадете проект, като щракнете върху „стартиране на нов проект“. Ще трябва да въведете име на проект. Нека го наречем led_control.

Ще се отвори празен прозорец на приложението.

Тук ще поставим необходимите компоненти. Изберете ListPicker от прозореца вляво и го пуснете в проекта.

За компонента ListPicker в прозореца вдясно намерете свойството Text и променете „Text for ListPicker1“ на „Select a BT device“.

Отворете раздела Layout в прозореца отляво, поставете компонента HorizontalArrangement в приложението, променете свойството му Width на „Fill parent“. Добавете 2 бутона към HorizontalArrangement, задайте свойството Width на всеки от тях на „Fill parent“. Трябва да изглежда така:

Нека променим етикетите на бутоните: на първия ще пише LED ON, на втория ще пише LED OFF.

По-долу ще добавим етикет и ще изчистим неговия текст.

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

Сега можете да започнете да пишете програмата. В горната дясна част на програмата изберете режим Блокове.

Тук ще бъде съставена програма от графични блокове. Отляво щракнете върху компонента ListPicker1 и изберете ListPicker1.BeforePicking.

Щракнете отново върху ListPicker1 и изберете set ListPicker1.Elements to

Поставете го както на екранната снимка.

Това ни дава списък със сдвоени Bluetooth устройства. Сега нека се свържем с избраното устройство. Напишете блока, както е на екранната снимка по-долу.

Розовият блок с етикет Свързан е първият блок в раздела Текст. Въведете Connected в празното поле.

Сега нека напишем манипулатор на бутони. Когато щракнете върху първия бутон, ще бъде изпратен текстът „led_on“, а когато щракнете върху втория, ще бъде изпратен текстът „led_off“. Надписът в Label1 също ще се промени.

Остава само да изтеглите проекта на вашия смартфон. Щракнете върху Изграждане и изберете метод за изтегляне.

За първия вариант ще ви трябва интернет и четец на QR кодове. Щракнете и изчакайте, докато проектът се сглоби и QR кодът се генерира, след това отворете четеца на QR код на вашия смартфон и прочетете кода. Остава само да изтеглите и инсталирате файла.

Във втория вариант проектът във формат .apk ще бъде записан на вашия компютър и можете да го изтеглите на вашия смартфон по всеки удобен начин (например чрез USB).

Сега нека започнем с програмата Arduino.

Приемането и предаването на данни се извършва през COM порта, така че ще използваме Serial. Ще получаваме сигнали символ по символ, ще формираме низ и след това ще сравняваме генерирания низ с командите led_on и led_off.

Ардуино

Низ val = ""; void setup() ( Serial.begin(9600); pinMode(13, OUTPUT); ) void loop() ( while (Serial.available()) ( //докато данните пристигат char c = Serial.read(); // прочетете ги val += c; //и формирайте низ delay(3); ) if (val != "") ( Serial.println(val); ) if (val == "led_on") ( digitalWrite(13, HIGH ); ) else if (val == "led_off") ( digitalWrite(13, LOW); ) val = ""; )

String val = "";

void setup() (

Сериен. начало (9600);

pinMode(13, ИЗХОД);

void loop() (

докато (Сериен . наличен () ) ( // докато данните идват

char c = Сериен. Прочети(); //прочетете ги

val += c ; //и образуват низ

забавяне (3);

}

Качване на код в Arduino.

Сега можете да свържете Bluetooth модула HC-06. Свързва се много просто:

Vcc 5v (може да бъде 3.3v)

АКО СЕ ОПИТВАТЕ ДА ЗАРЕДЕТЕ ПРОГРАМАТА В ARDUINO СЪС СВЪРЗАН МОДУЛ, ТОГАВА ЩЕ ИЗЛЕЗЕ ГРЕШКА, ТЪЙ ЩО КАКТО МОДУЛЪТ И ЗАРЕЖДАНЕТО НА ПРОГРАМАТА ИЗПОЛЗВАТ RX И TX ПОРТОВЕ!

Включете Arduino. Светодиодът на Bluetooth модула трябва да мига, това означава, че той чака връзка. Вземете вашия смартфон, намерете bluetooth в настройките, включете го и започнете да търсите. Намерете устройството с име hc-06 и се свържете с него. Може да не се получи от първия път. След успешно сдвояване веднъж, можете да стартирате програмата на вашия смартфон.

Първо щракнете върху „Избор на BT устройство“ и изберете модула от сдвоените устройства. След това натиснете бутоните за включване и изключване на светодиода. Ако всичко е направено правилно, всичко ще работи.

Направихме много просто приложение с помощта на Bluetooth, без дизайн или дори проверка дали сме свързани към модула или не. В следващите уроци ще правим по-сложни приложения и ще се запознаем по-добре с App Inventor.