Regel die volgt op Arduino Robot (6 / 7 stap)

Stap 6: Code

De code heeft voor de robot in principe enkel lezingen van de sensor lijn neemt dan het interpreteert waar het is op de lijn en vertelt elk van de motoren hoe snel te lopen. Onze robot heeft 8 sensor, wat betekent dat als we aannemen dat het is altijd aan dezelfde kant van de lijn zijn er 9 mogelijk posities 0-8, die worden vertegenwoordigd door hoeveel van de sensoren zijn op.

Wij willen de robot te worden gecentreerd over de rand van de lijn, dus we gaan naar de "setpoint" ingesteld op 4, die de ruimte tussen de 4e en 5e sensor. PID controllers werk door het nemen van enkele gewenste waarde en waar je bent en neemt het verschil van de twee die is de 'fout'. De controller gedeelte dan conversieprogramma's de fout in naar een bruikbare output. In dit geval is de fout gelijk aan het setpoint minus positie. De stap is het selecteren van de tuning constanten oproep Kp en Kd in de code. Dit zijn ook de oproep de evenredige en afgeleide constanten en ze zullen uniek zijn voor uw robot op basis van uw motoren en uw exacte meting al onze nummers moet krijg je dicht. KP is de hoeveelheid PWM verschil tussen de twee motoren per eenheid van lijn fout en wordt vermenigvuldigd met de fout. Bijvoorbeeld als de sensor leest 0 de fout is 4 zin is de robot ook uiterst rechts wil je de linker motor om te stoppen met een PWM van nul en de juiste motor draaien volle snelheid. Als Kp 64 64 * fout is 256 en afgetrokken van de normale motor snelheid (255) links aan een volledig einde zal komen. Als de robot begint te draaien zal de fout zal worden minder en de motor verschil minder totdat de sensor 4 opnieuw ziet en het is volle snelheid vooruit.

Dit klinkt geweldig toch? Niet helemaal omdat de robot is al swingend en duurt enkele stop die het juiste zal swing langs de 4e sensor en de 5e. Om dit te voorkomen moeten we een stuk sneller als we dichter bij de setpoint vertragen. Dit is waar Kd komt te spelen. KD is vermenigvuldigd met de verandering in de fout en toegevoegd aan het Kp-deel. Voor dit voorbeeld zullen we halen waar we gebleven above waar nu de sensor is het lezen van 1. De fout is dus 3 en de proportionele controle vertelt de linker motor te draaien op 63 en juiste op 255. De verandering in fout is -1 (3-4) en onze Kd is 16 voor een totaal van -16. Wanneer toevoegt aan het proportionele deel krijg je een motorsnelheid van 47 op het linker wiel en 255 aan de rechterkant. Alle details kan worden gezien in de pid-functie in de code en spelen rond met het Kp een Kd waarden om te zien hoe snel kun je je bot.

Gelukkig voor jou hebben we het harde deel voor u. Kopieer en plak de onderstaande code in de Arduino IDE en uploaden naar je board, en uw lijn volgende robot moet klaar om te rollen!

 #define NUM_SENSORS 8 #define avgSpeed 255 int leftWheelf=3; int leftWheelr = 5; int rightWheelf=6; int rightWheelr = 9; int setpoint=4, val; unsigned long lastTime=0, timeChange=0; int Sampletime=20, outMax=255, outMin=-255; float error,sumerr,lastError,output,ITerm,DTerm; float Kp=avgSpeed/4, Ki=0, Kd=.25*Kp; int pos; unsigned int sensor[]={A0,A1,A2,A3,A4,A5,A6,A7}; unsigned int sensorValue[NUM_SENSORS]; int threshold = 200; byte incomingByte; int bias=5; void setup() { Serial.begin(115200); pinMode(4,INPUT); } void loop() { // Serial.println(digitalRead(4)); if (digitalRead(4)== true) { unsigned int Wsum=0; int sum=0; for (int i=0;i<NUM_SENSORS;i++) { sensorValue[i]=analogRead(sensor[i]); if (sensorValue[i] < threshold) sensorValue[i]=1; else sensorValue[i]=0; //Serial.print(i); Serial.print(": "); Serial.println(sensorValue[i]); //delay(250); } for (int i=0;i<NUM_SENSORS;i++) { sum=sensorValue[i]+sum; pos=sum; } // Serial.println(pos); //delay(100); timeChange = millis()-lastTime; if (timeChange >= Sampletime){ pid(pos); } } else { if (Serial.available() > 0) { incomingByte = Serial.read(); } if (incomingByte == 'w') { forward(); } else if (incomingByte == 's') { reverse(); } else if (incomingByte == 'd') { rightTurn(); } else if (incomingByte == 'a') { leftTurn(); } else { brake(); } } } void pid (int val) { error=setpoint-val; ITerm+=(Ki*error); DTerm=Kd*(error-lastError)/(Sampletime/1000.0); lastError=error; if(ITerm > outMax) ITerm=outMax; else if (ITerm < outMin) ITerm=outMin; output=Kp*error+ITerm+DTerm; if (output>outMax) output=outMax; else if (output<outMin) output=outMin; lastTime=millis(); Serial.println(val); if (output>0) { analogWrite(leftWheelf,avgSpeed); analogWrite(rightWheelf,avgSpeed); analogWrite(leftWheelr,abs(output)); analogWrite(rightWheelr,0); } else if (output<0) { analogWrite(leftWheelf,avgSpeed); analogWrite(rightWheelf,avgSpeed); analogWrite(leftWheelr,0); analogWrite(rightWheelr,abs(output)); } else { analogWrite(leftWheelf,avgSpeed); analogWrite(rightWheelf,avgSpeed); analogWrite(leftWheelr,0); analogWrite(rightWheelr,0); } } void forward() { analogWrite(leftWheelf, avgSpeed - bias); analogWrite(leftWheelr, 0); analogWrite(rightWheelr, 0); analogWrite(rightWheelf, avgSpeed); } void leftTurn() { analogWrite(leftWheelf,0); analogWrite(leftWheelr, 0); analogWrite(rightWheelr,0); analogWrite(rightWheelf, avgSpeed); } void rightTurn() { analogWrite(leftWheelf,avgSpeed); analogWrite(leftWheelr, 0); analogWrite(rightWheelr,0); analogWrite(rightWheelf, 0); } void reverse() { analogWrite(leftWheelf, 0); analogWrite(leftWheelr, avgSpeed-bias); analogWrite(rightWheelr, avgSpeed); analogWrite(rightWheelf, 0); } void brake() { analogWrite(leftWheelf, 0); analogWrite(leftWheelr, 0); analogWrite(rightWheelr, 0); analogWrite(rightWheelf, 0); } 

Gerelateerde Artikelen

LINUS: De regel die volgt robot

LINUS: De regel die volgt robot

Dit is mijn poging om een regel die volgt op robot. Ik upgrade in principe als ik ging dus ik ben gewoon gaan geven en overzicht van de bouw en kunt u direct via uw denken. Ik Lego als basis gebruikt, en vervolgens maakte mijn eigen sensor-array. De
Eenvoudige regel die volgt op robot

Eenvoudige regel die volgt op robot

de eenvoudige robot is gebaseerd op LM393 Dual voltage comparatorDe functie van het circuit is te koppelen aan de lichtgevoelige weerstand, en een geschikte referentiemiddelen spanning voor de LM393 chip.Vanwege de verschillende zwart-wit reflectieco
Eenvoudige regel die volgt op robot voor beginners

Eenvoudige regel die volgt op robot voor beginners

