Stap 5: Programma, vervolgens geniet van uw nieuwe Robot!
Hieronder is het vermijden van belemmering code voor OmniWorm! Voel je vrij om dienovereenkomstig aan te passen.
------------------------------------------------------------------------------------
Wat u ook wilt wijzigen:
------------------------
SERVO CODE: Twee servo's kunnen verschillende richtingen voor elke hoek draaien
verzonden. Daarom, test elke servo apart. Stel hen op de
Max hoek voordat dat aangekoppeld hen om ervoor te zorgen de robot zal Vouw in
een vak en dat de servo's niet zal duwen aparte richtingen. Ook,
u wellicht gebruiken de zesde servo (servoFront2) afhankelijk van de
gewicht van uw ontwerp. Mijne is slechts 3 kg totaal dus ik hoef het: P
Servo's: 313WP servo's gaan van 20 tot 160 graden zonder het bewerken van de
Servo-bibliotheek. 140 graden is goed genoeg voor deze toepassing
Hoewel. Als u verschillende servo's gebruikt, kan je meer of minder dan
140 graden. Als de servo wordt beoordeeld voor 180 graden en je krijgt een
veel minder, gebruik maken van pwm of proberen het veranderen van de min en max pulsewidths
in de bibliotheek van de servo (servo.h). Voor het bewerken van het bestand, downoad Notepad ++
MOTOR CODE: Ik ben met behulp van een half-broken ruige motor coureur uit ruige
schakelingen veroorzaken. De pin labelled EM is vastgesoldeerd aan map2 op het schild als de
normale pin was niet veranderen van richting. Als u van hetzelfde gebruikmaakt
schild, vervolgens wissen EM en voort te zetten! Als u van een h-brug gebruikmaakt,
dan voel je vrij om te pinnen 3, 11-13 te gebruiken of kies uw eigen. Wees voorzichtig
niet te overweldigen het circuit al! Hieronder vindt u links naar tutorials.
De laatste schakel is waar u het schild dat mij ben using kunt kopen!
http://ITP.NYU.edu/physcomp/Labs/DCMotorControl
http://www.ECS.umass.edu/ECE/M5/tutorials/H-Bridge_tutorial.html
http://www.societyofrobots.com/schematics_h-bridgedes.shtml
http://www.ruggedcircuits.com/Motor-Control/Rugged-motor-driver
MOTOREN: Doe uw portemonnee een groot plezier en merknaam niet scheuren
Parallex servo's voor stormloop zoals DC-motoren (tenzij als ze gebroken waren
Als de mijne waren). Als u hen kappen, gewoon schroef de rug,
Trek de drie draden af, plaats de schroeven terug in te houden de
versnellingsbak samen (sommige hotglue kan helpen), en zorgvuldig soldeer een
draad daartoe elke DC motor alleen. Overtollige soldeer misschien stam de setup.
Maar ik zou gewoon kopen gele robot wielen/gearboxs van ebay.
Zoek voor "robot wiel" en zij zal opduiken. Alternativly, gebruik
de 360 graden servos as... Nou... servo's! U kunt toevoegen of
hoeken voor vooruit/achteruit verkeer aftrekken.
FUNCTIES: U moet bewerken van de functies (of spelen met draden)
ertoe brengen om te werken met uw ontwerp. Wat goede oude trial and error
zal verrichten naar de truc!
Een paar woorden van advies:
----------------------
Als u een externe voedingsbron voor uw servo's gebruikt, sluit
de grond aan de arduino is gemalen. Ook wees voorzichtig niet om aan te sluiten
de batterij in backwords of korte het uit... het kan gemakkelijk dodelijk zijn
uw servo's. Bovendien, als u een servo overweldigen kan het sterven. Start
uw servo's af bij lage macht en werk je weg omhoog. Mijn setup is
duwen hetâ €¦ > :)
Ik stel voor dat u vinden (of zorg!) uw eigen h-brug naar contol
uw motoren. Ook sluit de grond aan de arduino. Wees voorzichtig om
niet overmeesteren je setup! Tot slot houdt een het terugstellenfunctie de setup
van de kortsluiting.
Vergeet niet dat u sensoren moet kantelen als je gaat om te stoppen met de kant
wielen verplaatsen bij het opstellen van de huidige!
Voel me niet beperkt tot de pinnen die ik gebruik. Kies uw eigen digitale
pinnen!
Mijn code is overgenomen uit:
------------------------
http://www.ruggedcircuits.com/Rugged-motor-driver
http://Arduino.CC/en/Reference/ServoWrite
http://arduinobasics.blogspot.com/2012/11/arduinobasics-HC-sr04-ultrasonic-sensor.html
*/
#include < Servo.h >
Omvatten van de Servo-bibliotheek, zodat we niet hoeven te gebruiken PWM
Servo servoFront;
Servo servoFront2;
Servo servoTail;
Servo servoTail2;
Servo servoBack;
Servo servoBack2;
Dit bepaalt onze servo namen (servoFront enz.)
Inschakelen (PWM) uitgangen (ruige Shield)
#define EN1_PIN 3
#define EN2_PIN 11
Richting uitgangen (ruige Shield)
#define DIR1_PIN 12
#define DIR2_PIN 13
#define EM 10 //Cause 13 niet willen werken. Ongelukkige nummer! =/
#define echoPin 8 / / Echo Pin (voor ultrasone sensor)
#define trigPin 9 / / Trigger Pin (voor ultrasone sensor)
int maximumRange = 200; Grensdetectiewijdte van nodig (kan veranderen)
int minimumRange = 0; Minimale afstand nodig (kan veranderen)
lange duur, afstand; Zolang zij worden gebruikt voor het berekenen van de afstand
VOID Setup {}
servoFront.attach(6);
servoTail.attach(1);
servoTail2.attach(2);
servoBack.attach(4);
servoBack2.attach(5);
pinMode (EN1_PIN, uitvoer);
digitalWrite (EN1_PIN, laag);
pinMode (EN2_PIN, uitvoer);
digitalWrite (EN2_PIN, laag);
pinMode (DIR1_PIN, uitvoer);
digitalWrite (DIR1_PIN, laag);
pinMode (DIR2_PIN, uitvoer);
digitalWrite (DIR2_PIN, laag);
pinMode (trigPin, OUTPUT);
pinMode (echoPin, INPUT);
Opstelling van de in-/ uitgangen voor motoren/servo's / sensor
closed();
vertraging (1000);
Houdt de robot gevouwen voordat de lus begint.
}
void loop {}
Reset;
delay(50);
closed();
Scan(); meet afstand via Ultrasoon sensor
delay(90);
Als (afstand < = 20 & & afstand > = 0) {//if de afstand is minder dan 15 cm
opened();
delay(1000);
Reset();
delay(50);
spin_right();
opened();
delay(1500);
closed();
delay(1000);
Scan();
delay(800);
Als (afstand < = 15 & & afstand > = 0) {}
opened();
delay(1000);
Reset();
delay(50);
spin_left();
opened();
delay(2200);
}
else {}
Reset();
delay(50);
inch();
inch();
inch();
inch();
inch();
}
}
else {//if de afstand groter is dan 15 cm
Reset();
delay(50);
closed();
vooruit();
delay(1000);
}
}
/*
Hieronder zijn de functies we via onze lus roepen. Het maakt het leven veel
gemakkelijker, aangezien u meerdere spelden en servo's tegelijk kunt!
*/
ongeldig closed() {}
servoFront.write(20);
servoTail.write(20);
servoTail2.write(160);
servoBack.write(20);
servoBack2.write(160);
}
ongeldig opened() {}
servoFront.write(140);
servoTail.write(20);
servoTail2.write(160);
servoBack.write(100);
servoBack2.write(80);
}
ongeldig inch() {}
closed();
delay(1000);
servoTail.write(160);
servoTail2.write(20);
delay(1000);
servoTail.write(160);
servoTail2.write(20);
servoBack.write(160);
servoBack2.write(20);
delay(1000);
servoTail.write(20);
servoTail2.write(160);
servoBack.write(160);
servoBack2.write(20);
delay(1000);
servoFront.write(140);
delay(1000);
}
ongeldig spin_right() {}
digitalWrite (DIR1_PIN, hoge);
analogWrite (EN1_PIN, 255);
digitalWrite (DIR2_PIN, hoge);
analogWrite (EN2_PIN, 255);
digitalWrite (EM, hoge);
}
ongeldig spin_left() {}
digitalWrite (DIR1_PIN, laag);
analogWrite (EN1_PIN, 255);
digitalWrite (DIR2_PIN, hoge);
analogWrite (EN2_PIN, 255);
digitalWrite (EM, laag);
}
ongeldig backward() {}
digitalWrite (DIR1_PIN, hoge);
analogWrite (EN1_PIN, 255);
digitalWrite (DIR2_PIN, laag);
digitalWrite (EM, hoge);
analogWrite (EN2_PIN, 255);
}
ongeldig vooruit() {}
digitalWrite (DIR2_PIN, hoge);
analogWrite (EN2_PIN, 255);
digitalWrite (DIR1_PIN, laag);
analogWrite (EN1_PIN, 255);
digitalWrite (EM, hoge);
}
VOID reset() {}
analogWrite (EN2_PIN, 0);
analogWrite (EN1_PIN, 0);
delay(15);
}
ongeldig scan() {}
digitalWrite (trigPin, laag);
delayMicroseconds(2);
digitalWrite (trigPin, hoge);
delayMicroseconds(10);
digitalWrite (trigPin, laag);
duur = pulseIn (echoPin, hoge);
Berekenen van de afstand (in cm) op basis van de snelheid van het geluid.
afstand = duur/58.2;
delay(50);
}