Blog

Arduino Duemilanove … Application #1

arduino_temperature1

Dopo mesi che avevo il termostato della mia caldaia rotto mi son deciso a prendere un Arduino, almeno la programmo come voglio, la accendo e spengo via Internet e posso avere più sensori di temperatura nelle diverse camere (mi posso pure accorgere se ho lasciato un finestra aperta).
I componenti di questo nuovo termostato sono :

  • un Arduino dueminlanove
  • un sensore di temperatura lm35
  • un relè da 5v
  • un alimentatore per mantenere l’arduino alimentato nel caso si spegnesse il server
  • un led che mi segnala lo stato del relè

praticamente il led indica quando la caldaia è in fuzione cioè il relè la accende e contemporaneamente alimenta il led. Gist’appunto ho sviluppato un programmino in Lazarus per Linux che tramite la seriale permette di visulizzare lo stato, e mi son accorto che l’Arduino ogni volta che ci si connette con la seriale (Seriale su cavo USB) si resetta, quindi i valori/parametri che mi servo come impostazione (Tipo la temperatura a cui far partire e fermare la caldaia) devo in qualche modo renderli permanenti, per questo sull’arduino è montata una EEPROM che permette lo store 30Kbytes di dati statici, e funziona come un array (ovviamente ad accesso diretto).

Detto questo è veramente bellissimo, l’LM35 è sensibilissimo, e la documentazione è facilmente reperibile dal sito della National Semiconductors.

Lo so , lo so come elettronico son un cane, non ho nemmeno messo una resistenza di abbattimento ne sul sensore di temperatura ne sul led.. ma la smania di provare la cosa al volo mi ha indotto in questa scelta scellerata di montare tutto in un minuto. Cmq sia funziona da ieri alla grande.

Il programma che gira sull’arduino al momento è banale, praticamente permette di fare le seguenti cose :

  • Si può definire la temperatura di soglia per accendere il riscaldamento da seriale
  • Il pc sempre via seriale riceve due dati : la temperatura di soglia attuale e la temperature ambiente attiva
  • Se la temperatura di reale è minore di quella di soglia fa scattare il relè

il codice del programma sull’arduino :

  1.  
  2. /*
  3.   Analog input, analog output, serial output
  4.  
  5.  Reads an analog input pin, maps the result to a range from 0 to 255
  6.  and uses the result to set the pulsewidth modulation (PWM) of an output pin.
  7.  Also prints the results to the serial monitor.
  8.  
  9.  The circuit:
  10.  * potentiometer connected to analog pin 0.
  11.    Center pin of the potentiometer goes to the analog pin.
  12.    side pins of the potentiometer go to +5V and ground
  13.  * LED connected from digital pin 9 to ground
  14.  
  15.  created 29 Dec. 2008
  16.  by Tom Igoe
  17.  
  18.  */
  19.  
  20. #include <EEPROM.h>
  21.  
  22.  
  23. // These constants won’t change.  They’re used to give names
  24. // to the pins used:
  25. float tempC;
  26. int TempC_Decimal = 0;
  27. int tempPin = 0;
  28. int DigitalPin =  13;
  29. int TemperaturaMinima = 22;
  30. int value = 0;
  31.  
  32. int sensorValue = 0;        // value read from the pot
  33. int outputValue = 0;        // value output to the PWM (analog out)
  34.  
  35. void setup() {
  36.   // initialize serial communications at 9600 bps:
  37.   Serial.begin(9600);
  38.   value = EEPROM.read(0);
  39.   if (value == 1)
  40.   {
  41.     TemperaturaMinima =  EEPROM.read(1);
  42.   }
  43.  
  44. }
  45.  
  46. void loop() {
  47.    if (Serial.available() > 0)
  48.    {
  49.       // read the incoming byte:
  50.       TemperaturaMinima = Serial.read();
  51.      
  52.       EEPROM.write(0, 1);
  53.       EEPROM.write(1, TemperaturaMinima);
  54.  
  55.    }
  56.  
  57.    tempC = analogRead(tempPin);           //read the value from the sensor
  58.    tempC = (5.0 * tempC * 100.0)/1024.0;  //convert the analog data to temperature
  59.    TempC_Decimal = (tempC – ((byte)tempC)) * 100;
  60.    Serial.print((byte)tempC);             //send the data to the computer
  61.    Serial.print((byte)TempC_Decimal);             //send the data to the computer
  62.    Serial.println((byte)TemperaturaMinima);
  63.    if (tempC < TemperaturaMinima)
  64.    {
  65.      digitalWrite(DigitalPin, HIGH);   // set the LED on
  66.      delay(4000);                  // wait for a second
  67.    }
  68.    if (tempC > (TemperaturaMinima + 1))
  69.    {
  70.      digitalWrite(DigitalPin, LOW);   // set the LED on
  71.      delay(4000);      
  72.    }
  73.    delay(200);                                    
  74. }
  75.  

