Linefollower robot van Arduino en junk - gedachten en code (5 / 5 stap)

Stap 5: Arduino code - robot lopen


/***
Lijn volgeling robot operatie script
Braian
***/

/ * motoren output pinnen * /
Const int heer = 6; Rechts motor vooruit pin
Const int ML = 5;  Linker motor vooruit pin

/ * sensor input pinnen * /
Const int sensorPins [] {A0, A1, A2} =; rechts, midden, links

/ * andere input en output pinnen * /
Const int ledPin = 13; LED geeft aan of de search-modus ingeschakeld is
Const int potPin = A5; voor het aanpassen van links-rechts-fout

/ * arrays voor het opslaan van sensor en berekende gegevens * /
int sensorReadings [3]; sensor lezingen rechts, centreren, links
float sensorValues [3]; sensor lezingen rechts, centreren, links
int potAdjust = 0; sensor evenwicht aanpassing met de potmeter waarde

/ * tellers, helpers enz * /
int i; algemene teller in for-lussen
int unknownCount = 0; teller van opeenvolgende lijn-onbekend-Staten
int s; PWM waarde voor snelheid

/ *** INSTELLINGEN *** /
Const int turnThreshold = 15; start op die verschil tussen links en rechts sensorreadings glad draaien (1000 eenheden schaal formulier wit op zwart)
Const int quickturnThreshold = 20; start steile draaien op welke verschil tussen linker- en sensorreadings
Const int indicateThreshold = 2; op welke lezing te overwegen lijn bekend
Const int moveLength = 55; Hoe lang moet een beweging nemen nadat snelheid heeft opgedaan (afhankelijk van het volgende van drie variabelen)
en voordat nieuwe controle van sensor staat moet worden aangeroepen (in milliseconden)
tijd het neemt om snelheid = [(maxSpeed-startSpeed) / speedStep] (in millis) huidige: 9
Const int maxSpeed = 160; Max PWM waarde voor motoren
voor het starten van de betere verhogen we de waarde van de PWM in tijd:
Const int startSpeed = 80; PWM waaruit u om te beginnen, bijvoorbeeld 1/2 van max
Const int speedStep = 10; Hoeveel PWM waarden te verhogen na elke 1 milliseconde
Const int pauseLength = 140; pauze tussen bewegingen voor betere sensorgegevens
int unknownMax = 25; na hoeveel opeenvolgende "lijn onbekend" measurings om te beginnen Zoek lijn routine

/ * SENSOR correcties voor witpunt en de "eenheid": rechts, midden, links
DEZE WAARDEN KOPIËREN UIT KALIBRATIE PROGRAMMA SERIËLE OUTPUT * /
Const int correcties [3] = {38,38,31};
Const float unitSteps [3] = {0.06,0.01,0.02};
Const float betweenReadings [2] = {219.30,233.33};

/**/

VOID Setup {}
/ * motor pinnen * /
pinMode (MIJNHEER, uitvoer);
pinMode (ML, uitvoer);
/ * sensor pinnen * /
pinMode (sensorPins [0], INPUT);
pinMode (sensorPins [1], INPUT);
pinMode (sensorPins [2], INPUT);
pinMode (potPin, INPUT);

} / / / setup

void loop {}

readSensors();
Als
(
sensorValues [0] + sensorValues [1] < 0.1 * betweenReadings [0] ||
sensorValues [1] + sensorValues [2] < 0.1 * betweenReadings [1] ||
sensorValues [0] < indicateThreshold ||
sensorValues [1] < indicateThreshold ||
sensorValues [2] < indicateThreshold
) {
unknownCount ++;
}
else {}
unknownCount = 0;
}
Als (unknownCount < = unknownMax) {}
rideLine();
}
else {}
searchLine();
}

} / / / loop

VOID readSensors() {//sets array sensorValues [] sensor lezingen met berekende correcties
voor (ik = 0; ik < = 2; i ++) {}
sensorReadings [i] = analogRead(sensorPins[i]);
sensorValues [i] = (sensorReadings [i] - corrections[i]) / unitSteps [i];
}
potAdjust = (analogRead(potPin) - 45) * 10;
} / / /readSensors

ongeldig goStraight() {}
Verhoog geleidelijk de snelheid
voor (s = startSpeed; s < = maxSpeed; s = s + speedStep) {}
analogWrite (MIJNHEER, s);
analogWrite (ML, s);
delay(1);
}
volle snelheid
analogWrite (MIJNHEER, s);
analogWrite (ML, s);
delay(moveLength);
digitalWrite (MR, laag);
digitalWrite (ML, laag);
Stop
delay(pauseLength);
}

