Linefollower robot från Arduino och skräp - tankar och koden (4 / 5 steg)

Steg 4: Arduino kod - kalibrering



/***
Raden efter robot sensorer kamerakalibrering skript
Mikko
***/

/*
HUR DU ANVÄNDER:
Ladda upp skriptet.
Arduino har till stanna kopplet till computern.
Sensorer måste ha sin spänning som tillhandahålls.
Placera roboten helt på dess vita glidyta
förmodligen så att det finns svart linje dess vänster,
men inte i vyn av sensorer.
Tryck på arduinos reset knappen.
Efter 2 sekunder ska stift 13 ombord LED tändas.
Vit yta kalibrering measurings görs medan LED lyser - ca 2 sek.
LED kommer att gå ut efter detta.
Efter en 2 sekunder tänds fördröjning lysdioden igen.
Nu har du 5 sekunder att flytta roboten i sidled över en svart linje.
Linje måste vara till vänster när man står inför samma sätt som robot kommer att vara igång.
Du måste flytta roboten till vänster och ungefärligt i rätt vinkel till raden.
Under detta steg den maximala behandlingen tas som uppstår när en enda sensor direkt över linjen.
Inte bråttom, men alla sensorerna måste vara över linje när ledde går ut efter 5 sek.
Efter en annan 2 sek tänds fördröjning lysdioden igen.
Nu måste du flytta roboten tillbaka över linjen, motsatsen till vad du gjorde i sista steget.
Det innebär under 5 sek flytta roboten tillbaka till höger över linjen.
Viktigt: denna tid robot har att flytta höger - höger sensor har att passera över linje först!
Under detta skall gå vidtas åtgärder att säga hur lågt gör två sida vid sida sensorerna, när raden är exakt emellan två.
Measurings slutet när ledde går ut efter 5 sek.
Starta seriell monitor.
Stoppa autoscroll och kopiera korrigering värden från alla på varandra följande tre linjer till robotar ridning skript.
*/

/ * sensor ingång stift * /
CONST int sensorPins [] = {A0, A1, A2}; höger, center, vänster

/ * ombord LED stift * /
CONST int indicatorPin = 13.

/ * matriser för lagring av sensor och beräknade data
tre sensorer i varje matris:
0 - 1 - CENTER, 2 - VÄNSTER HÖGER, * /
float avläsningar [3]. sensormätningar
flyta averageReadings [3] = {0, 0, 0}; genomsnittliga avläsningar
flyta whitePoints [3] = {0, 0, 0}; behandlingen på vit yta
int blackPoints [3] = {0, 0, 0}; maximal läsning medan passerar över svart linje
float unitSteps [3]. skillnaden mellan vitt och svart dividerat med 100
int korrigeringar [3]. vita punkter som int
flyta peakDetect [3] = {0, 0, 0};
flyta betweenReadings [2] = {1024, 1024}; avläsningar när raden är emellan två sensorer, höger-CENTER, vänster-CENTER
booleska betweenState [3] = {false, false, false}; hjälpare för att veta vilka minimum för att lagra

/ * loop helper variabler * /
int i;
int j;

