GOduino III - skärbräda-vänlig Arduino-baserad robot controller (2 / 6 steg)
Steg 2: Kontrollera 2 borstad DC motorer
GOduino III använder L293D h-bron (motor förare) som är en robust och billig dopp IC som förenklar kretsdesign. Det har inbyggt EMF skydd och termisk avstängning om motorer dra för mycket ström som kan också skada L293D.
En enda L293D kan styra 2 borstad DC motorer med peak/stall nuvarande upp till 600mA per motor. Topp/stall nuvarande är den nuvarande motorn drar när förhindras från att rotera medan fortfarande drivs.
Om du kombitrafik två L293D ICs, kan du dubbla strömmen av GOduino III till 1.2a per motor. Detta är mer än tillräckligt för att driva de flesta DC motorer för små robotar.
Pololu och Solarbotic, till exempel, ger ett brett urval av motorer som fungerar väl inom nuvarande betyg av L293D.
L293D logik krets drivs via GOduino III power regulator (7805) men den L293D motorstyrning krets drivs direkt från batteriet.
Varje motor drivs från L293D via en 2-polig hane rubrik (Motor 1 och Motor 2). Ordningen på ansluter en motor polacker till 2-stifts huvud beslutar rotationsriktningen av motorn. Du kan också ändra motor rotationsriktning från din Arduino skiss.
Tips: Löda en 0.1uF keramiska kondensator över polerna av din borstad likströmsmotor för extra krets stabilitet. Förkorta leder på kondensatorn så mycket som möjligt för bättre svar och för att undvika oavsiktliga elektriska shorts.
GOduino III: s ATmega328 stift mappas till L293D h-bryggan på detta sätt (med Arduino pin numreringssystem):
Motor 1 STOLPE1---> Arduino stift 4
Motor 1 stolpe 2---> Arduino stift 2
Motor 1 aktivera---> Arduion stift 5 (PWM)
Motor 2 STOLPE1---> Arduino stift 7
Motor 2 Pole2---> Arduino stift 8
Motor 2 aktivera---> Arduion stift 6 (PWM)
SOFTWARE LIBRARY
Jag skrev Goduino motor biblioteket för att eliminera behovet av att memorera höga, låga pin utgång sekvenser som krävs för att vända eller stoppa en motor.
Det finns 4 funktioner i Goduino motor biblioteket:
- motorSpeed (mot1speed, mot2speed) anger hastigheten för båda motorerna.
- motorStop(motorNum) stoppar en motor.
- motorForward(motorNum) snurrar en motor i en riktning.
- motorBack(motorNum) snurrar en motor i motsatt riktning.
PARAMETRAR
Det finns två 2-polig hane rubriker på GOduino III PCB: Motor 1 och Motor 2. Alla funktioner i Goduino biblioteket motor som tar en parameter, det är antingen 1 för Motor 1 eller 2 för Motor 2.
Den enda funktion som har två parametrar är funktionen motorSpeed(). Den första parametern anger hastigheten för Motor 1 och den andra anger hastigheten för Motor 2. Den maximala hastigheten är 1023. Detta innebär att din motor max hastighet kan ökas eller minskas med 1023 i taget.
GOduino III biblioteket och andra stödfiler kan laddas ner från Github:
https://github.com/techbitar/goduino
Du kan använda exempelkoden (motortest.ino) ingår i Goduino biblioteket under mappen exempel att testa och synkronisera motor rotationsriktningen. Videon visar den GOduino III Kör test rutin. Öppna från Arduino IDE:
Filer/exempel/Goduino/motortest
Obs: Jag har undvikit att använda Arduino Uno stift 3 och 11 eftersom de används av funktionen Arduino tone(). Så nu kan jag bygga en robot som gör ljud. (Applåder).
Detta är provet koden som används i videon. Kolla in min Github för uppdateringar och buggfixar:
/*
Fil: motortest.ino - exemplet skiss för att testa GOduino III robot controller.
Skapad av: Hazim Bitar (techbitar på gmail punkt com)
Datum: 23 augusti, 20012.
Version: 0.11 beta
Licens: Ut i offentligheten.
*/
#include < Goduino.h >
Goduino myrobot;
void setup() {
Serial.BEGIN(9600);
Serial.println ("inställda hastigheten av båda motorer till 100 (max 1024)");
myrobot.motorSpeed(50,50);
}
void loop() {
Serial.println ("TESTFAS I - snurra båda motorer tillsammans i samma riktning");
Delay(3000);
Serial.println ("Spin båda motorer i en riktning (3 SEK)");
myrobot.motorForward(1);
myrobot.motorForward(2);
Delay(3000);
Serial.println ("Stop båda motorer för 1 SEK");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
Serial.println ("Spin båda motorer i motsatt riktning (3 SEK)");
myrobot.motorBack(1);
myrobot.motorBack(2);
Delay(3000);
Serial.println ("Stop båda motorer för 1 SEK");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
//=================================================================================
Serial.println ("TEST fas II - snurra varje MOTOR OPPOSTE av andra");
Delay(3000);
Serial.println ("Spin motor 1 i en riktning medan motor 2 i motsatt riktning (3 SEK)");
myrobot.motorForward(1);
myrobot.motorBack(2);
Delay(3000);
Serial.println ("Stop båda motorer för 1 SEK");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
Serial.println ("Spin motor 2 i en riktning medan motor 1 i motsatt riktning (3 SEK)");
myrobot.motorBack(1);
myrobot.motorForward(2);
Delay(3000);
Serial.println ("Stop båda motorer för 1 SEK");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
//=================================================================================
Serial.println ("TEST fas III - snurra varje MOTOR medan andra stoppas");
Delay(3000);
Serial.println ("Spin motor 1 i en riktning medan motor 2 är stoppad (3 SEK)");
myrobot.motorForward(1);
myrobot.motorStop(2);
Delay(3000);
Serial.println ("Stop båda motorer för 1 SEK");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
Serial.println ("Spin motor 2 i en riktning medan motor 1 är stoppad (3 SEK)");
myrobot.motorForward(2);
myrobot.motorStop(1);
Delay(3000);
Serial.println ("Stop båda motorer för 1 SEK");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
Serial.println ("Spin motor 1 i omvänd riktning medan motor 2 är stoppad (3 SEK)");
myrobot.motorBack(1);
myrobot.motorStop(2);
Delay(3000);
Serial.println ("Stop båda motorer för 1 SEK");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
Serial.println ("Spin motor 2 i omvänd riktning medan motor 1 är stoppad (3 SEK)");
myrobot.motorBack(2);
myrobot.motorStop(1);
Delay(3000);
Serial.println ("Stop båda motorer för 1 SEK");
myrobot.motorStop(1);
myrobot.motorStop(2);
Delay(1000);
}