[meteo] I2c e driver per Gill Windsonic
Ho completato il traduttore I2C per l'anemometro sonico Windsonic della Gill http://gillinstruments.com/products/anemometer/windsonic.htm E' un anemometro dichiarato Low-cost ma per la categoria degli anemometri sonici che superano comunque i 1000E Qui i sorgenti: https://github.com/r-map/rmap/tree/master/arduino/sketchbook/rmap/i2c-windso... Il funzionamento è simile a quello per gli anemometri analogici (per ora gestiti anemometri Davis e Inspeed). L'impostazione one-shot avviene scrivendo un booleano nel registro I2C_WIND_ONESHOT. Il registro per i comandi è I2C_WIND_COMMAND a cui è possibile impartire I2C_WIND_COMMAND_ONESHOT_START e I2C_WIND_COMMAND_ONESHOT_STOP; tra uno start e uno stop bisogna attendere SAMPLERATE ( 0.3 secondi ). Dopo uno stop è possibile leggere questi registri: * I2C_WIND_VERSION versione firmware * I2C_WIND_DD direzione vento * I2C_WIND_FF forza del vento * I2C_WIND_U componente u * I2C_WIND_V componente v Se la modalità one-shot è disabilitata è necessario impartire solo il comando I2C_WIND_COMMAND_ONESHOT_STOP e si potranno leggere direttamente i registri che riporteranno dati appena elaborati; oltre ai precedenti sarà possibile leggere anche questi registri: * I2C_WIND_MEANU media U 10 minuti * I2C_WIND_MEANV media V 10 minuti * I2C_WIND_PEAKGUSTU picco raffica U 10 minuti * I2C_WIND_PEAKGUSTV picco raffica V 10 minuti * I2C_WIND_LONGGUSTU lunga (60s) raffica U 10 minuti * I2C_WIND_LONGGUSTV lunga (60s) raffica V 10 minuti * I2C_WIND_MEANFF media forza del vento 10 minuti * I2C_WIND_SIGMA deviazione standard forza 10 minuti * I2C_WIND_SECTOR(1...8) frequenza nel settore 1...8 (sector 1 da -22.5 to +22.5) * I2C_WIND_SECTORCALM frequenza calma di vento Per la lettura dei registri viene utilizzata la tecnica del double buffering per rendere le letture dei registri atomiche; a ogni comando stop i buffer vengono scambiati. Per l'elaborazione dei dati invece vengono usati dei circular buffer che permettono di elaborare in continuo medie, massime ... Per risparmiare memoria sono usati due livelli di circular buffer a risoluzioni temporali differenti e due livelli di elaborazione differenti che sfruttano la proprietà distributiva degli algoritmi. ciao Paolo
participants (1)
-
Paolo Patruno