Si blocca dopo due giorni

Ho un problema con un circuito creato con arduino, si basa su INPUT e OUTPUT.
si tratta di un programma che attiva e spegne delle resistenze di riscaldamento e ventole per raffreddare l'aria da mantenere una temperatura costante in una stanza(esiste una scheda di potenza con rele pilotati da transistor attivati da arduino).
E stato previsto una finestra motorizzata per un rapido raffreddamento di temperatura(Motore UP-DP)

int PullRiscalda = 2;          // INPUT normalmente aperto 
int PullFreddo = 3;            // INPUT normalmente aperto
int scena = 5;                  // variabile per memoria allarme e LED segnlazione
int LEDstufa = 7;              // OUTPUT attivazione rele,(per test LED)
int LEDventola = 6;           // OUTPUT attivazione rele,(per test LED)
int MotoreUP = 13;           // attivazione motore (per test LED)
int MotoreDP = 12;           // attivazione motore (per test LED)


// la setup routine che viene eseguita una sola volta:
void setup() {

  pinMode(PullRiscalda, INPUT);
  pinMode(PullFreddo, INPUT);

  // forza il pin D2 e D3 a livello alto sfruttando la resistenza di pull-up interna ad arduino

  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);


  pinMode(LEDstufa, OUTPUT);         
  pinMode(LEDventola, OUTPUT);     
  
  pinMode(MotoreUP, OUTPUT);       
  pinMode(MotoreDP, OUTPUT);       
  pinMode(scena, OUTPUT);          

  Serial.begin(9600);
  Serial.println("Avvio sistema");
}
// la loop routine che viene eseguita infinite volte:

void loop() {
 

  // leggi il pin di ingresso e salvalo nella variabile "buttonState":

  int buttonState = digitalRead(PullRiscalda);

  // se la variabile "buttonState" è a livello "basso" accendi la fase di riscaldamento.

  if (buttonState == LOW)
  {
    digitalWrite(LEDstufa, HIGH);
    digitalWrite(LEDventola, HIGH);
    Serial.println("ON");
  }
  else
  {
    digitalWrite(LEDstufa, LOW);
    Serial.println("LEDstufa-Ledventola");
    digitalWrite(LEDventola, LOW);
    Serial.println("OFF");
  }
 

// leggi il pin di ingresso e salvalo nella variabile "buttonState1":

  int buttonState1 = digitalRead(PullFreddo);

  // se la variabile "buttonState1" è a livello "basso"accendi la fase di raffreddamento. 
 
 if (buttonState1 == LOW)
  {
   

    digitalWrite(LEDstufa, LOW);
    digitalWrite(LEDventola, HIGH);
    digitalWrite(MotoreUP, HIGH);
    digitalWrite(MotoreDP, LOW);
    digitalWrite(scena, HIGH);     /// allarme memoria per reset premere pulsantino RESET arduino


    Serial.print("Allarme Temperatura");


  }
  else
  {
    
    digitalWrite(MotoreUP, LOW);
    digitalWrite(MotoreDP, HIGH);
    Serial.println("Stop Allarme");
  }
  

}

Ovviamente e molto semplice, chi ha idea e consigli gli sarei molto grado.

Non riesco a capire il perchè, funziona bene e poi dopo due giorni va in blocco, devo togliere alimentazione e inizia a funzionare.

Mi sapreste dire se ho sbagliato qualcosa!!!!!!!!

premesso che non sono un esperto, la parte software mi sembra relativamente semplice e non credo dipenda da quello.
prova ad andare a tentativi con l'hardware... parti con un solo sensore e vedi se si blocca lo stesso. poi aggiungi gli altri pezzi uno per volta e vedi quando inizia a bloccarsi... ti ci vorrà del tempo ma almeno trovi la causa...
alla peggio c'è watchdog... ma più che una soluzione è una pezza...

con "va in blocco" cosa intendi?

Che Arduino usi? come lo alimeni? Che scheda relé? Che sensori usi?

Ciao Uwe

domanda da nubbio, ma in quel modo ad ogni loop non ti stampa di continuo On o Off e Allarme temperatura o Stop allarme sulla seriale?

Buona Pasqua a tutto il forum!

uwefed:
con "va in blocco" cosa intendi?

Che Arduino usi? come lo alimeni? Che scheda relé? Che sensori usi?

Ciao Uwe

Si blocca, non esegue piu le uscite,devo per forza togliere alimentazione e poi funziona

Atmega 328P- viene alimentato da un alimentatore a 12 Vdc, collegando un 7805 (regolatore di tensione) abbassando a 5 volt.- Uso una scheda rele creata con dei transistor npn- come sensori sto usando dei sensori esterni che mi chiudono il condatto in caso di superamento di temperatura impostata da NO-NC (normalmente open -normalmente chiuso)

Buona Pasqua a tutti!

-zef-:
domanda da nubbio, ma in quel modo ad ogni loop non ti stampa di continuo On o Off e Allarme temperatura o Stop allarme sulla seriale?

Buona Pasqua a tutto il forum!

Si hai ragione mi stampa sempre in continuazione,mi consigli come potrei evitare!

Buona Pasqua!

AuAnWeb:
Si blocca, non esegue piu le uscite,devo per forza togliere alimentazione e poi funziona

Atmega 328P- viene alimentato da un alimentatore a 12 Vdc, collegando un 7805 (regolatore di tensione) abbassando a 5 volt.- Uso una scheda rele creata con dei transistor npn- come sensori sto usando dei sensori esterni che mi chiudono il condatto in caso di superamento di temperatura impostata da NO-NC (normalmente open -normalmente chiuso)

Buona Pasqua a tutti!

Percui é una scheda costruita da te?

Ciao Uwe

uwefed:
Percui é una scheda costruita da te?

Ciao Uwe

ho usato Arduino UNO per il progetto, ma non avendo un altro a disposizione ho usato Atmega esterno per testare in modo molto grezzo il programma che a mio parere dovrebbe funzionare all'infinito, ma non e cosi..

nei test ho tolto anche la funzione serial Monitor per evitare di scrivere ogni volta l'evento ON-OFF eccc.

Ce qualche errore sul programma?????

Quante conoscenze hai di Elettronica?
Non tante?
Allora temo che il circuito é sbagliato.

Ciao Uwe

AuAnWeb:
Si hai ragione mi stampa sempre in continuazione,mi consigli come potrei evitare!

Buona Pasqua!

non so se è il modo più corretto ma userei una variabile booleana in questo modo:

if (buttonState == LOW)
  {
    digitalWrite(LEDstufa, HIGH);
    digitalWrite(LEDventola, HIGH);
    if (boolean = true) 
    {
        Serial.println("ON");
        boolean = false;
    }
  }
  else
  {
    digitalWrite(LEDstufa, LOW);
    Serial.println("LEDstufa-Ledventola");
    digitalWrite(LEDventola, LOW);

    if (boolean = false) 
    {
        Serial.println("OFF");
        boolean = true;
    }
  }

>AuAnWeb: NON ho ancora visto né uno schema né come hai fatto le alimentazioni, né link hai moduli che hai usato (relé, sensori, ecc.) ... senza è difficile diagnostica il problema.

Guglielmo

uwefed:
Quante conoscenze hai di Elettronica?
Non tante?
Allora temo che il circuito é sbagliato.

Ciao Uwe

non sono un esperto, ma allego schema come richiesto da Uwe e Gugliermo.

gpb01:
>AuAnWeb: NON ho ancora visto né uno schema né come hai fatto le alimentazioni, né link hai moduli che hai usato (relé, sensori, ecc.) ... senza è difficile diagnostica il problema.

Guglielmo

Schema funzionale

Sensore che mi da un condatto pulito

Guardando lo schema avrei ...

  1. comandato i relè tramite opto isolatori
  2. alimentato i relè con un alimentazione completamente distinta separata da quella di Arduno

in questo modo avresti avuto il completo isolamento tra Arduno e la parte comando ... e, se fai un po' di ricerche qui sul forum, vedrai che il 90% delle volte il problema è proprio li ... ::slight_smile:

Guglielmo

gpb01:
Guardando lo schema avrei ...

  1. comandato i relè tramite opto isolatori
  2. alimentato i relè con un alimentazione completamente distinta separata da quella di Arduno

in questo modo avresti avuto il completo isolamento tra Arduno e la parte comando ... e, se fai un po' di ricerche qui sul forum, vedrai che il 90% delle volte il problema è proprio li ... ::slight_smile:

Guglielmo

  1. ottimo consiglio
  2. il problema potrebbe essere un problema di assorbimento!!!!ma i rele consumano 50mA cadauno

arduino e molto critico con l'alimentazione?

AuAnWeb:
2. il problema potrebbe essere un problema di assorbimento!!!!ma i rele consumano 50mA cadauno

NON è un problema di assorbimenti (anche se occorre tenerne conto nel calcolo dell'alimentatore dedicato), è un problema di ritorno dei disturbi elettromagnetici attraverso le linee di alimentazione. Se ne è parlato una infinità di volte.

Non per nulla, ogni volta che qualcuno compra un modulino con i relè, gli schemi che si suggeriscono sono tutti basati su questa configurazione (© Brunello):


... e come vedi gli opto sono controllati da Arduino mentre l'alimentatore alimenta solo la sezione relè.

Guglielmo

Ci sono molti errori:

U1 é un regoaltore 5V e dovrebbe produrre 12V?
R1 é troppo piccolo. Il LED LED1 prende 45mA e si romperá. Stessa cosa per LED 2, LED 3 e LED 4
Metti dei 0,1µF vicino ai stabilizzatori tra GNd e entrata e GND e uscita piú vicino possibile.
U4 colleghi i 12V a VCc e i 5V a GND
Non puoi alimenare U5 dal ATmega328
R3 é troppo piccolo (pullup sul reset) usa un 10kOhm.
Le resistenze di base dei transistori (R11, R10 e R9) sono probabilmente troppo piccole. Che transistori usi?

Cosa sono U4 e U5
Cosa colleghi ai relé J2 , J3, J4?
cosa é collegata a J8?
a J5, J6 e J7??

Gli stabilizzatori hanno alette di raffreddamento?
Che tensione dai al Power plug?

Ciao Uwe

gpb01:
NON è un problema di assorbimenti (anche se occorre tenerne conto nel calcolo dell'alimentatore dedicato), è un problema di ritorno dei disturbi elettromagnetici attraverso le linee di alimentazione. Se ne è parlato una infinità di volte.

Secondo me puó essere un problema di assorbimento.

I relé assorbono 50mA ma il LED altri 50mA. Con 2 relé collegati assorbe giá piú di 300mA sui 12V. (stima senza sapere cosa é collegato ai connettori J5 a J8). Potrebbero essere troppi per lo stabilizzatore 12V se non é raffreddato a dovere.
Ciao Uwe

uwefed:
Ci sono molti errori:

U1 é un regoaltore 5V e dovrebbe produrre 12V?

in effetti U1 e un 7812, ma sul schema e sbagliato la sigla

uwefed:
R1 é troppo piccolo. Il LED LED1 prende 45mA e si romperá. Stessa cosa per LED 2, LED 3 e LED 4
Metti dei 0,1µF vicino ai stabilizzatori tra GNd e entrata e GND e uscita piú vicino possibile.

R1 e di 820 Ohm, R8-R7-R6- sono da 330 Ohm

uwefed:
U4 colleghi i 12V a VCc e i 5V a GND

U4-U5 sono delle predisposizioni a stripp con possibilità di collegare qualcosa (morsetti)

uwefed:
Non puoi alimenare U5 dal ATmega328

Perche non posso alimentare ATmega da U5? Ho una tensione costante a 5 volt

uwefed:
R3 é troppo piccolo (pullup sul reset) usa un 10kOhm.

R3 ho messo una resitenza da 10Kohm, ma sullo schema per dimenticanza ho lasciato le resistenze come valore di default

uwefed:
Le resistenze di base dei transistori (R11, R10 e R9) sono probabilmente troppo piccole. Che transistori usi?

Ho messo delle resistenze da 1kohm e sono i classici BC337

uwefed:
Cosa sono U4 e U5

U4-U5 sono delle predisposizioni a stripp con possibilità di collegare qualcosa (morsetti)

uwefed:
Cosa colleghi ai relé J2 , J3, J4?

dei condattori di potenza per carichi pesanti

uwefed:
cosa é collegata a J8?

a J5, J6 e J7??

J8 uscita per un led con relativa resistenza da 820Ohm
J5 collego il comune e NO del rele del termometro
J6 collego il comune e NO del rele del termometro
j7 non usato, ma potrebbe essere usato per un ingresso analogico

uwefed:
Gli stabilizzatori hanno alette di raffreddamento?

Non estato applicato nessuna aletta di raffredamento

uwefed:
Che tensione dai al Power plug?

12 Vdc da 2A