Lijn volgeling is een machine die op een pad volgen kan. Het pad kan worden zichtbaar als een zwartregel op een wit oppervlak (of vice versa) of het kan onzichtbaar als een magneetveld-wikipedia.ONDERDELEN:1. dc motoren-2 (u kunt rpm kiezen volgens u
De veelzijdige Arduino Robot

De veelzijdige Arduino Robot

dit is mijn eerste arduino robot, en ik ben heel blij met het resultaat. Wat ik kwam met is een robot die met wijzigingen vrijwel alles op het gebied van kleine arduino robots doen kunt. De elektronica zijn zeer eenvoudig. U hoeft alleen een H-brug,
(w / Video) Fundamentele Arduino Robot, lichte Seeker!

(w / Video) Fundamentele Arduino Robot, lichte Seeker!

Vele malen heb ik Googled voor "Arduino Robot" in de hoop het vinden van een robot te bouwen. Ik uiteindelijk vinden vele versies van een obstakel vermijden robot die gebruikmaakt van hetzij een infrarood of een sonar Bereikindicatie sensor gemo
Ben - een licht volgende Breadboard Arduino Robot

Ben - een licht volgende Breadboard Arduino Robot

Ben het licht volgende Breadboard Arduino Robot is de tweede robot die ik gemaakt heb om te helpen robotica aan middelbare scholieren in een klasse die ik vrijwillig leren onderwijzen. De eerste robot heeft ook zijn eigen Instructable die kan hier wo
Arduino Robot (geïmproviseerde) dwalen

Arduino Robot (geïmproviseerde) dwalen

Dit is een tutorial over hoe te maken van een Arduino robot die zal wonder rond en vermijd muren en andere obstakels. Het is een zeer eenvoudig om te doen ands voor beginners en om te leren van hen en hun in robotica is gebaseerd, het is leuk om te d
Eenvoudige 3D afgedrukt Arduino Robot

Eenvoudige 3D afgedrukt Arduino Robot

Wie niet wil om een robot te bouwen? Als een kind droomde ik robots te bouwen. Nu, iedereen van elke leeftijd met slechts een beetje kennis kan bouwen met een eenvoudige robot! Ik zal u tonen hoe dat te doen.De RobotDeze robot heeft een 3D gedrukte c
Temperatuur opnemen Arduino Robot

Temperatuur opnemen Arduino Robot

mijn zoon en ik maakte een kleine arduino robot die temperatuur registreert. Hij wilde me tot het opstellen van een robot, ik wilde om te experimenteren met knipperende LEDs doorgeven van gegevens, zodat een plan was uitgekomen. De manier waarop het
Arduino Robot Arm

Arduino Robot Arm

ik had beloofd in een vorige post te delen met u een arduino robot arm project op een later tijdstip. Nou, is die datum vandaag! Echter, in plaats van een joystick gebruikt om te controleren de arduino robotarm, I 'm gonna vooraf het programma van de
RC auto naar autonome Arduino Robot

RC auto naar autonome Arduino Robot

Hebt u ooit gewenst om te bouwen van een eenvoudige autonome Arduino robot? Ik werd geïnspireerd om het bouwen van een fundamentele Arduino robot om te helpen mijn begrip van de Arduino, de Arduino IDE, en de werking van de ultrasone sensoren en moto
Hoe maak je een obstakel te vermijden Arduino Robot

Hoe maak je een obstakel te vermijden Arduino Robot

Hallo allemaal! In dit Instructable zal ik tonen u hoe maak je een robot vergelijkbaar met de "mobiele Arduino experimenteel Platform" (MAEP) die ik heb gemaakt. Het is uitgerust met twee motoren die sturen kunnen de robot en de mogelijkheid om
Remote Controlled Arduino Robot met behulp van Wixel Transceivers

Remote Controlled Arduino Robot met behulp van Wixel Transceivers

UPDATE JAN 2012: dit project werd gekenmerkt op de Pololu website onder Resources/Community projecten.  http://www.Pololu.com/resources/communityprojectsINTRODUCTIEIn dit project, gebruik ik twee Pololu Wixel transceivers op afstand bedienen van een
Arduino Robot V2 (snel) ook stem gecontroleerde

Arduino Robot V2 (snel) ook stem gecontroleerde

Dit is mijn tweede versie van mijn arduino robot na 'Build uw eerste robot'. Mijn tweede versie is enigszins ingewikkeld in vergelijking met mijn ene maar biedt betere mogelijkheden. In dit instructable ga ik om u te tonen hoe het bouwen van een snel