VOID goLeft (int turnspeed) {//turnspeed = 0 -> vloeiend draaien, anders steile draaien
digitalWrite (ML, laag);
Verhoog geleidelijk de snelheid
voor (s = startSpeed; s < = maxSpeed; s = s + speedStep) {}
analogWrite (MIJNHEER, s);
if(turnspeed==0) {}
analogWrite (ML, s * 0.4);
}
delay(1);
}
volle snelheid
analogWrite (MIJNHEER, s);
if(turnspeed==0) {}
analogWrite (ML, s * 0.4);
}
delay(moveLength);
digitalWrite (MR, laag);
digitalWrite (ML, laag);
Stop
delay(pauseLength);
}

VOID goRight (int turnspeed) {//turnspeed = 0 -> vloeiend draaien, anders steile draaien
digitalWrite (MR, laag);
Verhoog geleidelijk de snelheid
voor (s = startSpeed; s < = maxSpeed; s = s + speedStep) {}
analogWrite (ML, s);
if(turnspeed==0) {}
analogWrite (MIJNHEER, s * 0.4);
}
delay(1);
}
volle snelheid
analogWrite (ML, s);
if(turnspeed=0) {}
analogWrite (MIJNHEER, s * 0.4);
}
delay(moveLength);
digitalWrite (ML, laag);
digitalWrite (MR, laag);
Stop
delay(pauseLength);
}

ongeldig rideLine() {}
verschil tussen links en rechts sensoren aangeeft, rekening houdend potentiometer accountinstellingen, turn dienovereenkomstig
Als (sensorValues [0] - sensorValues [2] > turnThreshold + potAdjust & & sensorValues [0] - sensorValues [2] < quickturnThreshold + potAdjust) {}
goRight(0);
}
anders als (sensorValues [0] - sensorValues [2] > quickturnThreshold + potAdjust) {}
goRight(1);
}
anders als (sensorValues [2] - sensorValues [0] > turnThreshold - potAdjust & & sensorValues [2] - sensorValues [0] < quickturnThreshold - potAdjust) {}
goLeft(0);
}
anders als (sensorValues [2] - sensorValues [0] > quickturnThreshold - potAdjust) {}
goLeft(1);
}
else {}
goStraight();
}

} / / /rideLine()

ongeldig searchLine() {}
digitalWrite (ledPin, hoge); aangeven van modus met LED
int searchVar = 1; Helper variabele voor het verhogen van de straal van de beweging zoeken
terwijl
(
sensorValues [0] + sensorValues [1] < 0.1 * betweenReadings [0] & &
sensorValues [1] + sensorValues [2] < 0.1 * betweenReadings [1] & &
sensorValues [0] < indicateThreshold & &
sensorValues [1] < indicateThreshold & &
sensorValues [2] < indicateThreshold
) {
Als (searchVar < = 5) {//go rechte voor een tijdje, in het geval dat eigenlijk niet verloren
goStraight();
}
else {//rightward verkeer met toenemende straal door het invoegen van rechte sequenties
voor (ik = 0; ik < 7; i ++) {}
goRight(1);
}
voor (ik = 0; ik < searchVar/5; i ++) {}
goStraight();
}
}
searchVar ++; aangeven van voltooide zoeken naar routine state
readSensors(); krijgen nieuwe lezingen
}
unknownCount = 0; teller reset
digitalWrite (ledPin, laag); einde van de zoekmodus aangeven

} / / /searchLine()

Gerelateerde Artikelen

Linefollower robot van Arduino en junk - foto's

Linefollower robot van Arduino en junk - foto's

ik maakte dit Arduino-hersenen linefollower robot voor een wedstrijd waar het niet heel goed, liep van track. Maar het was de goedkoopste robot er en ik leerde zo veel bouwen, dus ik heb enkele gedachten en Arduino code te delen ongeacht het RAS misl
Beheersing van de Motor met behulp van Arduino

Beheersing van de Motor met behulp van Arduino

Motoren met behulp van de Arduino te beheersen kunnen lastig zijn.Ten eerste vereisen motoren recenter is dan de wat Arduino output pinnen kunnen leveren. Ook kunnen motoren genereren hun eigen stroom door een proces genaamd inductie, die je circuit,
Obstakel te vermijden met behulp van Arduino Robot

Obstakel te vermijden met behulp van Arduino Robot

Hey kerels in dit instructable zullen we zien hoe maak je een autonome obstakel te vermijden Robot.This robot is ontworpen en geprogrammeerd op een zodanige wijze dat het voorkomt botsing. De robot in principe in een voorwaartse richting beweegt en w
De Wireless, obstakel detectie, piepen Robot met behulp van Arduinos!

