Áttekintés
A Motorshield kit egyike a legkedveltebb Adafruit készleteknek, így a cégnél az eredeti verzió fejlesztése mellett döntöttek. A javított panel (v2) a DC és a léptető motorok még könnyebb, még egyszerűbb működtetését teszi lehetővé, kiváló alap bármilyen robotikai projekthez. A panel alaptulajdonsága, a 4 db. DC illetve a 2 db. léptetőmotor vezérlési lehetősége megmaradt, de történt több fejlesztés is:
- az eredeti L293 darlington meghajtót a TB6612 mosfet vezérlő váltotta fel, ami 1,2A-t, (csúcsban, rövid időre, kb. 20ms-ig 3A-t) szolgáltat alacsony feszültségesés mellett, így a motorok nagyobb nyomatékot szolgáltatnak.
- beépített védődiódák
- az Arduino PWM kimenete helyett dedikált PWM áramkör a panelen
- a motorok sebesség és egyéb paramétereinek vezérlése I2C buszon keresztül
- kompatibilitás különböző Arduino típusokkal, pl. Uno, Leonardo, Due, Mega R3
- moduláris felépítés, a választható címzésnek köszönhetően (5bit) akár 32db. motorvezérlő panel használható egyszerre, így maximálisan 64 léptető vagy 128 DC motor vezérlése oldható meg
- polaritás védelem, fejlesztett prototípus építő terület a panelen
A panel főbb paraméterei:
- két csatlakozó 5V-os „hobby” szervomotorok számára (vezérlés az Arduino precíziós nagyfelbontású időzítőjéről)
- 4db H-híd: TB6612-es lapkakészlet, 1,2A állandósult, 3A (20ms) csúcsterhelhetőség mellett, beépített hővédelem, illetve önindukciós hatást védő diódák. Működési feszültség: 4,5V – 13,5V
- 4db kétirányú DC motor, 8-bites sebesség beállítási lehetőség motoronként. (0,5%-os felbontás)
- 2db léptetőmotor (unipoláris vagy bipoláris) single coil, double coil illetve interleaved vagy micro-step üzemmód)
- a motorok alaphelyzetben tiltva a táp bekapcsolásakor
- csavaros sorkapcsok a motorok illetve a tápfeszültség egyszerű csatlakoztathatóságának érdekében (18-26AWG)
- Arduino reset gomb a panelon
- Polaritás védett sorkapocs és beállító-jumper a független külső tápfeszültség bekötéséhez
- kompatibilitás: Arduino UNO, Leonardo, ADK/Mega R3, Diecimila és Duemilanove. Due 3.3v-ra jumperelve. Mega/ADK R2 és a korábbi változatok, 2 vezetékes jumpereléssel.
- Arduino szoftverkönyvtár példaprogramokkal
Összeszerelés – csatlakozók és sorkapcsok beforrasztása

A panelhez a szokásos tüskesort adja a gyártó, ezzel megoldható az arduino-hoz történő csatlakoztatás, de amennyiben több motorvezérlőt szeretnénk használni, akkor ne ezt a fajta csatlakozósávot forrasszuk be!
Tüskesor beforrasztása
Az első lépés a tüskesor előkészítése, ehhez használhatunk pl. egy Arduino Uno-t a kép alapján:


A tüskesorra helyezzük rá a motorvezérlő panelt:

Majd forrasszuk be a kiálló tüskéket:

Az elkészült motorvezérlő panel:

A külön vásárolható, speciális Arduino csatlakozósávval megoldható több motorvezérlő alkalmazása:

Adafruit Motor Shield V2 library telepítése
Ahhoz, hogy az eszközt használni tudjuk, telepítenünk kell a szükséges library-t. A telepítést az Arduino IDE programban tudjuk elvégezni.
Az első lépés a Vázlat menüpont Könyvtár tartalmazása menüpontjának Könyvtárak kezelése pontját kiválasztani:

A felugró panelon gépeljük be az Arduino motor shield megnevezést, majd a betöltődő eredmények közül válasszuk az Arduino Motor Shield V2 library-t!

Miután az elem mellett megjeleneik az INSTALLED felirat, a Fájl – Példák menüpont alatt elérhetővé válnak a motorvezérlő panel mintaprogramjai:

