Go Down

Topic: lenta representación de señales de sensores en Monitor Serial y serial Plotter  (Read 124 times) previous topic - next topic

Dinasty

Hola, buen día.... Podrían ayudarme a resolver el siguiente detalle... No he logrado ver lo que necesito hacer para resolverlo...

Estoy usando dos sensores, Uno es sensor de pulso, y el otro es sensor de resistivo de fuerza MF01. Los dos mediante Arduino UNO

La programación conjunta de estos dos sensores no marca ningún error a la hora de compilar, el detalle es cuando ejecuto el monitor serial, la lectura (valor Frecuencia de Pulso) del sensor de pulso es un poco mas tardada, pero a su vez cuando se reconoce la lectura del sensor de fuerza se acelera dicha lectura alterando la lectura del otro sensor...

Cuando ejecuto el serial plotter, la señal de la lectura del sensor de pulso es muy lenta y no tiene coherencia dicha gráfica.. a su vez cuando recibe la señal del sensor de fuerza, dicha gráfica no tiene coherencia y su lectura se vuelve muy rápida.  

Si me pudieran ayudar a resolver este detalle, de tal forma, obtener una sincronizacion en la lectura de los sensores y de tal forma, ver una comparación en el serial plotter (gráfica) y en el monitor serial (valor de la lectura).

Anexo el código, y de antemano gracias por su atención y tiempo.

Code: [Select]


int AnalogPin = 0;   // Sensor Resistivo conectado a Analog 0
int LecturaResistencia;  // La Lectura de la Resistencia por División de Tensión
int Buzzer = 10;
int pulso;  
int limite = 508;  // Determina qué señal "se contará como un latido" y qué señal ignorar.

void setup()
{
Serial.begin(9600); // Enviaremos la información de depuración a través del Monitor de Serial
pinMode(Buzzer, OUTPUT);
pinMode(LecturaResistencia, INPUT);
}

void loop()
{

LecturaResistencia = analogRead(AnalogPin); // La Resistencia es igual a la lectura del sensor (Analog 0)
Serial.print("Lectura Analogica = ");
Serial.println(LecturaResistencia);

{
   int LecturaResistencia = analogRead(LecturaResistencia);
   if (LecturaResistencia <= 400)
    delay(2000);
    digitalWrite(Buzzer, HIGH);
   }  

    if (LecturaResistencia >=150)
      digitalWrite(Buzzer, LOW);

pulso = analogRead(A5);  // Lee el valor del pin analógico 5, y Asigna este valor a la variable "pulso".

Serial.println(pulso);
if(pulso > limite){
// Si la señal es superior a "508", entonces suena el buzzer.
digitalWrite(Buzzer,HIGH);
}
else
{
// De lo contrario, deja de sonar el buzzer.
digitalWrite(Buzzer,LOW);
}
//Retardo de 35ms
delay(35);
    
   }

surbyte

Primer error es que
Code: [Select]
int AnalogPin = 0; 

debe ser

Code: [Select]
int AnalogPin = A0; 

segundo error

Code: [Select]
  LecturaResistencia = analogRead(AnalogPin); // La Resistencia es igual a la lectura del sensor (Analog 0)
  Serial.print("Lectura Analogica = ");
  Serial.println(LecturaResistencia);

 
  int LecturaResistencia = analogRead(LecturaResistencia);


Para que defines una variable global

Code: [Select]
int LecturaResistencia;

y luego la vuelves a definir localmente

Code: [Select]
int LecturaResistencia = analogRead(LecturaResistencia);

no tiene sentido. Elimina la local.

Dinasty

Gracias por tu respuesta, ya cheque esos detalles y trate de arreglarlos. Con respecto al problema
estoy tratando de dar diferente orden a la programación y observar a la hora de compilar, si hubiera un cambio en el comportamiento que tengo en lo sensores, es decir quiero obtener la comparación que cuando ambos lleguen a cierto valor, el buzzer se ponga en alto, solo que uno se vera mostrado en el serial plotter y el otro sensor en el monitor serial.

