Sto facendo un tirocinio in cui mi si chiede di realizzare un sistema di monitoraggio del vento.
Per il momento è sufficiente che stampi semplicemente su un display la direzione.
Mattia_L:
Ruotando la pala però la tensione massima è di 4.7V, fino a 0.3V per poi saltare direttamente a 0V.
Beh intanto devi anche dirci come hai collegato il sensore ad Arduino e come lo hai alimentato. Facci uno schemino, anche a mano che fotografi e posti qui come allegato.
Dato che il sensore richiede una alimentazione (fili rosso e giallo) tra 12 e 24 V, hai usato un alimentatore separato per questo immagino/spero, ed hai messo il GND in comune tra questo ed il GND di Arduino?
Secondo, ma tu per dire che esce a 4.7V hai collegato un tester all'uscita in tensione del sensore (filo verde) ed hai misurato quei valori girando la banderuola, ossia non risponde linearmente alla rotazione?
Terzo, una volta risolto/verificato il problema delle connessioni (quello del mio primo punto, mandandoci lo schema dei collegamenti e verificando di aver collegato il pin verde e non il blu), che è quella roba che dici di aver trovato in rete, che fa dei calcoli dove tra l'altro vedo dei casting poco coerenti?
Fai un programmino semplice che ti manda su seriale la lettura del pin analogico e basta, come questo:
Poi ruota la banderuola a mano in modo più regolare possibile per farle fare un giro o poco più (non andare troppo veloce) e vedi quali valori ottieni. Se non riesci ad interpretarli o vuoi aiuto, cattura l'output seriale e mandalo qui come .txt allegato.
Se poi fai una prova anche attivando il monitor seriale grafico dell'IDE, puoi anche vederlo come se fosse un "oscilloscopio" (e anche qui, se ti serve aiuto cattura la schermata e manda l'immagine qui).
I dati non sono lineari (come quando li avevo letti convertiti).
Sono andato pianissimo nella rotazione senza fermarmi o tornare inavvertitamente indietro.
Non viene spiegato il significato dei calcoli nello sketch che ho trovato.
Va a passi di 60...
Non sembrerebbe che all'interno ci sia un potenziometro, come nelle banderuole classiche, dove la lettura è molto più lineare e credo che sia anche più economico...
Sai, ti dirò, hai comprato un sensore che ha dentro cose che a te non servono, e ti spiego perché.
All'interno penso ci sia una schedina che legge un potenziometro e converte in tensione o corrente, e questo per poterlo alimentare fino a 24v (che a te non serve).
Potresti direttamente collegarti con arduino ai tre terminali del potenziometro, sconnettendo tutto quanto c'è dopo, e avresti risolto tutti i problemi.
QUI c'è l'anemometro che avevo usato io, di una precisione inversamente proporzionale alla sua semplicità. Naturalmente l'ho aperto e all'interno c'era solo un potenziometro e un contatto reed. Il cavo di discesa era a 4 conduttori: un COMUNE, un positivo, un centrale del potenziometro e un contatto reed.
Ammappete, anche dal costo inversamente proporzionale alla complessità
io avevo usato invece un Lacrosse TX23 (niente di analogico, suo protocollo per le informazioni)
Peccato un temporale me l'abbia strappato e spaccato per terra
Potresti direttamente collegarti con arduino ai tre terminali del potenziometro, sconnettendo tutto quanto c'è dopo, e avresti risolto tutti i problemi.
Non riesco ad aprire l'anemometro senza romperlo...
Ho trovato questa guida che spiega come interfacciare l'anemometro che consigli ad Arduino.
C'è uno screen del monitor seriale e, come accade con il mio sensore, dopo i 342 gradi va improvvisamente a 0 e ricomincia da 34 (a me da 22).
Qualcosa non va...
Mattia_L:
C'è uno screen del monitor seriale e, come accade con il mio sensore, dopo i 342 gradi va improvvisamente a 0 e ricomincia da 34 (a me da 22).
Qualcosa non va...
dove ti aspettavi andasse dopo i 360°?
forse davvero dovresti cercare a spiegare nuovamente questa frase
Ruotando la pala però la tensione massima è di 4.7V, fino a 0.3V per poi saltare direttamente a 0V.
Mattia_L:
Si non risponde linearmente, scusate.
I dati non sono lineari (come quando li avevo letti convertiti).
Sono andato pianissimo nella rotazione senza fermarmi o tornare inavvertitamente indietro.
Gli incrementi sono a passi da 64 (ignora le fluttuazioni di 1 o 2 punti dovuta all'ADC), quindi la risoluzione di quella banderuola è di sole 16 posizioni.
Che è quello che mi aspettavo, in fondo per questi aggeggini amatoriali non si richiede la precisione assoluta ma solamente una delle 16 posizioni della rosa dei venti, con passi di 1/16 di angolo giro ovvero 22.5 °
Quindi avrai una cosa tipo:
0 = N = 0°
64 = NNE = 22.5°
128 = NE = 45°
192 = ENE = 67.5°
256 = E = 90°
320 = ESE = 112.5°
384 = SE = 135°
eccetera.
Per cui i gradi li ottieni con:
int sensor = analogRead(A0);
float gradi = int((sensor+4)/64)*22.5;
Response.writeln(gradi);
(Nota: il "(sensor+4)" serve per dare un margine massimo di 4 unità all'eventuale fluttuazione dell'input analogico, se vuoi espanderlo metti un valore anche superiore, ma direi non più di 10)
Che è quello che mi aspettavo, in fondo per questi aggeggini amatoriali non si richiede la precisione assoluta ma solamente una delle 16 posizioni della rosa dei venti, con passi di 1/16 di angolo giro ovvero 22.5 °
Okay adesso mi è più chiaro... e se volessi una lettura più precisa, diciamo più attorno al grado? Potete consigliarmi/conoscete qualche sensore compatibile?
Mattia_L:
Okay adesso mi è più chiaro... e se volessi una lettura più precisa, diciamo più attorno al grado? Potete consigliarmi/conoscete qualche sensore compatibile?
Boh, cerca "sensore direzione vento 360 gradi".
Ad esempio QUESTO.