Tápfeszültség ellátás:
A motorok nagy áramfelvételű fogyasztók, így csatlakoztatásuk előtt fontos, hogy tisztában legyünk áramfelvétel/tápfeszültség paramétereikkel!
Fontos adat, hogy a motorvezérlő panel 5V-12V közötti tápfeszültséggel működő motorokhoz készült. A panel vezérlő chip-jei motoronként 1,2A-t szolgáltatnak, rövid időre, csúcsértékben (20msec) 3A leadására képesek. Ha az üzemeltetendő motor áramfelvétele pl. tartósan 2A, a vezérlő áramkörök melegedni fognak, megfelelő hűtés nélkül tönkremehetnek!
A motorok nem működtethetőek 9V-os elemről!
Szervók:
A szervók tápellátása megoldható az Arduino stabilizált 5V-os tápellátásáról, így működtethetőek akár a panel USB, akár a beépített hengeres tápcsatlakozójáról!
DC és léptetőmotor:
Ezek a motorok nagy áramfelvétellel és általában 5V-nál nagyobb tápfeszültséggel működnek, így működtetésük nem ajánlott az Arduino stabilizált 5V-os tápjáról!
Két megoldás is kínálkozik a motorok megfelelő tápellátására:

A DC barrel jack csatlakozó védő-diódával, a sorkapocs FET védelemmel van ellátva, így fordított polaritás esetén sem az Arduino, sem a vezérlőpanel nem sérül.
Egyszeres tápellátás:
Ha a tápellátást egy 6-12V DC kimenetű fali adapterrel vagy elem-csomaggal (battery pack) akarjuk megoldani, akkor egyszerűen csatlakoztassuk az adaptert az Arduino táp-csatlakozójába, vagy a táp-sorkapocsba és használjuk a jumper rövidzárat. Elem esetén ne a kis teljesítményű 9V-os elemet, hanem 4 – 8 AA elemet használjunk.
Megjegyzés: amennyiben a tápellátás nem stabilizált, az Arduino panelnél reset problémák léphetnek fel a tápfeszültség ingadozása miatt.
Független tápellátás:
Az Arduino az USB csatlakozóján, a motorok a sorkapcson keresztül kapnak tápellátást. Ebben az esetben ne alkalmazzuk a jumper rövidzárat! Ilyenkor a szétválasztott táplálás következtében a motor és a vezérlő logika táplálása független egymástól.
A másik függetlenített tápellátási megoldás, ha az Arduino az un. DC barrel jack-en (a hengeres tápcsatlakozó) keresztül, a motorok pedig a sorkapcson keresztül kapnak ellátást. Ebben az esetben se alkalmazzuk a jumper rövidzárat!
Függetlenül a tápellátás módjától elmondható, hogy megfelelő bekötés esetén a panel zöld színű táp LED-je világítani fog!

Szervó motorok használata:

A kis méretű, un. hobby szervók használata nagyon egyszerű, kössük őket a panel háromtűs csatlakozójának valamelyikére és már indítható is a program. A panel az Arduino 9-es illetve 10-es kimenetét használja a szervók működtetésére, programunkban ezekre a lábakra hivatkozzunk! A tápellátás az USB portról, vagy a DC jack csatlakozóról történhet.
Amennyiben külső tápellátás szükséges, vágjuk át a tápvonalat a panel hátoldalán, és a szervókat az Opt Servo feliratú jumperen keresztül lássuk el tápfeszültséggel. Ezt a megoldást azonban csak megfelelő ismeretek birtokában lévők válasszák!
Példaprogram:
/*
This is a test sketch for the Adafruit assembled Motor Shield for Arduino v2
*/
#include <servo.h>
Servo myservo; // servo objektum létrehozása
int pos = 0; // változó létrehozása a servo pozíció tárolásához
void setup() {
myservo.attach(9); // vezérlő kimenet (pin) beállítása
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // 0 fok- tól 180 fok-ig
// in steps of 1 degree
myservo.write(pos); // servo 'pos' fok-ba állítása
delay(15); // 15 ms várakozás
}
for (pos = 180; pos >= 0; pos -= 1) { // 180 fok- tól 0 fok-ig
myservo.write(pos); // servo 'pos' fok-ba állítása
delay(15); // 15 ms várakozás
}
}
DC motorok használata:
A DC motorok talán a legelterjedtebben alkalmazott eszközök a különböző robotikai projektekben. A vezérlő panel maximálisan négy darab DC motor vezérlésére alkalmas, mindkét forgási irányban. A motorok sebessége 0,5% pontossággal szabályozható, ez nagyon finom és pontos beállítást tesz lehetővé!
Motorok csatlakoztatása:
A motorok csatlakoztatása nagyon egyszerű, vezetékeiket kössük a panel M1, M2, M3, illetve M4 jelzésű sorkapcsaihoz.
Példaprogram:
/*
This is a test sketch for the Adafruit assembled Motor Shield for Arduino v2
*/
#include <Wire.h>
#include <Adafruit_MotorShield.h>
// motor shield objektum létrehozása az alap I2C címen
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// egyéb I2C cím beállítása:
// Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61);
// DC motor 'port' kiválasztása: M1, M2, M3 or M4. A mintaprogramban: M1
Adafruit_DCMotor *myMotor = AFMS.getMotor(1);
// egyéb motor'port' beállítása:
//Adafruit_DCMotor *myOtherMotor = AFMS.getMotor(2);
void setup() {
Serial.begin(9600); // soros port beállítása
Serial.println("Adafruit Motorshield v2 - DC Motor test!");
AFMS.begin(); // frekvencia beállítás: 1.6KHz
//AFMS.begin(1000); // eltérő frekvencia megadása, pl.: 1KHz
// sebesség beállítás 0 (min) és 255 (max) között:
myMotor->setSpeed(150);
myMotor->run(FORWARD);
//
myMotor->run(RELEASE);
}
void loop() {
uint8_t i;
Serial.print("tick");
myMotor->run(FORWARD);
for (i=0; i<255; i++) {
myMotor->setSpeed(i);
delay(10);
}
for (i=255; i!=0; i--) {
myMotor->setSpeed(i);
delay(10);
}
Serial.print("tock");
myMotor->run(BACKWARD);
for (i=0; i<255; i++) {
myMotor->setSpeed(i);
delay(10);
}
for (i=255; i!=0; i--) {
myMotor->setSpeed(i);
delay(10);
}
Serial.print("tech");
myMotor->run(RELEASE);
delay(1000);
}
Léptető motorok használata:
A léptető motorok gyakori alkatrészei a különböző robotikai illetve CNC projekteknek. A vezérlő panel két motor vezérlésére alkalmas. A telepített programkönyvtár egyaránt használható unipoláris illetve bipoláris motorok esetében is.
Ötvezetékes unipoláris motorok esetén a középső tekercs kivezetést a sorkapocs GND pontjához kell kötni, míg a négyvezetékes bipoláris motoroknál a középső kivezetés elmarad. A vezérlésre használandó kód azonos lehet.
Az alábbi mintaprogram a léptető motor négy lehetséges üzemmódját teszteli:
single coil: lépésenként egy tekercs aktív
double coil: egyszerre két tekercs aktív, nagyobb a nyomaték
interleave coil: felváltva használja a fenti üzemmódokat, dupla felbontás, fél sebesség
microstep: a vezérlés PWM-el történik a lépések közötti lágy átmenet elérése érdekében
Példaprogram:
/*
This is a test sketch for the Adafruit assembled Motor Shield for Arduino v2
*/
#include <Wire.h>
#include <Adafruit_MotorShield.h>
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// csatlakoztatás az alapértelmezett I2C címre, eltérő esetben adjuk meg a címet:
// Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61);
// léptető motor csatlakoztatás 200 lépés per fordulat (1.8 fok)
// portcím: #2 (M3 és M4)
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);
void setup() {
Serial.begin(9600);
Serial.println("Stepper test!");
AFMS.begin();
myMotor->setSpeed(10); // 10 rpm
}
void loop() {
Serial.println("Single coil steps");
myMotor->step(100, FORWARD, SINGLE);
myMotor->step(100, BACKWARD, SINGLE);
Serial.println("Double coil steps");
myMotor->step(100, FORWARD, DOUBLE);
myMotor->step(100, BACKWARD, DOUBLE);
Serial.println("Interleave coil steps");
myMotor->step(100, FORWARD, INTERLEAVE);
myMotor->step(100, BACKWARD, INTERLEAVE);
Serial.println("Microstep steps");
myMotor->step(50, FORWARD, MICROSTEP);
myMotor->step(50, BACKWARD, MICROSTEP);
}
A forráskódok letölthetőek:
A cikkben használt A1438 Motor/Stepper/Servo Shield for Arduino v2 Kit, megvásárolható a MálnaPC Webshopjában a Léptetőmotorral, a DC motorral és a szervomotorral együtt!