Termostato per incubatrice

sì, nel primo test devi invertire il funzionamento, 5000 dovrebbe essere sempre acceso! infatti lui all'inizio prova a dare 55 ma la temperaturanon cambia abbastanza e allora aumenta e così via. e invece i risultatisono opposti :confused:

Invece il secondo esempio output è sempre a 0, come mai? cosa hai cambiato?

ho tolto come hai chiesto

//turn the PID on
  myPID.SetMode(AUTOMATIC);

e modificato il pid con 2,0,0 anziché 2,5,1

ok colpa mia, pensavo che

//turn the PID on
  myPID.SetMode(AUTOMATIC);

cercasse di settare i valori PID, invece metterlo in MANUAL vuol dire SPEGENERE il pid.. quindi rimettilo.

poi, poer quando riguarda i volori PID, pariamo con la sola P (infatti è p=2, i=0, d=0), devi trovare con che valoreil sistema si avvicina alla temperatura ideale, ma non fa "su e giù", ma ci resta piuttosto poco sotto. poi aggiungi un pizzico di "i", se tiene la temperatura giusta, allora fai un paio di prove aprendo l'incubatriuce, per verificare che poi torni in temperatura ababstanza in frtetta (altriemnti alza la i, ma occhio che se la alzi troopo poi quando corregge fa alazare la temperatura oltre il limite e te le cuoce le uova)

Purtroppo ho dovuto fermare il test successivo perché la scheda continua a bloccarsi, ed avendo inserito il wdt la scheda si riavvia correttamente ma con l'output a zero.

Da cosa può dipendere il continuo riavvio secondo te?

il riavvio dal watchdog :slight_smile:

se togli il watchdog, a che punto del codice si blocca?

io so di siccuro che la i2c in caso id errore è bloccante, non so sevale lo stesso per la OneWire (mi pare di no, ma va indagato) quindi questi sono i 2 valori baseda tenere d'occhio

Non comprendo la tua domanda, in che senso a che punto del codice si blocca.
Senza il watchdog il relay rimane acceso o spento a seconda se era acceso o spento, come posso trovare a che punto si blocca?

bhe io faccio cos', ad inizio e fine di ogni gruppo di operazioni scrivo qualcosa via seriale, poi quando si impalla guardo l'ultima cosa che ha scritto, e se il blocco avviene sempre in quella sezione aggiugo print fino a che non becco la sezione che offende, e cerco di lavorarla.

Utilizzare il watcdog NON è una soluzione, il watchdog lo metti su codice FUNZIONATE per far fronte a casi estremi, come uno sbalzo di tensione o un capriccio del dio random

Cosa intendi per "aggiungo print"?

forse che aggiungi più scritture dalla seriale per individuare il punto corretto?

e se il problema è nella libreria?

esatto, se il probhlema è nella libreria.. bhe pirima individua QUALE libreria e in che punto, poi nessuno ti vieta di mettere le print anche dentro la libreria

Il loop, quando si ferma, si blocca quando esegue myPID.Compute();, quindi ci sono problemi con la libreria, credo...

Come faccio ad inserire "print" nella libreria, non posso aprirlo con il programma di Arduino ma solamente con editor file di testo.

e infatti, aggiungi le print da file di testo. ricordati di aggiungere la #include "Arduino.h" oppure avrai problemi.

comunque gran brutta cosa che sia la lib ad essere fallata! però mi sembra strano, nella libreria qu' non vedi nessun loop nel compute! https://github.com/br3ttb/Arduino-PID-Library/blob/master/PID_v1/PID_v1.cpp

puoi posatre il codice della tua funzione?

grazie, però per il momento utilizzo un altro sketch per individuare le 3 costanti PID, come è meglio procedere?