Arduino - 2WD, 2Motors, 2Servos RC Car, радиоуправляем модел на кола с nRF24L01
/kn34pc.com/конструкции/...

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


Целта на този проект е максимално използване на цифровите изходи на Arduino. За управлението на един модел е важно използването на цифровите изходи, позволяващи ШИМ (PWM), а именно D3, D5, D6, D9, D10, D11. Но първото ограничение идва от употребата на високочестотния модул nRF24L01, който използва за връзка с Arduino пет цифрови извода – D9, D10, D11, D12, D13.

След внимателно обмисляне на възможностите които позволява Arduino, най-после идеята за проекта придоби следния вид – радиоуправление на модел на кола чрез ВЧ модул, задвижване на два мотора, управление на сервомашинка за посоката на движение, управление на сервомашинка за въртене на светлини, включване и изключване на предни светлини, включване и изключване на задни светлини (или габарити), използване на ШИМ изводи за управление на скоростта на моторите.

Изходите за серийна комуникация D0 и D1 не се използват за да не се нарушава серийния порт за връзка с компютъра.

Очевидно е, че броят на цифровите изходи на Arduino не достигат. Затова направих следната конфигурация на приемната част:

D0 - Serial I/O не се използва
D1 - Serial I/O не се използва
D2 - MotorL1, извод 1 на левия мотор
D3 - Servomotor L/R, ШИМ за управление на посоката, ляво-дясно
D4 - MotorL2, извод 2 на левия мотор
D5 - PWA Motor1, ШИМ за управление на скоростта на левия мотор
D6 - PWA Motor1, ШИМ за управление на скоростта на левия мотор
D7 - MotorR1, извод 1 на десния мотор
D8 - MotorR2, извод 2 на десния мотор
D9 - nRF24L01
D10 - nRF24L01
D11 - nRF24L01
D12 - nRF24L01
D13 - nRF24L01

Както и част от аналоговите изводи, но като цифрови:

А0 - цифров изход за включване и изключване на предни светлини
А1 - цифров изход за включване и изключване на задни светлини (габарити)

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

1. Канал 1 – напред/назад
2. Канал 2 – наляво/надясно за посока на движение
3. Канал 3 – наляво/надясно за светлини
4. Канал 4 – включване/изключване на предни светлини
5. Канал 5 – включване/изключване на задни светлини (или габарити)

както и възможност чрез ШИМ (D5 и D6) за управление на скоростта на движение на модела по-бързо, по-бавно.

Поради спецификата на командите в предавателя няма такава наситеност при използването на изводите на Arduino:

А0 - джойстик за движение напред-назад
А1 - джойстик за определяне на посока наляво/надясно
А3 - сензор за измерване напрежението на батерията
А4 - за въртене на светлините със сервомашинка
А7 - индикатор за спадане на напрежението на батерията
D4 - свързване на Бутон за включване/изключване на светлини
D7 - свързване на Бутон за включване/изключване на светлини (габарити)

До тук разказах за идейната част на бъдещия програмен код. Но дотолкова бях сигурен в неговата реализация, че успоредно с разработката му започнах снабдяването с необходимите механични части за бъдещия модел на кола. Точно тази задача се оказа бавна и трудна, но в Китай има всичко, и всичко може да се поръча и достави на "мижави" цени. Сроковете на доставка бяха от около един месец до два месеца, което като цяло забави реализацията на този проект. Ако за предишните модели, описани в предходни мои статии, използвах готови играчки, този път изцяло разработката на раиоуправляемата кола беше моя. Истински преден мост, истински лагери, истински кормилни щанги! Ето. Това беше идеята на втората част от тази разработка! Механичните части се продаваха на баснословни цени в мащаб 1:8 до 1:16. Аз трябваше сам да съобразя, сам да реша. Взех правилни и грешни решения, които в последствие се наложи да поправя. Но на края събрах всички необходими механични части, които може да видите на следващата снимка:

Може би поглеждайки към тази снимка бихте казали – ама, нищо работа! Но не е съвсем така – всички части са с определени размери и мащаб, така че да могат да се сглобят и накрая да се получи модела на кола. Защото иначе, е наистина – нищо работа. В процеса на работата по проекта се оказа, че вместо да търся кормилни щанги за предния мост, просто мога да използвам за ос един добре почистен електрод за заваряване Ф=2.5, от който отрязвах необходимата дължина, а после с плашка М2.5 навих съответната резба, за която се закрепваха накрайниците за управление.

Е, може би, точно затова този проект се проточи почти година и половина.

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

