Go Down

Topic: Wind Logger (anemometro) low cost con Arduino (Read 7 times) previous topic - next topic

jimmy3dita

Eccomi,
allora ho studiato un po' la reference sul sito, ho trovato il comando micros() che imposta un delay (nel nostro caso 1200) per le funzioni e potrebbe essere inserito nel loop per "sincronizzarsi" con i dati della sonda.

Per la sincronizzazione pensavo ad un optoisolatore che "chiude" a massa il pin 3, avviando il processo di log solo quando vogliamo noi.

Oppure pensavo di attendere l'header (00100) e da lì sincronizzare il log, ma la cosa comincia a diventare un po' esoterica per le mie capacità..  :-/


AnTrea

#16
Sep 29, 2010, 12:41 am Last Edit: Sep 29, 2010, 11:09 am by skaxxo Reason: 1
Ciao

Mi sembra di capire che hai interfacciato correttamente il tuo sensore ad arduino e ora hai solo il problema di raccogliere ed interpretare i dati via software.
Mi è parso di capire che il tuo sensore passi ad arduino una stringa di bit... la cosa mi ricorda molto i registri di stato delle CPU.
PERSONALMENTE io farei così:

Ti propongo due soluzioni in pseuodocodice.
Dovrai saper usare bene gli operatori bitwise e un pò di logica bitwise.
Per "dato" intendo la stringa che ti passa il sensore nei vari istanti di tempo, quindi ho pensato di entrare in un loop infinito che faccia un check su sensore, se il dato appena raccolto è diverso da quello dell'istante precendente vuol dire che il sensore ha raccolto un nuovo dato e quindi puoi fare qualcosa (mi pare che vuoi loggare).


datoPrecendente=0;
while(1==1)
 datoAttuale=catturadatoattuale();
 if (datoAttuale!=datoPrecendete) then
    {
      datoPrecedente=datoAttuale;
      ....
      fai qualcosa
      ....
    }
end

oppure

while (1==1)
  micros(1200); //credo
  dato=catturadato();
  ...
  fai qualcosa
  ...
end;

Vedi se la cosa può fare al caso tuo...
Arduino, MODs e DIY: blackstufflabs.com

illogico

Quando non ci sono i bit del segnale la linea è down... quindi dato che la capacità di campionamento di Arduno è superiore ai segnali sulla linea io ho fatto così:

char sData [64];
int sInPin    =  3;
char sData [64];
int  microDelay = 1225;

void setup()
{
 Serial.begin(9600);
 Serial.print("\n\nInitializing...\n");
}

void loop()
{
 while(digitalRead(sInPin) == LOW) delayMicroseconds(1);
 delayMicroseconds(400);
 
 // leggo i singoli bit seriali:
 for(int i = 0; i < 38; ++i)
 {
   sData= (digitalRead(sInPin) == HIGH)? 48 : 49;
   delayMicroseconds(microDelay);
 }
 Serial.println(sData);
}

jimmy3dita

Eccomi,
ho passato qualche giorno lontano dal mio Arduino ma non ho mollato!
Purtroppo la funzione va alla grande ma ricevo solo una sfilza di zeri!

Probabilmente la lettura del TX-23 in mio possesso è diversa, ho provato a smanettare con le resistenze per portare i voltaggi al livello necessario ma nulla... non va.

Troverò un altro sistema, ma credo che abbandonerò questo tipo di sensore in favore di altri...  :-X

chpm78

Ciao a tutti,

prima di tutto vi volevo ringraziare perchè all'interno di questa discussione ho trovato molte informazioni che mi sono state utilissime per poter riuscire a leggere i dati dell'anemometro TX23.

Io non uso Arduino ma lavoro sui Micro della Microchip (i famosi PIC) però forse il lavoro che ho fatto vi può aiutare. Il codice che ho scritto è in C.

Ho realizzato un piccolo sito dove descrivo la stazione Meteo WS1501 ed in particolare (per ora) il TX23, il protocollo e il modo che ho usato per leggere i dati.

All'inizio ho provato a leggere i dati usando un delay costante corrispondente al periodo di bit, il problema è che i due TX23 che possiedo hanno periodi di bit leggermente diversi e quindi l'errore che si viene a sommare porta il punto della lettura fuori dal bit "giusto" provocando degli errori.

Adesso uso i primi 5 bit trasmessi (11011) per calibrarmi sull'esatto periodo di bit per non commettere errori in seguito! Funziona che è una meraviglia!!!

Ho fatto molte prove per trovare l'algoritmo del checksum ma per ora non ho avuto fortuna!

Se volete contribuire allo sviluppo della pagina non esitate a contattarmi!!!

Ciao a tutti e grazie dell'aiuto!!!

chpm78

Ecco il link!

http://www.rd-1000.com/chpm78/lacrosse/Lacrosse_WS1501.html

Nel post precedente non riuscivo a metterlo perchè era il mio primo post sul forum!

Ciao, Paolo

Go Up