Cuando compilo el programa y abro el serial plotter o el monitor serie, la gráfica se va haciendo muy lentamente, mi duda es como puedo obtener una lectura fluida y normal.

Mi otra duda es, de que otra forma puedo hacer esta programación para el caso contrario, sin utilizar ambas if en el void loop, no se por ejemplo usar, un else, if else, un ciclo for, cualquiera de esos que pueda ser aplicable.

Por favor, si me pudieras orientar también en este parte...

Añado nuevamente el código y Nuevamente gracias por tu tiempo y atencion:

Code: [Select]

int AnalogPin = A0;   // Sensor Resistivo conectado a Analog 0
int LecturaResistencia;  // La Lectura de la Resistencia por División de Tensión
int Buzzer = 10;
int limite = 510;  // Determina qué señal "se contará como un latido" y qué señal ignorar.
int lecturaPulso;  


void setup()
{
Serial.begin(9600); // Enviaremos la información de depuración a través del Monitor de Serial
pinMode(Buzzer, OUTPUT);
pinMode(LecturaResistencia, INPUT);

}

void loop(){
  LecturaResistencia = analogRead(AnalogPin); // La Resistencia es igual a la lectura del sensor (Analog 0)
  Serial.print("Lectura Analogica = ");        //Dato Numerico de la resistencia en el Sensor en el Monitor Serie

  lecturaPulso = analogRead(A5); // La lecura del pulso es igual a la lectura del sensor (Analog 5)
  Serial.println(lecturaPulso);             //Grafica Serial Plotter

  pulsoPresion();
}

void pulsoPresion(){
if(LecturaResistencia <= 500 and lecturaPulso <= limite);{
  delay(500);
    digitalWrite(Buzzer, HIGH);
}
if(LecturaResistencia >= 500 and lecturaPulso >= limite);{
  digitalWrite(Buzzer, LOW);
  delay(35);
  }
}


 

bosoft

Hay cositas que no entiendo, pero creo que con estas modificaciones funcionará algo mejor
Code: [Select]
void setup()
{
//Serial.begin(9600); // Enviaremos la información de depuración a través del Monitor de Serial
Serial.begin(19200); // algo mas de velocidad al terminal
pinMode(Buzzer, OUTPUT);
//pinMode(LecturaResistencia, INPUT); //<----- ERROR ¿LecturaResistencia o AnalogPin?
pinMode(AnalogPin,INPUT);
pinMode(A5,INPUT); // <----- FALTA segundo pin

}

void loop(){

  LecturaResistencia = analogRead(AnalogPin); // La Resistencia es igual a la lectura del sensor (Analog 0)
  Serial.print("Lectura Analogica = ");      //Dato Numerico de la resistencia en el Sensor en el Monitor Serie
  lecturaPulso = analogRead(A5); // La lecura del pulso es igual a la lectura del sensor (Analog 5)
  Serial.println(lecturaPulso);             //Grafica Serial Plotter

//  pulsoPresion();
if(LecturaResistencia <= 500 and lecturaPulso <= limite);{
//  delay(500); //no entiendo para que este retardo?
    digitalWrite(Buzzer, HIGH);
    }
if(LecturaResistencia >= 500 and lecturaPulso >= limite);{
  digitalWrite(Buzzer, LOW);
//  delay(35); // ni este
  }
}

/*void pulsoPresion(){
if(LecturaResistencia <= 500 and lecturaPulso <= limite);{
  delay(500);
    digitalWrite(Buzzer, HIGH);
}
if(LecturaResistencia >= 500 and lecturaPulso >= limite);{
  digitalWrite(Buzzer, LOW);
  delay(35);
  }
}*/


No lo he compilado y pueden haber errores de tecleo. Saludos

Go Up