Arduino Duemilanove ... Application #1Arduino 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. #include <EEPROM.h>
  4.  
  5.  
  6. // These constants won’t change.  They’re used to give names
  7. // to the pins used:
  8. float tempC;
  9. int TempC_Decimal = 0;
  10. int tempPin = 0;
  11. int DigitalPin =  13;
  12. int TemperaturaMinima = 22;
  13. int value = 0;
  14.  
  15. int sensorValue = 0;    // value read from the pot
  16. int outputValue = 0;    // value output to the PWM (analog out)
  17.  
  18. void setup() {
  19.  // initialize serial communications at 9600 bps:
  20.  Serial.begin(9600);
  21.  value = EEPROM.read(0);
  22.  if (value == 1)
  23.  {
  24.   TemperaturaMinima =  EEPROM.read(1);
  25.  }
  26.  
  27. }
  28.  
  29. void loop() {
  30.   if (Serial.available() >0)
  31.   {
  32.    // read the incoming byte:
  33.    TemperaturaMinima = Serial.read();
  34.    
  35.    EEPROM.write(0,1);
  36.    EEPROM.write(1,TemperaturaMinima);
  37.  
  38.   }
  39.  
  40.   tempC = analogRead(tempPin);     //read the value from the sensor
  41.   tempC = (5.0 * tempC * 100.0)/1024.0//convert the analog data to temperature
  42.   TempC_Decimal = (tempC –((byte)tempC)) * 100;
  43.   Serial.print((byte)tempC);      //send the data to the computer
  44.   Serial.print((byte)TempC_Decimal);      //send the data to the computer
  45.   Serial.println((byte)TemperaturaMinima);
  46.   if (tempC <TemperaturaMinima)
  47.   {
  48.    digitalWrite(DigitalPin,HIGH)// set the LED on
  49.    delay(4000);         // wait for a second
  50.   }
  51.   if (tempC >(TemperaturaMinima + 1))
  52.   {
  53.    digitalWrite(DigitalPin,LOW)// set the LED on
  54.    delay(4000);   
  55.   }
  56.   delay(200);                  
  57. }
  58.  

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:

  Arduino_Lazarus.zip (3.1 MiB,469 hits)

a presto
ivan

8 comments to Arduino Duemilanove …Application #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.

    [Reply]

    ivan Reply:

    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

    [Reply]

  • 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?

    [Reply]

    ivan Reply:

    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

    [Reply]

  • Mah…..ammetto che non ero molto informato e sono abbastanza stupito.

    [Reply]

  • Simone

    Ciao!
    Ho scovato questo post in rete cercando informazioni per comunicare tramite seriale con Lazarus.
    Vedo con piacere che il modo c’è! Fantastico! Proprio quello che mi piacerebbe fare (Arduino + Lazarus).
    Che librerie hai usato per la comunicazione seriale?
    Funziona sia su linux che su Windows?
    Complimenti!

    [Reply]

    ivan Reply:

    Ciao Simo,
    ti confermo che la mia caldaia funziona ormai da quattro anni con l’arduino come descritto.
    Ti confermo inoltre che la libreria che ho usato per comunicare con la seriale è ben descritta all’articolo precedente http://www.synaptica.info/2009/12/23/serial-comunication-on-fpc-target-hw-arduino/ e funziona benissimo su linux e windows. Ora avevo in mente di utilizzare un tablet spazzatura come interfaccia con Arduino per cui il prossimo progetto è quello di fare una app-android in modo da gestire via internet l’accensione e spegnimento della caldai.

    Inoltre ti dico che questo progetto,anche se finanziato da synaptica è assolutamente amatoriale per cui non ci prendiamo alcuna responsabilità in merito.

    a presto
    ivan

    [Reply]

  • Simone

    Ci mancherebbe per le responsabilità!
    Grazie per la dritta! Presto proverò le librerie per Lazarus,mi basta sapere che posso farli comunicare e poi il resto lo fa l’immaginazione!
    Buon lavoro!

    [Reply]

Leave a Reply

Connect with Facebook

  

  

  

You can use these HTML tags

<a href=""title=""><abbr title=""><acronym title=""><b><blockquote cite=""><cite><code><del datetime=""><em><i><q cite=""><strike><strong>