Po delší době jsem se rozhodl sestavit kdysi zakoupenou stavebnici robotnického ramene, jde o stavebnici „ROBOTICKÉ RAMENO AKRYLOVÉ DIY – 4DOF ROBOT Arm“ se čtyřmi servy. Ke stavebnici není dodáván stavební návod na ALEGRO.CZ v sekci s těmito robotnickými rameny je u uvedeného modelu soubor PDF kde jsou fotografie s postupem sestavení. Na ovládání jsem si napsal program na odzkoušení ovládání serv ramen po sestavení, tak program pro ovládání ramen v automatu, kdy se ramena včetně čelistí na uchopení pohybují dle zadaných hodnot, nebo je možnost ovládání potenciometry. Programy je možné si individuálně upravovat dle potřeby.
POPIS STAVEBNICE
Stavebnice obsahuje všechny potřebné díly na sestavení robotnického ramene včetně spojovacího materiálu, pouze je nutné dokoupit čtyři kusy MIKRO SERV SG90. Dále je nutné dokoupit řídící jednotku já jsem použil domácí zásoby ARDUINO NANO a pro něho pak modul ARDUINO NANO IO SHIELD pro jednoduchost zapojení. Díly pro sestavení ramene jdou dobře tzv. vylamovat „vypadávají skoro sami. K servům pokud použijete nové tak doporučuji je před montáží odzkoušet zda jsou funkční v plném rozsahu tj. od 0° do 180°, po namontování a zjištění že servo nefunguje to pak opravdu dost zahýbá s nervy.
POPIS SESTAVENÍ
Po vyjmutí dílů z desky se kterými budeme konkrétně hned pracovat, jako první pokud bude v tomto dílu zašroubován šroubek tak na pracovní ploše, pomocí šroubku opatrně v tomto dílu vyřízneme závit. „Jde to velice dobře ale je lepší nespěchat“ A AŽ POTÉ ODSTRANÍME PAPÍROVÉ KRYTÍ DÍLU, tím zabráníme poškrábání povrchu. Použité délky šroubků jsou dobře popsány v uvedeném souboru PDF který je dostupný u uvedené stavebnice. Uvedená serva mají označení „servo na otáčení podesty s rameny je označené jako č.1, servo na levé straně ramene má označení servo č.2, (servo jsem si při programování označil jako zadní rameno) servo na pravé straně má označení servo č.3 (servo jsem si při programování označil jako přední rameno) a servo pohybující čelistmi má označení servo č.4. Po vyjmutí všech dílů z desek tyto hned nevyhazujte určitě je použijete jako já, po osazení serva je lepší vždy pořádně zkontrolovat zda se servo hýbe správným směrem. A nakreslit si k tvaru serva s jeho číslem páčku v jaké pozici má hodnotu 0° a hodnotu 180°, vždy je lepší osadit páčku na hřídelku serva a zjistit si správný pohyb tak jak má být v ramenu. Pro toto zkoušení je vhodné si nahrát do ARDUINA program TEST OVLÁDÁNÍ SERV.INO a na počítači spustit program pro počítač „sériový terminál“ s názvem ARDUINO.EXE. Namontované servo do dílu otestujeme tak že jej připojíme na datový PIN D2 to je PIN který ovládá servo č.1 na desce ARDUINO IO SHIELDU. Ve spuštěném programu ARDUINO.EXE na počítači pak zadáme hodnotu pro hodnotu 180° tj. 180,0,0,0 a odešleme do ARDUINA a servo se vychýlí do zadané hodnoty, poté zadáme hodnoty 0,0,0,0 (stačí myší přepsat hodnotu 180 na hodnotu 0 a opět odešleme do ARDUINA servo se přesune do polohy 0. Takto postupně odzkoušíme všechny namontovaná serva na dílech, u serva č.4 při zadaní hodnoty 180° se musí čelisti otevřít a při zadané hodnotě 160° se musí čelisti zavřít. Tyto hodnoty jak pro otevření tak zavření je nutné odzkoušet pro hodnotu otevření pak stačí hodnota 170°, hodnotu pro zavření postupně snižujeme od hodnoty 170° až dostaneme čelisti k sobě. Pokud by jsme pro hodnotu zavření čelistí zadali malou hodnotu tak časem zničíme servo, protože servo nemůže tuto hodnotu nikdy dosáhnout když jsou čelisti u sebe. Při hodnotě zavření například 160° a zadaná hodnota by byla například 40°. Po dokončení robotického ramene jsem byl nucen opět demontovat otočnou podestu ramen namontovanou na hřídelce serva č.1, z důvodu velkých výkyvů ramen a nestability celku čímž by došlo k brzkému zničení serva č.1 a pohyb ramen byl nestabilní. Po demontáži jsem ze zbytků od použitých dílů ramene odřízl čtyři kusy plastových proužků upravil dle potřebné délky a tyto nalepil pomocí EPOXYDU na podestu s namontovaným servem č.1, po vytvrzení lepidla jsem tyto dodatečné díly jemným pilníkem zarovnal tak aby pohyblivý díl nesoucí ramena po nasazení na hřídelku serva č.1 při otáčení nedrhnul, úprava je vyfocena zde v popisu. Vyrobené robotické rameno může být ovládáno ve dvou možnostech pro ovládání pouze v režimu automat tzv. vykonává pohyby pouze v naprogramovaném módu tak jak si jej naprogramujete, nebo může být řídící jednotka osazena společně s potenciometry a pak můžeme s použitým programem ovládat robotické rameno jak v módu automat tak v módu ručně kdy ovládáme ramena a čelisti pomocí potenciometrů. Připojení serv a potenciometrů je na přiložených obrázcích, vzhledem k tomu že je v pohybu vždy pouze jedno servo postačuje napájení serv z desky ARDUINO NANO která je napájena z regulovatelného zdroje napětím DC 9V/1A.
POPIS PROGRAMŮ
Programy jsou uloženy v adresáři PROGRAMY pro ARDUINO jsou celkem tři s názvy „ROBOTICKÉ RAMENO_AUT_RUČ, TEST_OVLÁDÁNÍ_SERV a AUTOMAT_ROBOTICKÉ_RAMENO“. Pro počítač je program ARDUINO.EXE jde o terminálový program pro komunikaci s mikroprocesory. Jde o velice jednoduché programy pro ovládání robotického ramene, všechny programy pro ARUINO NANO (UNO) při inicializaci nastavují servo č.1, servo č.2, servo č.3 do počáteční hodnoty 90° servo č.4 je nastaveno do polohy 170° otevřené čelisti. Program ROBOTICKÉ RAMENO_AUT_RUČ je určen dle volby vypínače automat – ručně na ovládání ramene tuto volíme před zapnutím napájení elektroniky, program AUTOMAT_ROBOTICKÉ:RAMENO ovládá rameno dle naprogramovaného režimu. Program TEST_OVLÁDÁNÍ_SERV je určen k oživení ramene a zjištění hodnot serv do kterých se mohou MAXIMÁLNĚ POHYBOVAT SERVA, součástí programu pro počítač ARDUINO.EXE je v adresáři i soubor PDF s popisem ovládání a zadávání hodnot.
OŽIVENÍ ROBOTICKÉHO RAMENE
Do ARDUINA nahrajeme program TEST_OVLÁDÁNÍ_SERV připojíme serva dle nákresu zde v popisu, servo č.1 připojíme na datový PIN D2, servo č.2 připojíme na datový PIN D5, servo č.3 připojíme na datový PIN D3 a servo č.4 připojíme na datový PIN D4. Pokud máme osazeny i potenciometry pro ruční ovládání TYTO ZATÍM NEPŘIPOJUJEME K ARDUINO IO SHIELDU, na počítači spustíme program ARDUINO.EXE dle návodu zadáme parametry komunikační sériový port COM, komunikační rychlost pokud je jiná než 9600Bd a spustíme komunikaci. Nyní zapneme napájení ARDUINA a serva č.1, č.2, č.3 se po inicializaci nastaví sama do výchozích poloh 90° a servo čelistí do polohy 180° čelisti otevřeny. Nyní v textovém okně sériového terminálu Arduino.exe pro odesílání dat zadáme hodnoty 90,100,100,180 a kliknutím na tlačítko odeslat je odešleme do ARDUINA servo č.1 zůstane v poloze 90, servo č.2 se přesune do polohy 100, servo č.3 se také přesune do polohy 100, a servo č.4 zůstane ve stejné poloze. V okně příjem dat textového editoru se postupně zobrazí zadané hodnoty, hodnoty odeslané tak přijaté je možné si uložit pro pozdější zadání hodnot v programech ROBOTICKÉ RAMENO_AUT_RUČ, i v programu AUTOMAT_ROBOTICKÉ:RAMENO pokud již zadané hodnoty poloh serv bude nutno upravit dle hodnot zjištěných při oživování. Hodnoty v pořadí ovládají serva první zadaná hodnota ovládá servo č.1 podesta ramene, druhá hodnota ovládá servo č.2 „zadní rameno“, třetí zadaná hodnota ovládá servo č.3 „přední rameno“ a čtvrtá hodnota ovládá servo č.4 otvírání – zavírání čelistí. Postupným zadáváním hodnot zjistíme krajní polohy všech serv HODNOTY PRO SERVA ZADÁVÁME V MENŠÍCH HODNOTÁCH PROTOŽE SE SERVA POHYBUJÍ RYCHLE. Stejně postupujeme při zadávání jiných hodnot pro automatický režim což je pak již programování robotického ramene. Po odzkoušení funkčnosti ramene vypneme napájení ramene ukončíme program na počítači ARDUINO.EXE a k ARDUINO IO SHIELDU připojíme potenciometry u kterých pak otočíme hřídelky do ¼ od krajního vývodu „G“. Do ARDUINA nahrajeme program ROBOTICKÉ RAMENO_AUT_RUČ a přepnutí vypínače do polohy ručně, můžeme pomalým otáčením hřídelek potenciometrů ovládat serva. Potenciometr č.1 je připojen ke vstupu A0 a ovládá servo č.1 otáčení podesty, potenciometr č.2 je připojen ke vstupu A1 a ovládá servo č.2 zadní rameno, potenciometr č.3 je připojen ke vstupu A2 a ovládá servo č.3 přední rameno a potenciometr č.4 je připojen ke vstupu A3 a ovládá servo č.4 čelisti. Pokud není potřeba měnit parametry krajních poloh serv v části programu ROBOTICKÉ RAMENO_AUT_RUČ pro automatický režim a je možné rameno provozovat s již zadanými hodnotami pak vypneme napájení ARDUINA a vypínač volby automat – ručně přepneme do polohy automat a odzkoušíme i tuto funkci tím je oživení ukončeno a další provoz je již individuální.

Program pro Arduino:
/* Program na odzkoseni ovladani serv * robotickeho ramene a zjisteni hodnot * pro pohyb serv. * mojeelektronika.mzf.cz * vagnervlastimil@seznam.cz */ #include <Servo.h> // prihrani knihovny pro ovladani serv Servo Servo1, Servo2, Servo3, Servo4; // nadefinovani jmen a poctu serv int pozice1 = 90; // promenna pro hodnotu pozice serva1 int pozice2 = 90; // promenna pro hodnotu pozice serva2 int pozice3 = 90; // promenna pro hodnotu pozice serva3 int pozice4 = 180; // promenna pro hodnotu pozice serva4 void setup() { // Setup Serial.begin(9600); // nastaveni komunikacni rychlosti Servo1.attach(2); // Servo1 pripojeno na datovy pin D2 Servo2.attach(5); // Servo2 pripojeno na datovy pin D5 Servo3.attach(3); // Servo3 pripojeno na datovy pin D3 Servo4.attach(4); // Servo4 pripojeno na datovy pin D4 Servo1.write(pozice1); // odeslani hodnoty pozice1 do serva1 delay(50); // casova prodleva Servo2.write(pozice2); // odeslani hodnoty pozice2 do serva2 delay(50); // casova prodleva Servo3.write(pozice3); // odeslani hodnoty pozice3 do serva3 delay(50); // casova prodleva Servo4.write(pozice4); // odeslani hodnoty pozice4 do serva4 delay(50); // casova prodleva } // konec funkce Setup void loop() { // zacatek hlavni smycky programu if (Serial.available() > 0) { // testuje se vstup zda prisli data pozice1 = Serial.parseInt(); // prvni nactena hodnota se ulozi do pozice1 pozice2 = Serial.parseInt(); // druha nactena hodnota se ulozi do pozice2 pozice3 = Serial.parseInt(); // treti nactena hodnota se ulozi do pozice3 pozice4 = Serial.parseInt(); // ctvrta nactena hodnota se ulozi do pozice4 delay(20); // casova prodleva Servo1.write(pozice1); // odeslani nactene hodnoty do serva1 delay(50); // casova prodleva Servo2.write(pozice2); // odeslani nactene hodnoty do serva2 delay(50); // casova prodleva Servo3.write(pozice3); // odeslani nactene hodnoty do serva3 delay(50); // casova prodleva Servo4.write(pozice4); // odeslani nactene hodnoty do serva4 delay(50); // casova prodleva Serial.print("Pozice serva_1 = "); // zobrazeni popisu pozice serva_1 na PC Serial.println(pozice1); // zobrazeni nactene hodnoty pozice1 na PC Serial.print("Pozice serva_2 = "); // zobrazeni popisu pozice serva_2 na PC Serial.println(pozice2); // zobrazeni nactene hodnoty pozice2 na PC Serial.print("Pozice serva_3 = "); // zobrazeni popisu pozice serva_3 na PC Serial.println(pozice3); // zobrazeni nactene hodnoty pozice3 na PC Serial.print("Pozice serva_4 = "); // zobrazeni popisu pozice serva_4 na PC Serial.println(pozice4); // zobrazeni nactene hodnoty pozice4 na PC } // konec smycky IF delay(3000); // casova prodleva pred dalsim nacitanim a pohybem serv } // konec hlavni smycky
Bližší informace:
- Vagnervlastimil@seznam.cz