Go Down

Topic: Termostato per incubatrice (Read 6998 times) previous topic - next topic

lestofante

ok, allora mi sono il perso il pezzo in cui fai:
Code: [Select]
myPID.SetOutputLimits(0, WindowSize);

quindi in pratica il pid.compute() mette in output la durata del segnale ALTO in un PWM con periodo WindowSize.


quindi mi aspetto che all'inizio Output sia == a WindowSize, mano a mano che la temperatura si avvicina al valore desiderato (Setpoint = 37.7;) Output deve diminuire fino ad essere 0 (o quasi, potrebbe rimanere non zero per mantenere la temperatura x combattere le fughe di calore).

puoi alegare l'output della Seriale?

e poi fare una altro test in cui togli
Quote
//turn the PID on
  myPID.SetMode(AUTOMATIC);


e lasci solo

Quote
PID myPID(&Input, &Output, &Setpoint,2,0,0, DIRECT);
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

kenzoultra

#16
May 14, 2014, 09:23 pm Last Edit: May 14, 2014, 09:26 pm by kenzoultra Reason: 1
Questo la seriale con il codice originale
https://www.dropbox.com/s/12bqzlny6cpmbxg/primo%20test.txt


lestofante

a me sembra ok. dal tuo codice la temperatura desiderata è di 37.7°
io vedo che output sale sempre di valore (ovvero la R rimane accesa perpiù tempo) fiono ad arrivare a 5000 (semrpe accesa) perchè NON risce a raggiungere i 37.7°, anzi, si nota bene che ad un certo punto a 28° la temperatura iniziaa SCENDERE, segno che qualcosa è andato storto ma non certo lato output di arduino.
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

kenzoultra

secondo test
https://www.dropbox.com/s/wxn774h1ukeaymf/secondo%20test.txt

kenzoultra

Purtroppo però non è così, se guardi ho inserito anche quando il relay è attivo (rele 1) e quando spento (rele 0), quando arriva a 5000 rimane sempre spento.

Provo ad invertire?

La seconda prova rimane sempre acceso.

lestofante

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 :/

Invece il secondo esempio output è sempre a 0, come mai? cosa hai cambiato?
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

kenzoultra

ho tolto come hai chiesto

Code: [Select]
//turn the PID on
  myPID.SetMode(AUTOMATIC);



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

lestofante

ok colpa mia, pensavo che
Code: [Select]
//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)
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

kenzoultra

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?

lestofante

il riavvio dal watchdog :)

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
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

kenzoultra

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?

lestofante

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
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

kenzoultra

Cosa intendi per "aggiungo print"?

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

e se il problema è nella libreria?

lestofante

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
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

kenzoultra

Il loop, quando si ferma, si blocca quando esegue
Code: [Select]
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.

Go Up