Autonome Autonavigation Robot (Arduino) (4 / 4 stap)

Stap 4: programmeren


We zijn met behulp van de Arduino Uno programmeertaal. Het is gebaseerd off van Java.
Hier is onze voorbeeldcode voor navigatie met behulp van 2D-arrays. Binnen het nummerraster van 2D-matrix voeren we een 0 of een 1. Een 1 staat voor een object of een obstakel. Een 0 geeft vrije ruimte. De robot reist via de 0's.

Raster navigatie:

DIT IS EEN PROGRAMMA OM IN KAART TE BRENGEN EEN GEBIED MET 2D-ARRAYS EN GA ALLEEN DOOR HET
NULLEN AANWEZIG. ULTRASONE SENSOREN WORDEN NIET GEBRUIKT, HOEWEL ZE ZIJN GEÏNITIALISEERD.
DE ENCODERS WORDEN OOK NIET GEBRUIKT MAAR WORDEN GEÏNITIALISEERD

POTS

#include "Servo.h"

Motoren
Servo motor1;
Servo motor2;

Rotary Encoders
int encoderAPin = 4;              Links / / pin voor de roterende encoderA
int encoderBPin = 2;              Recht / / pin voor de roterende encoderB
int encoderAPosition = 0;                     positie teller voor encoderA
int encoderBPosition = 0;                     positie teller voor encoderB
int signalAInput1;                             Signaalinvoer 1 voor encoderA
int signalAInput2;                             signaalingang 2 voor encoderA
int signalBInput1;                             Signaalinvoer 1 voor encoderB
int signalBInput2;                             signaalingang 2 voor encoderB

robot locatie service
0 is
1 klopt
2 is ingedrukt
3 wordt gelaten
int robotDirection = 2;

Dit is de coördinaten in het raster van waar de robot is
het is ook de x en y indexen in de matrix.
Vergeet niet dat de matrix op index 0 begint.
int xcoordinate = 2;
int ycoordinate = 1;

Ultrasone pinnen
Const int Trig_pin = 5;  PIN voor aanstuurimpuls INPUT
Const int Echo_pin = 6;   PIN voor het ontvangen van echo output
lange duur;            Hoe lang het duurt voordat het geluid rebound

motor pinnen
Const int Motor1Pin = 9;  Linkerzijde
Const int Motor2Pin = 10; rechterkant

de matrix die hierin met
Dit kan een matrix van elke omvang
Zorg enkel ervoor dat de robot een vrije ruimte heeft om naar van haar aanvankelijke standpunt.
int arraything [6] [6] =
{
{1,1,1,1,1,1}
,
{1,1,0,1,0,1}
,
{1,1,0,1,0,1}
,
{1,1,0,1,0,1}
,
{1,1,0,1,1,1}
,
{1,1,1,0,1,1}
};

void setup () {}
Roterende encoder
pinMode (encoderAPin, INPUT);
pinMode (encoderBPin, INPUT);
Serial.begin(9600);
Serial.println ("vanaf nu...");
\

ultrasone
pinMode (Trig_pin, uitvoer);        Initialiseer de puls-pin als output:
pinMode (Echo_pin, INPUT);       Initialiseer de echo_pin pin als input:

motorsmmmmmmmmm
motor1.attach(Motor1Pin);
Motor2.attach(Motor2Pin);

}

In het Engels ziet dit programma als er iets achter zit.
Zo nee, beweegt hij rechtdoor. Zo ja, controleert het haar recht.
Als het recht vrij is, blijkt dat manier, of anders, gecontroleerd links daarvan.
Als links daarvan gratis is, blijkt dat manier, of anders, blijkt slechts 180 graden
en de manier het kwam teruggaat.
//
Naast ken is het encorporate begin en bestemming alsmede optimale pad vinden
//
Laatst is het gebruik van de ultrasone met het raster.

void loop () {}

