Controllo di un vasca con Arduino - macchine e stati - #45
HTML-код
- Опубликовано: 3 окт 2024
- In questo video vedrai come controllare una vasca. Una pompa è attivata da due sensori o galleggianti e provvede a svuotarla quando è al livello massimo. Per la gestione della vasca serve una piccola macchina a stati. Vediamo come programmarla con Arduino.
Sorgenti e schemi:
github.com/zma...
Puoi scaricare gratuitamente il mio libro: "Il manuale di Arduino - Guida Completa" dal mio sito: www.zeppelinmaker.it oppure direttamente da gumroad: gumroad.com/l/...
Chiaro e preciso …. ALIVERTI il numero uno!
Con questi video mi hai convinto, proprio in questo momento mi sta arrivando il tuo libro 🙂
Ottima presentazione e chiarezza didattica. Complimenti.
Ma sei un grande..... sia per come spieghi che per la logica semplice che usi, grazie mille
Molto utile ... grazie
Complimenti per la chiarezza di come esprimi e spieghi i concetti. Bravo!
Complimenti per la spiegazione, è un caso abbastanza semplice da essere affrontato con gli allievi della mia scuola.
Grazie
Roberto De Colle grazie a te. Ne sto preparando anche uno sui pid...
chiaro e conciso, grazie
Merci infiniment. Tout est clair et distinct. Chapeau!
Grande Paolo... sei una miniera di suggerimenti... ottima spiegazione e soluzione del problema perfetta.
esempio utilissimo 😀 macchine a stati! grande Paolo
grazie... ne ho in serbo molti altri... da qui a 100...
video serissimo... anche da programmatore ti posso dire che sono cose che non tutti hanno in testa
Semplice e efficace!
Grazie, spiegato BENISSIMO!
;-)
Grazie Paolo sei un grande
Centrato in pieno quello che volevo fare e credo che questo sketch sara' utilissimo a molta gente. un abbraccio.
Grazie a te! Buona giornata
Complimenti come sempre, molto chiaro e interessante. Vorrei chiedere un consiglio su libri o link per approfondire teoria e pratica sulle "macchine a stati". Grazie mille e complimenti ancora per il grande valore dei tuoi video.
Ottimo esempio, bravissimo
Toni Patti p grazie a te
Fantastico continua così!!
certamente! avanti!
Fantastico+
Grande progetto e grande tutorial!!!
non perderti gli altri sulle macchine a stati!
@@zeppelinmaker scusa se mi permetto ma volevo chiederti se è possibile pilotare 3 motori passo passo con una cnc shele???
credo di si... se è basata su arduino non dovresti avere problemi. Basta aggiungere i driver opportuni.
grazie! e Bravo! continua così
Grazie a te x il supporto
Complimenti!
Complimenti per il canale, ho seguito tutte le lezioni fino a questa!
Mi permetto però di segnalare come per questa lezione sia possibile una soluzione estremamente più semplice:
int stato;
enum STATO{ON,OFF};
void setup(){
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(13, OUTPUT);
stato = OFF;
}
void loop(){
int lmin = digitalRead(2);
int lmax = digitalRead(3);
if(lmin && lmax) // accedo quando entrambi i galleggianti sono HIGH
stato = ON;
else if(!lmin && !lmax) // spengo quando entrambi i galleggianti sono LOW
stato = OFF;
if(stato == ON) // parte con entrambi i galleggianti HIGH
digitalWrite(13, HIGH); // pompa accessa
else
digitalWrite(13, LOW); // pompa spenta
delay(1000);
}
Bravo.
Ciao Paolo, interessante. Nelle applicazioni di robotica o industriali di alto livello di solito si arricchisce la macchina a stati con un entry action e un exit action che vengono eseguite una sola volta rispettivamente all'ingresso e all'uscita dello stato i-esimo. Anch'esse molto utili!!! :) un saluto
Giuseppe grazie per il contributo! Puoi effettivamente farci cose molto complesse... una specie di meta-programmazione...
Mi aggiungo al grazie degli altri.
Di nulla... è una missione!
Sono partito da questo programma, dato che avevo un problema simile ma opposto: due galleggianti, uno che fa da livello massimo, l'altro da minimo, però invece che svuotare il serbatoio, mi serve per riempire la vasca di pesci, mano mano che (specialmente in estate, dato che uso due ventole per raffreddarla) l'acqua evapora: al livello massimo entrambi i galleggianti aperti, mano mano che scende l'acqua, quello di massima si chiude, ma non succede niente, fino a che non si abbassa al punto tale da chiudere anche quello di minima; a quel punto parte la pompa, riaprendo così il galleggiante di minima, poi quello di massima ed a quel punto fermarsi (ho preferito questa isteresi, così da ridurre le partenze minime alla pompa, considerando che è di quelle da acquario, costruite per lavorare a lungo, tanti avvii non gli fanno bene).
L'unico bug che avevo era che in caso di mancanza di alimentazione di Arduino (è si, mi piace provare tutti gli scenari possibili per evitare problemi in futuro), con l'acqua al livello massimo, inspiegabilmente la pompa comunque partiva, quindi sarebbe successo un disastro (fortuna che ho fatto un po'di prove su banco prima di montarlo). Niente, oltre qualche piccola modifica per adattare il tutto ad un riempimento e non ad uno svuotamento, ho dovuto inserire un ulteriore stato (case 0) ed impostargli l'uscita per il relé su HIGH, fino a quando i galleggianti non erano entrambi aperti (cioè con l'acqua al massimo)... non ho idea del perché, ma così funziona ;)
Grazie mille per la lezione virtuale, mi è stata molto di aiuto ;)
ottimo !!
Ciao Paolo, complimenti per i tuoi video, sempre chiari.
ho realizzato il controllo vasca tutto ok.
ti volevo chiedere se è possibile aggiungere allo sketch un allarme per cattivo funzionamento motore pompa, e mancanza energia elettrica, magari con invio sms.
E' chiaro che la logica sarà alimentata con batteria in tampone.
Grazie.
Ottimi video. Vorrei chiederti una cosa. Io ho una vasca cilindrica da 200 litri ad un altezza di 1 metro. Se l acqua scende come faccio a misurare la sua quantità al di sotto di quella line con arduino? Grazie
buonasera, grazie alle tue lezioni ci sto cominciando a capire qualcosa con arduino. Questo progetto mi serve per svuotare una pompa in taverna con du e galleggianti di min e massima. Sto facendo una smulazione e vedo che se salata la corrente, ovviamente con vasca piena, quand oriaccendo non parte pompa. Come faccio a fargli capire di prendere dallo stato in cui era pèrima che saltasse la corrente? o comunque gestire la situazione senza avere un cambiamento di stato in quanto per "sfiga" (se mi permetti il termine), la corrente e saltatat con l acqua sopra il ivello massimo? grazie per la risposta e l aiuto nel risolvere questo problema. Alex
l'esempio però è molto utile per molte applicazioni con stati più complessi - OK
Ciao Paolo, intanto grazie per il lavoro che stai facendo su youtube complimenti. Ho toccato l'ultima volta una resistenza ed un elettrolitico 26 anni fa.
c'erano ancora i kit GPE e si comprava nuova elettronica. Adesso mi è venuta voglia di mettere nuovamente le mani in pasta unendo le riminiscenze di elettronica con le competense di programmazione e grazie a te ho scoperto un approccio "semplice" ad arduino. Volevo solo un chiarimento sullo State manager di una State Machine.
Praticamente basta utilizzare uno switch case con chiamate a funzioni nei vari case? o ci sono altre attenzioni da tenere.
Ho in mente un progetto utilizzando una shield SIM900 per comunicare con un server web remoto, secondo te per sperimentare va bene una elegoo R3 oppre devo necessariamente prendere un Arduino UNO
Grazie.
buongiorno Paolo, intanto complimenti per i tuoi video su Arduino e il tuo modo chiaro di spiegarlo, ho acquistato il tuo libro su Arduino e quello sulla programmazione e li trovo molto utili a chi si sta avvicinando al mondo di Arduino , la mia domanda è : esiste un numero massimo di stati che si può usare? esempio banale da stato 1 a stato 20? il mio progetto è far funzionare una stufa a pellet con Arduino e penso che una macchina a stati sarebbe l'ideale visto il gran numero di componenti: ventole, pompe, resistenza, sonde temperatura ecc. ecc. e di variabili nel funzionamento
ciao si, la soluzione a stati è ideale per la stufa. Non hai limiti al numero di stati
Ciao grazie per i tuoi video io voglio fare un progetto simile con recupero di acqua per irrigazione orto, volevo chiederti per velocizzare il tutto non esiste il set/reset in arduino ?
purtroppo no
Ho provato a realizzare il prog ma non riesco a capire perchè non mi cambia " stato " al variare dei lmin e lmax, eppure ho controllato e ricontrollato sembra tutto corretto, in pratica al variare di lmin e lmax sulla seriale mi riporta sempre lo stesso stato=1. Sto impazzendo...🙂
Molto utile, mi serviva una cosa simile, sarei andato di if e diodi, conoscevo il comando, ma non è molto utilizzato, chissà quanti altri comandi sono finiti nel dimenticatoio
Questo sistema ti può togliere da molti impicci!
buongiorno Paolo è possibile farlo anche con micropython per raspberry PI PICO.
intendo una macchina a stati.ho comprerato tutti tuoi libri.ne aspetto uno anche per raspberry pi pico.
Complimenti per i video molto pratici, ho una domanda da fare se posso, in un galleggiante che varia un segnale negativo come si può fare a far leggere in un ingresso analogico su Arduino, grazie per la risposta.
puoi collegarlo con un ponte raddrizzatore...
Ho simulato la condizione che appena la vasca si riempie se la corrente va e viene, i due galleggianti sono attivi ma la pompa non riparte. Facendo tracimare l'acqua dalla vasca. 😒 Come rimediare?
Ciao, complimenti per tutto il lavoro che hai fatto fin ora, io avrei bisogno di creare un rilevatore di livello per una cisterna acqua che possa poi monitorare tramite android via wifi o la, potresti darmi qualche indicazione?
E fattibile controllare il livello di un serbatoio in gasolio con Arduino con il display?
Ciao Paolo, sto scrivendo un codice per comandare un tenda da sole, con anemometro, foto resistenza e forse anche sensore pioggia, credo che userò gli stati, anche se al momento sto andando avanti con gli If. Grazie per i tuoi video corsi.
Si potrebbero gestire anche gli stati di allarme in cui si potrebbe trovare la macchina se uno dei due livelli è difettoso e non da il segnale di accensione e spegnimento della pompa con dei timer?
spegnere quando solo quello basso andava OFF è perchè in pratica può capitare che il sensore alto resti ON anche quando il livello scende (ruggine - sporcizia - acque nere)
In quel caso forse sarebbe meglio prevedere un allarme perché entrambi i sensori si possono guastare
Ho scheda Arduino yun,ho scritto il programma per controllo di vasca a stadi,faccio compilazione, mi da tutto OK,
carico il programma,apro il serial monitor, tutto bene,con i due deviatori simulo la chiusura del galleggiante di MIn e di Max,sul serial monitor appare il cambiamento ,da 0 a 1 su ambo i micro, ma lo stato rimane sempre sul 2 e non passa mai allo stato 3,ho controllato e ricontrollato,ma non riesco a passare allo stato 3,quello che dovrebbe fare partire la pompa. Suggerimenti, grazie.
ciao io vorrei fare un circuito con arduino per il controllo del livello dell'acqua (con almeno 3 led livello min/metà /max) di una cisterna di 1000l e una volta raggiunto il livello a metà far partire una pompa o elettrovalvola ( a 12V) e fermare a livello max. grazie
Salve, innanzitutto complimenti, volevo porti un quesito per un nuovo progetto:
gestire 3 sensori antiallagamento wireless, e nel caso comandare una elettrovalvola per chiudere l'acqua.
È possibile gestirli con Arduino?quale versione? Quali sensori acquistare compatibili? Grazie
sto provando ad utilizzare lo schema astati, ma mi sono fermato, ad un imprevisto, come posso inserire l'anti-rimbalzo nei vari stati? ho trovato una libreria, per questo , ma su tinkercad, non posso utilizzarla, ciao e a presto.
ciao salve in uno stesso codice possiamo mettere più switch?
ad esempio
void loop (){
switch (pippo){...}
....
switch (pluto) {...}
....
}
Bella la spiegazione sulla macchina a stati.
Ma in questo caso non basterebbe l'espressione:
pompa = M or (pompa and m)
?
"M" funge da contatto di start, "pompa and m" sono l'autoritenuta della pompa in parallelo a "M"
oppure:
pompa = m and (M or pompa)
"M" funge da start se "m" è chiuso e pompa si automantiene finchè "m" (stop) è chiuso
salve paolo, mi chiedevo: una sonda lavora un come un interruttore (pulsante) quindi non vi andrebbe messa un resistore sulla linea di ground come per i pulsanti? lo chiedo perchè vorrei creare un rilevatore di livello per un serbatoio d'acqua utilizzando non delle sonde ma dei semplici cavi che a contatto con l'acqua chiudono il circuito. grazie in anticipo per una tua risposta
Ci potrestI farci un esempio su come inserire Millis() all'interno di un "case" e far si che da quando si va in un dato case es "case 2", dopo un tempo x il "led 13"si spenga? Ti ringrazio.
Salve Paolo
complimenti per i tuoi video che sono molto chiari e concisi
ti chiedo un consiglio...
ho 14 finestre da controllare tramite motore e ho pensato di realizzare 14 "macchine a stati"
vorrei avere per ogni finestra una variabile che mi memorizza la percentuale di apertura e per ogni finestra il controllo dal pulsante fisico e da remoto tramite APP
proseguo con le "switch case" ?? oppure esiste un altro modo per gestire un tale numero di dispositivi??
grazie e buon lavoro..
diventa complesso ma forse ti serve un array con tutti gli stati delle finestre che possono evolvere in modo indipendente. Ottimo spunto per un nuovo video...
paolo aliverti grazie per la risposta
se vuoi ti mando lo sketch che ho realizzato finora, dimmi solo dove inviartelo In breve... per ogni finestra ho creato un header dentro i quali ho realizzato il controllo switch case chiamati dal main ....piu o meno funziona ma è uno spaghetti code( come dici tu 😁)
Ahhhhh il tutto viene gestito da 2 MCP 23017 port expander
Ottimi video per chiarezza, ma se metti all'inizio stato 1 e quando lo accendi ha entrambi i segnali alti non prevede il passaggio allo stato in essere. Bisogna prevedere anche questa possibilità
Effettivamente basterebbe nello stato 1 non considerare il livello del secondo sensore
Venendo dal mondo plc, avrei usato un set/reset, sarei stato curioso di vedere come si fa.
magari tra poco ci arriviamo...
@@zeppelinmaker sto seguendo anzi divorando tutta la serie, erano anni che lo volevo fare e grazie a te sto imparando.
interessante ma se non ci metti un display con un po di dati tipo quanti minutii trascorsi da quando si è svuotato e qualche altra cavolata mi pare uno spreco usare un microcontrollore per fare una cosa che si può fare con 2 rele , cmq complimenti per la gestione del caso con il sistema dei stati
Basta un relè a doppio scambio (se lavori a 220v / 12v)
Il primo galleggiante (m) chiude il contatto fra la bobina e il contatto n.a. del relè, il comune è collegato al positivo ovviamente e l'altro polo della bobina a massa
Il secondo galleggiante (M) chiude fra la bobina e il positivo 12v facendo attivare il relè
Il relè si attiverà solo quando il galleggiante M sarà attivo e si disattiverà solo quando tutte e due i galleggianti saranno disattivati
Praticamente il relè lavora in autoritenuta grazie al galleggiante (m)
Poiché si parla di acqua tutto il circuito lavora in bassa tensione, quindi useremo un relè a doppio scambio, una parte per l'autoritenuta e l'altra per comandare la pompa
ciao , mi era sfuggita la risposta , si concordo si fa pure con uno singolo a 2 scambi , dipende da quello che hai sotto mano in quel momento ...
Ciao Paolo , questa lezione di macchine e stati è veramente interessante.
Merita , come stai facendo , un approfondimento.
Ho provato a simulare con TINKERCAD il pilotaggio di una sonda termica LM 35 dove ho tre livelli di temperatura : sotto il min , min e max , dove con max devo spegnere un motore .
Nello sketch quindi ho 3 livelli di "case ", il primo , sotto la temperatura min , deve accendere un motore , poi sale la temperatura superando il min fino ad arrivare al max dove il motore spegne per poi farlo riaccendere al valore min.
Come devo fare a simulare il riscaldamento del sonda per verificare se lo sketch funziona ?
Ti ringrazio anticipatamente
Ciao. Usa un trimmer (per la simulazione)!
In questo caso, se ad esempio i galleggianti fossero degli switch di fine corsa, sarebbe utile farne il debouncing?
credo proprio di si perché i segnali sarebbero molto sporchi
@@zeppelinmaker grazie :)
forse in questo caso bastava far accendere la pompa quando entrambi i sensori erano ON e farla spegnere quando entrambi erano OFF oppure spegnere quando solo quello basso andava OFF
Infatti fa questo..
Ha simulato un marcia arresto con ritenuta
salve, video interessante, ho provato a caricare lo skech ma mi da errore di carica non saprei perchè...
I motivi potrebbero essere molti... che errore compare?
probabile non riconosce la porta usb, sarà un problema di driver?, viene fuori la scritta: "attempt 9 of 10: int in sync:resp:0x30", premetto che ho scaricato arduino con windows 7...ciao
salve, avrei un problema al riguardo, quando carico il programma in arduino mi viene il messaggio: libreria non valida non saprei a quale libreria......
bisognerebbe vedere nel log dei messaggi... scorri e leggi bene che ci sarà scritto!
ok, bello e comodo ma non vedo perchè complicarsi la vita per un "controllo" cosi semplice da potersi risolvere con 1 unico if..
void loop()
{
int lmin = digitalRead(2);
int lmax = digitalRead(3);
if(lmin && lmax) {
stato_pompa = 1;
}else if(!lmin && !lmax && stato_pompa) {
stato_pompa = 0;
}
digitalWrite(13,stato_pompa);
}
comunque è un bell'approccio la logica a stati
Grazie Paolo sto seguendo i tuoi video partendo da zero. Ho provato ad adattare questo sketch ad un mio primo progetto, ma mi esce il seguente errore: "case label '1' not within a switch statement". sicuramente dovuto alla mia immensa ignioranza...
ciao. controlal la sintassi. Avrai dimenticato una parentesi o un ;
@@zeppelinmakerciao. Esatto, errore mio... un ";" di troppo. grazie