Stap 3: Installeren en testen van de nieuwe sensoren
De nieuwe matrix van nu 7 sensoren, is gemonteerd op een manier dat de 5 originele die uitsluitend worden gebruikt voor PID controle (en detectie van de "volledige lijn", later uitgelegd) en nieuwe 2 links om te worden gebruikt voor alleen links en rechts de detectie van doorsnede.
Als een snel overzicht, laten we niet vergeten hoe de 5 originele "digitale" sensoren werken:
Als een sensor is gecentreerd met betrekking tot de zwarte lijn, zal alleen dat specifieke sensor produceren een hoog. Door de andere kant, moet de ruimte tussen sensoren toe dat 2 sensoren kunnen dekken de volledige breedte van de zwarte lijn tegelijkertijd ook het produceren van een hoge signaal op beide sensoren worden berekend.
De werking van de 2 nieuwe "analoge" sensoren:
Als een van de sensoren is gecentreerd met betrekking tot de zwarte lijn, de uitvoer een analoge waarde, meestal produceren een output op Arduino ADC balg "100" zal worden (Vergeet niet dat de ADC een uitgang van 0 tot 1023 produceert). Met lichtere oppervlakken, de output waarde hoger zal zijn (Ik testte 500 tot 600 over het Witboek, bijvoorbeeld). Deze waarde moet worden getest op verschillende situaties van licht en oppervlakte materialen te bepalen van de juiste constante van de drempel moet worden gebruikt in uw geval (Zie de afbeelding hier).
De Arduino code bekijkt, elk een van de sensoren wordt vastgesteld met een specifieke naam (denk dat de oorspronkelijke lijn volgen Sensor meer naar links moet worden toegewezen met een label "0"):
Const int lineFollowSensor0 = 12; Via de digitale ingang
Const int lineFollowSensor1 = 18; Met behulp van analoge Pin A4 als digitale ingang
Const int lineFollowSensor2 = 17; Met behulp van analoge Pin A3 als digitale ingang
Const int lineFollowSensor3 = 16; Met behulp van analoge Pin A2 als digitale ingang
Const int lineFollowSensor4 = 19; Met behulp van analoge Pin A5 als digitale ingang
Const int farRightSensorPin = 0; Analoge Pin A0
Const int farLeftSensorPin = 1; Analoge Pin A1
Om te onthouden, zijn de mogelijke 5 originele sensor-array output als volgt op een regel:
- 1 1 1 1 1
- 0 0 0 0 0
- 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 de toevoeging van de 2 nieuwe zijn hun mogelijke uitgangen:
- Uiterst links Sensor: Analoge uitgang hoger of lager zijn dan een drempel
- Uiterst rechts Sensor: Analoge uitgang hoger of lager zijn dan een drempel
Opslag om de waarden van elke sensor een array variabele is gemaakt voor de oorspronkelijke 5 digitale sensoren:
int LFSensor [5] = {0, 0, 0, 0, 0};
En twee integer variabelen voor de 2 nieuwe analoge sensoren:
int farRightSensor = 0;
int farLeftSensor = 0;
Elke positie van de matrix en de variabelen 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);
farRightSensor = analogRead(farRightSensorPin);
farLeftSensor = analogRead(farLeftSensorPin);
Met 5 sensoren, staat zoals gezien in de volgeling lijn Robot project, het genereren van een "fout-variabele", die helpen zal om controle van de robot de positie over de lijn. Ook zal een variabele met de naam "modus" worden gebruikt voor de definitie als de robot een lijn, over een doorlopende lijn, een snijpunt of geen lijn helemaal volgt.
Deze variabele "modus" zal ook worden gebruikt met de "veel links/rechts" sensoren. Voor vertegenwoordiging, laten we de ver links en rechts sensoren hebben 3 mogelijke statussen: H (hoger dan de drempel), L (kleiner dan de drempel) en X (onbelangrijk). Voor de digitale uitgangen, zal de gebruikelijke 0, 1 en wij zullen ook introduceren de X:
- X 1 1 1 1 1 X == > modus = CONT_LINE; fout = 0;
- 0 H X X X X L == > modus = RIGHT_TURN; fout = 0; (Zie het voorbeeld in de afbeelding hierboven)
- L X X X X 0 H == > modus = LEFT_TURN; fout = 0;
- X 0 0 0 0 0 X == > modus = NO_LINE; fout = 0;
- H 0 0 0 0 1 H == > modus = FOLLOWING_LINE; fout = 4;
- H 0 0 0 1 1 H == > modus = FOLLOWING_LINE; fout = 3;
- H 0 0 0 1 0 H == > modus = FOLLOWING_LINE; fout = 2;
- H 0 0 1 1 0 H == > modus = FOLLOWING_LINE; fout = 1;
- H 0 0 1 0 0 H == > modus = FOLLOWING_LINE; fout = 0;
- H 0 1 1 0 0 H == > modus = FOLLOWING_LINE; fout = -1;
- H 0 1 0 0 0 H == > modus = FOLLOWING_LINE; fout = -2
- H 1 1 0 0 0 H == > modus = FOLLOWING_LINE; fout = -3;
- H 1 0 0 0 0 H == > modus = FOLLOWING_LINE; fout = -4;
Dus, ter uitvoering van de bovenstaande logica in de functie:
VOID readLFSsensors()
keert de variabelen "-modus" en "fout", die zal worden gebruikt op de programmalogica.
Het is belangrijk om te testen van de logica van de sensoren voor volgen met het project. De balg-functie is opgenomen in de code en kan worden gebruikt voor test doeleinden:
VOID testSensorLogic(void)
{
Serial.Print (farLeftSensor);
Serial.Print ("< links RIGH == == >");
Serial.Print (farRightSensor);
Serial.Print ("modus:");
Serial.Print (mode);
Serial.Print ("fout:");
Serial.println (fout);
}