terwijl (1 == 1) {}
Als (isFrontOpen() == true) {}
moveForward();
vertraging (2000);
}
anders
Als (isRightOpen() == true) {}
turnRight();
vertraging (2000);
}
anders
Als (isLeftOpen() == true) {}
turnLeft();
vertraging (2000);
}
else {}
turnAround();
vertraging (2000);
}
}
}

Controleert of er iets recht tegenover het met behulp van rasters
Booleaanse isFrontOpen () {}
int nextNumber = getFrontNumber();
Als (nextNumber == 0) {}
return true;
}
else {}
return false;
}
}

Controleert of er iets aan de rechterkant van het gebruik van rasters
Booleaanse isRightOpen() {}
int nextNumber = getRightNumber();
Als (nextNumber == 0) {}
return true;
}
else {}
return false;
}
}

Controleert of er iets aan de linkerkant van het gebruik van rasters
Booleaanse isLeftOpen() {}
int nextNumber = getLeftNumber();
Als (nextNumber == 0) {}
return true;
}
else {}
return false;
}
}

Ongecompliceerd beweegt.
VOID moveForward () {}
motor1.write(180);
Motor2.write(0);

Serial.println("Forward");
Als (robotDirection == 0)
ycoordinate = ycoordinate - 1;
Als (robotDirection == 1)
xcoordinate = xcoordinate + 1;
Als (robotDirection == 2)
ycoordinate = ycoordinate + 1;
Als (robotDirection == 3)
xcoordinate = xcoordinate - 1;
vertraging (100);
/ * Serial.print("xcoordinate");
Serial.Print(xcoordinate);
vertraging (500);
Serial.Print ("ycoordinate");
Serial.Print(ycoordinate);
vertraging (500);
Serial.Print ("robot richting:");
Serial.Print(robotDirection);
delay(500);
Serial.println ();
delay(1000);

*/
delay(800);
}

Bochten 90 graden naar rechts
VOID turnRight () {}
motor1.write (60);
Motor2.write (60);
delay(178);
Motor2.write(95);
delay(65);
motor1.write(90);
Serial.println("right");
Als (robotDirection == 0)
robotDirection = 1;
else if (robotDirection == 1)
robotDirection = 2;
else if (robotDirection == 2)
robotDirection = 3;
else if (robotDirection == 3)
robotDirection = 0;
vertraging (500);
Serial.Print("xcoordinate");
Serial.Print(xcoordinate);
vertraging (500);
Serial.Print ("ycoordinate");
Serial.Print(ycoordinate);
vertraging (500);
Serial.Print ("robot richting:");
Serial.Print(robotDirection);
vertraging (500);
Serial.println();

delay(1000);
}

Bochten 90 graden naar links
VOID turnLeft () {}
motor1.write(120);
Motor2.write(120);
delay(325);
Motor2.write(95);
delay(65);
motor1.write(90);
Serial.println("left");
Als (robotDirection == 0)
robotDirection = 3;
else if (robotDirection == 1)
robotDirection = 0;
else if (robotDirection == 2)
robotDirection = 1;
else if (robotDirection == 3)
robotDirection = 2;
vertraging (500);
Serial.Print("xcoordinate");
Serial.Print(xcoordinate);
vertraging (500);
Serial.Print ("ycoordinate");
Serial.Print(ycoordinate);
vertraging (500);
Serial.Print ("robot richting:");
Serial.Print(robotDirection);
delay(500);
Serial.println();
delay(1000);
}

Bochten 180 graden
VOID ommekeer () {}
delay(1000);
Serial.println("Around");
Als (robotDirection == 0)
robotDirection = 2;
else if (robotDirection == 1)
robotDirection = 3;
else if (robotDirection == 2)
robotDirection = 0;
else if (robotDirection == 3)
robotDirection = 1;
vertraging (500);
Serial.Print("xcoordinate");
Serial.Print(xcoordinate);
vertraging (500);
Serial.Print ("ycoordinate");
Serial.Print(ycoordinate);
vertraging (500);
Serial.Print ("robot richting:");
Serial.Print(robotDirection);
delay(500);
Serial.println();

delay(1000);
}

