Pages: 1 [2]   Go Down
Author Topic: Wind Logger (anemometro) low cost con Arduino  (Read 6628 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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à..  :-/

Logged

Naples (IT)
Offline Offline
God Member
*****
Karma: 6
Posts: 716
Andrea E.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
« Last Edit: September 29, 2010, 04:09:19 am by skaxxo » Logged

Arduino, MODs e DIY: blackstufflabs.com

0
Offline Offline
Newbie
*
Karma: 0
Posts: 6
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);
}
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!!!
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: 1 [2]   Go Up
Jump to: