Vorrei collegare e rilevare la velocità del vento tramite l'anemometro di Nuova elettronica proposto sulla rivista 221, l'anemometro è così composto:
Anemometro con 1 contatto reed normalmente aperto
Anemoscopio con 1 contatto reed normalmente chiuso
Qualcuno saprebbe indicarmi come collegarlo e come leggere i valori relativi alla velocità in KM/h e la direzione del vento?
Grazie mille.
eh, ma a meno che l'articolo non sia fruibile a free su internet, non dia abbastanza info tecnniche, la vedo dura continuare in questa direzione... sicuro che sui pezzi non ci sia qualche codice che da google dia come risultato i sensori che hai?
Guarda, ti dico che questo maledetto sensore mi ha fatto perdere 20 minuti per analizzarlo in ogni dettaglio, senza trovare alcun codice o numeri vari...
e per concludere in bellezza nuova elettronica ci dice solo com'è strutturato...
e basta...sono disperato!!!
Cmq fare un anemometro secondo me non è difficile.
Basterebbe fare una paletta rotante con le coppe e mettere una piccola calamitina sull'alberino dell'anemometro con un contatto reed normalmente aperto fisso. Girando, la calamitina chiuderebbe il reed: l'Arduino conta gli impulsi al secondo, fa 2 calcolini sulla velocità radiale e ti da la velocità del vento.... oppure ho detto una minch...?
Come dovrei strutturare quest'ipotetico codice che legge il sensore???
e sopratutto che calcoli dovrei fare effettuare al buon arduino per far si che mi dia in uscita la velocità in km/h ???
il problema(almeno per me) è proprio questo!!! XD
è questo il problema. prima di tutto bisogna capire se l'anemometro butta fuori un segnale "elaborato" o semplicemente è una dinamo che butta fuori un voltaggio.
poi bisogna sapere con che tensioni lavora, se troppo altre serve un partitore di tensione, se troppo basse un amplificatore
in entrabi i casi senza datasheet l'unico modo, avendo il segnale, di convertirlo in km/h è facendo dei test in ambiente "controllato": ovvero facendolo girare come se fosse investito a varie velocità di vento e confrontare gli output con "l'input del vento". Direi che per questa fase è abbastanza indispensabile un altro anemometro.
fardox:
Come dovrei strutturare quest'ipotetico codice che legge il sensore???
e sopratutto che calcoli dovrei fare effettuare al buon arduino per far si che mi dia in uscita la velocità in km/h ???
il problema(almeno per me) è proprio questo!!! XD
Beh, il codice dovresti scrivertelo tu, sennò a che serve? XD
Cmq non so neanch'io che formula ma cercando sicuramente troverai qualcosa. Il principio da usare è identico a quello dei tachimetri digitali che si usano per le bici. Hai una calamitina fissata ai raggi, hai un reed sulla forca: all'accensione imposti il diametro della ruota (ti serve per avere il riferimento da velocità radiale a velocità angolare) e poi leggendo i passaggi del sensore calcoli la velocità.
In giro su internet ho trovato questo codice, che sembra funzionare(ho dovuto inserire una resistenza di pulldown da 4.7k va bene???)
ma adesso ho un altro problemino...mi da la velocità in MPH io vorrei convertirla in KMH su quale parte di codice dovrei agire???
Grazie
#define uint unsigned int
#define ulong unsigned long
#define PIN_ANEMOMETER 2 // Digital 2
// How often we want to calculate wind speed or direction
#define MSECS_CALC_WIND_SPEED 5000
volatile int numRevsAnemometer = 0; // Incremented in the interrupt
ulong nextCalcSpeed; // When we next calc the wind speed
ulong nextCalcDir; // When we next calc the direction
ulong time; // Millis() at each start of loop().
void setup() {
Serial.begin(9600);
pinMode(PIN_ANEMOMETER, INPUT);
digitalWrite(PIN_ANEMOMETER, HIGH);
attachInterrupt(0, countAnemometer, FALLING);
nextCalcSpeed = millis() + MSECS_CALC_WIND_SPEED;
//nextCalcDir = millis() + MSECS_CALC_WIND_DIR;
}
//=======================================================
// Main loop.
//=======================================================
void loop() {
time = millis();
if (time >= nextCalcSpeed) {
calcWindSpeed();
nextCalcSpeed = time + MSECS_CALC_WIND_SPEED;
}
}
//=======================================================
// Interrupt handler for anemometer. Called each time the reed
// switch triggers (one revolution).
//=======================================================
void countAnemometer() {
numRevsAnemometer++;
}
//=======================================================
// Calculate the wind speed, and display it (or log it, whatever).
// 1 rev/sec = 1.492 mph
//=======================================================
void calcWindSpeed() {
int x, iSpeed;
// This will produce mph * 10
// (didn't calc right when done as one statement)
long speed = 14920;
speed *= numRevsAnemometer;
speed /= MSECS_CALC_WIND_SPEED;
iSpeed = speed; // Need this for formatting below
Serial.println("Wind speed: ");
x = iSpeed / 10;
Serial.print(x);
Serial.print('.');
x = iSpeed % 10;
Serial.print(x);
numRevsAnemometer = 0; // Reset counter
}
Adesso proverò...quindi posso dire che la questione anemometro è chiusa!
adesso si apre un altro problema: L'anemoscopio!!!
Riporto ciò che c'è scritto Su Nuova elettronica n220 riguardo l'anemoscopio:
Il reed che misura la velocità è Normalmente Aperto mentre il reed che misura la direzione essendo montato all'interno dello stilo viene mantenuto chiuso dal magnete di direzione, qualunque sia la direzione nella quale è orientata la bandieruola.
Ogni qualvolta viene compiuta un intera rotazione del rotore sul quale sono montate le palette il magnete della velocità, passando davanti al reed della velocità lo chiude per un brevissimo istante, generando un impulso.
La misura del tempo che intercorre tra un impulso e il successivo consente di ricavare la velocità.
E' importante sapere che questa chiusura viene effettuata sempre nella stessa posizione angolare del rotore.
Nel corso della medesima rotazione, il reed della direzione, che è mantenuto chiuso dal magnete della direzione, si apre brevemente allorquando lo schermo metallico posto sul rotore passa davanti al magnete della direzione, annullando per un istante l'effetto del campo magnetico sul reed della direzione.
Il momento in cui si verifica questa interruzione dipende esclusivamente dalla posizione angolare in cui si trova la bandieruola rispetto al rotore, quindi comparando il tempo che separa l'azionamento del reed di velocità dall'azionamento del reed di direzione è dunque possibile risalire alla posizione angolare della bandieruola e quindi ricavare la direzione del vento. $)
Mi ritrovo in alto mare in quanto in matematica sono una ciofeca...
HEEEEELLLLPPPP
ve ne sarò sempre grato!!!
Calculate the wind speed, and display it (or log it, whatever).
// 1 rev/sec = 1.492 mph
1.49200 mph = 2.40114125 km/h
quindi (dando un'occhiata al codice)
long speed = 24011;
il resto rimane come l'algoritmo originale
Adesso proverò...quindi posso dire che la questione anemometro è chiusa!
non è detto! per QUEL modello 1 rev/sec = 1.492 mph = 2.4011 km/h, ma non è detto che il tuo si comporti allo stesso modo. Devi verificare i valori con un altro anemometro, sry
adesso si apre un altro problema: L'anemoscopio!!!
allora, lancia un segnale ogni giro, quindi una rotazione di 360 gradi.
ora ti serve sapere quando spazio percorre la banderuola in una rotazione completa.
[modalità "ci provo" on]
Direi che il metodo più facile è trovare il baricentro della banderula, misurare la sua distanza dal centro di rotazione, e hai il raggio.
calcola il perimetro ( 2PIr )
[modalità "ci provo" off]
piccola regoletta di fisica: la velocità media è data da spazio/tempo
quindi quando rilevi che l'anemometro ha completato un giro (invia un segnale alto), calcoli quanto mtempo è passato dall'ultimo segnale, quindi hai spazio(il perimetro) e tempo (il tempo trascorso tra i due segnali alto)
usi la formuletta e via!