Deze eigenschap haalt het nummer op het rooster van de ruimte recht tegenover het.
int getFrontNumber() {}
Als (robotDirection == 0) {}
arraything [ycoordinate - 1] terug [xcoordinate];
}
Als (robotDirection == 1) {}
keren arraything [ycoordinate] [xcoordinate + 1];
}
Als (robotDirection == 2) {}
arraything keren [ycoordinate + 1] [xcoordinate];
}
Als (robotDirection == 3) {}
keren arraything [ycoordinate] [xcoordinate - 1];
}
}

Deze eigenschap haalt het nummer op het rooster van de ruimte rechts van het.
int getRightNumber() {}
Als (robotDirection == 0) {}
keren arraything [ycoordinate] [xcoordinate + 1];

}
Als (robotDirection == 1) {}
arraything keren [ycoordinate + 1] [xcoordinate];

}
Als (robotDirection == 2) {}
keren arraything [ycoordinate] [xcoordinate - 1];
}
Als (robotDirection == 3) {}
arraything [ycoordinate - 1] terug [xcoordinate];
}
}

Deze eigenschap haalt het nummer op het rooster van de ruimte aan de linkerkant van het.
int getLeftNumber() {}
Als (robotDirection == 0) {}
keren arraything [ycoordinate] [xcoordinate - 1];
}
Als (robotDirection == 1) {}
arraything [ycoordinate - 1] terug [xcoordinate];
}
Als (robotDirection == 2) {}
keren arraything [ycoordinate] [xcoordinate + 1];
}
Als (robotDirection == 3) {}
arraything keren [ycoordinate + 1] [xcoordinate];
}
}

Hier is een steekproefprogramma voor de ultrasone sensoren. Dit programma zal net voorkomen dat alles en nog wat die in de weg.
Opgenomen in het programma is de programmering voor een extra servo gewoon heen en weer draaien op de bovenkant van de robot. Als je dit niet doet op uw robot, negeren dat deel van de code, het moet geen invloed hebben op uw programma.

DEZE CODE VERMIJDT OBSTAKELS
HET KAN OFWEL EEN OBSTAKEL OP HET RECHT OF LINKS TEGENKOMEN
DUS WIJ GEPROGRAMMEERD HET DRAAI NAAR LINKS ALS HET AANGETROFFEN OBSTAKEL AAN DE RECHTERKANT
EN ALS WE AAN DE LINKERKANT ONDERVONDEN

POTS

/*
Ultrasone 1
Pin 5 Triggers de pols (gele lood)
Pin 6 ontvangt de Echo (oranje lood)

Ultrasone 2
Pin 7 Triggers de pols (gele lood)
Pin 8 ontvangt de Echo (oranje lood)
*/

#include "Servo.h"
Servo motorR;
Servo motorL;
Servomotoren;

Ultrasone pinnen
Ultrasone recht
Const int Trig1_pin = 5;  PIN voor aanstuurimpuls INPUT
Const int Echo1_pin = 6;   PIN voor het ontvangen van echo output
lange Duur1;           Hoe lang het duurt voordat het geluid rebound

Ultrasone links
Const int Trig2_pin = 7;
Const int Echo2_pin = 8;
lange Duur2;

motor pinnen
Const int MotorLPin = 2;    Links
Const int MotorRPin = 13;    Rechts

draaien van de ultrasone motor
Const int MotorSpinPin = 3;
int spinCounter = 0;

Sensing of niet
Boole isARightWallThere = false;
Boole isALeftWallThere = false;

welke manier om te schakelen
Booleaanse rechts = true;

VOID Setup {}
Serial.begin(9600);
Serial.println ("vanaf");
Ultrasone 1
pinMode (Trig1_pin, uitvoer);        Initialiseer de puls-pin als output:
pinMode (Echo1_pin, INPUT);         Initialiseer de echo_pin pin als input:
Ultrasone 2
pinMode (7, OUTPUT);        Initialiseer de puls-pin als output:
pinMode (Echo2_pin, INPUT);         Initialiseer de echo_pin pin als input:
motoren
motorR.attach(MotorRPin);
motorL.attach(MotorLPin);
motorS.attach(MotorSpinPin);

}

