Arduino-радиоуправление на модел на кола с nRF24L01
Част I
 

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


    В края на последната си статия посветена на един мой проект за "Управление на модел на танк по радиоканал" с използване на модул на 2400 MHz (Част III), засегнах така нареченото пропорционално управление или както простичко го представих: "скоростта се променя в зависимост от педала на газта". С тази статия ще представя следващия си проект за пропорционално радиоуправление на модел, но този път на автомобил. Разликата в управленията на танк и кола са в премахването на един мотор и въвеждането на серво-машинка или още известна в моделистиката като "рулева" машинка. Последната се използва за плавно управление на волана, тоест на ъгъла на завоя на предните колела.

    Началото е винаги трудно и започва с намиране на подходящите за целта модули, но след като проекта "отлежи" в главата и мислите се подредят, идеята се избистря и идва началото на осъществяването му. Намирането на подходящ модел на кола също е трудност, а и не е необходимо да бъде скъпоструваща. Ето така намерих моя модел. За разлика от други мои статии, в които показвам последователно пътя на осъществяването им, тук с две последователно снимки ще покажа направо шасито опразнено от оригиналните части след нея с монтирана моята печатна платка с Arduino и драйвера за мотор SN754410 (L293D) :

    На първата снимка може да видите шасито на колата почти в първоначален вид, от което съм свалил всички излишни оригинални модули, които не са необходими за моя проект. На мястото на управлението на волана съм монтирал рулева серво-машинка, чиято ос е съединена с кормилната щанга посредством най-обикновен добре оразмерен меден проводник с подходящо сечение (0,9 - 1,0 мм).

    На следващата снимка е показано шасито на модела в почти завършен вид, като остава да се свърже драйвера SN754410 с мотора, който съм запазил от оригиналната конструкция:

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

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

    Както казах по-горе, запазих оригиналното задно окачване и електромотора, който го задвижваше. Възползвам се от наличните възможности, които позволяваше шасито, включително от наличие на кутия за 5 броя батерии размер АА. Вида на задния мост е показан на следващите снимки:

    Вече споменах, че за този проект съм избрал интегралния драйвер за управление на постояннотоков електромотор SN754410. Той е пълен еквивалент на известния L293D, но с подобрени технически характеристики. Сравнение може да направите от приложените datasheets. Но ако искате да се презастраховате, защото, например, не знаете електромотора, който сте избрали с каква консумация на ток е, препоръчвам по-мощния драйвер за мотори L298D.

    За да избегна смущенията (искренето), които предизвиква колектора на мотора при въртене се наложи да направя импровизиран филтър паралелно на изводите му с два керамични кондензатора по 100 nF, като единия им край запоих за корпуса на мотора, който следваше да замася:

    Според оригиналната конструкция на шасито, избрах място за бъдещата печатна платка, оразмерих я, а след това направих същото с подходяща кутия за бъдещото дистанционно управление, поръчах платките за изработка. След две седмици те бяха готови и седнах на работната маса. Ето каква красота се получи:

    След завършване на окабеляването между отделните модули в бъдещата кола, тя придоби следния вид:

    И накрая остана да намеря подходяща кутия за дистанционното управление. В повечето фабрични модели дистанционното управление е с размери около 120 х 80 мм. Размерът изглежда е избран по чисто биологични причини – идеално пасва в ръцете на човек, независимо дете или възрастен. И аз се насочих към приблизително същия размер за кутия.

    А ето и дистанционното управление на модела:

 

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

    По време на практическата изработка и тестовете установих, че оригиналния редуктор на модела прескача на определена позиция и след като го отворих, забелязах, че една от зъбните предавки е с един счупен зъб (или просто фабрично е отсъствал). Тогава реших, че е по-бързо да заместя редуктора с нов, закупих такъв с предавателно число, което осигуряваше около 200 оборота в минута. По този начин скоростта на модела се запазваше.

    Но ето как изглеждаше модела с този редуктор:

    Но моята цел беше да използвам изцяло модела на кола в неговия оригинал. И така една вечер след един уморителен работен ден, седнах на работната маса за да се разтоваря от ежедневието и разглобих редуктора на колата. Именно тогава установих липсата на един зъб от предавката. В първия момент почти реших да оставя колата в горния вид, но като поставих кабината върху шасито се оказа, че тя опира в колелата, които бяха с 6 мм по-голям диаметър. Тогава се заех с ръчната поправка на оригиналния редуктор. Трябваше да попълня мястото на липсващия зъб с друг, който се налагаше да измайсторя. Взех бормашинката и със свредло с Ф = 1 мм аксиално пробих отвор точно в средата между двата зъба с дълбочина до оста на зъбното колело.

   Разбира се, изискваше изключителна прецизност за да улуча точно в средата помежду им. След това отрязах парченце меден емайлиран проводник с Ф = 0,85 мм, което вкарах в готовия отвор, подравних неговия връх по височина с останалите зъби. С една триъгълна часовникарска пиличка оформих върха във формата на триъгълник и импровизацията заприлича съвсем на истински зъб. След като завърших с тези фини операции внимателно с моментно лепило ("Момент", "Капчица" или "Каноконлит") фиксирах новия зъб и го оставих да съхне 24 часа. На следващата вечер сглобих отново оригиналния редуктор, изпитах въртенето му при различни обороти както напред, така и назад. Останах доволен от резултата и тогава отново го монтирах на колата.

    Завършения модел на колата след пълното сглобяване придоби следния вид:

    От огромно значение за правилната работа на двигателите е правилния избор на драйвер за мотор. Преди всичко за да пуснем в движение електромоторите трябва да знаем техния ток на консумация при нормално натоварване и при товар близък до спиране на мотора. Обикновено разликата между тока на продължителна работа и пиковия ток е до 3-4 пъти. Но за да издържи максималния ток на товара, самата интегрална схема драйвер за мотор трябва да отговоря на тези параметри. Производителите обикновено публикуват тези значения на консумирания ток и би следвало още преди да си изберем мотори и драйвери да се съобразим с техническите им характеристики. Например, ако консумирания ток на електромотора със средно натоварване е около 0,2-0,5А, а задържайки оста на въртене тока се повишава до 0,8-1,0А следва избрания от нас драйвер за мотор да отговаря на тези изисквания. Моята практика установи, че тока, максималното захранващо напрежение и максималната разсейвана мощност имат пряка връзка. Например, най-нежния от използваните в моите конструкции драйвери се оказа китайския L9110. При еднакви условия с други драйвери, независимо, че съм го захранвал с подходящо напрежение (12V) при пуска на моторите той "изгаряше" буквално за 4-5 секунди, докато при захранващо напрежение 9V работеше безупречно.

    Поради горната забележка, появила се след натрупания опит от експериментите ми в конструкциите на радиоуправляеми модели на танк и кола, реших да ви дам сравнителна таблица на най-важните параметри на моторни драйвери, които най-често се намират на пазара у нас:

    В моделът на кола, който съм показал на снимките по-горе използвам единият от двойния драйвер за мотор SN754410:

    На входа "Enable" подавам командите от ШИМ на Arduino. Чрез командите на "Input_1" и "Input_2" сменям посоките на въртене на мотора, с което осъществявам движение на модела на колата напред-назад, а с ШИМ управлявам скоростта. В западните публикации може да срещнете определението "Speed Controller", съответстващо на този начин на управление на мотори.

    Както се вижда от снимките по-горе, Arduino опростява изключително хардуера на едно радиоуправление. Практически, както дистанционното управление с предавател, така и приемната част, имат по няколко елемента/модула като основната функция се изпълнява от процесора на платките Arduino.

    Приемната част съдържа платка Arduino, радиомодул и драйвер за мотор, като последния може да бъде един от описаните в таблицата по-горе. Печатната платка е съобразена с геометрията на избрания от мене модел на радиоуправляема кола.

    Предавателя съдържа платка Arduino, джойстик (по ваше желание може отделни за командите напред-назад, наляво-надясно), ВЧ трансивер с модул nRF24L01, работещ на 2400 MHz и няколко кабелчета, с които се осъществяват връзките помежду им.

    Следващата схема изпълнена с програмата на Fritzing дава представа за дистанционното управление и неговото изпълнение:

    Подобна е схeмата на приемната част, в която също основния модул е платката Arduino в комбинация с радиомодула nRF24L01 и моторния драйвер, независимо, че е показан L298D:

    Със следващото видео демонстрирам движението на готовия модел.


   
    Добавяне на фиксирани команди:

    След като завърших този успешен проект, се замислих дали не мога да добавя още команди за изпълнение към програмния код. Засега наличните команди бяха: напред-назад, наляво-надясно. Но трябваше да се съобразя и с останалите свободни цифрови пинове в приемника. Досега заетите бяха: един за серво-машинка, три за пропорционално управление на мотора и пет за ВЧ модул nRF24L01, тоест всичко девет от общо тринадесет цифрови пина на Arduino.


    1. В предавателя добавих сензор за изтощаване на батерията LOW BATT. Като индикатор свързах червен светодиод, който трябваше да светне при спадане на напрежението на батерията до 5,5V. Избрах тази стойност, тъй като съгласно техническите характеристики на използваната микропроцесорна платка Arduino Nano V3, тя запазваше работоспособността си в интервала 6V-12V.

    За целта инициирах аналогов вход А7, на който включих резистивен делител 3,3 kОм и 2,2 kОм, съответно 3,3 kОм към батерията и входа, а 2,2 kОм между входа и маса. Както виждате общата стойност на резисторите е 5,5 kОм, което веднага означава, че при спад на напрежение на батерията до 5,5V, на входа А7 ще се подаде потенциал 2,2V. Като имаме предвид, че аналогово-цифровия преобразувател е с 1024 стъпки, това означава, че на една стъпка отговаря напрежение 4,88 mV. Следователно за да се детектира на входа напрежението 2,2 V, следва да програмирам 450 стъпки (450 х 4,88 mV = 2,196 V).

    В програмния код включих няколко реда, с които детектирам това напрежение на аналогов вход А7 и ако то е по-малко от 2,2V на цифров изход D2 се подава високо ниво HIGH, а директно към D2 е свързан светодиод към маса през резистор 330 Om.


    Опростено, тази функция може да се представи по следния начин:

    If U(A7) < 2,2 V, то тогава D2 = LOW, ако НЕ, то D2 = HIGH


    Освен сензорът за ниско напрежение на батерията, добавих две фиксирани команди с бутони. Така си осигурих развлекателни опции като включване на фарове и габарити (или каквито други би могло да ни хрумне). Това са цифровите пинове D4 и D7. Двата пина са програмирани да се инициализират при високо напрежение (INPUT_PULLUP), така че бутоните да се свържат към маса и командата да бъде превключване към ниско ниво.

    Всички команди се предават чрез думата TXword[4], където [4] е броя на командите.


    2. В приемника добавих няколко реда в кода, с които да детектирам изпращаните от предавателя двете допълнителни фиксирани команди. И тук използвам думата TXword[4], която се изпраща от предавателя. При детектирането й, изваждам всяка една от командите на цифровите пинове D3-D8. И в приемника ВЧ модул е свързан към същите пинове D9-D13. Цифровите пинове, за които се свързват серво-машинката (D3) и пропорционалното управление на мотора ENB (D5) са избрани с ШИМ, за да бъде това възможно.

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

    Архив: rx_tx_nrf24l01 [zip,ino][2kb]


    Пожелавам на всички удоволствие от ардуиностроенето!
 

Литература:

1.
L293D [pdf][601kb]
2. SN754410 [pdf][109kb]

Валери Терзиев
13 февруари 2017 година, доп. 13 февруари 2018 година