ho realizzato un circuito che in base alla temperatura letta da una termocoppia mi cambia la posizione dello stepper e mi indica la temperatura su un display.
Ho creato due sketch, uno che mi indica la temperatura sul display e l'altro che mi cambia la posizione dello stepper in base alla temperatura. questi sketch li ho recuperati dal web e ho modificato qualche valore e basta e funzionano bene.
questo è il codice per il display e la termocoppia
#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 );
}
e questo è per lo stepper e la termocoppia
#include <Stepper.h>
#define STEPS 1000
Stepper stepper(STEPS, 8, 9, 10, 11);
long previous = STEPS / 2;
void setup()
{
stepper.setSpeed(20);
}
void loop()
{
long val = (long)analogRead(5) * STEPS / 1024;
stepper.step(val - previous);
previous = val;
}
in futuro vorrei inserire un menù che mi permette di modificare i passi e la velocità dello stepper tramite una tastiera analogica letta su un solo pin analogico di arduino, sperando che inizzi ad imparare qualcosa a livello di programmazione!