void loop {}
terwijl (1 == 1) {}

Als (spinCounter < 2) {}
motorS.write(160);
}
else {}
motorS.write(20);
}
Als (spinCounter > = 3) {}
spinCounter = 0;
}

spinCounter ++;

checkTheRightWall();
checkTheLeftWall();

Als (isARightWallThere == false & & isALeftWallThere == false) {}
motorR.write(120);
motorL.write(72);

}
else {}

Als (isARightWallThere == true & & isALeftWallThere == true) {}

motorR.write(0);
motorL.write(180);
delay(300);
motorR.write(80);
motorL.write(80);
delay(500);
motorR.write(0);
motorL.write(180);

}

else {}
Als (isARightWallThere == false & & isALeftWallThere == true) {}

motorR.write(50);
motorL.write(90);

}
else {}
Als (isARightWallThere == true & & isALeftWallThere == false) {}

motorR.write(90);
motorL.write(140);
}

}

}

}

}
}

VOID checkTheRightWall () {}
digitalWrite (Trig1_pin, laag);
delayMicroseconds(2);
digitalWrite (Trig1_pin, hoge);
delayMicroseconds(10);
digitalWrite (Trig1_pin, laag);
Duur1 = pulseIn(Echo1_pin,10);
Serial.println ("Duur1:");
Serial.println (Duur1, DEC);

Als ((Duur1 > 4000 || Duur1 == 0)) {}
isARightWallThere = false;
}
else {}
isARightWallThere = true;
}

}

ongeldig checkTheLeftWall() {}
digitalWrite (7, laag);
delayMicroseconds(2);
digitalWrite (7, hoge);
delayMicroseconds(10);
digitalWrite (7, laag);
veld Duur2 = pulseIn(Echo2_pin,10);
Serial.println ("veld Duur2:");
Serial.println (Duur2, DEC);

Als ((Duur2 > 4000 || Duur2 == 0)) {}
isALeftWallThere = false;
}
else {}
isALeftWallThere = true;
}

}

Als je de tijd hebt, check out een van mijn vriend's. Hij is degene die alle de programmering voor ons deed.
Hier is de link naar zijn pagina:

Het einde
Vonk Industries,

Gerelateerde Artikelen

Chefbot: Een DIY autonome mobiele robot voor het serveren van voedsel in de hotels

Chefbot: Een DIY autonome mobiele robot voor het serveren van voedsel in de hotels

Zoals de titel al zegt, gaan we om te zien hoe het bouwen van een autonome mobiele robot genaamd Chefbot die voor het serveren van eten en drinken in hotels en restaurants.Dit was een hobby-project en ik bouwde deze robot na het zien van een robot ge
Autonome zonne-Robot fase 1

Autonome zonne-Robot fase 1

achtergrond:Hallo, mijn naam is Ben Rawstron en dit is de robot die ik op, onlangs in mijn tweedejaars gewerkt heb (tiende graad) jaar van de middelbare school. Ik heb dit project als een "onafhankelijke studie" op mijn lokale school hier in Wal
Autonome mobiele Robot met behulp van ROS clumsybot

Autonome mobiele Robot met behulp van ROS clumsybot

onze binnenshuis autonome mobiele robot met behulp van ROS, Rtabmap, raspberry pi 2, kinect, ubuntu14.04 ltsOnze afstudeerprojectonze binnenshuis autonome mobiele robot met behulp van ROS, Rtabmap, raspberry pi 2, kinect, ubuntu14.04 lts we installer
Robot Arduino fysieke Etoys Lego Technic 9390

Robot Arduino fysieke Etoys Lego Technic 9390

http://www.youtube.com/watch?v=fjEgFETZJDs&feature=player_detailpage&list=PL_OV7t1UYttjlaLJniWTt3DXYMK7F67z7Robot Arduino fysieke Etoys Lego Technic 9390Een este pequeño Robot le dotamos de dos fotorresistencias LDR para poder hacer tres programas
Robot Arduino 4x2 Scratch S4A Map

