Project 3 Love-o-Meter blz 43. terug naar de inleiding
De schets maakt gebruik van digitale pinnen 2,3 en 4 en analoge pin A0.
De analoge pin A0 wordt uitgelezen met analogRead(A0);
De schets schrijft met Serial.print data naar de seriële monitor
Serial is het seriële poort object die gebruik kan maken van communicatie functies.
Zo kan je via een poort met de computer of een board communiseren. Je kan Serial een systeem object noemen
Aanpassingen van code en hardware
ipv de temp sensor, een potentiometer van 10 k tussen gnd en de 5 volt aansluiten.
De arm van de potentiometer met pin A0 verbinden. De waarden van "sensorwaarde" kan dan variëren tussen de 0 en 1023.
met deze waarden veranderingen in het if--else statement aanbrengen
//De analoge output van de temp sensor aangesloten op analoge pin A0
//De analoge pin is een ADC (analog digital convertor)
const int sensorPin = A0; //zonder de A werkt de code ook
const float uitgangstemp = 20.0;
void setup() {
// Serial opent de seriële poort, "begin" start de communicatie,
// met het argument stel je de communicatie snelheid in.
Serial.begin(9600); //9600 bits per seconde is de snelheid van de puls trein
//met de for lus pinnen 2 t/m 4 outputpinnen maken en deze op "0" zetten
for (int pinnummer = 2; pinnummer < 5; pinnummer++) {
pinMode(pinnummer, OUTPUT);
digitalWrite(pinnummer, LOW);
}
}
void loop() {
//mbv de analogeRead() wordt de uitgansspanning van de sensorpin omgezet in een 10 bit digitaal getal
//10 bit kan een getal tussen de 0 en 1023 zijn
//dit getal wordt met analogRead(A0) in de variabele sensorwaarde opgeslagen
int sensorwaarde = analogRead(sensorPin);
//De 10-bit sensor waarde wordt via de seriele poort in de seriele monitor geprint
//De seriele monitor openen via Hulpmiddelen --> seriele monitor
Serial.print("sensor waarde: ");
Serial.print(sensorwaarde);
// zet de 10 bit sensorwaarde om in een getal om zo de uitgansspanning van de sensor weer te geven
float voltage = (sensorwaarde / 1024.0) * 5.0; //.0 omdat voltage een floating point variabele is
//De uitgangsspanning naar de seriele monitor sturen
//Zo plaats je een variabele in c++ in een string
Serial.print(", uitgangsspannning: "+(String)voltage+" volt");
//De uitgansspaninning omzetten naar temperatuur
//De spanning neemt toe met 10 mV per graad celcius
//Bij 50 graden is de spanning 1 volt en bij 0 graden 500 mv (zie de grafiek)
//dus de temp in graden is de (uitgangsspanning - 0.5)* 100
//bijvoorbeeld: 10 graden = 600 mv Dit omrekenen naar temp (0,6-0,5) * 100 = 10
Serial.print(", temp in graden celcius: ");
float temp = (voltage - .5) * 100;
Serial.println(temp);
//Als de temp lager is dan 22 graden branden de Leds niet
if (temp < uitgangstemp + 2) {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
} // Bij een temp tussen de 22 en 24 graden brand er een led
else if (temp >= uitgangstemp + 2 && temp < uitgangstemp + 4) {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
} //Bij een temp tussen de 24 en 26 graden branden er twee leds
else if (temp >= uitgangstemp + 4 && temp < uitgangstemp + 6) {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
} //Bij een temp hoger of gelijk aan 26 graden branden de 3 leds
else if (temp >= uitgangstemp + 6) {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
delay(1);
}