void setup() {

Serial.BEGIN(9600); Starta seriell övervaka att utdata efter measurings
pinMode (indicatorPin, produktionen); Ställ in Cooler ledde stift till indikera mätning läge

/ * Starta kalibreringen efter 2 sek fördröjning * /
Delay(2000);

/ * MÄTNING PÅ VIT YTA I CA 2 SEKUNDER ANTOG * /
digitalWrite (indicatorPin, hög); Onboard-LED lyser
för (jag = 0; jag < 125; i ++) {//125 avläsningar från varje sensor
för (j = 0; j < = 2, j ++) {//loop genom varje sensor
avläsningar [j] = analogRead(sensorPins[j]); få valuta
/ * beräkna genomsnittlig sensor värden * /
whitePoints [j] = (whitePoints [j] * j + readings[j]) / (j + 1); genomsnittliga från alla measurings tagit detta långt
Delay(2);
}
Delay(10);
}
digitalWrite (indicatorPin, låg); Onboard lysdioden slocknar
Delay(2000); 2 sekunders fördröjning

/ * GÅ SIDEWAYS ÖVER SVART LINJE INOM NÄSTA 5 SEKUNDER ANTOG * /
digitalWrite (indicatorPin, hög); Onboard-LED lyser
för (jag = 0; jag < 320; i ++) {//320 avläsningar från varje sensor
för (j = 0; j < = 2, j ++) {//loop genom varje sensor
avläsningar [j] = analogRead(sensorPins[j]); få valuta
om (avläsningar [j] > blackPoints[j]) {//if aktuella värde är rivjärn än en olready sparas
blackPoints [j] = avläsningar [j]; lagra om policyn
}
Delay(2);
}
Delay(10);
}
digitalWrite (indicatorPin, låg); Onboard lysdioden slocknar

/ * beräkna "enhet steg" - 1/100 av skillnaden mellan vitt och svart för varje sensor
och omvandla vita punkter till int (korrigeringar) * /
för (j = 0; j < = 2, j ++) {
unitSteps [j] = (blackPoints [j] - whitePoints [j]) / 1000;
korrigeringar [j] = (int) (whitePoints [j] + 0,5);
}

Delay(2000); 2 sekunders fördröjning

/ * GÅ SIDLEDES (TILL HÖGER!) UNDER SVART LINJE INOM NÄSTA 5 SEKUNDER ANTOG * /
digitalWrite (indicatorPin, hög); Onboard-LED lyser
för (j = 0; j < = 2, j ++) {//to återanvända denna array, satt allt till 0
blackPoints [j] = 0;
}
för (jag = 0; jag < 320; i ++) {//320 avläsningar från varje sensor
för (j = 0; j < = 2, j ++) {//loop genom varje sensor
avläsningar [j] = (analogRead(sensorPins[j]) - corrections[j]) / unitSteps [j]; få valuta för varje i sista enheter
}
för (j = 0; j < = 2, j ++) {//loop genom tre sensormätningar
om (avläsningar [j] > blackPoints[j]) {//if nuvarande behandlingen är större än lagrade maxima
blackPoints [j] = avläsningar [j]; lagra om appicable
}
annars om (avläsningar [j] + 30 < blackPoints[j]) {//if behandlingen minskar (lagrade är större än nuvarande)
betweenState [j] = true; Ange i denna variabel att sensorn har flyttat över maximalt läsa (linje)
}

om (betweenState [0] == true & & betweenState [1] == false) {//if sensor förstabehandlingen har passerat sin maxima och andra har inte
om (betweenReadings [0] > avläsningar [0] + readings[1]) {//if lagrade summan av två sensormätningar är större än nuvarande summan
betweenReadings [0] = avläsningar [0] + avläsningar [1]. lagra i tillämpliga
}
}
annars om (betweenState [1] == true & & betweenState [2] == false) {//if sensor andrabehandlingen har passerat sin maxima och tredje har inte
om (betweenReadings [1] > avläsningar [1] + readings[2]) {//if lagrade summan av två sensormätningar är större än nuvarande summan
betweenReadings [1] = avläsningar [1] + avläsningar [2]. lagra i tillämpliga
}
}
Delay(2);
}
Delay(10);
}
digitalWrite (indicatorPin, låg); Onboard lysdioden slocknar

} / / / setup

void loop() {

/ * skriva ut resultat i följetong monitor * /
Serial.Print ("const int korrigeringar [3] = {");
Serial.Print(Corrections[0]);
Serial.Print(",");
Serial.Print(Corrections[1]);
Serial.Print(",");
Serial.Print(Corrections[2]);
Serial.println("};");
Serial.Print ("const float unitSteps [3] = {");
Serial.Print(unitSteps[0]);
Serial.Print(",");
Serial.Print(unitSteps[1]);
Serial.Print(",");
Serial.Print(unitSteps[2]);
Serial.println("};");
Serial.Print ("const float betweenReadings [2] = {");
Serial.Print(betweenReadings[0]);
Serial.Print(",");
Serial.Print(betweenReadings[1]);
Serial.println("};");
Serial.println("");

} / / / slinga

Se Steg
Relaterade Ämnen

Linefollower robot från Arduino och skräp - bilder

jag gjorde detta Arduino-brained linefollower robot för en tävling där det inte gjorde mycket bra, sprang ut från spåret. Men det var den billigaste roboten det och jag lärde mig så mycket bygga det, så jag har några tankar och Arduino kod att dela o...

Mobil kontrollerade robotic bilen med arduino och DTMF

Hej killar!Detta är mitt första projekt på instructables, hoppas du kommer att njuta av denna.Detta projekt handlar om hur du kan kontrollera en robotic bil med hjälp av mobiltelefon och hur du kan kontrollera att bil från var som helst i världen.Pro...

Kontrollera en Roomba robot med Arduino och Android

(Om du gillar detta Instructable, glöm inte att rösta på den - ovan: högra hörnet flaggan. Det tävlar på AUTOMATION tävling. Tack så mycket! ;-)Som en av robotteknik tävling 2016 vinnarna här på Instructables fick jag som pris en iRobot Roomba Create...

Bygga din Internet kontrollerad Video-Streaming Robot med Arduino och Raspberry Pi

< the Instructable och koden är redo. Njut! Lämna en kommentar med du feedback! >Jag är (aka LiquidCrystalDisplay / Itay), en 14 år gammal student från Israel lärande i Max Shein Junior High School för avancerad vetenskap och matematik. Jag gör dett...

2-wheel Self Balancing Robot med hjälp av Arduino och MPU6050

2-Wheel Self Balancing Robot med hjälp av Arduino och MPU6050.Använda Arduino som controller och sensor MPU6050 för att styra balansen. Bara lägga till en enkel seriell Bluetooth-modul och använda en Bluetooth Serial Controller APP för Android-telefo...

