Pages: [1] 2   Go Down
Author Topic: Wind Logger (anemometro) low cost con Arduino  (Read 5074 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

Un saluto a tutto il forum,
chiedo scusa se spendo il primo messaggio per aprire un thread, ma in verità lurko già da un po' smiley e sto "smanettando" con Arduino Duemilanove già da Giugno (anche se fin'ora ho semplicemente cablato un display HD44780).

È già qualche giorno che cerco di capire come collegare un sensore anemometrico La Crosse TX23 (circa 40 Euro su Ebay) al mio Arduino, basandomi sulle (pochissime) informazioni disponibili in rete.

Il collegamento è di tipo seriale su cavo RJ-11, il pin-out è il seguente:

1 - serial I/O
2 - VCC
3 - Regulator CE (Chip Enable)
4 - GND

Il protocollo di un modello molto simile (il TX20) non è standard (quindi non utilizza lo standard UART) ed è composto da una stringa di 37bit con una durata di 1,2 msg per ogni bit. Mettendo il pin 3 a massa viene inviato il pacchetto di dati che si ripete ogni 2 secondi.
Sempre il TX20 ha un VCC di 5 volts e la TX è in TTL

Ho già alcuni dritte per decodificare questi pacchetti (il sensore invia velocità e direzione del vento) ma vorrei fin da subito collegarlo al mio Arduino, e fare un "dump" dei dati ricevuti.

Stavo cercando di capire come interfacciare il sensore, perché l'alimentazione in ingresso dovrebbe essere 5 volts (quindi reperibili sulla board dell'Arduino), mentre un utente su un'altro forum ha già collegato con successo il TX23 tramite l'ingresso RX USART di un ATmega1284P, montato su scheda Raven.

