Не поддържан видео формат.
А сега след като ви представих моя робот, накратко ще разкажа за функциите му:
Няколкото проекта (виж [3], [4]) за задвижване на кола с два мотора или верижни
шасита, ми дадоха възможността да реализирам ходовата част на настоящия робот.
Използвайки натрупания опит от експериментите с предаване на пропорционални
команди (виж [2]) реализирах механизираната ръка. Тя има пет команди за
управление, всяка с две степени на свобода и почти напълно покрива свободното
движение на една човешка ръка от лакътя до дланта. (представете си, че тя събира
проби от повърхността).
Вложих опита си от реализирането на експеримента за предаване на фиксирани
команди (виж [1]), които тук онагледих с включване и изключване на светодиоди
(представете си, че те управляват сондажно оборудване или командват камера за
снимане, датчик за температура и прочее). Фиксираните команди в случая са само
две, но проектът позволява увеличаването им до дванадесет.
Използвах PAN/TILT механизъм от видеоконтрол, който има четири степени на
свобода и с подходяща видеокамера, закрепена за него може да извършва
видеонаблюдение в различни посоки, които можем плавно да изберем дистанционно.
Ако прегледате предишните ми проекти с подобна насоченост, ще забележите, че не
съм използвал програмните кодове като copy-paste, а съм ги осмислял според
предназначението в настоящия робот. Така че търсете само сходство. И все пак,
този проект еволюира от предишните.
Реализацията на проекта ми отне толкова време не само за узряване и обмисляне на
идеята, а и за снабдяване с такива части от механизирани евтини играчки, които
могат да намерят приложение в механиката на този робот. За съжаление, у нас
почти не се намират.
Може би си мислите, че бавно и постепенно съм написал програмния код? О, не!
Обмислях го и си водих записки в продължение на повече от седем-осем месеца. И
както писатели и поети имат своята муза, така се случи и при мен – един ден,
през ноемри 2018-та год., моята муза ме осени. Отворих записките си, седнах пред
компютъра и само за час и половина написах двата програмни кода – на пулта за
управление и изпълнителния механизъм. За тези, които нямат представа от този
процес, искам да отбележа, че двата кода се пишат паралелно и едновременно,
което със сигурност намалява допуснатите грешки, а и те по-лесно се забелязват и
коригират. За да се случи това програмиране, е необходимо предварително да се
определят всички параметри със съответните означения, да се симетрират командите
за двете части и се насочат правилно адресирани към микропроцесорната платка
Arduino и високочестотния модул nRF24L01, за който се използва отделен пакет от
команди за предаване и приемане.
В същото това време начертах съответните печатни платки, върху които да монтирам
съответно дистанционното управление с предавателя, процесорната платка Arduino с
приемника, захранващите мини модули и драйверите за управление на моторите на
ходовата част. На следващите снимки последователно са показани конфигурациите на
печатните платки, а заедно с програмния код всеки може да направи връзка между
механичното и софтуерното изпълнение.
Следват платката на пулта за дистанционно управление и реализирания пулт:
Следващите снимки показват неговото изпълнение в подходяща за целта кутия.
Всъщност, първо намерих подходяща кутия, според нейните размери създадох
геометрията на печатната платка на пулта за дистанционно радиоуправление и върху
нея самата монтирах две Li-Ion батерии 3,7V/1300mAh.
Пултът за управление е реализиран с Arduino Nano V.3.
А сега следват снимки на приемната част на робота:
Тук се използва Arduino MEGA, което има в пъти повече PWM изводи, така
необходими за пропорционалните команди, осъществяващи плавното управление на
робота. Модулът MEGA се захранва със стабилизатор LM7805/1,5A, а PWM изводите
към които са свързани изпълнителните механизми се захранват с мини импулсен
модул, настроен за напрежение 5V и позволяващ консумация на ток ток до 2А и
пиков ток до 3А, виден в долния десен ъгъл.
В следващата таблица може да намерите справка за свързването на изводите на
Wi-FI модула nRF24L01 към съответните изводи на Arduino Nano/MEGA:
Забележете, че цифровите сигнали за управление на nRF24L01 – CE и CSN са
свободно избираеми. За да улесня монтажа на модула върху печатната платка и да
минимизирам размерите на платката съм позиционирал модула до изводи 49-53, а
използвам за връзка с CE и CSN съответно 49 и 52, а за връзка с Arduino Nano в
пулта за управление използвам 10 и 9.
И сега следват снимки на управлението на ходовата част на верижната машина:
Описаният робот е със седем сервомотора и два електромотора за движение, поради
което консумацията на ток е голяма и използваните акумулаторни батерии трябва да
бъдат с капацитет поне 5A/h за да осигурят стабилна работа на робота за около
час. В моя прототип съм използвал акумулатори с капацитет 2500mA/h, с които се
осигурява работа до 30 минути. Всички сервомашинки за управление на
роботизираната ръка са с метални механизми за по-голяма издръжливост на товар,
модел TowerPro SG995/996, а за Pan/Tilt микро серво SG-90. Моторите за
задвижване на ходовата част са с редуктори, които развиват 120-150 RPM при
захранване 7,4V. Ето вида на робота в близък план:
Архив
Arduino файлове [zip,ino][4kb]
26.03.2019 год.: Актуализация на софтуера за управление на
ходовата част
Естествено е, когато се забележат някои недостатъци след известно време, да се
търсят подобрения при управлението на робота. Например: с вече публикувания код
се налага определен ред на включване – първо на предавателя, а след това на
робота, с което се избягва неустановено състояние или самоцелно задвижване на
верижната ходова част. С няколко софтуерни реда към кода за управление на
робота, които дописах тези дни, се избягва това неудобство (което често може да
се забрави) и този порядък на включване отпада, тоест вече няма значение кой от
двата модула ще се включи първи.
За целта доработих в кода редовете, съдържащи командите:
if (radio.available())
{
radio.read(TxRx, sizeof(TxRx));
IsConnect = HIGH;
}
else {
IsConnect = LOW;
}
Като добавих естествено продължение на след последния ред, в който указах на
софтуера да забрани включването на моторите когато липсва радио сигнал. Тази
доработка разрешава задвижването на верижната ходова част само при наличие на
радио сигнал. Ето как:
if ( radio.available())
{
radio.read(TxRx, sizeof(TxRx));
IsConnect = HIGH;
}
else {
IsConnect = LOW;
}
if (IsConnect = = LOW)
{
motorSpeedA = 0,
motorSpeedB = 0;
}
else {
int y = TxRx[8];
int x = TxRx[9];
int z1 = TxRx[0];
int z2 = TxRx[1];
Добавените редове са в червен цвят, след което следва вече известния код. А в
края на софтуерния код не забравяйте да затворите вмъкнатите команди с голяма
скоба “}”, както е показано с червен цвят по-долу:
analogWrite(enA, motorSpeedA); // Send PWM signal to
motor A
analogWrite(enB, motorSpeedB); // Send PWM signal to motor B
}
}
Литература:
1. Arduino – предаване на
фиксирани команди чрез nRF24L01, Валери Терзиев, www.kn34pc.com
2. Arduino – предаване на
пропорционални команди чрез nRF24L01, Валери Терзиев, www.kn34pc.com
3. Arduino - управление
на модел на танк по радиоканал, част II и III, Валери Терзиев, www.kn34pc.com
4. Arduino – 2WD, 2Motors, 2Servos RC
Car, радиоуправляем модел на кола с nRF24L01, Валери Терзиев, www.kn34pc.com
5.
Гусеницы для RC робота на arduino nrf24l01, Ал. Минский
6.
Arduino and HC-12 Long Range Wireless Communication Module
7.
Arduino Robot Car Wireless Control using HC-05 Bluetooth, NRF24L01 and HC-12
Transceiver Modules
8.
About Nrf24L01
9.
Arduino Wireless Communication – NRF24L01 Tutorial
10.
Create a Two-Channel Remote Control with the nRF24L01+
11.
Arduino MEGA 2560 PRO mini
Валери Терзиев 19 февруари 2019 година, доп. 29 март
2019 година