Е, разбира се, че с нетърпение побързах да си направя подходящата печатна платка върху която да монтирам Arduino, драйвера за мотори SN754410 (L293) и средномощни транзистори 2N2219 (или български аналози 2T6551), чиято задача беше да включват светодиодите за светлините за да не се свързват последните директно към изходите на процесора, чийто номинален ток е 20mA, а максималния 40mA. Всички връзки върху печатната платка за модулите изпълних с куплунзи, което позволяваше бърза смяна на модули. Е, някой ще каже, че не е необходима печатна платка, след като целия монтаж може да се направи обемен с подходящите проводници. Аз бих отговорил – така е по-подредено, по-прибрано и по-красиво. А и за движещ се модел – много по-устойчив на механични сътресения и удари. Печатната платка закрепих с втулки за готовото шаси, след което намерих касетка за две батерии размер R6 с които да извърша автономното захранване на модела. Батериите които използвам в моделите си са Li-Ion 3,7V/1400 mA/h. Капацитетът на батериите позволява издръжливост при интензивно натоварване около 40-50 минути, но искам да отбележа, че частите е достатъчно за да събере и по-големия размер батерии 18500. Ето как изглежда експерименталния модел:

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

Една доста прецизна дейност беше изчертаването на шасито на радиоуправляемата кола. То не само трябваше да бъде съразмерно, да позволява въртене на предния мост наляво-надясно, но и да събере електронните елементи, моторите, серво машинките, електронната платка и батериите:

Все пак, при това описание нека да не забравяме микропроцесорната платка Arduino и разположението на нейните изводи – аналогови и цифрови входове-изходи:

И щом погледнете схемата на входно-изходните изводи (пинове) на Arduino, спомнете си за началото на статията и идеята за максимално използване на изводите на Arduino. Очевидно е, че "празно" място наистина няма. Но точно по този начин се изпълняват всички описани в началото на статията команди при максимално използване на входно-изходните шини.

Печатната платка, която разработих е в пълно съответствие както с използваните команди и техните Arduino изводи, така и с физическите размери на колата:

Тази платка позволява захранване на Arduino с +5V от вградения стабилизатор или от външен интегрален стабилизатор LM7805. Също така дава възможност серво- машинките да бъдат захранвани от друг, отделен стабилизатор LM7805 за да се изключи влиянието на високия стартовия ток на моторчетата им върху електрониката. Но също така е предвидена възможност, ако използваме двигатели с напрежение над 12V (например 24 волта) да предпазим Arduino от високо напрежение като го захраним от трети отделен за целта стабилизатор LM7810 или LM7808.

Разбира се, електромоторите също трябва да бъдат съобразени по мощност с използвания драйвер за управление L293 (SN754410). За експеримента съм използвал два мотора за Arduino smart car, които се захранват с напрежение 6V и редукторите им имат подходящо за моите цели обороти – 200RPM. В процеса на експеримента използвах и по-мощни мотори с по-голям метален редуктор, но за съжаление бяха само 120RPM и колата се движеше твърде бавно, с което атракцията губеше смисъла си. Но ако в бъдеще намеря такива мотори с 200-250RPM непременно ще ги сменя, тъй като прецизността и мощността с тях е много по-висока:



И ако в експерименталния модел нямах съществени изисквания за въртящ момент към серво машинката, за която избрах микро серво SG90S, то за този модел с габаритна дължина 35см. се наложи да избера сервомашники с среден или голям въртящ момент, oт 4кг/см до 13кг/см. Аз избрах Futaba S3003 и TowerPro MG996. Техните двигатели са по-мощни и съответно стартовия ток достига 1,5А, поради което захраних двете машинки от отделен стабилизатор LM7805.

Естествено този избор в процеса на експеримента също подлежеше на прецизиране и като се има предвид, че едната серво машинка носи само платката с въртящите светлини и за да получа унификация, накрая се спрях само на модела на Futaba S3003, 4kg/cm и максимален ток до 800 mA.

Свързването на изводите според цвета на проводника е:

Чер - маса, минус
Червен - +5V
Бял - сигнал ШИМ от Arduino

Възможно е да се срещнат и други оцветявания:

Чер - маса, минус
Кафяв - +5V
Жълт - сигнал ШИМ от Arduino

И след всичко казано досега, ето най-после сглобения модел на раздиоуправляем модел на кола с два мотора, две серво машинки, две отделни команди фиксирани команди (светлини):

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

Ето предното окачване с кормилните щанги:

На следващата снимка може да видите модела отпред:

Забележка: светодиодите се командват чрез буферни транзистори и се захранват през токоограничаващи резистори със стойност 390Ω от захранването. Резисторите определят тока през светодиодите приблизително на 18-20mA. Ако се използват мотори за 12V, в този случай резисторите трябва да бъдат със стойност 620Ω.

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

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


 


 

В интернет няма да намерите много такива проекти. А като този с пет канала на управление, всеки с по две команди си е направо моя приумица. Но все пак нека да спомена, че програмния код, който съм написал за този проект, представлява разширен код на оригинала на руския любител Александр само с управление на един мотор и едно серво: http://sadeb.ru. Подобен на него е програмния код в моята статия Част I.

Архив:
rx_5_commands.zip [zip,ino][1kb]
tx_5_commands.zip [zip,ino][2kb]
pcb_2018_d.zip [zip,pcb][8kb]

Валери Терзиев
24 октомври 2011 година