La domanda da un milione di dollari (del monopoli) è: devo usare un MAX232 (o un Pic 16F84A, ne ho un po' in giro per casa), oppure posso collegare il sensore direttamente al mio Arduino 2k9?

Edit: la domanda corretta è usare Arduino per fare il "dump" dei dati del sensore mentre è collegato via USB al computer!
« Last Edit: September 17, 2010, 05:59:54 am by jimmy3dita » Logged

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

Sigh, nessuno ha esperienze a riguardo?   :'(
Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah, hai bisogno di una libreria che ti faccia usare i pin normali come se fossero TTL... esiste, ma non saprei aiutarti di più
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

BZ (I)
Online Online
Brattain Member
*****
Karma: 234
Posts: 20209
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lesto : cosa dici???????????

La seriale RS232 ha come livello di HIGH da -3 a -25V e come LOW da 3 a 25V
La seriale con livelli TTL vuol solo dire che la codifica e il protocollo di spedizione é lo stesso ma i livelli sono 5V e rispettivamente 0V. Esattamente quello che esce dal ATmega sui piedini 0 e 1.

Certi integtrati fanno la conversione come per esempio il MAX232 e similari

Ciao Uwe
Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi sono lanciato, ma in particolare mi riferivo a:
Quote
Edit: la domanda corretta è usare Arduino per fare il "dump" dei dati del sensore mentre è collegato via USB al computer!
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

BZ (I)
Online Online
Brattain Member
*****
Karma: 234
Posts: 20209
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah, parlavi della libreria SoftwareSerial per avere una seconda porta seriale.
http://arduino.cc/en/Reference/SoftwareSerial
Ciao Uwe
Logged

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

Ciao a tutti, non ho capito l'obiettivo di jimmy3dita.
- collegare arduino al tx20 ?
- collegare arduino tra il tx20 e la base ?

Per la decodifica del tx20/tx23:
 The protocol consists of a 37 bits string with a duration of 1.2 msg
 for every bit:
 bits 1-5 = Start = 11011
 bits 6-9 -> Direction (4 bits)  
 Bit 10-21 -> Anemometer (12 bits)
 Bit 23-37 "repeats" Direction and Anemometer.

Io stò cercando di realizzare la prima delle due ipotesi.

Ciao
Logged

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

Ciao Illogico,
anche io sto tentando la prima strada, solo che il sensore è un TX23, quindi ho dei dubbi che il protocollo sia lo stesso.

Purtroppo i valori non sono "naturali" e, contrariamente a quello che pensavo quando ho acquistato questo sensore, non è possibile collegarlo agli ingressi analogici dell'Arduino (scenario che semplifica a mio parere il collegamento).
Logged

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

Cosa intendi con "valori non naturali" ?
Logged

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

Ciao,
ti faccio un esempio: alcuni sensori Nesa sono disponibili sia con uscite normalizzate (di cui basta misurare l'assorbimento/caduta di tensione), sia "naturali", ovvero con impulsi (frequenza) che salgono all'aumentare della velocità.

La misurazione nel primo caso è del tutto analogica, probabilmente entrano in ballo altri problemi (lunghezza del cavo, disturbi elettromagnetici) ma non c'è necessità di decodifiche, il secondo caso è comunque decisamente più abbordabile della decodifica di un protocollo TTL utilizzato in questi sensori La Crosse.

Purtroppo questo genere di sensori "stand-alone" vengono venduti con certificazioni IEC per misurazioni anemometriche professionali e il loro costo è proibitivo per i nostri scopi ;_;
Logged

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

Fatto! smiley

 Tx-20 <-------------------------> Arduino
1 - serial I/O - Resistenza 8K - Pin Digitale
2 - VCC 3.3v ------------------- 3.3V
3 - Reg. CE   -(to gnd)-\
4 - GND        ------------+----- GND

A questo punto bisogna mettere un loop che aspetta i bit sul pin digitale, quindi leggere 1 bit ogni 1.2 millisec poi decodificarli..

111011111011100001111100010001000111100000000000000000000000

smiley

Ciao
Logged

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

La Crosse TX-20 <-> Arduino

Tx-20 <-------------------------> Arduino
1 - serial I/O - Resistenza 8K - Pin Digitale
2 - VCC 3.3v ------------------- 3.3V
3 - Reg. CE   -(to gnd)-\
4 - GND        ------------+----- GND

E la mappatura non è quella precedentemente indicata ma son sempre 38 bit:
11011          1-5 header
XXXX           6-9 Direzione (22.5 gradi x bit)
XXXXXXXXX 10-18 Forza vento (0.1 gradi x bit)
XXXXXX       19-25 Checksum
XXXX           26-29 Direzione (con bit invertiti)
XXXXXXXXX 30-38 Forza vento (con bit invertiti)

       DIR. FORZ-VENT    CHECKSUM FIELDS      TRANSCODIFICA
AAAAA DDDD FFFFFFFFF CCCCCCC CDIR CFORVENT   DIR.  VELOCITA
 00100 0000 000000000 ??????? 1111 111111111  N      0 m/s
 00100 0001 100000000 ??????? 1110 011111111  NNE    0,1 m/s
 00100 0010 010000000 ??????? 1101 101111111  NE     0,2 m/s
 00100 0011 001000000 ??????? 1100 110111111  ENE    0,4 m/s
 00100 0100 000100000 ??????? 1011 111011111  E      0,8 m/s
 00100 0101 000010000 ??????? 1010 111101111  ESE    1,6 m/s
 00100 0110 000001000 ??????? 1001 111110111  SE     3,2 m/s
 00100 0111 000000100 ??????? 1000 111111011  SSE    6,4 m/s
 00100 1000 000000010 ??????? 0111 111111101  S     12,8 m/s
 00100 1001 000000001 ??????? 0110 111111110  SSW   25,6 m/s
 00100 1010 110000000 ??????? 0101 001111111  SW     0,3 m/s
 00100 1011 001100000 ??????? 0100 110011111  WSW    1,2 m/s
 00100 1100 001111100 ??????? 0011 110000011  W     12,4 m/s
 00100 1101 000001100 ??????? 0010 111110011  WNW    9,6 m/s
 00100 1110 000000011 ??????? 0001 111111100  NW    38,4 m/s
 00100 1111 111111111 ??????? 0000 000000000  NNW   51,1 m/s


Spero sia utile a tutti
nick@illogico.net
« Last Edit: September 26, 2010, 02:05:40 pm by illogico » Logged

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

Ciao Nick,
provo adesso a collegarlo con il tuo schema, anche se temo di averlo lessato... rivedendo i collegamenti ho invertito la polarità :'(

...tu come hai raccolto questi dati? Oscilloscopio? smiley-wink
Logged

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

Se usi 3.3v (ma anche 5V) non si lessa... (nel fare i tentativi penso di aver sbagliato tutte le combinazioni possibili...)

Inizialmente un amico aveva studiato il TX20 con l'oscilloscopio mentre era attaccato alla base, quindi aveva fatto un circuito per ridurre la corrente e leggere il segnale (ma "sospettando" un clock sul "Reg-ce") [Io sono più informatico che elettronico..]

Io ho semplificato il tutto raccogliendo dal thread che avevi segnalato il fatto che il CE basta metterlo a massa, e poi ho "intuito" il bisogno della resistenza perchè con il tester (alla porca) il voltaggio sul serial era 3.6 volt...  (Quindi se provi tra gnd e serial dovresti avere un segnale di vita)

Ciao
Nick

P.s. Ho messo il Pin digitale in input e ho attivato il pullup mettendolo a HIGH per non avere "stati indefiniti"
[I dati li ho raccolti campionando diverse velocità e direzioni, quindi ho "tagliato" i campi e li ho ordinati... i valori erano "congruenti" e logici]

P.p.s. con sensori "naturali" c'e' il problema della taratura... il tx-20 essendo elettronico è auto-tarato smiley-wink

Ultimo: per la piedinatura avevo riportato il tuo schema ma se prendiamo come riferimento: http://pinouts.ru/connector/4_pin_RJ11_male_connector.shtml

Allora è invertito e sul (mio) maschio RJ-11 del TX-20 sono:
4 - serial I/O
3 - VCC
2 - Regulator CE (Chip Enable)
1 - GND
« Last Edit: September 26, 2010, 04:55:13 pm by illogico » Logged

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

Ciao,
confermo che la piedinatura è rj11 invertita, ho smontato il sensore e sulla scheda il pin "1" (i/o) è crimpato sul pin 4 del connettore.

Ora vediamo se riesco a fare il passo successivo (ovvero il dump sulla seriale dei dati)...  :o
Logged

Pages: [1] 2   Go Up
Jump to: