Hola amigos,
Llevo ya algunos días intentando programar un sensor de oxigeno disuelto. Este sensor es el DO-99 mide oxígeno disuelto y temperatura, este se comunica usando rs485, como pueden ver en el documento que subi "communication case" debo enviar un mensaje "0x01 0x03 0x00 0x00 0x00 0x10 0x44 0x06" y de respuesta me envía la concentración de oxigeno, pero en hexagecimal, por ejemplo me responde "0x28 0xF6 0x41 0x04" este mensaje lo debo interpretar haciendo un algoritmo como se explica en ese mismo pdf.
La idea de todo esto es la siguiente, el sensor funciona con el transmisor, lo conecto y funciona correctamente puedo leer la temperatura y el oxigeno disuelto, la cuestión es que quiero evitar usar el transmisor ya que cuesta 500 dolares y necesito utilizar al menos 16 de esos sensores, en un proyecto que quiero implementar, para ello quiero utilizar un arduino y transformar la salida de mi sensor en 4 20mA.
El sketch que mas se acerca a lo que quiero hacer es este. Pero aun asi no me entrega valores, solo la primera lectura después no me envía nada.
String dato1;
String dato2;
String dato3;
String dato4;
String dato5;
String dato6;
String dato7;
String dato8;
void setup() {
pinMode(2, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(2,HIGH);
// DATO D0
Serial.write(0x01);
delay(1);
Serial.write(0x03);
delay(1);
Serial.write(0x00);
Serial.write(0x00);
delay(1);
Serial.write(0x00);
Serial.write(0x02);
delay(1);
Serial.write(0xC4);
Serial.write(0x0B);
delay(5);
digitalWrite(2,LOW);
if (Serial.available() > 0 ) {
dato1 = Serial.read();
delay(1);
dato2 = Serial.read();
delay(1);
dato3 = Serial.read();
delay(1);
dato4 = Serial.read();
delay(1);
dato5 = Serial.read();
delay(1);
dato6 = Serial.read();
delay(1);
dato7 = Serial.read();}
// DATO SENSOR
Serial.print(dato1);
Serial.print(";");
Serial.print(dato2);
Serial.print(";");
Serial.print(dato3);
Serial.print(";");
Serial.print(dato4);
Serial.print(";");
Serial.print(dato5);
Serial.print(";");
Serial.print(dato6);
Serial.print(";");
Serial.print(dato7);
Serial.print(";");
Serial.println(dato8);
delay(1000);
}
Que le podría mejorar para que funcione?
Las conexiones que tengo son un arduino uno, un max485 y el sensor.
Aquí hay algunas fotos para que vean los equipos que estoy utilizando.
Ahora como se interpreta ya lo tengo casi listo, el mensaje de respuesta se interpreta cambiando de posición la respuesta del sensor 0x41 0x04 0x28 0xF6 y este mensaje en hexagecimal pasarlo a binario y finalmente de binario a IEEE754
Adjunto alguno el manual del transmisor de oxígeno y de el método de comunicación.
FDO-99E-SM panel mount dissolved oxygen analyzer.pdf (1.19 MB)
RS485 Protocol DO.pdf (96.8 KB)