controllo temperatura fumi caldaia con arduino

presento il mio primo progetto con arduino per controllare la temperatura dei fumi della mia caldaia policombustibile. per il momento ho un progetto in linea di massima per capire se quello che sto per fare potrebbe funzionare. allora vorrei utilizzare arduino per leggere la temperatura dei fumi della caldaia, visualizzarlo su un display e controllare l'apertura della farfalla davanti al soffiatore per controllare la temperatura che non scenda sotto un certo livello.

per i componenti credo che ci voglia:
-arduino uno
-ad595 per leggere la termocoppia k che gia è piazzata culla canna fumaria
-un lcd 16x2
-uno stepper per motorizzare la farfalla davanti il soffiatore per parzializzare l'aria, la farfalla è questa http://www.mutmeccanica.com/catalogo/index.php?azione=cat&lang=it&cat=10 .
per i motori stepper ne ho due a disposizione prelevati da una vecchia epson stylus 640 marchiati EM290 e EM257 e sono entrambi bipolari.
Per mandare il segnale analogico 0-5v dal AD595 all'arduino bisogna prendere solo l'integrato e basta prendendo il "-" dal piedino 7 e il "+" dai piedini 8 e 9 ed alimentarlo con un 5v ai pin 4 e 11??
per pilotare lo stepper sicuramente ci va qualche transistor per non sovraccaricare l'arduino.
l'unico punto dolente di tutto questo è che mi dovrete dare una buona dritta per programmare l'arduino perchè l'unico linguaggio che conosco è l'italiano!!!

P.S. ho spostato il topic in hardware su consiglio di michele menniti

Se posso permettermi ti do un consiglio: quando si è incerti su come procedere è bene suddividere il progetto in più sketch, nel tuo caso sono tre (termocoppia, lcd e stepper).
Ti fai uno sketch per far funzionare separatamente ogni cosa poi provi ad unire il tutto; ad esempio quando hai le tre parti funzionanti provi prima a scrivere sul display il valore restituito dalla termocoppia ed infine aggiungi anche il passo passo.
Non è una buona cosa iniziare per la prima volta con un motore di recupero, ad esempio per esperienza personale ti dico che ho 4 stepper presi da vecchie stampanti ma non sono riuscito a trovarne il datasheet con le specifiche...
Ciao

io ti consiglio di usare un servo per la rotazione della farfalla (solo se la devi ruotare di 180 gradi e non di più) in questo modo ti è tutto più semplice, se hai bisogno proprio dello stepper su ebay ne ho trovato uno nuovo dalla cina con scheda di controllo a 2 euro circa :fearful:

Allora la farfalla deve ruotare di 90° al massimo ed è probabile che la collego direttamente all'asse. I due motori che ho originariamente lavoravano a 42volt ma si possono far lavorare anche a tensioni più basse come 12volt, in giro per il web ci sono alcuni esempi di funzionamento, ogni fase è di 8ohm

allora ho scelto il motore per la mia applicazione, l'ho recuperato da una vecchia stampante canon s100 che mi ha "donato" uno stepper a 4 fili, 7,5ohm a fase e 24v e un alimentatore inscatolato con doppia alimentazione 5 e 24v, li vedete in foto. ora devo scegliere un transistor per il pilotaggio, cosa mi consigliate?? intanto ordino l'arduino e il resto del materiale

allora riesumo la mia discussione, ho iniziato a lavorare su arduino e per adesso ho montato solo lcd e ad595 su arduino.
per lo sketch ho preso spunto sul progetto del lm35 con display che c'è su adrirobot. L'ho modificato solo per i pin digitali del lcd e il pin analogico per ad595. ho usato questo sketch perchè ad595 e LM35 danno in entrambi in uscita 10mV/C° ma se uso quello sketch posso misurare solo 110C° e per andare oltre ho dovuto modificare float vref, passandolo da 1.1 a 5 e analogReference da INTERNAL a DEFAULT e così riesco a leggere fino a 500 C°che mi bastano. Ora il mio pensiero è, queste modifiche possono portare danni all'integrato di arduino??
Posto lo sketch ancora provvisorio.

