VOZÍTKO S MECANUM OMNI KOLY

Vágner Vlastimil

     Po sestavení první stavebnice vozítka s obyčejnými koly řízené pomocí Arduino Nano a motorového driveru s L298, jsem se rozhodl pro stavbu vozítka s Mecanum Omni koly. Použil jsem Mecanum Omni kola o průměru 80mm, ovládání vozítka je s  Arduno Uno a motorového driveru s IO 74HC595 a dvěma IO L293D, řízení je jako v první variantě podvozku pomocí tabletu s aplikací sériového terminálu pro Android s bluetooth na vozítku.

POUŽITÝ PODVOZEK PRO VOZÍTKO

     Pro použití uvedených kol je možné použít jak stavebnici „podvozku se 4 koly, nebo stavebnici robotického podvozku“, součástí první stavebnice jsou čtyři motory osazené na převodovku s obyčejnými koly, druhá stavebnice také obsahuje podvozek se čtyři motory osazených na převodovku s Mecanum Omni koly. Pokud se použijí Mecanum Omni kola o průměru 60mm je možné bez úpravy použít pro stavbu vozítka podvozek se čtyřmi obyčejnými koly. V případě použití Mecanum Omni kol o průměru 80mm je nutné provést úpravu podvozku, při použití stavebnice robotického podvozku nejsou pro stavbu vozítka nutné žádné úpravy. Já jsem použil vytištěný díl podvozku na 3D tiskárně podle první varianty stavebnice a upravil podvozek tak že výstupy na bocích podvozku byli odstraněny. V obou případech stavby vozítka ze zvoleného podvozku je možné pouhou výměnou kol a změnou zadání parametrů v programu využít jeden podvozek pro oba typy kol. Podvozek vozítka si označíme a toto označení bude značit směr jízdy vpřed. 

ŘÍDÍCÍ  JEDNOTKA  A  MOTOROVÝ DRIVER

     Pro ovládání motorů je použit modul s Arduino Uno a motorový driver s L293D. Ovládání uvedených IO L293D je posuvným registrem 74HC595, uvedený motorový driver je osazen na Arduino Uno tak že je tento plně využit pro ovládání posuvného registru. Zbývající dva piny D2 a D13 jsou použity pro komunikaci s tabletem nebo chytrým telefonem a na uvedených pinech jsou doplněny dva dutinkové konektory. Napájení motorového driveru, i Arduino Uno je ze dvou článků Li-Ion zapojených do série o celkovém napětí 8.2V. Napájení Arduino je z motorového driveru kde necháme ponechán Jumper na propojce pro napájení Arduino Uno. Modul Arduina je namontován na destičku z plexiskla a celek je namontován na horní díl podvozku, v destičce jsou osazeny dvě gumové průchodky o průměru 6mm pro vodiče napájející motory. Napájecí baterie Li-Ion jsou uchyceny k hornímu dílu podvozku pomocí nalepovacího suchého zipu. Výstupy QA, QB, QC, QD, QE, QF, QG, QH posuvného registru ovládají vstupy motorových driverů IO L293D  výstupy QC a QD ovládají motor označený M1 výstup QC=P1(+) svorkovnice X1, výstup QD= P2 svorkovnice X1. Výstupy QE a QB ovládají motor označený M2 výstup QE=P5(+) svorkovnice X1, výstup QB=P4 svorkovnice X1, výstupy QH a QF ovládají motor M3 výstup QH=P1(+) svorkovnice X2, výstup QF=P2 svorkovnice X2. Výstupy QG a QA ovládají motor M4, výstup QA=P5(+) svorkovnice X2, výstup QG=P4 svorkovnice X2. Ovládání PWM motoru M1 je z PINU11 Arduina, PWM motoru M2 je z PINU3 Arduina, PWM motoru M3 je z PINU6 Arduina, PWM motoru M4 je z PINU5 Arduina. Výstupu 74HC595 QA odpovídá hodnota „1“, výstupu QB odpovídá hodnota „2“, výstupu QC odpovídá hodnota „4“. Výstupu QD odpovídá hodnota „8“, výstupu QE odpovídá hodnota „16“, výstupu QF odpovídá hodnota „32“, výstupu QG odpovídá hodnota „64“, výstupu QH odpovídá hodnota „128“.

PŘIPOJENÍ A OVLÁDÁNÍ MOTORŮ

     Ovládání všech čtyř motorů je ze dvou IO L293D PWM pro řízení otáček je přímo z pinů Arduino Uno. IO1 ovládá motory označené M1 a M2 vývody z IO1  L293 jsou zakončeny ve svorkovnici označené X1, motor M1 se připojuje do svorek označených P1 a P2. Do svorek P4 a P5 se připojuje motor M2 svorka označená P3 je trvale spojena s GND (-) a je nepoužitá, IO2 L293D ovládá motory označené M3 a M4 připojené do svorkovnice označené X2. Motor označený M3 se připojuje do svorek označených P1 a P2. Do svorek označených P4 a P5 se připojuje motor označený M4, svorka označená P3 je trvale spojena s GND (-) a je nepoužitá. Před osazením motorů na podvozek si je označíme M1, M2, M3, M4 a odzkoušíme je  aby se při pohybu vpřed točily stejnou rychlostí a stejným směrem „nectností použitých motorů je to že se jedním směrem točí pomaleji“. Po odzkoušení motorů a směru otáčení pro pohyb vpřed si na motorech  označíme kde bude připojen kladný pól napájení (+) a na vývody napájení motorů přiletujeme vodiče o délce tak aby stačili pro připojení do motorového driveru. Po namontování motorů na podvozek s naletovanými vodiči nasadíme na převodovky Mecanum Omni kola jedno kolo označené „L“ nasadíme na levé straně podvozku na motor označený M1 a druhé kolo označené také „L“ nasadíme na převodovku motoru označeného M3 na pravé straně podvozku. Jedno kolo označené „R“ nasadíme na převodovku motoru M4 na pravé straně podvozku vpředu ve směru jízdy vpřed, druhé kolo označené „R“ nasadíme na převodovku motoru označeného M2 na levé straně podvozku, při nasazování kol si druhý vývod z převodovky podržíme tak aby se dalo kolo nasadit a nezničili jsme převodovky „ kola jdou ztuha nasadit“ nákres osazení kol je na Obr.č.03. Kladný napájecí vodič motoru M1 je připojen do svorkovnice X1 a svorky P1, záporný napájecí vodič motoru M1 je připojen do svorkovnice X1 svorky P2, kladný napájecí vodič motoru M2 je připojen do svorkovnice X1 svorky P5 a záporný napájecí vodič motoru M2 je připojen do svorkovnice X1 svorky P4. Kladný napájecí vodič motoru M3 je připojen do svorkovnice X2 svorky P1 a záporný napájecí vodič motoru M3 je připojen do svorkovnice X2 svorky označené P2. Kladný napájecí vodič motoru M4 je připojen do svorkovnice X2 svorky P5 a záporný napájecí vodič motoru M4 je připojen do svorkovnice X2 svorky P4 nákres připojení motorů je na Obr.č.01. PŘIPOJENÍ MOTORŮ JE NUTNÉ DODRŽET Z DŮVODU PROGRAMOVÉHO OVLÁDÁNÍ MOTORŮ.

SÉRIOVÝ TERMINÁL ANDROID A ZADÁVÁNÍ HODNOT

     V sériovém terminálu vypneme příkazy CR a LF dále jsou v programu předvoleny tlačítka M1 až M10 po jejichž rozkliknutí je možné zadat hodnoty pro ovládání motorů. V mém případě je rozvrženo M1 – jízda vpřed, M2 – jízda rovně vpravo, M3 – jízda vzad, M4 – jízda rovně vlevo, M5 – jízda šikmo vpravo vpřed. M6 – jízda šikmo vlevo vpřed, M7 – jízda šikmo vpravo vzad, M8 – jízda šikmo vlevo vzad, M9 – otočení kolem osy a M10 – stop motorů pro všechny směry.  Sériový terminál komunikuje a Arduino pomocí bluetooth JDY-32 pro komunikaci je nutno vyrobit převodník napěťových úrovní podle Obr.č.02 tento je vyrobený na univerzální vrtané destičce. napájení bluetooth je z desky motorového driveru kde je osazen dvou vývodový konektor na vývodech DPS (+) a (-). V terminálu zadáváme celkem pět hodnot první hodnota je součet hodnot výstupů které mají  být sepnuty pro požadovaný pohyb vozítka, druhá zadávaná hodnota je hodnota PWM pro motor M1, třetí zadávaná hodnota je hodnota PWM pro motor M2, čtvrtá zadávaná hodnota je hodnota PWM pro motor M3, pátá zadávaná hodnota je hodnota PWM pro motor M4. „Příklad vozítko má jet vpřed zadáváme hodnota pro posuvný registr je 149,200,200,200,200“. Jízda vpřed šikmo vpravo zadáváme hodnoty 132,120,0,120,0. Všechny směry pohybu vozítka i s nákresem směru otáčení motorů jsou na Obr.č.04, Obr.č.05, Obr.č.06. Stejně postupujeme při výpočtu hodnot pro posuvný registr 74HC505 při ovládání vozítka osazeného obyčejnými koly

PROGRAM ARDUINO

       Program využívá pouze jednu knihovnu pro komunikaci sériovým portem, která je součástí programovacího prostředí IDE pro Arduino.

/* Program pro ovladani ctyr motoru s radicem L293D s 74HC595
 * pro ovladani auticka s Mecanum Omni-koly nebo obycejnymi 
 * zadavani volby chodu motoru, smeru otaceni a rychlosti je z tabletu 
 * nebo telefonu terminalem pro seriovou komunikaci. 
 * vagnervlastimil@seznam.cz
 * www.mojeelektronika.mzf.cz
 */
#include <SoftwareSerial.h>   // prihrani knihovny pro komunikaci s bluetooth
SoftwareSerial BT(2,13);      // nastaveni komunikacnich pinu PIN2 RXD, PIN13 TXD na Arduninu
#define potvrd 12             // PIN12 DPS Arduino UNO potvrzeni dat PIN 12 RCLK 74HC595 
#define clk 4                 // clk PIN4 DPS Arduino UNO takt pro posun bitu PIN 11 74HC595 
#define data 8                // PIN8 DPS Arduino UNO seriovy vstup dat do 74HC595 PIN 14 
#define prvnimotor 11         // vystupni pin11 ANALOGWRITE ARDUINO ENABLE MOTOR1,INPUT1 IO1 PWM
#define druhymotor 3          // vystupni pin3 ANALOGWRITE ARDUINO ENABLE MOTOR2,INPUT2 IO1 PWM 
#define tretimotor 6          // vystupni pin6 ANALOGWRITE ARDUINO ENABLE MOTOR3,INPUT1 IO2 PWM
#define ctvrtymotor 5         // vystupni pin5 ANALOGWRITE ARDINO ENABLE MOTOR4,INPUT2 IO2 PWM
#define povolit 7             // vystupni pin7 vstup 13 74HC595 ovlada vstup OE 
int hodnota;                  // definovani promenne pro data do 74HC505
int pwm1, pwm2, pwm3, pwm4;   // promenne pro hodnoty PWM
// promenne hodnota, PWM1 motor1, PWM2 motor2, PWM3 motor3, PWM4 motor4 

void setup() {                       // zadani parametru
BT.begin(9600);                      // nastaveni pro komunikaci Arduina s bluetooth
pinMode(potvrd, OUTPUT);             // nastaveni PINU 3 na vystup
pinMode(clk, OUTPUT);                // nastaveni PINU 4 na vystup 
pinMode(data, OUTPUT);               // nastaveni PINU 2 na vystup
pinMode(prvnimotor, OUTPUT);         // vystup PWM motoru1
pinMode(druhymotor,OUTPUT);          // vystup PWM motoru2
pinMode(tretimotor,OUTPUT);          // vystup PWM motor3
pinMode(ctvrtymotor,OUTPUT);         // vystup PWM motor4
pinMode(povolit,OUTPUT);             // vstup 13 OE 74HC595 povoli zapis pri LOW
digitalWrite(povolit,LOW);           // vypnuti vystupu pro ovladani vstupu OE 74HC595
delay(20);                           // casova prodleva po nastaveni OE13 na LOW
digitalWrite(potvrd, LOW);           // nastaveni potvrzeni dat na LOW umozni zapis dat
delay(10);                           // casova prodleva po vypnuti vstupu OE
shiftOut(data,clk,MSBFIRST,0);       // odeslani dat do 74HC595
delay(10);                           // casova prodleva
digitalWrite(potvrd,HIGH);           // zapnuti pinu potvrzeni dat  
analogWrite(prvnimotor,0);           // hodnota pro otacky prvniho motoru 
analogWrite(druhymotor,0);           // hodnota pro otacky druheho motoru 
analogWrite(tretimotor,0);           // hodnota pro otacky tretiho motoru
analogWrite(ctvrtymotor,0);          // hodnota pro otacky ctvrteho motoru
delay(500);                          // casova prodleva pro vypnuti motoru
}

void loop(){                         // hlavni program
if (BT.available() > 0){             // testovani vstupu zda prisli data   
smer();                              // zavolani prodprogramu pro vypnuti motoru
hodnota=BT.parseInt();               // nacteni hodnoty pro 74HC595 a ulozeni do promenne cti.
pwm1=BT.parseInt();                  // nacteni hodnoty pro prvni motor PWM
pwm2=BT.parseInt();                  // nacteni hodnoty pro druhy motor PWM
pwm3=BT.parseInt();                  // nacteni hosnoty pro treti motor PWM
pwm4=BT.parseInt();                  // nacteni hodnoty pro ctvrty motor PWM
digitalWrite(potvrd, LOW);           // nastaveni potvrzeni dat na LOW umozni zapis dat
delay(10);                           // casova prodleva po vypnuti vstupu OE
shiftOut(data,clk,MSBFIRST,hodnota); // odeslani dat do 74HC595
delay(10);                           // casova prodleva
digitalWrite(potvrd,HIGH);           // zapnuti pinu potvrzeni dat
analogWrite(prvnimotor, pwm1);       // hodnota pro otacky prvniho motoru 
analogWrite(druhymotor, pwm2);       // hodnota pro otacky druheho motoru 
analogWrite(tretimotor, pwm3);       // hodnota pro otacky tretiho motoru
analogWrite(ctvrtymotor, pwm4);      // hodnota pro otacky ctvrteho motoru
BT.print("74HC595 : ");              // odeslani "hodnoty :" do terminalu v PC
BT.println(hodnota);                 // odeslani nactene hodnoty v promenne "hodnota" do terminalu v PC
BT.print("prvni motor : ");          // cislo motoru
BT.println(pwm1);                    // hodnota pro PWM prvni motor
BT.print("druhy motor : ");          // cislo motoru
BT.println(pwm2);                    // hodnota pro PWM druhy motor
BT.print("treti motor : ");          // cislo motoru
BT.println(pwm3);                    // hodnota pro PWM treti motor
BT.print("ctvrty motor : ");         // cislo motoru
BT.println(pwm4);                    // hodnota pro PWM ctvrty motor
BT.println();                        // odradkovani na dalsi radek
  } 
}

void smer(){                         // podprogram
digitalWrite(potvrd, LOW);           // nastaveni potvrzeni dat na LOW umozni zapis dat
delay(10);                           // casova prodleva po vypnuti vstupu OE
shiftOut(data,clk,MSBFIRST,0);       // odeslani dat do 74HC595
delay(10);                           // casova prodleva
digitalWrite(potvrd,HIGH);           // zapnuti pinu potvrzeni dat  
analogWrite(prvnimotor,0);           // hodnota pro otacky prvniho motoru 
analogWrite(druhymotor,0);           // hodnota pro otacky druheho motoru 
analogWrite(tretimotor,0);           // hodnota pro otacky tretiho motoru
analogWrite(ctvrtymotor,0);          // hodnota pro otacky ctvrteho motoru
delay(200);                          // casova prodleva pro vypnuti motoru
}                                    // konec smycky 

Horní díl podvozku s označeným směru jízdy vpřed

Motorový driver s osazenými konektory pro komunikaci

Osazený modulu Arduino s motorovým driverem na horním dílu podvozku

Osazené motory na spodním dílu podvozku s naletovanými napájecími vodiči motorů

Sestavený podvozek vozítka

Detailní pohled na motorový driver

Boční pohled na vozítko

Sdílet článek

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Mohlo by se také líbit