Go Down

Topic: Pilotare elettrovalvole Arduino  (Read 1 time) previous topic - next topic

Datman

Usando nel programma parole italiane come attesa, gonfia, sgonfia, pausa non si correrebbe il rischio di creare conflitti con parole "proibite". Un francese non si sognerebbe nemmeno di scrivere parole in inglese! :-)
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Ziostep

#31
Nov 20, 2018, 10:54 am Last Edit: Nov 20, 2018, 11:01 am by Ziostep
Ciao DATMAN,
grazie per la direttiva, ma sembra che non ci siano parole proibite all'interno del codice...
Ma ho sostituito gli stati in italiano e anche il resto.

Claudio_FF

#32
Nov 20, 2018, 11:45 am Last Edit: Nov 20, 2018, 11:56 am by Claudio_FF
Allora si può scrivere proprio tutto in italiano, così la logica è perfettamente leggibile:
Code: [Select]
switch(stato)
{
    case RIPOSO:
        if (comando_attivo()) {
            avvia_gonfiaggio();
            stato = GONFIAGGIO;
            }
        break;

    case GONFIAGGIO:
        if(pressione_massima()) {
            fermo();
            annota_tempo();
            stato = PAUSA;
            }
        break;

    case PAUSA:
        if(trascorsi(10000)) {
            avvia_sgonfiaggio();
            stato = SGONFIAGGIO;
            }
        else if(pressione_bassa()){
            avvia_gonfiaggio();
            stato = RABBOCCA;
            }
        break;

    case RABBOCCA:
        if(trascorsi(10000)) {
            avvia_sgonfiaggio();
            stato = SGONFIAGGIO;
            }
        else if(pressione_massima()){
            fermo();
            stato = PAUSA;
            }
        break;

    case SGONFIAGGIO:
        if(pressione_minima()) {
            fermo();
            stato = ATTENDI_NO_COMANDO;
            }
        break;

    case ATTENDI_NO_COMANDO:
        if (!comando_attivo()) stato = RIPOSO;
        break;                      
}

Dopo di che restano da scrivere le brevi funzioncine che vengono richiamate (per quasi tutte credo basti una sola riga).
Una domanda ben posta è già mezza risposta.

Ziostep

Sto facendo bene così???


Datman

Devi mettere le condizioni pressione bassa, pressione massima, ...
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Ziostep

#35
Nov 20, 2018, 02:06 pm Last Edit: Nov 20, 2018, 02:31 pm by Ziostep
Si lo so DATMAN,
volevo sapere se il resto era tutto corretto.

Inoltre, non avendo acquistato ancora il sensore il codice lo posso scrivere oppure devo tenere a mente casi particolari??

Ovviamente ho il datasheet del sensore che voglio usare, quindi so la Vcc,Vout e il range di pressioni in mmhg di utilizzo.

Grazie

Claudio_FF

#36
Nov 20, 2018, 05:13 pm Last Edit: Nov 20, 2018, 05:21 pm by Claudio_FF
Che cos'è:
sensorValue = analogRead (AnalogInPin);   //annota pressione attuale
??

Da leggersi come:

quando sto gonfiando
    se pressione massima
        spegni valvole
        annota pressione attuale
        passa a pausa
Una domanda ben posta è già mezza risposta.

Ziostep

#37
Nov 23, 2018, 10:25 am Last Edit: Nov 23, 2018, 11:19 am by Ziostep
Scusa Claudio non mi sono spiegato bene,
nello sketch è stato definito lo switch/case con i vari stati, fin qui tutto perfetto.

Devo dichiarare il sensore di pressione all'interno del codice ( non è stato ancora acquistato, mi serve un consiglio sull'acquisto). Vorrei acquistare un sensore con un buon range di misura, spendendo poco se possibile, tenendo a mente che le elettrovalvole hanno  range di 0-350 mmhg.

Ti allego il link di quello che vorrei prendere ' Sensore di pressione Relativa MPX5700GP, pressione massima 700kPa '. Volutamente voglio prendere un sensore con un range maggiore dell' elettrovalvole oggi utilizzate per poter fare un UPGRADE futuro cambiando solo le elettrovalvole.

Negli STATI devo leggere la pressione presente all'interno del manicotto, tramite lettura del sensore di pressione, e passare da uno stato all'altro in funzione della pressione letta.

Se la pressione nello STATO è nel RangeMax allora si ferma il gonfiaggio, il RangeMax deve essere mantenuto per tot secondi e la pressione deve essere stampata sul computer.

Adesso posso passare allo STATO successivo.

Stavo cercando di scrivere proprio questo, pensavo che con " sensorValue = analogRead (AnalogInPin);" andavo a leggere il valore del sensore.

Spero di aver chiarito le idee :smiley-confuse:  :smiley-confuse:

Claudio_FF

#38
Nov 23, 2018, 06:33 pm Last Edit: Nov 23, 2018, 06:33 pm by Claudio_FF
Quote from: Ziostep
Stavo cercando di scrivere proprio questo, pensavo che con " sensorValue = analogRead (AnalogInPin);" andavo a leggere il valore del sensore.
Si, la lettura è giusta, quello che chiedevo era il significato di metterla quel punto li, cioè in un punto dove significa: "quando è stata rilevata la pressione massima allora annoto la pressione". Mi domandavo se quella "annotazione" (ben diversa da quella che ho scritto io nelle spiegazioni precedenti) avesse uno scopo in previsione di qualcosa da implementare.

Per il resto la pressione basta leggerla prima dello switch (saranno da fare delle calibrazioni per far corrispondere le scale).
Una domanda ben posta è già mezza risposta.

Ziostep

#39
Nov 23, 2018, 06:55 pm Last Edit: Nov 23, 2018, 07:11 pm by Ziostep
Se ho capito bene quello che vuoi dire è:

case GONFIAGGIO:
        if(analogRead (AnalogInPin)>=Pmax) {           // leggo la pressione e la confronto  con il valore
         digitalWrite(INTELVALEPIN, LOW);                 //smetto di gonfiare
         digitalWrite(PUMPPIN, LOW);
         stato = PAUSA;                                            //passo allo stato successivo                                        
         }
         break;

Ovviamente io vorrei sapere se la pressione è di 302/310/306, vorrei stamparla a video sul computer ma non so scrivere il codice, inoltre, la lettura della pressione non ho capito se va fatta in PAUSA.
Non so se sia giusto quello che ho scritto sopra.

grazie Claudio

Ziostep

#40
Nov 24, 2018, 05:25 pm Last Edit: Nov 24, 2018, 05:33 pm by Ziostep
Arrivo a questo punto e mi blocco nella stesura del codice. Non capisco come mettere la condizione sul tempo e se la lettura del sensore è giusta.

Grazie, in allegato lo sketch

Claudio_FF

#41
Nov 24, 2018, 08:47 pm Last Edit: Nov 24, 2018, 09:06 pm by Claudio_FF
Quote from: Ziostep
Non capisco come mettere la condizione sul tempo
Funzione millis, paragrafi "annotare il tempo attuale" e "calcolare il tempo trascorso".

Per quanto riguarda leggere la pressione e convertirla nella scala voluta forse meglio aprire un thread apposito.
Una domanda ben posta è già mezza risposta.

Go Up