Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Sketch Arduino per leggere sensore Hall FAN

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] Sketch Arduino per leggere sensore Hall FAN

Messaggioda Foto Utentemouse72 » 23 giu 2018, 16:48

Buongiorno, ho costruito un alimentatore da 12V-25A (Half Bridge)che alimenta un motore da 12V DC 8A.
Il circuito Scaldava ma poi ho inserito una ventola per il raffreddamento forzato.
Funzionava tutto benissimo, ma avrei bisogno di una protezione che mi permette di togliere corrente se la ventola dovesse fermarsi o rallentare.

La mia ventola ha 3 fili (2 di alimentazione 12V, un filo TACH che manda un impulso ad ogni giro).

Leggendo un po su Google, qualcuno parla di "controllo tachimetrico" con l'uso di Arduino.
Ad ogni giro la ventola manda ad Arduino un impulso in uno degli ingressi.
Se ad esempio la ventola gira a 2000 giri/minuto in modalità di normale funzionamento, Arduino riceve 2000 impulsi al minuto e non effettua nessun intervento.
Ma se ad esempio la ventola subisce un brusco calo di giri o si ferma del tutto (causa un suo guasto), Arduino legge in ingresso un numero molto ridotto di impulsi oppure zero impulsi, e deve portare a livello alto una delle uscite (5v) per arrestare, magari tramite un relè esterno o altro modo, la 12V dell'alimentatore.

Però non so come realizzare lo sketch.
Qualcuno sarebbe così gentile da darmi una mano?
Grazie a tutti in anticipo.
Ultima modifica di Foto UtenteWALTERmwp il 24 giu 2018, 0:28, modificato 2 volte in totale.
Motivazione: Spostato da "Firmware ... " a "Arduino"
Avatar utente
Foto Utentemouse72
19 4
New entry
New entry
 
Messaggi: 91
Iscritto il: 5 feb 2017, 14:23

2
voti

[2] Re: Sketch Arduino per leggere sensore Hall FAN

Messaggioda Foto Utentedadduni » 23 giu 2018, 17:32

salve,
Le sezioni sono divise per comodità e per chiarezza di contenuti. Ogni sezione ha un moderatore che "in qualche modo" tiene sotto controllo quella sezione e che "in qualche modo" è molto ferrato in quella marteria e può rispondere bene. Dico "in qualche modo" perché in questo forum tutti controllano tutto e tutti rispondono su tutto ciò che li riguarda ovunque sia postato. I moderatori di una sezione non sono affatto ignoranti sugli altri arogmenti e le persone che ti hanno risposto sul primo 3d sono estremamente preparati e competenti.
Detto questo.
Ti sono state proposte varie alternative già dall'altra parte. Si può controllare la temperatura che non superi una soglia, si può controllare la rotazione della ventola, si può usare il terzo filo tachimetrico. La soluzione più sicura è di certo misurare tempratura e funzionamento della ventola. Sul come misurare la temperatura hai già avuto risposte, sulla misura del terzo filo della ventola si può fare in due modi, o con un circuito che filtra il segnale (costa poco occupa poco non serve programmare) o con un piccolo controllore (occupa spazio, va programmato, va alimentato).
Quello che ha fatto indispettire i partecipanti dell'altro 3d è che tu richiedi una soluzione con Arduino senza saper usare Arduino. E' come il cliente che non capisce di vini e vuole insegnare al metre.
Io non ho intenzione di scriverti il codice, ma se sei volenteroso di imparare io per primo (e garantisco anche altri del forum) saremo contentissimi di aiutarti.
L'unica domanda a cui devi rispondere e che deciderà le sorti di questo 3d è:
vuoi imparare a scrivere il codice per Arduino o stai cercando qualcuno che lo scriva per te?


Un saluto,
Davide
Avatar utente
Foto Utentedadduni
1.670 2 7 12
Expert EY
Expert EY
 
Messaggi: 1057
Iscritto il: 23 mag 2014, 16:26

1
voti

[3] Re: Sketch Arduino per leggere sensore Hall FAN

Messaggioda Foto Utentedadduni » 25 giu 2018, 11:07

Foto Utentemouse72 per lo sketch continuiamo qui che è un 3d ancora pulito.
Avrei alcune domande:

- hai mai almeno usato arduino per i comandi base? accendere spegnere un led, leggere un ingresso digitale, leggere un ingresso analogico, settare un PWM su un pin?

- hai a disposizione tutto l'occorrete? per adesso arduino e ventola e in seguito anche un relè/cotattore che sganci tutta quella corrente? magari manda il modello della ventola

- strumentazione a disposizione? tester, oscilloscopio...

L'idea è di leggere il terzo filo che solitamente è TACH e diventa alto n volte ogni giro. Solitamente esce in oper collector e immagino che il pull'up interno di arduino sia più che sufficiente a polarizzarlo. Sai come si impostano i pullup sugli ingressi digitali?

Se hai arduino, ventola, sai usare le funzioni base e il pullup, la prima prova che puoi fare è collegare la ventola ad un ingresso digitale con pullup, nel loop fai la lettura di quel pin e in base als risultato accendi/spegni il led sulla board di arduino: dovresti vedere il led lampeggiare molto velocemente in funzione della velocità.

Aggiorniamoci qui.
Davide
Avatar utente
Foto Utentedadduni
1.670 2 7 12
Expert EY
Expert EY
 
Messaggi: 1057
Iscritto il: 23 mag 2014, 16:26

2
voti

[4] Re: Sketch Arduino per leggere sensore Hall FAN

Messaggioda Foto Utentemouse72 » 25 giu 2018, 12:12

vuoi imparare a scrivere il codice per Arduino o stai cercando qualcuno che lo scriva per te?

Voglio imparare perche ogni cosa che si impara puo tornare utile ogni volta. Avere uno sketch pronto, potrebbe essere la soluzione piu veloce ma di contro c'è che non si imparerebbe mai quindi preferisco imparare.

hai mai almeno usato arduino per i comandi base? accendere spegnere un led, leggere un ingresso digitale, leggere un ingresso analogico, settare un PWM su un pin?

Si i comandi base li conosco, almeno quelli indispensabili per definire le variabili intere, esempio:

int x1;

impostare i pin come output, esempio:

pinMode (redPin, OUTPUT);

oppure come input, esempio:

pinMode (redPin, INPUT);

leggere un ingresso analogico, esempio:

int sensorValue = analogRead(A0); (se il valore del filo da leggere è collegato all'ingresso A0 di Arduino)

ed il valore varia da 0 a 1023

leggere un ingresso digitale, esempio:

int sensorValue = digitalRead(2);

Invece non ho mai provato né so come si fa a settare un PWM. Ho studiato parecchie cose sui PWM, so che si tratta di frequenze e che l'atmega328p possiede dei timer che vanno programmati per ottenere specifiche frequenze, ho letto dei prescaler che sono dei registri (per 3 timer) che servono ad impostare un fattore di divisione della frequenza.

hai a disposizione tutto l'occorrete? per adesso arduino e ventola e in seguito anche un relè/cotattore che sganci tutta quella corrente? magari manda il modello della ventola

strumentazione a disposizione? tester, oscilloscopio...

si ho Arduino, tester, ventola, oscilloscopio (molto economico e con le funzioni di base)

L'idea è di leggere il terzo filo che solitamente è TACH e diventa alto n volte ogni giro. Solitamente esce in oper collector e immagino che il pull'up interno di arduino sia più che sufficiente a polarizzarlo

Esatto è quello che vorrei realizzare assieme a voi

Sai come si impostano i pullup sugli ingressi digitali?

Credo di si , se tu intendi questo in esempio:

pinMode(pin, INPUT);
digitalWrite(pin, HIGH);


(credo che il comando INPUT attiva la resistenza di pull-up presente a bordo di Arduino)
Allegati
2.JPG
1.JPG
Avatar utente
Foto Utentemouse72
19 4
New entry
New entry
 
Messaggi: 91
Iscritto il: 5 feb 2017, 14:23

2
voti

[5] Re: Sketch Arduino per leggere sensore Hall FAN

Messaggioda Foto Utentedadduni » 25 giu 2018, 13:27

perfetto! Le idee sono due:
- si prende un'unità di tempo fissa (es. 300ms) e si conta quanti impulsi si ricevono all'interno di questo tempo.
- si guarda quanto dura ogni impulso e da questo si deduce il tempo che la ventola impiega a fare un giro intero.
- si filtra il segnale di ingresso e si vede il valor medio del segnale filtrato

entrambi possono essere facili ed abbastanza efficaci. Dato che l'idea è di usare più digitale possibile e contare gli impulsi, la scelta cade tra le prime due. Per uno alle prime armi io consiglierei la prima perché c'è la funzione millis() che è un timer che parte all'avvio del programma e restituisce il numero di millisecondi trascorsi, quindi si ha in maniera semplice un'indicazione (anche se poco precisa) di una finestra temporale.

Se ci si concentra sul numero di impulsi e non sulla durata di questi allora bisogna vedere quando lo stato del filo TACH passa da basso ad alto e viceversa: ogni volta che si ha un fronte di salita è un giro di ventola.

Cerca online l'algoritmo base per capire quando si ha avuto un fronte (edge detecting) e scarta rigorosamente tutto ciò che parli di interrupt. Poi magari monta un pulsantino che simuli la tua ventola e fai commutare un led solo sul fronte di salita. Ossia:
- pigio il tasto: si accende il led
- lascio il tasto: non succede nulla il led resta acceso
-pigio il tasto: si spegne il led
- lascio il tasto: non succede nulla e resta spento.

Già così hai un po di cosette da fare e di cose imparare. Facci sapere come procede!
Davide
Avatar utente
Foto Utentedadduni
1.670 2 7 12
Expert EY
Expert EY
 
Messaggi: 1057
Iscritto il: 23 mag 2014, 16:26

0
voti

[6] Re: Sketch Arduino per leggere sensore Hall FAN

Messaggioda Foto Utentemouse72 » 25 giu 2018, 15:18

si prende un'unità di tempo fissa (es. 300ms) e si conta quanti impulsi si ricevono all'interno di questo tempo.

Ok prima di procedere, vorrei però spiegare una cosa fondamentale: dato che la ventola potrebbe subìre variazioni di velocità durante l'uso (magari per qualche calo improvviso e transitorio della 12V), stavo pensando che Arduino deve intervenire dopo 5 secondi.
Cio significa che se la ventola dovesse fermarsi, Arduino deve comunque intervenire dopo 5 secondi e non prima.
Quindi anziche 300ms, dovremmo calcolare 5000ms?
Avatar utente
Foto Utentemouse72
19 4
New entry
New entry
 
Messaggi: 91
Iscritto il: 5 feb 2017, 14:23

0
voti

[7] Re: Sketch Arduino per leggere sensore Hall FAN

Messaggioda Foto Utentedadduni » 25 giu 2018, 16:32

Ci si può riflettere, allungare la finestra temporale f da filtro e introduce un ritardo, oppure si può fare in mille altri modi, per adesso ho detto una cifra per dire, iniziamo a far leggere le transizioni ad Arduino poi con una infrastrutttur solida al resto ci si oensa7
Avatar utente
Foto Utentedadduni
1.670 2 7 12
Expert EY
Expert EY
 
Messaggi: 1057
Iscritto il: 23 mag 2014, 16:26

0
voti

[8] Re: Sketch Arduino per leggere sensore Hall FAN

Messaggioda Foto Utenteclaudiocedrone » 26 giu 2018, 13:40

:-) Salve, scusate se l'intervento devia leggermente dal microcontrollo... a mio parere è buona cosa implementare comunque una ridondanza di protezione termica a livello hardware (la famigerata pastiglia termostatica p. es.) in quanto potrebbe verificarsi magari un fault dell'Arduino etc. e/o a maggior ragione per il fatto che si vuole un "ritardo di intervento"(5 secondi) di gran lunga superiore a quello del più ritardato dei fusibili ritardati, durante il quale potrebbero fare in tempo a lessarsi un po' di componenti...
scusate l'intromissione e buon proseguimento :-)
O_/
"Non farei mai parte di un club che accettasse la mia iscrizione" (G. Marx)
Avatar utente
Foto Utenteclaudiocedrone
15,3k 4 6 9
Master EY
Master EY
 
Messaggi: 10656
Iscritto il: 18 gen 2012, 13:36

0
voti

[9] Re: Sketch Arduino per leggere sensore Hall FAN

Messaggioda Foto UtenteWALTERmwp » 26 giu 2018, 21:33

Foto Utenteclaudiocedrone ha scritto: :-) Salve, scusate se (...) e buon proseguimento :-) O_/
e va bene, va bene, per questa volta sei scusato ...

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
22,9k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 6730
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

1
voti

[10] Re: Sketch Arduino per leggere sensore Hall FAN

Messaggioda Foto Utentearkeo2001 » 27 giu 2018, 7:58

mouse72 ha scritto:Ok prima di procedere, vorrei però spiegare una cosa fondamentale: dato che la ventola potrebbe subìre variazioni di velocità durante l'uso (magari per qualche calo improvviso e transitorio della 12V), stavo pensando che Arduino deve intervenire dopo 5 secondi.
Cio significa che se la ventola dovesse fermarsi, Arduino deve comunque intervenire dopo 5 secondi e non prima.
Quindi anziche 300ms, dovremmo calcolare 5000ms?


In molti casi questo approccio non è l'ideale, fa una serie di assunzioni che potrebbero non verificarsi in pratica. Un approccio che invece potresti considerare è questo. Implementi quello che si chiama buffer circolare che in sostanza è un array che contiene le ultime N letture, e a intervalli regolari (che possono non coincidere con l'intervallo temporale con cui aggiorni i valori) fa la media. In questo modo elimini automaticamente l'effetto di variazioni molto brevi della velocità e hai un'idea del comportamento medio della ventola su un periodo da te scelto. Questa possibilità si può combinare con altri criteri e non è difficile da implementare.

In linea generale, quando ti ritrovi con troppi "if" "else" occorre alzare le antenne perché potremmo stare esagerando con l'euristica, ovvero prendere in considerazione troppi scenari. Se ci accorgiamo che è così, sempre meglio tentare approcci generali che sono sempre più robusti (tutto dipende dal caso specifico, inutile dirlo).

Capisco che non avendo mai programmato il buffer circolare possa sembrare una complicazione importante ma non solo è qualcosa che in realtà è semplice; è anche un metodo istruttivo, che consente di affrontare una classe interessante di problemi e puoi riutilizzarlo. Puoi anche non implementarlo immediatamente ma in una versione successiva del tuo sketch.
Avatar utente
Foto Utentearkeo2001
455 3 7
Stabilizzato
Stabilizzato
 
Messaggi: 309
Iscritto il: 1 ago 2012, 9:12


Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 27 ospiti