acquisto sonda di profondità

Credo che intendessi il sensore 7389. Comunque ho visto che non è facile da reperire sul mercato..... Se non sul sito ufficiale.... Continuo comunque la ricerca poichè ho visto che ho solo da guadagnare con questa soluzione. Saluti

www.emmeshop.it/product.php?id_product=1038

Infatti è la 7369 non TTL bensì RS232 Avrei trovato la 7380 (0807 - Sensore ultrasuoni MaxBotix HRXL MaxSonar WRT sonar range finder MB7380) credo che vada comunque bene. http://www.ebay.it/itm/351050143641?ssPageName=STRK:MEWAX:IT&_trksid=p3984.m1438.l2649 Saluti

No, non credo vada bene, poiché i due sensori 7369 e 7389 hanno un filtro particolare (most likely) per evitare false misurazioni (immagina le onde nel serbatoio).

cyberhs: Per l'alimentazione userei un unico alimentatore a 12V 1A visto che la sonda assorbe 30 mA, Arduino un 100 mA ed l'LCD attorno ai 200 mA (dipende da quanto assorbe la retroilluminazione).

Uh.... exagerato Cyberhs , una volta gli LCD alfanumerici retroilluminati assorbivano così ma quelli moderni hanno un solo diodo led a basso consumo , consumano 10-15mA, arduino UNO assorbe 50mA

Allora MB7389 sia, ma mi sà che mi tocca aspettare metà luglio. Speriamo bene. Saluti

cyberhs:
Guarda che il 7639 ha una uscita seriale RS232, mentre l’equivalente 7689 ha una seriale TTL.
Usare l’uscita seriale gode di maggiore precisione (1 mm) contro quella analogica (5 mm).

Nulla da fare. I tempi di reperimento della sonda 7689 si allungano, almeno dopo il mese di agosto. Troppo lungo, ho bisogno proprio del mese di agosto per realizzare il progetto.
Quindi, mi sono informato, il pin analogico 0 è in grado di leggere questo standard.
Un precisione di 5 mm nel mio serbatoio mi indica un errore di +/- 20 litri che su 3500 litri, credo di poterlo accettare.

Qualora dovessi aumentare i sensori con questo standard può venirmi incontro la libreria <SoftwareSerial.h>.
Chiedo a Voi, la correttezza del mio ragionamento.
Saluti

L'importante è che sia il modello 7639, al limite la RS232 la puoi sempre trasformare in TTL. Puoi usare la libreria SoftwareSerial per avere più sensori

un saluto a tutti... sonda arrivata mod. 7639. misura fino a 5 metri.

funziona tutto sul pin 3 analogico. Mi sono accorto però che su una misurazione di circa 1 metro mi toglie sempre dai 3 ai 4 cm. Devo calibrare la sonda? Le misurazioni sono costanti. Non ne ho la certezza, ma l'errore cresce in maniera proporzionale con la misura. questo è l'estratto del codice: int H_sonda; int sensorReading = analogRead(0); H_sonda = map(sensorReading, 0, 1023, 0, 5000);

Inoltre per usare il pin 5 uscita seriale RS232 quali funzioni devo usare? saluti

http://www.maxbotix.com/documents/HRXL-MaxSonar-WR_Datasheet.pdf

nel datasheet c'e' questo

Using a 10-bit analog to digital converter with the 5-meter sensors, one can read the analog voltage counts (i.e. 0 to 1023) directly and just multiply the number of counts in the value by 5 to yield the range in mm. For example, a converted value of 60 corresponds to 300-mm (where 60 x 5 = 300), and 1000 counts corres ponds to 5,000-mm (where 1000 x 5 = 5,000-mm).

quindi a occhio il map e'

 H_sonda = map(sensorReading, 0, 1023, 0, (1023*5));

oppure

 H_sonda =sensorReading * 5 ;

per la seriale, userei la SoftwareSerial su un pin digitale

prendi pari pari l'esempio del link, mettendo il baudrate a 9600 e collegando il pin5 della sonda al pin di arduino, nell'esempio il 10. Anche i GND vanno collegati insieme

Probabilmente va' invertito il livello del segnale

Ok provo. Grazie per la risposta. A presto.

