Pages: 1 2 3 [4] 5 6 7   Go Down
Author Topic: Scrittura codice per impianto birra cerco collaboratori Monza/Milano  (Read 8193 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

esattamente, ma credo che questo fosse prevedibile..
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

MC
Offline Offline
God Member
*****
Karma: 14
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vedo con piacerere che la discussione si è animata!
Quindi mi state dicendo che se lo stesso sketch lo si prova con caldaie e riscaldatori diversi da quelli utilizzati nei test, il controllo non funziona o quantomeno da dei risultati diversi?

Assolutamente SI, non potrebbe essere diversamente.
Ma non ti preoccupare compà, che qualcosa di buono lo tiriamo fuori.

ho già messo giù un idea di come gestire il relè, sotto con critiche e commenti

Code:

#include <avr/interrupt.h>

#define cycleLength 4
#define computeDelay

volatile byte cycleCounter ;
volatile byte pid =0;
byte lastCounter =255;

byte pidValue;
boolean coilStatus;

ISR(TIMER1_COMPA_vect)
{
cycleCounter++;
if (cycleCounter == cycleLength )
{
cycleCounter = 0;
pid +=10;
if(pid==100)
{
pid=0;
}
}
}


void setup()
{
Serial.begin(57600);
SetupInterrupt();
}


void loop()
{
if (lastCounter != cycleCounter)
{
lastCounter = cycleCounter;
ManageCoil();
Serial.print("pidValue :");
Serial.print(pidValue);
Serial.print(" cycleCounter :");
Serial.print(cycleCounter);
Serial.print(" coilStatus :");
Serial.println(coilStatus);
}
pidValue = ComputePid();
pidValue = map(pidValue, 0, 100, 0, cycleLength + 1);
}

byte ComputePid()
{
return pid;
}

void ManageCoil()
{
if (pidValue > cycleCounter)
{
if (!coilStatus)
{
coilStatus = true;
}
}
else
{
coilStatus = false;
}

}

void SetupInterrupt()
{
cli(); // disable global interrupts
TCCR1A = 0; // set entire TCCR1A register to 0
TCCR1B = 0; // same for TCCR1B
// set compare match register to desired timer count:
OCR1A = 15624;
// turn on CTC mode:
TCCR1B |= (1 << WGM12);
// Set CS10 and CS12 bits for 1024 prescaler:
TCCR1B |= (1 << CS10);
TCCR1B |= (1 << CS12);
// enable timer compare interrupt:
TIMSK1 |= (1 << OCIE1A);
// enable global interrupts:
sei();
}


Il codice così com'è non sò se sull'ide arduino compila, visto che io uso ECLIPSE e l'ho aggiustato a manina per postarlo.

Ho settato un timer che tramite interrupt mi dà un evento ogni secondo con la quale vado ad alimentare un contatore.
Ad ogni impulso di interrupt vado ad incrementare il contatore (da 0 a 3, 4 passaggi) ed ogni volta che il contatore cambia ( lastCounter != cycleCounter) viene avviata la gestione del relè (ManageCoil).
Per simulare il tutto ho messo il valore pid in maniera fissa, parte da 0 e viene sommato di 10 ad ogni azzeramento del contatore(questo per verificare la logica della durata con la quale il relè deve rimanere eccitato in base al valore)
Il valore restituito da ComputePid varia da 0 a 100 (% percentuale) e viene poi mappato in valori da 0 a 4 (totale 5 combinazioni, 0% sempre spento, 25% acceso 1 secondo su 4,50% acceso 2 secondi su 4, 75% acceso 3 secondi su 4,100% acceso per tutto il periodo)
Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Monza
Offline Offline
Newbie
*
Karma: 2
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si effettivamente era una domanda stupida la mia, mi scuso nuovamente per l'ignoranza.
Mi pare di capire cmq che in questo codice, non si parli ancora, ne di sonde di temperatura, ne di display, ma solo del famigerato PID, giusto?
Un'altra domanda delle mie: per la compilazione del codice, o meglio, per avere uno sketch funzionante con tutto quello che necessita per funzionare ovvero, sonda e display per visualizzare temperatura, bisogna già preoccuparsi della parte elettromeccanica, o si può ancora aspettare?
Perchè se si, avendo in mano le specifiche degli RSS piuttosto che delle resistenze, potrei già portarmi avanti.
Logged

MC
Offline Offline
God Member
*****
Karma: 14
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No per dirla tutta nel codice non c'è traccia nemmeno del controllo PID, ma è solo l'idea di come gestire l'accenzione del relè in base alla richiesta di potenza senza fargli fare cicli di attacca/stacca continui.
E' una simulazione.
Ma se tu intanto vuoi portarti avanti e fare altro fai pure  ,se vuoi fare tutto gestito da arduino con pulsantini display etc etc etc ce n'è ancora tanta di strada da fare ! smiley-mr-green
Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Monza
Offline Offline
Newbie
*
Karma: 2
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Era solo per rendermi utile, visto che per me queste cose sono come un incrocio tra arabo e cinese! smiley-mr-green smiley-mr-green smiley-mr-green
Logged

MC
Offline Offline
God Member
*****
Karma: 14
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma la mia non era una battuta, se intanto ti studi un sistema di menù, configurazioni e una logica d'uso non è lavoro sprecato.
Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 28
Posts: 5515
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusatemi ma mi inserisco un attimo...
Questa cosa del controllare la temperatura con il PID interessa anche a me... Io dovrei riscaladare un ambiente diciamo di un 6-7 litri e tenerlo ad una 60ina di gradi solo che il fluido a suo interno è aria.. Posso usare lo stesso PID modificandone i parametri vero ? Funzionarebbe allo stesso modo ?
Grazie
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mr, non se ne parla se non ci dai le specifiche. Di che materiale si parla? Qual'è il volume/litraggio di materiale? che temperatura o che lavorazione vuoi ottenere? di quanto può sbagliare questa lavorazione? quanto spazio hai ha disposizione (o meglio, è una cosa che puoi montare permanentemente o va smontata ogni giorno/settimana/anno)?

A dir la verità quà si sta già pensando al codice senza prima avere idea di cosa si vuole ottenere... quindi a te la prima mossa. Spiegaci dettagliatamente

@ratto: dipende. Come diceva astro, più è piccolo il volume da mantenere in temperatura e più veloci dovranno essere i vari sensori/attuatori. In oltre se la temperatura deve essere costante, il semplice riscaldamente per irraggiamento potrebbe non essere sufficiente e bisogna pensare ad un sistema di ricircolo forzato dell'aria.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 28
Posts: 5515
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Devo fare un piccolo seccatoio per i funghi... la temperatura non è cruciale può anche oscillare l'importante è che non mi superi i 70° o che scenda sotto i 55°...
Lo scatolotto sarà di legno in modo che possa assorbire l'umidità e il riscaldamento sarà fatto da resistenze corazzate + dissipatore + ventolina per far circolare l'aria calda...
secondo te possono bastare ?
poi non vi sporco più il topic regazzi tranquilli smiley
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Genova
Offline Offline
Faraday Member
**
Karma: 43
Posts: 3478
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora ... la produzione di sta birra è pronta o no? dai che ho sete!!  smiley-grin smiley-grin
Logged

no comment

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non ho idea del potenziale calorico delle resistenze, e forse nemmeno tu. Senza le specifiche, l'unica è la prova sul campo...
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Selvazzano Dentro - Padova
Offline Offline
Edison Member
*
Karma: 45
Posts: 1553
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Per Ratto:

Il controllo PID serve quando hai a che fare con range di temperatura brevi (uno o due gradi).

Nel tuo caso, una normale isteresi è sufficiente, a mio avviso.
Logged

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 643
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi aggiungo a questa interessantissima discussione. mi piacciono entrambi gli argomenti (Birra e PID..)
Produco anch'io birra, anche se in realtà l'ultima volta è stato un annetto fa..
Altra cosa importante che non hai specificato.. quanti litri di cotta intendi fare?
Io per esempio facevo 50l di cotta, a gas, col fornellone da pomodori, e una volta raggiunta la temperatura un tale volume di liquido la tiene per 15-20 minuti senza scendere un granchè, quindi secondo me non c'è da esagerare con la precisione del PID. nel senso che un controllo ogni 4 secondi è inutile. e per lo stesso motivo va benissimo un relè on/off, che tanto non è che fai accensioni di 10 secondi, le fai di almeno 10 minuti per mantenere la temperatura.
Nei vari brico si trovano le resistenze di ricambio per gli scalda acqua. Se hai possibilità di 'lavorare' la pentola, io userei un paio di quelle, più la pala che mescola il fondo di continuo. Ah, per questa lascia perdere il controllo di arduino, tanto una volta che l'accendi rimane accesa per 4 ore minimo...ergo accendi a mano.
Se poi nella pentola fai anche il doppio fondo forato e metti il rubinetto sotto hai fatto bingo!
Logged

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 28
Posts: 5515
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Per Ratto:

Il controllo PID serve quando hai a che fare con range di temperatura brevi (uno o due gradi).

Nel tuo caso, una normale isteresi è sufficiente, a mio avviso.
Tanto meglio allora  smiley-wink
Potrei farmelo proprio ad operazionali alla vecchia maniera ora che ci penso, graziee  smiley
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 138
Posts: 9870
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Visto il proliferare di produttori diy di birra non è che serve un beta tester del prodotto finale ?  smiley-mr-green
Logged

Pages: 1 2 3 [4] 5 6 7   Go Up
Jump to: