Ciao,
sto realizzando un piccolo circuito con il quale andrò a comandare un relè sulla base di quattro valori letti di un termoresistore. Il circuito è composto da n°4 led che ne identificano la fase, un pulsante per cambiare la fase, un termoresistore e un relè che piloterà il carico.
Il sistema deve, ad ogni pressione del pulsante, cambiare la fase e, in base alla lettura del termoresistore, eccitare o meno il relè; quindi:
- FASE 1: Standby, imposto temperatura molto bassa in maniera di non eccitare il relè;
- FASE 2: Minimo, imposto temperatura bassa (relè eccitato ad una temperatura minima);
- FASE 3: Medio, imposto temperatura media (relè eccitato ad una temperatura media);
- FASE 4: Massimo, imposto temperatura massima (relè eccitato ad una temperatura massima);
- Ripremo pulsante e ritorno alla FASE 1.
Premetto che con un termoresistore a seriale non ho la lettura della temperatura ma un valore x in base alla resistenza condizionata dalla temperatura.
Circuito realizzato sulla breadboard con Arduino UNO e tutti i componenti sopraindicati.
Sketch realizzato:
const byte LED1[]={ 9, 10, 11, 12 };
const int P1=2; //Pulsante cambio di stato
const int debaunceDelay=100;
const int PW=8;
const int v=A0;
const int THRS = 135; //valore termoresistore posizione Standby
const int THRL = 140; //valore termoresistore posizione Low
const int THRM = 145; //valore termoresistore posizione Medium
const int THRH = 150; //valore termoresistore posizione High
byte stato=1;
void setup() {
Serial.begin(9600);
pinMode(v, INPUT); //vlaore registrato termoresistore
pinMode(LED1[0], OUTPUT); //led standby
pinMode(LED1[1], OUTPUT); //led LOW
pinMode(LED1[2], OUTPUT); //led MIDIUM
pinMode(LED1[3], OUTPUT); //led HIGH
pinMode(P1, INPUT); //Pulsante
pinMode(PW, OUTPUT); //Relè
}
void loop() {
if(digitalRead(P1))
{
if(stato<4) stato=stato+1;
else stato=1;
}
switch(stato)
{ case 1:
analogRead(v);
Serial.println(v);
delay(500);
digitalWrite(LED1[0],HIGH);
if (v < THRS) {
digitalWrite(PW, HIGH);
}
digitalWrite(LED1[1],LOW);
digitalWrite(LED1[2],LOW);
digitalWrite(LED1[3],LOW);
digitalWrite(PW, LOW);
break;
case 2:
analogRead(v);
Serial.println(v);
delay(500);
digitalWrite(LED1[0],LOW);
digitalWrite(LED1[1],HIGH);
if (v < THRL) {
digitalWrite(PW, HIGH);
}
digitalWrite(LED1[2],LOW);
digitalWrite(LED1[3],LOW);
digitalWrite(PW, LOW);
break;
case 3:
analogRead(v);
Serial.println(v);
delay(500);
digitalWrite(LED1[0],LOW);
digitalWrite(LED1[1],LOW);
digitalWrite(LED1[2],HIGH);
if (v < THRM) {
digitalWrite(PW, HIGH);
}
digitalWrite(LED1[3],LOW);
digitalWrite(PW, LOW);
break;
case 4:
analogRead(v);
Serial.println(v);
delay(500);
digitalWrite(LED1[0],LOW);
digitalWrite(LED1[1],LOW);
digitalWrite(LED1[2],LOW);
digitalWrite(LED1[3],HIGH);
if (v < THRH) {
digitalWrite(PW, HIGH);
}
digitalWrite(PW, LOW);
break;
}
while (digitalRead(P1) == LOW)
{
delay(10);
}
delay(debaunceDelay);
}
Sono sincero; Sono un neofita di Arduino ed ho realizzato alcuni progetti sempre con il prezioso aiuto del forum.
Qui c'è farina del mio sacco insieme a qualche ricerca su internet, quindi avrò fatto sicuramente un po' di casino.
Il circuito funziona sulla commutazione della fase visibile tramite i led ma non per quanto riguarda l'eccitazione del relè sulla base della lettura del valore del termoresistore.
Grazie a tutti!!
