Autor Tema: Salida analógica de 0v a 5v para caudalímetro  (Leído 2943 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dxdiag90

  • PIC10
  • *
  • Mensajes: 5
Salida analógica de 0v a 5v para caudalímetro
« en: 28 de Junio de 2017, 14:24:01 »
Se puede obtener una señal analógica de 0v a 5v de un sensor de caudal YF-S201  el cual lo tengo programado en arduino cuya salida son pulsos?
es posible emplear un conversor frecuencia-voltaje como el LM2907 para adquirir la señal analógica?
qué otras sugerencias me pueden proporcionar? gracias. ...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Salida analógica de 0v a 5v para caudalímetro
« Respuesta #1 en: 28 de Junio de 2017, 14:30:56 »
Pienso que podrias, pero porque te complicarias la vida haciendo y calculando todo ese circuito externo, cuando podes hacerlo por software y revisar la frecuencia/periodo de la salida del caudalimetro ?

Ademas las frecuencias son bajas, con "muestrear" o usar un timer que incremente cada 1ms serias capaz de ver cuanto caudal pasa.
« Última modificación: 28 de Junio de 2017, 14:43:39 por KILLERJC »

Desconectado dxdiag90

  • PIC10
  • *
  • Mensajes: 5
Re:Salida analógica de 0v a 5v para caudalímetro
« Respuesta #2 en: 28 de Junio de 2017, 17:29:06 »
pues podría hacerse por la salida PWM de arduino?
este es mi código para obtener el caudal correcto:
Código: [Seleccionar]
volatile int pulsos; // Cantidad de pulsos del sensor. Como se usa dentro de una interrupcion debe ser volatile
 
unsigned int litrosPorHora; // Calculated litres/hour
 
unsigned char sensorDeFlujo = 2; // Pin al que esta conectado el sensor
 
unsigned long tiempoAnterior; // Para calcular el tiempo
 
unsigned long pulsosAcumulados; // Pulsos acumulados
 
float litros; // Litros acumulados
void flujo () // Funcion de interrupcion
 
{
pulsos++; // Simplemente sumar el numero de pulsos
}
 
void setup()
{
pinMode(sensorDeFlujo, INPUT);
Serial.begin(9600);
attachInterrupt(0, flujo, RISING); // Setup Interrupt
 

interrupts(); // Habilitar interrupciones
tiempoAnterior = millis();
}
 
void loop ()
{
// Cada segundo calcular e imprimir Litros/seg
if( millis() - tiempoAnterior > 1000)
{
tiempoAnterior = millis(); // Updates cloopTime

pulsosAcumulados += pulsos;
litrosPorHora = (pulsos * 60 / 6.925); // (Pulse frequency x 60 min) / 7.5Q = flow rate in L/hour
pulsos = 0; // Reset Counter
Serial.print(litrosPorHora); // Print litres/hour
Serial.print(" L/hour");
Serial.print(" Pulsos totales: ");
Serial.print(pulsosAcumulados);
 
litros = pulsosAcumulados*1.0/386; //Cada 400 pulsos = 1 litro
Serial.print(" Litros: ");
Serial.println(litros);
}
}
pero cómo sería para hacer la relación pulsos vs. PWM?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Salida analógica de 0v a 5v para caudalímetro
« Respuesta #3 en: 28 de Junio de 2017, 18:05:05 »
Sinceramente no entiendo que estas buscando hacer.

Buscas leer el sensor y sacar una tension analogica proporcional ?
Y esa tension analogica proporcional, que pensas hacer con esta ? Leerla con otro integrado?, es mejor enviarlo de forma digital

Porque veo que hiciste el codigo de poder leer el sensor, pero no entiendo que estas buscando lograr con tener una salida analogica.

Y si queres una salida analogica podes realizarlo con algun DAC externo o usar un PWM con un filtro ( RC ).
Los valores los definis vos, suponete que a pesar que el sensor puede dar medidas de hasta 1000l/h
Pero vos sabes que solo lo vas a usar con caudales de hasta 400l/h

Entonces podes definir que los 5V ( 100% de duty ) sean 500 l/h y 0% de duty sean 0l/h.
Ya de alli lo unico que queda es generar una ecuacion lineal con esos valores. Una ecuacion que convierta de de l/h a duty.


Desconectado dxdiag90

  • PIC10
  • *
  • Mensajes: 5
Re:Salida analógica de 0v a 5v para caudalímetro
« Respuesta #4 en: 29 de Junio de 2017, 11:52:53 »
si,así es
que la salida analógica sea proporcional al caudal que me registra el sensor, me diste la idea de hacer en arduino con la función
Código: [Seleccionar]
map() entre valores 0 a 255 del PWM del arduino y con un caudal de 0 l/h a 450 l/h para que así me arroje esa señal analógica proporcional, ¿estaré equivocado?. Una vez comprobado lo anterior, necesito amplificarla porque esa señal analógica irá a un DAQ de adquisición de señales.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Salida analógica de 0v a 5v para caudalímetro
« Respuesta #5 en: 29 de Junio de 2017, 14:53:04 »
Exacto, la funcion map calcula la ecuacion lineal

Código: C
  1. long map(long x, long in_min, long in_max, long out_min, long out_max)
  2. {
  3.   return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
  4. }

ese return es un x*A + B
o mejor visto y = Ax + B

Donde pones el valor en x y la salida, en este caso el return es el valor en PWM

Código: C
  1. map(value, fromLow, fromHigh, toLow, toHigh)

Ejemplo para un consumo de 200l/h, en el cual tengas una funcion que te traduzca de 0 a 450l/h en 0 a 255.

Código: C
  1. valorduty = map(200, 0, 450, 0, 255);

Y eso escribirias en la salida, creo que con

Código: C
  1. AnalogWrite(valorduty);

Lo que si o te pones a calcular la red RC externa para esto, o empezas a probar valores en los que sean correctos.