GOduino II = Arduino + L293D variabel hastighet Motor Controller
GOduino II var med på dangerousprototypes.com
07/04/2012 jag har lagt en budget bild för de läsare som undrade där jag fick min < $20 budget för GOduino II.
INTRODUKTION
GOduino II är en fristående programmerbar kontrollant för hjul-baserade robotar. Det är en Arduino Uno klon plus en L293D motor drivrutin för under $20. Kontrollerar både motor riktning och hastighet. Prototyp föregångaren till detta är GOduino, en grundläggande version av den här domänkontrollanten på en skärbräda. Jag kommer att upprätthålla uppdateringar till denna guide både här och på min blogg http://techbitar.blogspot.com
BAKGRUND
Jag har designat några grundläggande robotar med hjälp av Arduino Uno och motor sköldar. Båda är bra för prototyper. Men jag fann mig ta min robotar isär varje gång jag behövde för att bygga en annan robot. Det är inte kostnadseffektivt att köpa mer Arduino microcontrollers och motor sköldar för varje ny robot projekt.
Även i länder som Jordanien där den genomsnittliga månadsinkomsten är ca $300 och ett sanslöst hög tulltaxenummer som är fientligt inställd till teknik, det blir en nödvändighet för studenter och beslutsfattare att söka lokalt monterade låg kostnad, repareras alternativ till importerade elektroniska kretsar.
FUNKTIONER
Den GOduino II fungerar för 2 motorer bara, och lämnar gott om Arduino pins för sensorer. Detta är också min första från scratch pcb äventyr. Om du tittar på baksidan av GOduino II, kommer du se alla slags ledtrådar till min oerfarenhet. Och ja, jag är en programvara kille så detta är allt relativt nytt för mig. Du kommer att notera att några av mina rubriker har buck tänder. Jag hade ett par olyckor medan lödning. Min nästa version vilja bli snyggare.
Detta kanske inte är den senaste grejer men det gör jobbet för mig och min protospace medlemmar. Om det hjälper någon ute där, skicka mig en länk. Som alltid, om du se eventuella brister eller har förslag som kan göra detta en bättre design, vänligen dela dina tankar.
KREDIT
Detta projekt bygger på verk av så många goda föräldrar. Se referenser längst för några av de projekt som grunden för detta blygsamma PCB projekt.
RESERVDELSLISTA
OBJEKT ANTAL
Atmega328p w/Opti bootloader 1
L293D h-bro 1
16Mhz kristall 1
PCB 1
22pf mössor 2
100uF cap 1
10uF cap 2
0.1uF mössa 4
T7805 5V DC regulator 1
DOPPA uttagen 28-pin 1
DOPPA uttag 16-pin 1
Headers 1
Hoppare ledningar 10
LED 2
Resistorer 220 ohm 2
Resistor 10K ohm 1
Tryckknapp 1
Jag har uppskattat den totala kostnaden för den GOduino II runt $20 plus frakt och hantering.
Som för Arduino IDE 1.0, kanna den bli dataöverföring gratis
http://Arduino.cc/en/main/Software
MAPPNING AV L293D STIFT TILL ATMEGA328P (ARDUINO UNO)
Bullet siffrorna nedan motsvarar L293D stiften. Denna pin kartläggning fungerar med min test Arduino skiss. Men du kan ändra den för att passa dina syften.
1. Aktivera/inaktivera Motor 1. Också används för att styra hastigheten på Motor 1. Arduino digital PWM stift 9. ATmega328 pin 15.
2. Anslut till Arduino till kontroll Motor 1 rotationsriktning. Arduino digital stift 3. ATmega328 stift 5.
3. Anslut till Motor 1 första pole.
4. Anslut till marken.
5. Anslut till marken.
6. Anslut till Motor 1 andra pol.
7. Anslut till Arduino till kontroll Motor 1 rotationsriktning. Arduino digital stift 2. Atmega328 stift 4.
8. Anslut till strömförsörjningen som kommer att driva båda motorer. Detta kan eller inte kan regleras.
9. Aktivera/inaktivera för Motor 2. Också används för att styra hastigheten på Motor 2. Anslut till Arduino PWM stift 10. ATmega328 pin 16.
10. Anslut till Arduino att styra riktning av rotation för Motor 2. Arduino stift 7. ATmega328 stift 13.
11. ansluta till Motor 2 - första pole.
12. Anslut till marken.
13. Anslut till marken.
14. ansluta till Motor 2 - andra pole.
15. Anslut till Arduino att styra riktning av rotation för Motor 2. Arduino stift 8. ATmega328 stift 14.
16. Anslut till reglerade 5V DC.
PCB ANTECKNINGAR
Varför använde jag manliga huvuden för att exponera stiften på både ATmega328p och L293d? Du kan använda Arduino stil headers istället men jag hade gott om manliga headers och massor av kvinnliga hoppare ledningar. Men för min nästa GOduino II bygga, jag kommer att använda Arduino stil headers. Jag känner mig säkrare med färre IC stift utsatt.
L293D NUVARANDE
L293D i GOduino II klarar ihållande 600 mA per motor. Det verkar finnas någon missuppfattning om detta ICs förmåga att hantera 1.2a toppströmmen per motor. L293D databladet säger att den gör men för en bråkdel av en sekund (100 µs). Detta är inte tillräckligt för att stödja en motor på topp/stall nuvarande som kan pågå i några sekunder eller minuter.
Men den goda nyheten är att du kan dubbla 600mA per motor stöd genom att följa en annan L293D. I sin enklaste innebär detta lödning en L293D ovanpå ett annat medan matchande stiften.
L293D SPÄNNING
L293D måste drivas på två sätt. Måste 5V DC för dess logiska kretsar (pin 16) och makten från 4.5V till 36V för motorer (stift 8). Kontrollera din motor datablad för att hitta sin spänning.
Jag fick reda på att genom att kontrollera PWM signaler från ATmega328p wired till aktivera stift av den L293D jag lyckades ändra den spänningsfrekvens till motorn. Så trots att jag levererar 7.2V till min motorer via L293D, kan jag minska den genom att ändra värdena i funktionen analogWrite i min Arduino skiss.
BORSTAD DC-MOTORER
Den GOduino II fungerar med upp till 2 borstad DC motorer inom spänna av 4.5V till 36V med maximalt laddar av 600mA för varje motor. Dessa motorer generera massor av elektriska störningar som kan orsaka alla typer av frågor från dålig sensor behandlingen (om du har sensorer kopplade till din GOduino II) till konstant IC återställs. För att ta itu med detta, jag alltid placera en 0.1uF keramiska kondensator över polerna av varje motor.
MOTORISKA ROTATION
Din motor rotationsriktningen är en subjektiv uppmaning. I min kod, jag använder orden fram och tillbaka för att beskriva några av mina uppgifter. I själva verket bestämmer hur du tråd din motors och pins när rotationen av en motor är framåt eller bakåt eller medurs vs moturs. Tänk på att motorer på motsatta sidor av en robot plattform spin mittemot varandra. Om din motors inte rotera det sätt du vill ha dem, ofta fix kan vara i koden utan att tillgripa omkoppling.
PROGRAMMERA GODUINO II
Så hur du programmet ATmega328p på GOduino II? En dator med en seriell port bör göra fint. Men utan en seriell port, här är alternativen.
1) om du har en Arduino Uno dopp modell kan du bara ladda din skiss från Arduino IDE 1.0 som du normalt gör. Ta sedan bort ATmega328p från din Arduino Uno och sätt in den i uttaget GOduino II IC. Det var allt. Jag beställde några ATmega328p ICs (dopp) pre laddade med Arduino Uno bootloader så jag kan använda dem på detta sätt.
2) eller du kan använda Arduino Uno för att programmera en ATmega328p. SparkFun har en bra handledning om hur man gör detta. Se artikel ominstallation uppstartshanterare Arduino och använda en Arduino att programmera en AVR i avsnittet referenser.
3) eller en infogad programmerare som de som säljs av Sparkfun, LadyAda eller Pololu kan du ladda Arduino skisser direkt från Arduino IDE till ATmega328p utan att ta bort det från GOduino II PCB-uttaget. Se länk i avsnittet referenser till artikeln av David A. Mellis att bygga och programmera en Arduino Uno på en skärbräda. Du kan spara en dollar eller två genom att köpa 328p tomt sedan bränna bootloader dig själv om du har växeln och vet hur.
ARDUINO TEST SKISS
Arduino 1.0 test skissen nedan verkar som en lång program men det upprepade mestadels kodblock att snurra motorerna så att stiften och motor polacker är korrekt ansluten. Jag har skrivit 4 funktioner som kan hantera de flesta robot förflyttning uppgifter men känn dig fri att ändra det så länge L293D aktiverar stift (1,9) är ansluten till PWM stift på Arduino/ATmega328p och koden nedan är uppdateringar att spegla någon uppladdning av stiften.
/*
REMIXAD AV: TECHBITAR / HAZIM BITAR
DATUM: APRIL 3, 2012
PROJEKT: GOduino II TEST
FUNKTION: Denna skiss är en Arduino 1.0 IDE testprogram för GOduino II PCB-kortet. GOduino II är en integrerad "runtime" Arduino Uno och L293D h-bryggan aka motor driver som tillåter framåt och bakåt rörelse motorer samt variabel hastighet. Detta test koden förutsätter två motorer (varje < 600mA i toppström) är kopplade till GOduino II
Detta prov skiss kräver följande tre funktioner med variabel motornum = 1 eller 2 att beteckna Motor 1 och Motor 2.
-motorforward (int motornum)
-motorback (int motornum)
-motorstop (int motornum)
-motorspeed (int motor1, int motor2)
LICENS: Detta är shareware men ge kredit.
HEMSIDA: http://techbitar.blogspot.com
E-post: techbitar AT gmail DOT com
*/
karta motor polacker till Arduino stift
#define motor1pole1 2
#define motor1pole2 3
#define motor2pole1 7
#define motor2pole2 8
karta L293d motor aktiverar pins till Arduino stift
#define enablePin1 9
#define enablePin2 10
#define M1_MAX_SPEED 100
#define M2_MAX_SPEED 100
#define motordelay 30
#define debugmotorsec 3000
void setup() {
Serial.BEGIN(9600);
uppsättning mappade L293D motor1 och motor 2 aktiverar stift på Arduino att produktionen (att slå på/av motor1 och motor2 via L293D)
pinMode (enablePin1, produktionen);
pinMode (enablePin2, produktionen);
uppsättning mappade motor polacker till Arduino stift (via L293D)
pinMode (motor1pole1, produktionen);
pinMode (motor1pole2, produktionen);
pinMode (motor2pole1, produktionen);
pinMode (motor2pole2, produktionen);
MotorSpeed (0, 0);
}
int mspeed = 100; plocka en start hastighet upp till 255
void loop() {
ange hastigheten på motor 1 och 2 till samma hastighet
MotorSpeed (mspeed, mspeed);
snurra motorn 1 endast i en riktning
Serial.Print ("MOTOR 1 @ fart framåt:");
Serial.println(mspeed);
motorforward(1);
Delay(debugmotorsec);
motorstop(1);
snurra motor 2 endast i en riktning
Serial.Print ("MOTOR 2 @ fart framåt:");
Serial.println(mspeed);
motorforward(2);
Delay(debugmotorsec);
motorstop(2);
snurra motorn 1 endast i motsatt riktning
Serial.Print ("tillbaka MOTOR 1 @ hastighet:");
Serial.println(mspeed);
motorback(1);
Delay(3000);
motorstop(1);
snurra motor 2 endast i motsatt riktning
Serial.Print ("MOTOR 2 tillbaka @ hastighet:");
Serial.println(mspeed);
motorback(2);
Delay(debugmotorsec);
motorstop(2);
stoppa båda motorer 1 och 2
Serial.println ("båda motorer stopp för 2 sek.");
motorstop(1);
motorstop(2);
Delay(2000);
snurra båda motorer i en riktning
Serial.Print ("båda motorerna @ fart framåt:");
Serial.println(mspeed);
motorforward(1);
motorforward(2);
Delay(debugmotorsec);
stoppa båda motorer
Serial.println ("båda motorer stopp för 2 sek.");
motorstop(1);
motorstop(2);
Delay(2000);
snurra båda motorer i motsatt riktning
Serial.Print ("båda MOTORS tillbaka @ hastighet:");
Serial.println(mspeed);
motorback(1);
motorback(2);
Delay(debugmotorsec);
stoppa båda motorer
Serial.println ("båda motorer stopp för 2 sek.");
motorstop(1);
motorstop(2);
Delay(2000);
Spin båda motorer men i motsatta riktningar
Serial.Print ("MOTOR1 fram | MOTOR2 TILLBAKA @ HASTIGHET: ");
Serial.println(mspeed);
motorforward(1);
motorback(2);
Delay(debugmotorsec);
stoppa båda motorer
Serial.println ("båda motorer stopp för 2 sek.");
motorstop(1);
motorstop(2);
Delay(2000);
snurra båda motorer i andra motsatt riktning
Serial.Print ("MOTOR1 tillbaka | MOTOR2 @ FART FRAMÅT: ");
Serial.println(mspeed);
motorback(1);
motorforward(2);
Delay(debugmotorsec);
stoppa båda motorer
Serial.println ("båda motorer stopp för 2 sek.");
motorstop(1);
motorstop(2);
Delay(2000);
mspeed += 50; Tillsätt 50 för att påskynda av motor spin. Maxhastighet 255
ange hastigheten på motor 1 och 2 till samma nya hastighet
MotorSpeed(mspeed,mspeed);
}
MOTORISKA FUNKTIONER
Annullera motorstop (int motornum) {
Delay(motordelay);
om (motornum == 1) {
digitalWrite (motor1pole1, låg);
digitalWrite (motor1pole2, låg);
}
annars om (motornum == 2) {
digitalWrite (motor2pole1, låg);
digitalWrite (motor2pole2, låg);
}
Delay(motordelay);
}
void motorforward (int motornum) {
om (motornum == 1) {
digitalWrite (motor1pole1, hög);
digitalWrite (motor1pole2, låg);
}
annars om (motornum == 2) {
digitalWrite (motor2pole1, låg);
digitalWrite (motor2pole2, hög);
}
Delay(motordelay);
}
void motorback (int motornum) {
om (motornum == 1) {
digitalWrite (motor1pole1, låg);
digitalWrite (motor1pole2, hög);
}
annars om (motornum == 2) {
digitalWrite (motor2pole1, hög);
digitalWrite (motor2pole2, låg);
}
Delay(motordelay);
}
void motorspeed (int motor1speed, int motor2speed) {
om (motor1speed > M1_MAX_SPEED) motor1speed = M1_MAX_SPEED; Limit toppfart
om (motor2speed > M2_MAX_SPEED) motor2speed = M2_MAX_SPEED; Limit toppfart
om (motor1speed < 0) motor1speed = 0; hålla motor ovan 0
om (motor2speed < 0) motor2speed = 0; hålla varvtal över 0
analogWrite (enablePin1, motor1speed);
analogWrite (enablePin2, motor2speed);
}
// ====================================
SLUTLIGA ANTECKNINGAR
Jag kommer fortsätta att utvecklas i GOduino II medan letar efter bättre alternativ som är hög på reparationsmöjlighet och hackability poäng. En $30 Arduino Uno kan hamna kostar $60 efter tull och frakt i Jordanien. Och om något går fel med det, du kan också kasta bort eftersom någon lokal anläggning finns för att ersätta och reparera smd komponenter. Eftersom grundläggande elektroniska delar finns tillgängliga lokalt, bör det vara lätt och billigt att bygga och reparera den GOduino II. DOPPA liv på...
BUDGET
Några läsare undrade var man kan köpa delar bo inom budget. Jag beställer mina delar från Futurlec.com den hela GOduino som uppgår till mindre än $12 om du inte har en Arduino UNO dopp mikrokontroller och inte vill köpa en, behöver du en FTDI USB-seriell programmerare. Du kan köpa dem för ca $15
Futurlec är inte min sponsor och jag får inte kommissionen eller rabatter för att nämna dem.
REFERENSER
GOduino: Den Arduino Uno + Motor Driver klon
Bygga en Arduino på en skärbräda av David A. Mellis
http://Arduino.cc/en/main/standalone
Kontrollera din motors med L293D och Arduino av Guilherme Martins
Styra en likströmsmotor med Arduino och L293D chip
http://luckylarry.co.uk/Arduino-projects/Control-a-DC-motor-with-Arduino-and-l293d-chip
Installera om din Arduino starthanterare
http://www.Sparkfun.com/tutorials/247
Genom att använda en Arduino att programmera en AVR
http://www.Sparkfun.com/tutorials/200