#include <LiquidCrystal.h>

/* Corrispondenza pin LCD <-> pin digitali di Arduino */

#define RS  12
#define EN  11
#define D7  2  
#define D6  3
#define D5  4
#define D4  5

/* Numero del pin analogico sul quale è collegato l'AD595  */
#define AD595_pin 5

/* Definizioni globali */
float vref = 5.0;	                     // Vref dell'ADC (quell'interno è di 1,1V)
LiquidCrystal lcd( RS, EN, D4, D5, D6, D7 ); // 'lcd' è una variabile di tipo LiquidCrystal */


/* Impostazione dell'hardware */

void setup() 
{
  analogReference( DEFAULT );  // per l'ADC usiamo il Vref interno da 1,1V (migliore precisione)
  analogRead( AD595_pin );       // Prima lettura "a vuoto" (serve per l'assestamento dell'ADC)
  lcd.begin( 4, 16 );           // Impostazione per l' LCD (4x16)
}

void loop()
{
  float temp = readTemp();  // legge il valore della temperatura e la memorizza nella var. temp.
  sendTempToLCD( temp );    // invia il valore al LCD
}

/* Legge la temperatura */
float readTemp()
{
  float temp = 0.0;       // valore convertito in temperatura (°C)
  int val = 0;            // valore quantizzato dall'ADC [0..1023]
  int nread = 5;          // numero di letture (da 5 a 8)
  float somma = 0.0;      // somma delle letture
  for (int i=0; i<nread; i++)
  {
    val = analogRead( AD595_pin );              // legge il dato della tensione sul pin 'LM35_pin' 
    temp = ( 100.0 *  vref * val ) / 1024.0;   // lo converte in °C
    somma += temp;                             // aggiunge alla somma delle temperature lette   
  }   
  return ( somma / nread );                     // ne calvola il valore medio 
}

/* Invia la temperatura su un LCD (modo 4bit) */
void sendTempToLCD( float temp )
{
  lcd.clear();               // Pulisce lo schermo 
  lcd.setCursor( 0, 0 );     // Va in posizione di home: colonna 1, riga 1
  lcd.print( "Temperatura FUMI");
  lcd.setCursor( 0, 1 );     // Va in posizione di home: colonna 1, riga 2
  lcd.print( temp );         // Stampa solo la parte intera della temp.
  lcd.print( ' ' );          // Stampa uno spazio
  lcd.print( (char) 223 );   // Stampa '°'
  lcd.print( 'C' );
  delay( 1000 );
}

Secondo me la scelta di usare un motore stepper ti darà dei problemi, sia per il pilotaggio che per la coppia meccanica che possono erogare.

Invece concordo con cece99 sulla scelta del un servo: costano poco, si alimentano a 5-7V, sono disponibili in molti formati e potenze, per il loro pilotaggio esiste una valida libreria per Arduino.

Anche per la termocoppia potresti avere dei problemi; al suo posto ti consiglio di usare un LM35DZ oppure il migliore TMP35, usando gli ingressi analogici.

Se poi vuoi una misura di tipo digitale, il DS18B20 è la scelta migliore (ne esiste una versione incapsulata e dotata di filo di 5m che costa € 10).

Ettore Massimo Albani

Mi spiace ma sulla termocoppia ti devo contraddire, ho appena provato il circuito sulla caldaia con la termocoppia piazzata sulla canna fumaria, con il tester piazzato in in parallelo all'uscita del ad595 ho verificato il funzionamento e devo dire che FUNZIONA EGREGIAMENTE!! Uscita ad595=1,33v - temperatura visualizzata sul display=133 gradi, poi mi sono fermato perché non mi va di tenere una bomba di calore in piena estate, quindi un passo sono riuscito a farlo!


qui simulavo l'ad595 con un trimmer da 10k e il tester leggeva la tensione di uscita dal trimmer