Tutorial Arduino n.03
Cosa impareremo:
Toccando il sensore di temperatura collegato sulla nostra breadboard, Arduino inizierà a controllare nelle varie condizioni da noi programmate se accendere i LED rossi per far capire che il sensore sta percependo calore, altrimenti(con la versione alternativa del project) misureremo e faremo accendere i LED blu per misurare un corpo freddo vicino al sensore.
Componenti Richiesti:
Programmazione:
Possiamo trovare questo codice precompilato aprendo l’IDE Arduino ,
successivamnete cliccando su File > Esempi > 10 StarterKit> p03_LoveOMeter
// il nome della costante dove è collegato il nostro sensore di temperatura. const int sensorPin = A0; // la temperatura è letta in Celsius const float baselineTemp = 21.0; void setup(){ // Arduino legge una frequenza di 9600 Baund(simboli per secondo) Serial.begin(9600); // con un ciclo for dichiariamo in sequenza i nostri 3 pin utilizzati // partendo da due perché i pin 0 e 1 sono dedicati alle comunicazioni seriali. for(int pinNumber = 2; pinNumber<5; pinNumber++){ pinMode(pinNumber,OUTPUT); digitalWrite(pinNumber, LOW); } } void loop(){ int sensorVal = analogRead(sensorPin); // invia il valore del sensore a 10 bit alla porta seriale. Serial.print("sensor Value: "); Serial.print(sensorVal); // divisione che ci permette di visualizzare i Volt corretti float voltage = (sensorVal/1024.0) * 5.0; Serial.print(", Volts: "); Serial.print(voltage); // Converte la tensione di temperatura in gradi C° // Il sensore cambia 10 mV per grado // La datasheet dice che c'è un offset 500 mV // ((Volatge - 500mV) 100 volte) Serial.print(", degrees C: "); float temperature = (voltage - .5) * 100; Serial.println(temperature); // Se la temperatura attuale è inferiore alla linea di base // Disattivare tutti i LED if(temperature < baselineTemp){ digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); } //Se la temperatura sale 2-4 gradi, accendere un LED else if(temperature >= baselineTemp+2 && temperature < baselineTemp+4){ digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); } // ise la temperatura sale 4-6 gradi, accendere i primi due LED else if(temperature >= baselineTemp+4 && temperature < baselineTemp+6){ digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, LOW); } // se la temperatura sale oltre 6 gradi, accendere tutti i LED else if(temperature >= baselineTemp+6){ digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); } delay(1); //ritardo ps:ne abbiamo parlato nel tutorial precedente } |
NOTE:
Project by Scott Fitzgerald
Schema Elettronico:
Versione alternativa(solo per Arduino Master)
Vi presentiamo due tipi di programmazione. Il primo, quello commentato, ci permettere di utilizzare 0 e 1 per indicare LED acceso e spento. L’ordine è da destra verso sinistra e il primi due bit sono quelli meno significativi, ovvero i pin 0(RX) e 1(TX).
Altrimenti c’è quella proposta nello sketch non commentata, identica, a quella proposta precedentemente.
Programmazione v2:
/* Alternative version by Antonio Gison e Daniele Poddighe */ const int sensorPin = A0; // room temperature in Celcius const float baselineTemp = 20.0; unsigned long prevmillis=millis(); //remember the previous instant of time void setup(){ // open a serial connection to display values Serial.begin(9600); // set the LED pins as outputs // the for() loop saves some extra coding for(int pinNumber = 2; pinNumber<7; pinNumber++){ pinMode(pinNumber,OUTPUT); digitalWrite(pinNumber, LOW); } } void loop(){ // read the value on AnalogIn pin 0 // and store it in a variable int sensorVal = analogRead(sensorPin); // send the 10-bit sensor value out the serial port Serial.print("sensor Value: "); Serial.print(sensorVal); // convert the ADC reading to voltage float voltage = (sensorVal/1024.0) * 5.0; // Send the voltage level out the Serial port Serial.print(", Volts: "); Serial.print(voltage); // convert the voltage to temperature in degrees C // the sensor changes 10 mV per degree // the datasheet says there's a 500 mV offset // ((volatge - 500mV) times 100) Serial.print(", degrees C: "); float temperature = (voltage - .5) * 100; Serial.println(temperature); if(millis()>= prevmillis+1000){ // delay(1000) if(temperature >= baselineTemp+2 && temperature < baselineTemp+4){ // HOT ZONE /*PORTD &=(B00000011);*/ digitalWrite(2, HIGH); //PD2 HIGH digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); /*PORTD |=B00000100; Serial.println (PORTD,BIN);*/ } else if(temperature >= baselineTemp+4 && temperature < baselineTemp+6){// HOT ZONE /* PORTD &=(B00000011);*/ digitalWrite(2, HIGH); //PD2-3 HIGH digitalWrite(3, HIGH); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); /*PORTD |=B00001100; Serial.println (PORTD,BIN);*/ } else if(temperature >= baselineTemp+6){ // HOT ZONE /* PORTD &=(B00000011);*/ digitalWrite(2, HIGH); //PD2-3-4 HIGH digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); /* PORTD |=B00011100; Serial.println (PORTD,BIN);*/ } else if (temperature <= baselineTemp-3){ // COLD ZONE /*PORTD &=(B00000011);*/ digitalWrite(2, LOW); //PD5-6-7 HIGH digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); /*PORTD |=B11100000; Serial.println (PORTD,BIN);*/ } else if(temperature <= baselineTemp-2 && temperature < baselineTemp-6){ // COLD ZONE /*PORTD &=(B00000011);*/ digitalWrite(2, LOW); //PD 5-6 HIGH digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, LOW); /*PORTD |=B11100000; Serial.println (PORTD,BIN);*/ } else if(temperature <= baselineTemp-1 && temperature < baselineTemp-2){ // COLD ZONE /*PORTD &=(B00000011);*/ digitalWrite(2, LOW); //PD5 HIGH digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, LOW); /*PORTD |=B11100000; Serial.println (PORTD,BIN);*/ } } } |
Dimostrazione:
Commenti