Stap 6: Uitvoering van de logica van de Sensor
De IR-sensor bestaat uit een individuele IR-LED en een fotodiode IR. De IR-licht dat wordt uitgestraald door de LED lijkt het oppervlak en is teruggekaatst naar de IR fotodiode. De fotodiode geeft dan een uitgangsspanning evenredig aan de reflectie van de oppervlakte (hoge waarde voor lichte ondergrond) en laag voor zwart/donker oppervlak. In het geval van de sensoren gebruikt, een geïntegreerde schakeling op de module gegenereerd als output een eenvoudig digitaal signaal (hoge: donker; LAAG: Licht). Een potentiometer geïnstalleerd op de module (zie foto) past het juiste niveau van licht te worden beschouwd "dark" of niet. Het werkt op een manier dat wanneer de gereflecteerde licht kleur zwart/donker is, een hoog niveau van de ("1") wordt gegenereerd bij de uitvoer en een laag ("0") voor een ander lichtere kleur. Ik gebruikte hier een geïntegreerde module met 4 sensoren en en extra module met een eigen sensor (andere vorm, maar dezelfde logica). De combinatie is een array van 5 sensoren die ik denk dat is goed voor een mooie besturingselement zoals uitgelegd balg.
De array van 5 sensoren is gemonteerd op een manier dat als er slechts één sensor is gecentreerd met betrekking tot de zwarte lijn, alleen dat specifieke sensor een hoog zal opleveren. Door de andere kant, moet de ruimte tussen sensoren toe dat 2 sensoren de volledige breedte van de zwarte lijn tegelijkertijd produceren ook een hoog op beide sensoren dekken kunnen (Zie de foto's hier) worden berekend.
De mogelijke sensor-array output als volgt op een regel zijn:
- 0 0 0 0 1
- 0 0 0 1 1
- 0 0 0 1 0
- 0 0 1 1 0
- 0 0 1 0 0
- 0 1 1 0 0
- 0 1 0 0 0
- 1 1 0 0 0
- 1 0 0 0 0
Met 5 sensoren, staat een generatie van een "fout-variabele", die helpen zal om controle van de robot de positie op de lijn, als getoond balg.
Laten we van mening dat de optimale conditie is als de robot is gecentreerd, hebben de lijn gewoon bulken de "middelste sensor" (Sensor 2). De output van de array zal zijn: 0 0 1 0 0 en in deze situatie, de "fout" zal worden "nul". Als de robot tot gedreven naar links (de regel "lijkt beweging" rechts") begint moet de fout verhogen met een positief signaal. Als de robot begint te verplaatsen naar de rechterzijde (lijn "lijkt beweging" links"), op dezelfde manier, moet de fout verhogen, maar nu met een negatief signaal.
De variabele fout gerelateerde met de sensor status zal worden:
- 0 0 0 0 1 == > fout = 4
- 0 0 0 1 1 == > fout = 3
- 0 0 0 1 0 == > error = 2
- 0 0 1 1 0 == > fout = 1
- 0 0 1 0 0 == > fout = 0
- 0 1 1 0 0 == > fout = -1
- 0 1 0 0 0 == > fout = -2
- 1 1 0 0 0 == > fout -3 =
- 1 0 0 0 0 == > fout = -4
De Arduino code bekijkt, elk een van de sensoren wordt vastgesteld met een specifieke naam (denk dat de lijn volgen Sensor meer naar links moet worden toegewezen met een label "0"):
Const int lineFollowSensor0 = 12;
Const int lineFollowSensor1 = 18;
Const int lineFollowSensor2 = 17;
Const int lineFollowSensor3 = 16;
Const int lineFollowSensor4 = 19;
Opslag om de waarden van elke sensor een array variabele aangemaakt:
int LFSensor [5] = {0, 0, 0, 0, 0};
Elke positie van de matrix zal voortdurend worden bijgewerkt met de output van elk van de sensoren:
LFSensor [0] = digitalRead(lineFollowSensor0);
LFSensor [1] = digitalRead(lineFollowSensor1);
LFSensor [2] = digitalRead(lineFollowSensor2);
LFSensor [3] = digitalRead(lineFollowSensor3);
LFSensor [4] = digitalRead(lineFollowSensor4);
Met de waarde van elk van de sensoren, moet een logica worden uitgevoerd voor het genereren van de fout-variabele:
Als ((LFSensor [0] == 0) & & (LFSensor [1] == 0) & & (LFSensor [2] == 0) & & (LFSensor [3] == 0) & & (LFSensor [4] == 1)) fout = 4;
anders als ((LFSensor [0] == 0) & & (LFSensor [1] == 0) & & (LFSensor [2] == 0) & & (LFSensor [3] == 1) & & (LFSensor [4] == 1)) fout = 3;
anders als ((LFSensor [0] == 0) & & (LFSensor [1] == 0) & & (LFSensor [2] == 0) & & (LFSensor [3] == 1) & & (LFSensor [4] == 0)) fout = 2;
anders als ((LFSensor [0] == 0) & & (LFSensor [1] == 0) & & (LFSensor [2] == 1) & & (LFSensor [3] == 1) & & (LFSensor [4] == 0)) fout = 1;
anders als ((LFSensor [0] == 0) & & (LFSensor [1] == 0) & & (LFSensor [2] == 1) & & (LFSensor [3] == 0) & & (LFSensor [4] == 0)) fout = 0;
anders als ((LFSensor [0] == 0) & & (LFSensor [1] == 1) & & (LFSensor [2] == 1) & & (LFSensor [3] == 0) & & (LFSensor [4] == 0)) fout =-1;
anders als ((LFSensor [0] == 0) & & (LFSensor [1] == 1) & & (LFSensor [2] == 0) & & (LFSensor [3] == 0) & & (LFSensor [4] == 0)) fout = -2;
anders als ((LFSensor [0] == 1) & & (LFSensor [1] == 1) & & (LFSensor [2] == 0) & & (LFSensor [3] == 0) & & (LFSensor [4] == 0)) fout = -3;
anders als ((LFSensor [0] == 1) & & (LFSensor [1] == 0) & & (LFSensor [2] == 0) & & (LFSensor [3] == 0) & & (LFSensor [4] == 0)) fout = -4;