Acquisizione dati

Ciao a tutti, sono nuovo e sto smanettando su un progetto di un sensore di CO2. Il sensore manda dati in forma seriale: collegandolo tramite maxx 232 viene letto da hyperterminal e visualizza valori del tipo:
Z 00003 z 00004 (e’ una lettura reale)
dove Z e z sono concentrazioni ppm di CO2.
Ora…voglio interfacciarlo con arduino per fare un data logger e per provare ho fatto questo programma:

#include <SoftwareSerial.h>

#define rxPin 2
#define txPin 4
#define ledPin 13

SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
byte pinState = 0;

void setup() {

pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
pinMode(ledPin, OUTPUT);
mySerial.begin(9600);
Serial.begin(9600);
}

void loop() {
char someChar = mySerial.read();
Serial.print(someChar);
}

Praticamente legge i dati dal pin2 e me li restituisce sul serial monitor, ma i dati vengono visualizzati in questo modo:
Z 0000° z 0000°
ovvero, al posto dell’unltimo numero c’e’ il simbolo °.
Qualcuno saprebbe dirmi perche’ visto che la Z e gli 0 vengono riconosciuti correttamente?
grazie a tutti
ciao

perchè utilizzi la SoftwareSerial? hai provato a vedere se usando la libreria Serial (quindi utilizzando solo la usb) ti da lo stesso errore?

Da un certo punto di vista sono obbligato perche' poi i dati, dopo essere stati memorizzati su eeprom con la data e l'ora devono essere trasmessi tramite radiomodem RS232, quindi ho bisogno di 2 seriali: una per la lettura del sensore e l'altra per la trasmissione in remoto

Molto interessante il tuo progetto... hai preso spunto da qualcosa o lo hai realizzato da zero?

io proverei a bypassare per un istante la trasmissione softwareSerial e testare solo la lettura tramite la serialport. giusto per capire se l'errore è ricoducibile alla softwareSerial o ad altro.

cecco88: il progetto e' nato per esigenze di monitoraggio vulcanico....chi si occupa di queste cose aveva il sensore e ha detto: che ci faccio? e qui sono entrato di mezzo io che faccio di tutto tranne il geologo :)

steelspirit: sì avevo provato anche la soluzione di collegare il sensore ai pin 0 e 1 ma ascquisisce i dati troppo lentamente e le letture sono del tipo: Z 00032 z 00030 ? 00000 in pratica legge abbastanza bene ma esce fuori il campo: ? 00000, che non so da dove salti fuori...

Le specifiche del sensore riportano:

Serial Protocol The format is set as follows: 9600 baud 8 bit no parity 1 stop bit There is no hardware flow control.

Output Format Each output record consists of a number of field characters followed by their value and terminated with a \r\n (carriage return, line feed). Z ##### z ##### \r \n For example: Z 00017 z 00020 \r\n This would indicate a reading of 170ppm on the high resolution output and 200ppm on the fast response output.

Ciao, visto che sto cercando di fare anch'io una cosa del genere, volevo farti una domanda.

Arduino tira fuori dei dati tra lo 0 e il 1023 in base alla tensione emessa dal sensore.

Come fai a calcolare i ppm? Che attendibilità ha questo sensore?

Grazie

Il sensore che ho a disposizione e' "intelligente", ovvero in uscita mi fornisce gia' due valori di ppm. Per la taratura tieni conto che in ambiente normale e ventilato di sono circa 450 ppm di CO2. Quindi partendo da questo dato puoi tararti il sensore come meglio credi. Il mio problema l'ho risolto invece: era un delay troppo.....delay :)