saluti a tutti…
ho configurato la mia sonda di misurazione ( http://www.maxbotix.com/documents/HRXL-MaxSonar-WR_Datasheet.pdf ) in modalità analogica sul pin 3 fuziona tutto maraviglia…

ora voglio usare il pin 5 per effettuare una connessione seriuale rs232
ho cominciato con questo codice di esempio:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

Serial.println(“Goodnight moon!”);

// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
mySerial.println(“Hello, world?”);
}

void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
delay(200);
}

nel monitor seriale mi appare questo:

Goodnight moon!
una serie di caratteri incomprensibili (+ð?f>?å)

la domanda nasce spontanea… come trasformo i caratteri incomprensibilli con il numero della mia misura?

saluti a tutti

Pin 5-Serial Output: The MB736X sensors have an RS232 data format (with 0V to Vcc levels) and the MB738X sensors have a TTL outputs. The output is an ASCII capital “R”, followed by four ASCII character digits representing the range in millimeters, followed by a carriage return (ASCII 13). The maximum range reported is 4999 mm (5-meter models) or 9998 mm (10-meter models). A range value of 5000 or 9999 corresponds to no target being detected in the field of view. The serial data format is 9600 baud, 8 data bits, no parity, with one stop bit (9600-8-N-1). Because the data is presented in a binary data format, the serial output is most accurate .

Quindi, ad ogni acquisizione dovresti ricevere una stringa di 6 [u]caratteri[/u] composta da "R" + xxxx + CR.:

void loop() {
  if (mySerial.available()) {
    Serial.print(char(mySerial.read()));
  }
}

ok ho provato un codice del genere:

void loop() { if (mySerial.available()) { Serial.print(char(mySerial.read())); char stringa=(mySerial.read()); Serial.println(stringa); Serial.println(" "); } delay(200); }

ma non vedo la strinda rimane di due caratteri ed incomprensibile...

Il codice deve essere racchiuso nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.

Se alleghi solo una parte del codice viene difficile dare aiuto. La mySerial come l'hai settata? Quali pin sono collegati? Di base lavora a 9600 baude, sai a che velocità lavora la sonda ?

Ci credo che trovi solo due caratteri leggendo [u]due volte[/u] il buffer di ricezione!

Prova così ([u]senza[/u] mettere alcun ritardo), in modo da leggere il valore ASCII del carattere stampato:

void loop() {
  
 ...  // acquisizione misura
  
  while (mySerial.available()) {
    char Car = mySerial.read();      
    Serial.print(Car);
    Serial.print("/t"); 
    Serial.println(Car, DEC); 
  }
}

chiedo scusa per la fretta. delay(10000);

il codice completo è questo:

include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()  
{
 
  Serial.begin(9600);
  while (!Serial) {
  }
  Serial.println("Goodnight moon!");
  mySerial.begin(9600);
  mySerial.println("Hello, world?");
}

void loop() {
  if (mySerial.available()) {
  Serial.print(char(mySerial.read()));
  char stringa=(mySerial.read()); 
  Serial.println(stringa, );
  Serial.println(" ");
}
delay(200);
}

il data sheet della sonda è questo:
modello MB7369

non credo che sia un problema di velocità, non so assolutamente gestire i dati che arrivano dalla sonda…

sul monitor seriale
ricevo:

à/t-17
+/t43

ecc. ecc.

Allora, se leggi BENE il datasheet che ci hai indicato, a pagina 2 dice chiaramente :

Pin 5-Serial Output: The MB736X sensors have an RS232 data format (with 0V to Vcc levels) and the MB738X sensors have a TTL outputs.

Tu hai preso una MB7369 e quindi ... formato RS232 e NON TTL ... e ... i bit sono invertiti (LOW/HIGH). :~ :~ :~

Fortunatamente, la SoftwareSerial, che stai usando, ha un parametro NON documentato ma che puoi vedere guardando il suo costruttore nel codice :

SoftwareSerial::SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic /* = false */) :

quindi ... istanziala così :

SoftwareSerial mySerial(10, 11, true); // RX, TX, Inverse Logic

... e dovresti cominciare a vedere delle cose sensate, ovvero :

The output is an ASCII capital “R”, followed by four ASCII character digits representing the range in millimeters, followed by a carriage return (ASCII 13).

Guglielmo

Scusa ho sbagliato a scrivere devi inserire un "\t" e non un "/t"