il programma invece fatto con lazarus si presenta come segue :

schermata-demo-termostato-ivan

mentre i sorgenti del programma si possono scaricare dal seguente link :

[download id="12"]

a presto
ivan

5 comments on “Arduino Duemilanove … Application #1

  1. Leonardo

    Salve Ivan,

    congratulazioni per l’applicazione, la ritengo molto utile!

    Vorrei un chiarimento in merito alla conversione della temperatura dal valore Analogico a quello in gradi Celsius.

  2. Ciao Leonardo,
    il valore dell’LM35 per le temperature positive è proporzionale alla sua tensione di alimentazione , che nel caso dello schema nell’articolo è di 5V quindi torna dei valori di tensione compresi da 0 a 5V per le temperature positive mentre inverte la polarità per quelle negative il tutto facendo una proporzione con la temperatura minima e massima esprimibile dal trasduttore. Comunque trovi tutto documentato sul sito della national Semiconductors al link http://www.national.com/ds/LM/LM35.pdf . Scusa per il ritardo nella risposta ma in ferie non volevo vedere un computer nemmeno di striscio se non per guardare il meteo.
    Al momento siamo tutti impegnati con lavori / progetti / casini, quindi se migliori il progetto magari facendo anche uno schema elettrico meno banale del mio ad esempio con le giuste resistenze di abbattimento o magari che gestisca le temperature negative saremmo felici di pubblicare il tuo contributo (citando ovviamente l’autore).

    a presto
    ivan

  3. Riccardo

    Ciao a Tutti…
    Dovrei fare un mini circuito elettrico collegando tra loro arduino Uno + sensore di CO2 + striscia di led
    Il problema è come collegare il sensore ad Arduino?????
    Il sensore acquistato è questo http://tecnosens.it/products/sensors/s1–sensori-di-gas/s1–sensori-a-semiconduttore/s25–sensori-per-anidride-carbonica-(co2)/s16–cdm4161.aspx
    Ho acquistato anche la breadboard ma non so come collegarci il sensore.
    Qualcuno mi può aiutare con uno schema e alcune indicazioni?
    Alla fine devo ottenere un mini-circuito che quando rileva una elevata concentrazione di CO2 mi fa accendere la striscia di led… Ho acquistato anche la striscia di led, la batteria per alimentare la striscia di led e il relè…
    Come posso fare?

  4. Ciao Riccardo,
    ho guardato la specifica del sensore, il collegamento è abbastanza semplice , per l’alimentazione puoi usare un’uscita digitale (che appunto è a 5V) mentre il segnale di ritorno lo leggi dalla porta analogica, il valore tornato che puoi usare è un valore numerico compreso da 0 a 1000 che è proporzionale alla lettura da uno degli ingressi analogici. Attenzione però che il tuo sensore ritorna valori da 0V a 4V il che significa che devi fare le dovute proporzioni.
    Spero di esserti stato utile, se nel caso hai ancora problemi e sei di milano magari ci possiamo vedere.

    a presto
    ivan

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Scoprite cosa possiamo fare per il vostro business
I nostri linguaggi