De Wireless, obstakel detectie, piepen Robot met behulp van Arduinos!

Dit is een belemmering van het draadloos gecontroleerde, autonome robot opsporen!Een tijdje terug had ik maakte van dit Instructable en wilde maken sommige belangrijke verbeteringen sinds.De volgende zijn de robot de kenmerken:-1.he de draadloos geco
Zeer eenvoudig te maken van Arduino bluetooth spy robot met Android RemoteControl app

Zeer eenvoudig te maken van Arduino bluetooth spy robot met Android RemoteControl app

In dit project ziet u hoe eenvoudig mengsel van verschillende technologieën en derde-partij apps maakt het mogelijk om een tamelijk ingewikkelde speelgoed maken.De robot doet twee dingen:1. de Arduino gebaseerd spy robot beweegt volgens opdrachten ve
Bouw een Robot van de Arduino Gripper met een DynamixShield.

Bouw een Robot van de Arduino Gripper met een DynamixShield.

In dit instructable ik zal u tonen hoe te snel en gemakkelijk bouwen de grijper van een afstandsbediening met behulp van de robot en Arduino nul en een DynamixShield. De DynamixShield is een nieuwe add-on voor de Arduino Due, nul of Mega die ik ben b
Maken van een Robot met Arduino voor Beginners

Maken van een Robot met Arduino voor Beginners

Stap 1: Materialen die nodig zijn Tamiya Track en wiel instellen vergadering ($7.95 op Pololu)Tamiya 70168 dubbele versnellingsbak Kit ($9.25 op Pololu)L298N Dual H Bridge ($3.65 bij Amazon en misschien wel veel lager bij ebay)4AA batterijhouder (geb
Gebaar gecontroleerd robot met behulp van Arduino

Gebaar gecontroleerd robot met behulp van Arduino

Dit gebaar gecontroleerde robot gebruik Arduino, ADXL335 versnellingsmeter en RF transmitter-receiver paar.Wij zullen de hele robot verdeel in 3 delen de zender, de ontvanger en de robot.De verschillende gebaren die zijn toegewezen aan de richting va
Hoe maak je een belemmering voor het vermijden van Arduino Robot! "Mijn Robot V1"

Hoe maak je een belemmering voor het vermijden van Arduino Robot! "Mijn Robot V1"

Dit instructable toont stappen instructies voor het maken van een obstakel te vermijden met behulp van Arduino robot.Laat aan de slagmijn bloghttp://robot4pro.blogspot.com/p/My-robots.htmlStap 1: Benodigde materialenHier is alles wat die je wilt make
Robot Arm Arduino App

Robot Arm Arduino App

We hadden behoefte aan een platform voor het testen van onze nieuwe MICILE / Arduino gebruikersinterface. De robot hand en arm leek iets complex genoeg om echt het concept een uitgebreide training. Het project konden we gebruik van een MICILE Tablet,
Gebruik van Arduino Remote Control Bot t.v Remote

Gebruik van Arduino Remote Control Bot t.v Remote

Dit is een afstandsbediening Arduino Bot die kan worden bediend met elke afstandsbediening die gewone.Het belangrijkste kenmerk van dit project is een IR ontvanger TSOP1738, waarmee we kunnen gebruik maken van de knoppen van een gewone afstandsbedien
WireBeings Bèta: een 3D Printed en uitbreidbaar Robot voor Arduino met Android controle

WireBeings Bèta: een 3D Printed en uitbreidbaar Robot voor Arduino met Android controle

http://wirebeings.com/Bekijk de video hier:Dit is een mooi project waaraan u blijven kunt werken op en wijzigen naarmate je meer Arduino projecten leert. Dit Instructable doorloopt de volledige bouwen voor de bluetooth toegelaten robot in de eerste h
Obstakel te vermijden Robot met arduino

Obstakel te vermijden Robot met arduino

OBSTAKEL - VERMIJDEN ROBOTEen obstakel te vermijden ROBOT is een die kan een obstakel te vermijden met behulp van ultrasone sensor en navigeren in haar eigen pad. Met een breadboard gekoppeld aan de robot kunt u plezier spelen binnen een korte period
RC zender voor USB-Gamepad met behulp van Arduino

RC zender voor USB-Gamepad met behulp van Arduino

Waarom moet ik dit doen?Als het gaat om vliegen RC vliegtuigen die gebruikmaakt van een simulator kunnen zijn een geweldige manier om je vaardigheden tijdens het laagseizoen of zelfs voor te bereiden voor uw eerste vlucht. Het grote nadeel aan het ge