Stap 4: Integratie van licht sensoren deel 2
Door persoonlijke voorkeur graag ik de analogRead() functioneren terugkeer 0(min) als de lichtsensor is donker en 1023(max) als het fel licht detecteert. We kunnen het oplossen van dit probleem met behulp van de software. Er zijn geen veranderingen in het circuit.
In deze sectie van code:
SensorLeft = analogRead(LeftSensor);
delay(1);
We kunnen toevoegen:
SensorLeft = 1023 - analogRead(LeftSensor);
delay(1);
Dit zal aftrekken wat waarde de analogRead() functie geeft als resultaat door 1023 (dat is de max waarde die het kan retourneren.)
Op deze manier zal het omkeren wat ooit de analogRead() geeft als resultaat de waarde.
Bijvoorbeeld, als de waarde van analogRead() x
x = 0
Sensor-waarde = 1023 - x
Sensor-waarde = 1023-0
Sensor-waarde = 1023
x = 1023
Sensor-waarde = 1023 - x
Sensor-waarde = 1023-1023
Sensor-waarde = 0
Deze methode kan worden gebruikt voor het omkeren van een willekeurige waarde, zolang je weet de maximale waarde die wordt geretourneerd.
Bijvoorbeeld, als een sensor geeft een maximum van 255:
Val = 255 - sensor waarde
Deze code uploaden naar de Arduino board en test het uit.
Code kopiëren vanaf dit punt:
/****************************************************************************************************************
-Programma voor het lezen van de twee LDRs
* gemaakt door: Anuj
* (c) copyright
*
*
* Fysieke installatie:
* Twee LDRs aangesloten op grond en analoge pin 1(Right) en analoge pin 2(left)
*
*
******************************************************************************************************************/
Met behulp van de Arduino Duemilinove
PIN definities - hecht een variabele aan een pin.
Const int RightMotor = 2; Deze pin wordt gebruikt om in- of uitschakelen van de juiste motor. Verbonden aan de basis van een NPN-transistor.
Const int LeftMotor = 3; Deze pin wordt gebruikt om in- of uitschakelen van de linker motor. Verbonden aan de basis van een NPN-transistor.
Const int RightSensor = 1; Deze pin wordt gebruikt om te lezen van de waarde van de recht-Sensor.
Const int LeftSensor = 2; Deze pin wordt gebruikt om de waarde van de Sensor links lezen.
Variabele definities
int SensorLeft; Deze slaat de waarde van de pin van de Sensor van de links te gebruiken later in de schets
int SensorRight; Deze slaat de waarde van de pin van de Sensor van het recht gebruik later in de schets
de Setup-methode wordt uitgevoerd zodra wanneer het programma wordt uitgevoerd. Wanneer de
Arduino wordt teruggesteld, de Setup wordt opnieuw uitgevoerd.
VOID Setup {}
pinMode (LeftSensor, INPUT); Hiermee definieert u deze pin als input. De Arduino leest waarden uit deze pin.
pinMode (RightSensor, INPUT); Hiermee definieert u deze pin als input. De Arduino leest waarden uit deze pin.
digitalWrite (A1, hoge); Maakt een interne pullup weerstand
digitalWrite (A2, hoge); Maakt een interne pullup weerstand
Serial.begin(9600); Kan een seriële verbinding met behulp van de Arduino USB of UART (pinnen 0 & 1). Merk op dat de baud-rate is ingesteld op 9600
Serial.println ("\nReading lichtsensoren."); Aan het eind van de void setup zo geplaatst dat het is loopt eenmaal, vlak voor de void loop
}
de loop-methode wordt uitgevoerd over en weer,
zolang de Arduino macht heeft
void loop {}
SensorLeft = analogRead(LeftSensor); Dit leest de waarde van de sensor, dan slaat het op het bijbehorende gehele getal.
delay(1); de vertraging kan de analoog naar digitaal converter IC te herstellen voor de volgende lezing.
SensorRight = analogRead(RightSensor); Dit leest de waarde van de sensor, dan slaat het op het bijbehorende gehele getal.
delay(1); de vertraging kan de analoog naar digitaal converter IC te herstellen voor de volgende lezing.
Dit gedeelte van de schets wordt gebruikt voor het afdrukken van de waarden van de
sensoren door middel van seriële naar de computer. Nuttig voor het bepalen van
Als de sensoren werken en als de code ook goed werkt.
Dit staat bekend als de foutopsporing.
Serial.Print ("Sensor links ="); De tekst binnen de aanhalingstekens wordt afgedrukt.
Serial.Print(SensorLeft); Wordt de waarde van de Sensor links afgedrukt.
Serial.Print("\t"); Wordt een tabblad (spatie) afgedrukt.
Serial.Print ("Sensor rechts ="); De tekst binnen de aanhalingstekens wordt afgedrukt.
Serial.Print(SensorRight); Drukt de waarde van de recht-Sensor.
Serial.Print("\n"); Wordt een nieuwe lijn afgedrukt immers de nodige gegevens worden weergegeven.
}
Kopieer niet om het even wat voorbij dit punt.
Nu moeten we sensoren te gebruiken met onze robot, maar we zijn nog niet helemaal klaar. We moeten een manier om deze waarden te vergelijken. Met alleen deze waarden, kunnen we bepalen of een sensor is het lezen van een meer of minder waarde dan de andere sensor, of als ze zijn precies hetzelfde.
Nu, vanwege de vele andere factoren, zoals de kleine verschillen in de productie van de LDR, jitter, EMI, enz., de waarden voor de lichtsensor zal zelden zijn precies hetzelfde. Dus in plaats daarvan, kunnen we gebruiken een ander geheel getal om te bepalen of ze ongeveer zijn hetzelfde. We kunnen dit bereiken met behulp van de berekening van het verschil tussen de twee lichtsensoren. We kunnen het aftrekken van de waarde van een sensor met de waarde van de andere sensor en dan het vinden van de absolute waarde van de sensor. Dit zal het verschil van de twee sensoren en we kunnen die onmiddellijk gebruik of bewaart het aan een ander geheel getal, in het geval dat we nodig hebben om het te gebruiken meer dan eens. De verkoopcommissie kan worden gebruikt om te bepalen als de sensoren twee verschillende waarden aan het lezen bent, of als ze zijn enigszins vergelijkbaar. Hoe hoger de waarde, hoe hoger het verschil. Met behulp van een if statement, kan ik zeggen, als de sensoren waarden binnen 100 stappen van elkaar, dit doen.
Als (SensorDifference < = 100) {}
Dit uit te voeren.
}
Meeliften uit onze vorige code die nog moet worden uitgevoerd op de Arduino board,
We kunnen het gebruiken van twee gehele getallen bevat de waarde van de sensoren om calculcate het verschil en sla het op een nieuw geheel.
De nieuwe code ziet er zo uit. De wijzigingen zijn vetgedrukt.
/****************************************************************************************************************
-Programma voor het lezen van de twee LDRs
* gemaakt door: Anuj
* (c) copyright
*
*
* Fysieke installatie:
* Twee LDRs aangesloten op grond en analoge pin 1(Right) en analoge pin 2(left)
*
*
******************************************************************************************************************/
Met behulp van de Arduino Duemilinove
PIN definities - hecht een variabele aan een pin.
Const int RightMotor = 2; Deze pin wordt gebruikt om in- of uitschakelen van de juiste motor. Verbonden aan de basis van een NPN-transistor.
Const int LeftMotor = 3; Deze pin wordt gebruikt om in- of uitschakelen van de linker motor. Verbonden aan de basis van een NPN-transistor.
Const int RightSensor = 1; Deze pin wordt gebruikt om te lezen van de waarde van de recht-Sensor.
Const int LeftSensor = 2; Deze pin wordt gebruikt om de waarde van de Sensor links lezen.
Variabele definities
int SensorLeft; Deze slaat de waarde van de pin van de Sensor van de links te gebruiken later in de schets
int SensorRight; Deze slaat de waarde van de pin van de Sensor van het recht gebruik later in de schets
int SensorDifference; / / deze waarde wordt gebruikt om te bepalen van het verschil tussen de linker- en
de Setup-methode wordt uitgevoerd zodra wanneer het programma wordt uitgevoerd. Wanneer de
Arduino wordt teruggesteld, de Setup wordt opnieuw uitgevoerd.
VOID Setup {}
pinMode (LeftSensor, INPUT); Hiermee definieert u deze pin als input. De Arduino leest waarden uit deze pin.
pinMode (RightSensor, INPUT); Hiermee definieert u deze pin als input. De Arduino leest waarden uit deze pin.
digitalWrite (A1, hoge); Maakt een interne pullup weerstand
digitalWrite (A2, hoge); Maakt een interne pullup weerstand
Serial.begin(9600); Kan een seriële verbinding met behulp van de Arduino USB of UART (pinnen 0 & 1). Merk op dat de baud-rate is ingesteld op 9600
Serial.println ("\nReading lichtsensoren."); Aan het eind van de void setup zo geplaatst dat het is loopt eenmaal, vlak voor de void loop
}
de loop-methode wordt uitgevoerd over en weer,
zolang de Arduino macht heeft
void loop {}
SensorLeft = analogRead(LeftSensor); Dit leest de waarde van de sensor, dan slaat het op het bijbehorende gehele getal.
delay(1); de vertraging kan de analoog naar digitaal converter IC te herstellen voor de volgende lezing.
SensorRight = analogRead(RightSensor); Dit leest de waarde van de sensor, dan slaat het op het bijbehorende gehele getal.
delay(1); de vertraging kan de analoog naar digitaal converter IC te herstellen voor de volgende lezing.
SensorDifference = abs(SensorRight = SensorLeft);
Dit gedeelte van de schets wordt gebruikt voor het afdrukken van de waarden van de
sensoren door middel van seriële naar de computer. Nuttig voor het bepalen van
Als de sensoren werken en als de code ook goed werkt.
Dit staat bekend als de foutopsporing.
Serial.Print ("Sensor links ="); De tekst binnen de aanhalingstekens wordt afgedrukt.
Serial.Print(SensorLeft); Wordt de waarde van de Sensor links afgedrukt.
Serial.Print("\t"); Wordt een tabblad (spatie) afgedrukt.
Serial.Print ("Sensor rechts ="); De tekst binnen de aanhalingstekens wordt afgedrukt.
Serial.Print(SensorRight); Drukt de waarde van de recht-Sensor.
Serial.print("\t"); / / wordt afgedrukt op een tabblad (spatie).
Serial.print ("Sensor verschil ="); Wordt de tekst binnen de aanhalingstekens afgedrukt.
Serial.Print(SensorDifference);
Serial.Print("\n"); Wordt een nieuwe lijn afgedrukt immers de nodige gegevens worden weergegeven.
}