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

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


    Още със завършването на моя експеримент за управление на постояннотоков мотор с драйвери L9110 и MC33152, описан в статията "Arduino-управление на постояннотоков електромотор с H-Bridge драйвер" ми хрумна идеята да развия създадения вече скеч в програма за управление на два мотора. Естествено, това продължение на експеримента позволява задвижване на робот и изпълнение на повече команди от вече описаните.

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

    След като завърших основната част на програмирането, включих два мотора и експериментирах резултата. Всъщност интересната част за мене беше обръщането на посоките на въртене на двата мотора. Резултатът беше повече от очевиден. Тогава се замислих за добавяне на команди за скорост на въртене (движение).

    Признавам си тази част от скеча ми отне две седмици. Не бях правил никога подобни експерименти, но с упоритост всичко се постига. Така добавих още два бутона (двата в левия долен ъгъл на снимката в ляво) с които постигнах това управление. Определянето на стъпките, през които се променяше скоростта, ми отне много малко време и така получих пет скорости на задвижване, като при първоначално включване на платката Arduino скеча придава стойност малко над половината от скоростта на въртене на моторите, а обхвата на промяната е от 160 до 240 нива (160-180-200-220-240).

    Експериментите с двата мотора извърших като монтирах всички модули на един малък бредборд, който се оказа достатъчен. Управлението и софтуера се извършваше от платка Arduino UNO R3. Захранването на целия комплект е с 12V постоянно напрежение, което позволява консумация до 2А.

    Припомням, че драйверите на H-Bridge MC33152 позволяват захранване в интервала 6,5V ÷ 18V и максимален ток на консумация до 1,5А. За мен тези параметри бяха достатъчни, тъй като позволяваха захранване на конструкцията с батерия с напрежение 12V, която дори при спад на напрежението до 7V щеше да задвижва моторите. От друга страна напрежението на батерията, захранването на моторите и входното максимално напрежение на платката Arduino са еднакви - също 12V, като по този начин предвиждах да използвам само един единствен източник на захранване.

    Всички експерименти, свързани с промяна в програмния код, но най-вече добавените команди за обръщане посоките на въртене на моторите и скоростта, направих на конструкцията, видна на по-горните снимки. Необходимостта двата мотора да се въртят в противоположни посоки дойде от желанието ми да осъществи на практика задвижването на едно шаси на робот. Точно затова, предвидих в кода промяна на скоростта като си представях как робота се движи по-бързо или по-бавно. Казаното до тук може да се види в скеча "Tank_OK.ino", приложен в архива.

    Дали на шега или е истина, но често се казва, че татковците често купуват на децата си играчките, които самите те харесват!? И аз не знам как ми хрумна да използвам този скеч за управление на танк, но идеята узря изведнъж, именно защото скеча е изключително подходящ, управлявайки два мотора, съответно управлявайки две задвижващи колела с две вериги. Ето така се зарових в интернет и не след дълго намерих доста модели на танкове. Избрах си един, който намерих като подходящ за моите цели и го поръчах. Естествено от Китай. След две седмици пратката пристигна, а вътре в нея в няколко пликчета имаше безброй "джуджавки", тоест пристигна в разглобено състояние. Сглобяването на модела обаче, се превърна в елемент от малкото щастие да притежаваш красива играчка. След няколко вечери упорит труд ламарините, колелцата и винтчетата придобиха ето този вид:

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

    След като сглобих шасито на танка и настроих моторите, не се сдържах да го изпробвам в движение и с два достатъчно дълги проводника, свързани към двата мотора, подадох захранване и шасито се задвижи. Удоволствието от движението и силния метален шум е изключително! Почти като истински танк! След това чрез регулиране на захранващото напрежение от нула до 12V определих интервала, в който шасито може да преодолява препятствия с наклон < 30 градуса (почти в реални условия). Оказа се, че долната граница при която шасито има стабилно движение е 7,5V. Това е от огромно значение за нивото на разряда на батериите, при която стойност платката Arduino все още щеше да работи според техническите данни (7V-12V).

    Но в програмния код аз не променям напрежения, а коефициента на запълване. Както ще забележите на схемата, видна по-долу, моторите са свързани към цифровите ШИМ изводи на платката Arduino. Но независимо от това, промяната на напрежението е един от параметрите, които трябва да осигурят движението на машината. От друга страна, в кода поставям начално състояние на коефициента на запълване за ШИМ около 70% с което скоростта на моторите позволява намаляване и увеличаване, както споменах в началото в пет стъпки. Някой би могъл да пожелае да промени тази стойност (например на 128 - в средата) и с това ще осигури намаляване на скоростта до пълно спиране на машината. Разбира се тази последна възможност, която съм включил в кода е една "глезотийка", която позволява на човешкото око да се радва на модела, който по този начин се доближава максимално до оригинала.

    На следващата цветна модулна схема ви представям свързването на отделните елементи и блокове:


tank_ok [zip,ino,fzz,jpg][312kb]

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

    В реда, в който бутоните са показани от ляво на дясно, задават следните команди:

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

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

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

    А тук, по-долу изглед от страни и отгоре:

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

    Но остана един елемент на неудовлетворение - трудния достъп до командите когато шасито беше в движение. Е, все пак не е и чак толкова атрактивно. Ето така реших да направя конструкцията на модела радиоуправляема (щях да се спася от тичането след нея). Разбира се, точно това щеше да я направи много по-атрактивна. Набързо закупих модули приемник и предавател на честота 433 MHz и две интегрални схеми енкодер и декодер. Целта ми беше с най-малко елементи и средства да направя управлението на танка дистанционно. Модулите осигуряваха четири канала за управление, а за моята конструкция това са основните команди - напред-назад, стоп, наляво-надясно. Но докато осъществявах на бредборд импровизирано дистанционно управление на модела на танк по радиоканал на честота 433 MHz, попаднах и на други принципни схеми за тази цел, които позволяваха управление с осем команди (припомням, че моя образец е с шест команди). Е, разбира се, не всичко може да се осъществи за "нула" време и ги оставих за близкото бъдеще. Ето така, временно елиминирах дистанционното управление на скоростта.

    Но ето модулите, които използвам:

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

    За тази цел освен радиочестотните модули ми бяха необходими още две интегрални схеми комплект енкодер-декодер, така че чрез енкодера се кодираха командите от бутоните, а в приемната част чрез декодера те дешифрираха и отправяха към пиновете на Arduino платката. Представям конструкцията лесна за изпълнение, но в нея има доста логика. Например, в оригиналния програмен код на Arduino бутоните подават команди като дават цифровите пинове към маса. Следователно при сглобяване на модулите за радиоканала, приетите от предавателя команди също трябва да бъдат активни при ниво от "1" към "0". По този начин се спрягат съответните логически нива, в противен случай рискуваме платката Arduino да не изпълнява приетите команди. Причината затова е, че цифровите пинове са закачени чрез командата PULL-UP към високо ниво.

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

    Както виждате, изходите на приемника D0, D1, D2 и D3 са съответните команди, които директно се подават към цифровите пинове на Arduino. Приемникът се захранва с напрежение 5V, което се взема от извод +5V на платката Arduino, а предавателят се захранва от батерия 6F22 / 9V, независимо, че на схемата е отбелязано по-ниско напрежение, енкодерът допуска захранване до 12V.

    А ето промените във връзките между бредборда и платката Arduino в приемната част върху шасито на модела на танк:

    Вероятно ви прави впечатление, че на бредборда има включени електролитни и керамични кондензатори. Погледнете принципната схема по-горе и ще забележите, че на нея е отбелязан само кондензатора С = 0,01µF, а аз съм добавил електролитен кондензатор със стойност 220µF/16V. Все пак, имал съм предвид, че четковите електромотори са сериозен източник на смущения, искрене в следствие на триенето на четките по колектора на ротора. В първия момент на пуска не бях свързал нито антени към предавателя и приемника, нито филтриращи кондензатори, като покритието по обхват беше в рамките на една стая. В следващия момент добавих антени и покритието се разшири до стабилно предаване на командите от предавателя от съседната стая, а на края поставих филтриращите кондензатори просто за да ги има или просто защото взех предохранителни мерки така, както пише в "дебелите" книги.

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

    Както се вижда, захранването на предавателя се осъществява от батерия с напрежение 9V, която е достатъчна по капацитет предвид на консумирания ток. По-важно е, според мене, правилното оразмеряване на дължините на антените на предавателя и приемника. Независимо, че използвах импровизирани антени от проводници, дължината на антената е съобразена с дължината на вълната на основната честота на радиоканала - 433,92 MHz. Тази честота отговаря на дължина на вълната 691 mm. Антените би следвало да бъдат равни или кратни на тази дължина. Скъсените антени могат да бъдат с дължини: 691 mm, 345 mm и 173 mm. За тези дължини следва антените да са съгласувани. Аз използвам антена за предавателя с дължина 172 +/- 2 mm и антена за приемника 342 mm +/- 2 mm. В интернет сайтовете с публикации описващи използване на радиоканал на същата честота колегите дават размери на антените 17 cm за предавателната и 34 сm за приемната.

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

    Този комплект се предлага на честота 315 MHz, като дистанционното управление е напълно изграден модул с телескопична антена, докато дължината на антената за приемника трябва да се изчисли по познатата формула за дължината на вълната и би могла да бъде - 475 mm или 240 mm, последната е четвърт вълна.

    Изводите на приемника са изведени на рейка и са обозначени на платката с бял печат:

    Захранването е 5V и може да се вземе от платката Arduino, а изводите D0, D1, D2, D3 са цифровите изходи, които се свързват към цифровите входове на Arduino и чрез които се осъществява управлението НАПРЕД-НАЗАД-НАЛЯВО-НАДЯСНО. Но преди да свържете модула трябва да знаете, че командите в моя скеч, постъпили от бутоните дават съответните цифрови входове към маса, тоест от високо към ниско ниво, докато командите на този модул са от ниско към високо. Това означава, че трябва да преработите тези команди в скеча просто като замените състоянията на бутоните вместо "LOW" с "HIGH".

    В архива към статията е приложен и програмния код. Основната част от него е обяснена в статията ми "Управление на постояннотоков мотор с H-Bridge драйвер". В този скеч има доста разлики, свързани с едновременното управление на два мотора, както и с лека оптимизация на програмния код, тъй като оригиналния, от който произхожда, беше с доста повторения на команди за да съм сигурен в изпълнението им.


Литература:

1. RF433 Wireless TX + RX Module Pair
2. Make a Simple RC (Remote Controlled) Robot Car
3. DIY Remote Control Car: The Best RC Car Tutorial
4. Remote Operated Spy Robot Circuit
5. Валери Терзиев, Николай Николов "Приемник за пропорционално телеуправление", сп. "Радио, телевизия и електроника", 1988 / кн.1
6. Николай Николов, Валери Терзиев "Пропорционално телеуправление - изпълнителни механизми", сп. "Радио, телевизия и електроника", 1988 / кн.4

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