Robot Arduino 4x2 Scratch S4A Map

 -Totalmente compatible con el Robot Arduino Minibloq.Een este pequeño robot le vamos een hacer diferentes programas de forma fácil e intuitiva utilizando el programa gráfico S4A basado nl la plataforma Scratch.Lo podremos dirigir desde el teclado de
Venster schilderij Robot (arduino, verwerking, versnellingsmeter)

Venster schilderij Robot (arduino, verwerking, versnellingsmeter)

het idee voor dit project kwam uit een van mijn favoriete ' ibles: de polargraph. Ik hield van de tekening stijl en denken hoe cool zou het zijn om dit te doen aan de zijkant van een gebouw? Helaas de uitdagingen voor het opzetten van een dergelijke
Wallbots: Autonome magnetische Robots die Traverse verticale oppervlakken

Wallbots: Autonome magnetische Robots die Traverse verticale oppervlakken

dit Instructable zal je leren hoe te maken van magnetische robots die doorkruisen van verticale oppervlakken. Deze robots kunnen verplaatsen op een metalen wanden, met inbegrip van liften, whiteboards, koelkasten of metalen deuren.De robots zijn uitg
MANUAL / autonome controle ROBOT (met behulp van de SENSOR FUSION techniek)

MANUAL / autonome controle ROBOT (met behulp van de SENSOR FUSION techniek)

DTMF of Dual Tone meerdere frequentie is een handige kleine manier van controlerende machines met uw cellphone. Dit instructable toont u, zachte lezer hoe maak je een goedkoper dan vuil DTMF gecontroleerd robot die ook autonoom, yeh functioneren kan!
Autonomieën robot om te helpen met de zorg van het gazon

Autonomieën robot om te helpen met de zorg van het gazon

Ik ben momenteel de bouw van een autonomie-robot om te helpen mijn gehandicapte vrouw, ik heb de stem herkennen ion systeem om het makkelijker te bedienen ik wil toevoegen sommige persoonlijkheid aan het. Klein te beginnen met de zorg van het gazon.I
Terra Spider: Autonome sanering Robot

Terra Spider: Autonome sanering Robot

Dit project werd ontworpen en gebouwd door studenten in het programma van het platform aan het California College van de Kunsten; Manali Chitre (MAAD) Anh Vu (BArch) en Mallory Van Ness (maart). De studio-cursus creatieve het platform Machines (herfs
Vermijden Robot Arduino

Vermijden Robot Arduino

In de markt van robot, er zijn tal van slimme vermijden robot kit te koop, maar ik houd niet van om te kopen klaar kit, om oude rc auto speelgoed in opbergdoos is meer uitdaging. Het bouwen van een robot vermijden met behulp van het chassis. Mini con
Autonome brandweerman Robot

Autonome brandweerman Robot

Het is een robot die autonoom detecteren en blussen van brand. Het gebruikt vlamsensor voor detectie en arduino board voor verwerking. Brandblusser samen met de elektronische klep (actuator) wordt gebruikt de gedetecteerde brand te blussen.De robot r
Bob van de Robot - Arduino Robot kader

Bob van de Robot - Arduino Robot kader

Hallo daar collega makers!Ik zocht een mooie robot kader en ik heb geprobeerd uit veel van deze... uiteindelijk (zoals de meeste programmeurs doen) heb ik besloten dat ik mijn eigen robot kader moeten ontwikkelen!Dus wat er zo speciaal aan 'Bob The R
Autonome muur knuffelen Arduino voertuig

Autonome muur knuffelen Arduino voertuig

Met behulp van een servo gemonteerd samengestelde infrarode sensor, en een vaste voorwaartse ultrasone sensor, probeert de Rover te handhaven van een vaste afstand van een muur aan de linkerkant gelegen.Goed gedocumenteerde code is beschikbaar om u t