Stap 3: Combineren motoren en fotocel sensoren
BeschrijvingIn deze stap zullen wij nemen van de drie fotocel sensoren en ze te gebruiken om te rijden op de motor snelheden. In onze code zal men verwijst de motoren aan Motor A of B van de Motor, op basis van waar ze zijn aangesloten op de motor schild, en de sensoren zullen Sensor 3, Sensor 4 en 5 van de Sensor, gebaseerd op waar ze zijn aangesloten op de analoge lezingen. Sensor 3 en 4 van de Sensor zal de directionele sensoren en Sensor 5 zullen de omgevingslichtsensor.
Algoritme
Om te controleren van de motoren, we zullen krijgen de base lezen van alle drie sensoren eerste (deze worden opgeslagen in photocellReading #).
We nemen de verschillen tussen de Sensor 3 en 5 van de Sensor (en opslaan in photocellDifference1) zo goed als het verschil tussen Sensor 4 en 5 van de Sensor (en opslaan in photocellDifference2). Dit zal ons vertellen hoe veel helderder de directionele sensoren zijn van de ambient sensor. Aangezien het licht zal worden shinning op deze sensoren, moeten de lezingen verschil vertellen hoeveel licht is wordt gericht op elke sensor.
Vervolgens aftrekken van de photocellDifference1 en photocellDifference2 van elkaar en opslaan in lrValue. Door dit verschil, zijn we in staat om te vertellen hoe veel meer licht elke directionele sensor is sensing. Als dit getal negatief is dan het middel Sensor 4 heeft minder licht dan de Sensor 3 en meer snelheid moet erop gericht zijn Motor B. Als de lrValue positief is dan betekent dit dat de Sensor 3 meer licht dan de Sensor 4 heeft en meer snelheid moet worden gericht aan Motor A.
Code
/*
int photocellReading3; de analoge lezen van de analoge weerstand scheidingslijn
int photocellReading4; de analoge lezen van de analoge weerstand scheidingslijn
int photocellReading5; de analoge lezen van de analoge weerstand scheidingslijn
int photocellDifference1;
int photocellDifference2;
int lrValue;
ongeldig setup(void) {}
Serial.begin(9600);
pinMode (12, OUTPUT); Ingewijden Motor kanaal A pin
pinMode (9, OUTPUT); Ingewijden rem kanaal A pin
pinMode (13, OUTPUT); Ingewijden Motor kanaal B pin
pinMode (8, OUTPUT); Ingewijden rem kanaal B pin
digitalWrite (13, laag); Stelt voorwaartse richting van kanaal A
digitalWrite (8, laag); Losraken van de rem voor kanaal A
digitalWrite (12, laag); Stelt voorwaartse richting van kanaal B
digitalWrite (9, laag); Losraken van de rem voor kanaal B
}
ongeldig loop(void) {}
photocellReading3 = analogRead(3); licht lezing baseren
photocellReading4 = analogRead(4); licht lezing baseren
photocellReading5 = analogRead(5); licht lezing baseren
krijgen van de verschillen tussen de sensoren voor motoren en omringende lichte sensor
photocellDifference1 = (photocellReading3 - photocellReading5);
photocellDifference2 = (photocellReading4 - photocellReading5);
verschil tussen de twee lezingen
lrValue = photocellDifference2 - photocellDifference1;
controle snelheid aan elke motor op basis van lrValue
Als (lrValue < =-120) {}
analogWrite (11, 255);
analogWrite (3, 100);
} else if (lrValue < =-90) {}
analogWrite (11, 224);
analogWrite (3, 100);
} else if (lrValue < = -60) {}
analogWrite (11, 193);
analogWrite (3, 100);
} else if (lrValue < = -40) {}
analogWrite (11, 162);
analogWrite (3, 100);
} else if (lrValue < = -25) {}
analogWrite (11, 131);
analogWrite (3, 100);
} else if (lrValue < 25) {}
analogWrite (11, 100);
analogWrite (3, 100);
} else if (lrValue < 40) {}
analogWrite (11, 100);
analogWrite (3, 131);
} else if (lrValue < 60) {}
analogWrite (11, 100);
analogWrite (3, 162);
} else if (lrValue < 90) {}
analogWrite (11, 100);
analogWrite (3, 193);
} else if (lrValue < 120) {}
analogWrite (11, 100);
analogWrite (3, 224);
} else {}
analogWrite (11, 100);
analogWrite (3, 255);
}
}
Video van de controle van de motoren lichtsensoren
Snelheid breken
In de code, kunt u bekijken we hebben een lange lijst van als anders verklaringen regelen van de snelheid van elke motor. Deze code werkt voor onze slang en onze fotocel sensor/motor combinatie. Als u het materiaal voor uw slang of vinden dat deze waarden niet voor u werken hebt gewijzigd, wanneer voel je vrij om de waarden te wijzigen, totdat u de controle van de snelheid die werkt voor u vinden. Onze slang is bedoeld om te werken bij weinig licht en een vrij snel tempo. Als u uw slang langzamer wilt, bijvoorbeeld, kunt u uit te breiden het bereik van lrValues in de als anders verklaringen, dus dat het zal een hoog aangedreven licht gericht op een sensor voordat de motoren hoogste snelheid bereiken.
We vonden ook dat elke motor een minimumwaarde van snelheid (ons was 100) nodig om te kunnen trekken van het gewicht van de slang. Er kunnen nooit een snelheid-waarde van 0 naar een motor. Als een motor volledig stoppen zou, zou het dan nemen te veel werk om de motor weer in beweging.
We vonden was het gemakkelijkste te plannen van de snelheidscontrole die in een tabel voor het schrijven van de if anders verklaringen. Dit was onze tafel:
Motor A Motor B
lrValue analoog 3 analoge 11
-∞ →-120 225 100
-119 →-90 224 100
-89 →-60 193 100
-59 →-40 162 100
-39 →-25 131 100
-24 → 24 100 100
25 → 39 100 131
40 → 59 100 162
60 → 89 100 193
90 → 119 100 224
120 → ∞ 100 225