Trådlöst styr en Robot med hjälp av Arduino och RF-moduler!

/*Redigera 05/05/2016Hej killar, jag har varit upptagen med college och kunde inte svara på commments. De flesta av y'all ville koden och scheman gjort lite bättre så jag har gjort scheman på Eagle 7.2.0 och laddat upp allt på Github.Här är länken: h...

Gest kontroll car(robot) med Arduino och Android(bluetooth)

Hej folk,Här är ett intressant projekt för alla er kreativa hjärnor ute. Vi ska bygga en android-telefon kontrollerade RC bil.Inget kunde vara mer fascinerande än avlägsen kontrollerade bilar. Denna använder en Bluetooth för kommunikation och acceler...

Hinder Avoider Robot använder Arduino Uno och IR-närhet Sensor

Följ stegen för att skapa ett hinder undvika Robot använder Arduino Uno och IR-rörelsesensorSteg 1: Delar krävs1) Arduino Uno R3 (klon kommer att göra)2) IR närhet sensorer (2 rekommenderas)3) chassi med motorer4) bakbord5) L293D Motor förare ombord6...

2WD röst kontrollerat Robot med Arduino och BitVoicer Server

I detta Instructable ska jag visa hur man bygger en 2WD röststyrd robot. Även om jag kontrollera endast DC motorer om du vill flytta roboten, samma tillvägagångssätt kan användas till röststyrning stegmotorer och servomotorer, så om du planerar att b...

BYGGA din egen INSEKT ROBOT med hjälp av ARDUINO och SERVO

Hej är, jag tillbaka med en mer instructalble. Jag kommer att lära dig att bygga en insekt roboten genom att använda Arduino och servomotorer. Låter coolt, rätt?. Vad du tycker om användningen av denna robot? På grund av sin kompakta storlek de kan a...

Bygga en enkel Robot med hjälp av en Arduino och L293 (H-brygga)

Hej gott folk, detta är min första instructable, och jag är här för att visa hur man bygger en enkel robot med lite Arduino programmering oroa inte dig, jag har bifogat kodfilen nedan, du kan använda den som referens.De som har ingen aning om en Ardu...

Rover robot - Arduino och lasercut plywood

Rover Robot är den mest grundläggande konstruktion som du kan bygga med LOFI Robot EDUBOX kit. Rover är en bas för de flesta andra robot konstruktioner som hinder skatteundandragande, ljus efter, målning, kontrollera över bluetooth, etc.LOFI Robot är...

Avlägsen kontrollerade robot med Arduino och T.V. remote

Denna fjärrkontroll bil kan flyttas runt med praktiskt taget alla slags remote såsom TV, AC etc.Det använder sig av det faktum att fjärrkontrollen avger IR(infrared).Den här egenskapen är gjord använda av med hjälp av en IR-mottagare, vilket är en my...

Hemgjord robotarm med hjälp av standarddelar använder Arduino och en bearbetning GUI

Jag nyligen pensionerad och saker jag lovat mig själv var att när jag slutar jag skulle slutföra alla de projekt som jag hade sprungit runt i mitt huvud sedan jag var tonåring. Det är omkring 50 år eller så av projekt. På den tiden fanns det inga mik...

Arduino och 3d-utskrifter (ARDUI3D) for DUMMIES

Teknik: Välkommen till Arduino och 3D-utskrifter för DUMMIES... Med utvecklingen i elektroniken och tillverkningsområden under de senaste åren, är vi kvar med en bra kombination av teknik som kan kombinera och skapa en underbar plats för utforskning...

AAA Robot (autonoma Analog Arduino)

The AAA Robot är en perfekt robot för nybörjare. Den är mångsidig, lätt att bygga, och diskuterar många av de ämnen som roboticists behöver lära sig, inklusive men inte begränsat till transistor switchar, motor kör nad analoga sensorer. Detta Instruc...

Gör en enkel trådlös RF robot använder Arduino!

UPPDATERING: JAG HAR LAGT JOYSTICK KONTROLL TILL DENNA ROBOT. HÄNVISAS TILL STEG 7 OM DU VILL STYRA DIN ROBOT VIA JOYSTICK.HejDetta är min första instructable och i denna tutorial, jag ska visa dig, hur man bygger en enkel trådlös robot med hjälp av...

Hur du använder grafisk programmering programvara program Arduino och robotar?

Hej alla, sista gången jag såg en rolig robot att lära barnen robotteknik (du kan få mer information om deras Kickstarter sida). Men jag är mer intresserad av grafisk programmering språk mBlock. Det sägs vara en grafisk programmering miljö (baserat p...

Enkel automatisk flytta Robot använder arduino & L293d IC

detta är en grundläggande Robot drivs av en arduino och vad den gör är att det bara strövar runt och följa en cirkulärbana genom standardkod men du kan ändra koden för att ändra sökvägen lätt. Det är ett enkelt projekt som alla kan bygga. . Så om du...