Högpresterande rad efterföljare Robot (9 / 12 steg)
Steg 9: Kalibrera linjen detektorer
Detta är kanske en enkel steg, men med denna enkla algoritm gör roboten följer den linje på samma sätt i olika spår som har olika ljusförhållanden. Varför vi behöver kalibrera cny70 sensorerna? Eftersom även om jag sagt tidigare denna sensor ger en 0 för svart och en 1024 för vit, faktiskt får inte vi nästan aldrig en rund 0-1024 eftersom det inte finns något spår där deras vita reflekterar 100% av ljuset och deras svart 0%. I den verkliga världen vi kommer förmodligen få ett värde, vi kan bara kalla det A för det mörkaste mörker på banan, och ett annat värde, kalla det B, för den ljusaste vita. Det är sant att 0 < = en < = B < = 1024. Hur kalibrerar vi roboten? Innan robot startar efter linjen kommer vi att flytta den linjen följa sensor array att göra dem alla Läs fullt svarten och den vita delen av banan.
Detta är koden för den kalibrering läsa (det kallas för 5 sekunder kalibrering gången)
void initLED() {///We initiera variablerna Läs (detta kallas en gång när programmet startar)
int x;
för (x = 0, x < 8, x ++) {
Amax [x] = 0; Amax är värdet kallas B i handledningen
Amin [x] = 1024; Amin är värdet kallas A i handledningen
}
}
void CalRead() {///We Läs kalibreringsvärden (detta kallas under perioden 5 sekunder kalibrering
L_ROJO = T1000 < 500 * 6. Vi gör den röda ledde blinka
int x;
för (x = 0, x < 7, x ++) {//For de första 7 rad efterföljare detektorer
/ *** Uppmärksamhet: vi använder T(x) eftersom det är definierad i den första delen av programmet och gör den rad efterföljaren
detektorer för att i rätt ordning 0 till 7 *** /
Amax [x] = max(amax[x],T(x)); om vi lagrar ett högre värde än sist lagrade vi ersätta det
Amin [x] = min(amin[x],T(x)); om vi lagrar ett värde lägre än sist lagrade vi ersätta det
}
Sjunde sensorn kan inte kan följas med hjälp av T(7).
Vi använder inte denna sensor för att använda linjen, vi använder det för att läsa skylten som
ges i vissa tävlingar att göra roboten vet att det finns en kurva. Strunta i det om du inte behöver den.
Amax [7] = max(amax[7],J(7));
Amin [7] = min(amin[7],J(7));
}
Så när kalibreringen tiden är slut får vi 7 värdena läsas av sensorn i C vektorn. varje sensor har dess amin (A) och dess amax (B) värde. Sedan i programmet konvertera vi bara värdet läsa (A-B) till intervallet (0-1024) med enkel matematik. Om det uppstår vi läsa ett värde mindre än A då vi anser vi läsa A, och om det ocurrs vi läsa ett högre värde än B då vi anser vi läsa B.
Detta är bara pseudo koden, fungerar inte direkt, föreslår endast med lärande.
I verkliga programmet jag delade amax [x] är B och amin [x] är A
int w = W [x]; W [x] går från 0 till 1024
w = min(w,B); Om w är högre än B, är w B
w = max(w,A); Om w är lägre än A, sedan är w A
w-= A; Vi gör w logiskt gå från 0 till B-A
w * = 1024; Nu w kommer att gå från 0 till (B-A) * 1024
w = (B-A); Och nu vi w för att gå från 0 till 1024