Sensor ultrasonico de oxygeno OCS-3F

Buen dia quisiera pedir ayuda con el codigo de este sensor, por el tema de la pandemia la escuela me pidio elaborar un proyecto de este tema y se me hizo facil utilizar este sensor ya que un amigo ingeniero me lo proporciono que tenia ahi arrumbado, el problema es que hice un codigo sin embargo no logro hacer que lea correctamente debo señalar que estoy aprendiendo a programar quisiera saber si me pueden apoyar ya que intente con varios codigos que encontre en algunas paginas pero no logro hacer que funcione tengo entendido que funciona de 5 a 12 v y funciona con puerto serial es lo que vi en su ficha tecnica

OCS-3F 2.1data sheet.pdf (598,0 KB)

y el codigo que cree fue este

#include <Wire.h>
#include <SoftwareSerial.h>
SoftwareSerial sensor (2, 3); //RX, TX
float valorPeligro= 19.5;

void setup()
{
  

        Serial.begin(9600);
        sensor.begin(9600);
}

void loop(){
        float valorSensor;
        float voltajeSensor; 
        float Valor_O2;
        valorSensor = sensor.read();
        voltajeSensor =(valorSensor/1024)*5.0;
        Valor_O2 = voltajeSensor*20.94/2.47;
        {
        Serial.print("voltaje escalado: ");
        Serial.println(voltajeSensor);
        Serial.print("Concentration of O2 is ");
        Serial.print(Valor_O2,1);
        Serial.println("%");

         if(Valor_O2<=valorPeligro)
        
      if (sensor.available())
     Serial.write(sensor.read());
     if (Serial.available())
     sensor.write(Serial.read());

           delay(1000);
        }
       }

NOTA solo quiero hacer que lea el nivel de oxigeno de un concentrador normalmente esos equipos saturan a 96% (mas-menos) y que se mantenga en 20.5 que es el valor normal del ambiente y si disminuye a 19.5 me emita una advertencia ya sea con un led o una alarma . SI ESTOY MAL EN ALGO HAGANMELO SABER

Comienza solo con lo que estas recibiendo.

#include <SoftwareSerial.h>
SoftwareSerial sensor (2, 3); //RX, TX

void setup() {
        Serial.begin(9600);
        sensor.begin(9600);
}
void loop() {
if (sensor.available())
     Serial.write(sensor.read());
}

Solo este código, lo demas descártalo.

#include <Wire.h>

Esto no tiene razón de ser o estar. No conectas nada via I2C.
Coloca la salida que te responda el monitor Serie. Postea como si fuera código.

Buen dia de echo <Wire.h> lo inclui por que necesitare utilizar un lcd 16x2 despues de hacer funcionar el sensor, realize lo que mencionaste y al abrir el monitor me aparecen simbolos raros sin embargo hize pruebas desconectando y conectando el sensor y en cada prueba los simbolos si cambian pero pues aun necesito que haga la medicion correcta.
Adjuntare algunas imagenes de como tengo conectado el sensor y menciono que el voltaje para alimentar el sensor lo hago con una fuente a 9 v para evitar problemas con el voltaje de la placa de arduino uno que es el que utilizo




tratare de modificar el codigo para ver que me lea como debe ser y dependiendo de como vaya lo ire subiendo los avances para que me vayan mencionando en que cosas estoy mal o si voy bien, investigue y este sensor es chino y casi no hay informacion es nuestro idioma solo en chino probablemente no nada mas me sirva a mi toda este informacion y si me trabo en algo les iré preguntando jaja.

Los simbolos raros obedecen a muchas veces a que los baudios no son los correctos, pero el manual dice expresamente
9600N81, asi que eso no debería ser.
Descarta que tus cables RX y TX (2,3) esten cruzados con los del sensor.
Es decir RX pin 2 con Tx del sensor
TX pin 3 con Rx del Sensor.
GND compartido con el sensor.

Como dice @Surbyte creo que te falta el GND desde el sensor al UNO, porque solo veo dos cables entre el sensor y el UNO

a ok si mire ya hice esa prueba incluso probe con otro sensor para verificar que no estuviese dañado el primero pero aun asi me salen codigos raros dado que ya verifique que pin era gnd con el tester y los pines de tx y rx y me siguen apareciendo valores raros tengo entendido que en el conector j2 debo conectar dichos cables y ya lo hice le adjunto las imagenes


sin embargo para no quedarme con la duda rehize otro codigo
si me preguntan donde saque dicho codigo lo realize de otra conexion de un sensor de oxigeno con entrada analogica pero obvio modifique varias lineas para poder compilar supuse que si no iva a funcionar pero sin embargo debe leerme o hacer algun cambio y esto fue lo que obtuve

#include <SoftwareSerial.h>
SoftwareSerial SensorO2(2, 3); //RX, TX


void setup()
{
  

        Serial.begin(9600);
        SensorO2.begin(9600);
}

void loop(){
        float valorSensor;
        float voltajeSensor; 
        float Valor_O2;
        
        valorSensor = SensorO2.read();
        voltajeSensor =(valorSensor/1024)*13.25;
        Valor_O2 = voltajeSensor*20.94/3.31;
        {
        
        Serial.print("Concentracion o2 :");
        Serial.print(Valor_O2,1);
        Serial.println("%");

        if (SensorO2.available())
     Serial.write(SensorO2.read());

     delay(1000);
        
   }
}
     

en esta foto me salieron estos datos con el sensor desconectado con el codigo ya echo

en esta otra fue con el sensor conectado con el mismo codigo

es ahi donde me di cuenta que el sensor probablemente si este funcionando y necesito hacer algunas operaciones para que mida correctamente sin embargo como no hay mucha información sobre este sensor hasta aqui lo he dejado por el momento mañana continuare si tienen algun tip o dato que podria utilizar se los agradecere.

En el primer codigo lees un solo byte, lo imprimes y luego esperas 1000 mseg con lo cual llenas el buffer con todo lo que envie cada 500mseg
Quita ese delay(1000) y prueba de nuevo.
Mas alla que ya te funcionó y tal vez no sea importante.

Cosas como

valorSensor = SensorO2.read();
voltajeSensor =(valorSensor/1024)*13.25; 
Valor_O2 = voltajeSensor*20.94/3.31; 

Jamás te van a funcionar porque el sensor te envía los datos con un protocolo serie y algo como eso aplicaría si usaras las salidas analógicas.
Estás mezclando peras con manzanas pero quieres obtener mermelada de frutillas. :wink:

Revisá la página 5 de la hoja de datos.

Saludos

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.