Autor Tema: Control de nivel de líquidos - Consulta de implementación  (Leído 1827 veces)

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

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Control de nivel de líquidos - Consulta de implementación
« en: 22 de Junio de 2023, 11:25:42 »
Buen día estimados, tengo el siguiente circuito:

circuito" border="0

El mismo es un resumen de un circuito más complejo, donde se obtiene una señal de voltaje variable, en función del nivel de agua en un tanque.

Si el interruptor  A - genera el voltaje que denominaremos V1 correspondiente al 25%.
                         B - genera el voltaje que denominaremos V2 correspondiente al 50%.
                         C - genera el voltaje que denominaremos V3 correspondiente al 75%.
                         D - genera el voltaje que denominaremos V4 correspondiente al 100%.

Mi consulta 1 es la siguiente:

Quiero saber como podría implementar una función en C, para el siguiente caso:

Si el interruptor A,B,C o D se cierra, independientemente de cuál lo haga primero tendría que obtener un valor del 25% de la función.
Si por ejemplo A y B o C y D o cualquier combinación de 2 interruptores se cierra, obtener un valor del 50% de la función.
Si por ejemplo cualquier grupo de interruptores se cierra, obtener un 75% de la función.
Si los 4 interruptores se cierran, obtener el 100% de la función.

Mi implementación funciona solo en manera ascendente:

Si A se cierra -> 25%
Si A+B se cierra -> 50%
Si A+B+C se cierra -> 75%
Si A+B+C+D se cierra -> 100%

Consulta 2:

Teniendo en cuenta el circuito, como se podría calcular el arreglo de divisores de tensión para obtener la relación de voltaje lo más diferenciada posible
según el interruptor deseado.
Para explicarlo de otra manera, en vez de tener saltos de 500mV....o 300mV....como poder tener una escala de aprox 1.2...o 1.5v entre saltos.

Saludos y espero puedan entender mi consulta.



Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 209
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #1 en: 22 de Junio de 2023, 12:31:02 »
Yo haría así, es UNA solución, seguro hay otras mejores o peores...

A cada interruptor A, B, C, D, de hago corresponder las variables a, b, c, d, que solo toman valor 0 ó 1, abierto/cerrado respectivamente.

Sumo las cuatro variables, y obtendria, 0, 1, 2, 3, ó 4
Con esos valores le voy a una elección múltiple, (case), y asigno el porcentaje que corresponda.

La segunda pregunta te la debo, hay que agarrar la calculadora, pero fijate en la imagen, corresponde a un circuito arduinero llamado KeyPad Shield, donde leen cinco pulsadores con una línea del ADC, como planteas,  podrías empezar con esos valores..


No pensaste en usar una inductancia variable, en función del nivel, se genera una frecuencia con un circuito en el que participa esta reactancia, se mide la frecuencia, y se le hace corresponde a distintos niveles, ahora, la variable, puede ser continua, y no discreta de solo cinco punto.
Las ultimas generaciones de lavarropas emplean éste mecanismo que indico, para ser muy finos con el nivel de agua.
« Última modificación: 22 de Junio de 2023, 12:46:14 por AleSergi »

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #2 en: 22 de Junio de 2023, 13:01:56 »
Buen día estimados, tengo el siguiente circuito:

circuito" border="0

El mismo es un resumen de un circuito más complejo, donde se obtiene una señal de voltaje variable, en función del nivel de agua en un tanque.

Si el interruptor  A - genera el voltaje que denominaremos V1 correspondiente al 25%.
                         B - genera el voltaje que denominaremos V2 correspondiente al 50%.
                         C - genera el voltaje que denominaremos V3 correspondiente al 75%.
                         D - genera el voltaje que denominaremos V4 correspondiente al 100%.

Mi consulta 1 es la siguiente:

Quiero saber como podría implementar una función en C, para el siguiente caso:

Si el interruptor A,B,C o D se cierra, independientemente de cuál lo haga primero tendría que obtener un valor del 25% de la función.
Si por ejemplo A y B o C y D o cualquier combinación de 2 interruptores se cierra, obtener un valor del 50% de la función.
Si por ejemplo cualquier grupo de interruptores se cierra, obtener un 75% de la función.
Si los 4 interruptores se cierran, obtener el 100% de la función.

Mi implementación funciona solo en manera ascendente:

Si A se cierra -> 25%
Si A+B se cierra -> 50%
Si A+B+C se cierra -> 75%
Si A+B+C+D se cierra -> 100%

Consulta 2:

Teniendo en cuenta el circuito, como se podría calcular el arreglo de divisores de tensión para obtener la relación de voltaje lo más diferenciada posible
según el interruptor deseado.
Para explicarlo de otra manera, en vez de tener saltos de 500mV....o 300mV....como poder tener una escala de aprox 1.2...o 1.5v entre saltos.

Saludos y espero puedan entender mi consulta.

Pregunta

¿Por qué no conectas directamente cada interruptor a terminales o pines del microcontrolador y te olvidas del ADC? ¿Es tu microcontrolador muy pequeño?
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #3 en: 22 de Junio de 2023, 13:07:59 »
Tal vez tu arreglo de resistencias debería ser así:

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #4 en: 22 de Junio de 2023, 13:13:18 »
Estimado AleSergi,

Citar
A cada interruptor A, B, C, D, de hago corresponder las variables a, b, c, d, que solo toman valor 0 ó 1, abierto/cerrado respectivamente.

Sumo las cuatro variables, y obtendria, 0, 1, 2, 3, ó 4
Con esos valores le voy a una elección múltiple, (case), y asigno el porcentaje que corresponda.

Lo que pasa es que acá solo se lee una señal, lo que podría ir haciendo, se me ocurre, es con el valor que leo en analógico, relacionarlo con un arreglo de porcentajes. Algo similar a esto:

Código: [Seleccionar]
// Lee el nivel de batería.
  int nVoltageRaw = analogRead(A0);
  float fVoltage = (float)nVoltageRaw * 0.01024;

  float fVoltageMatrix[22][2] = {
    {4.2,  100},
    {4.15, 95},
    {4.11, 90},
    {4.08, 85},
    {4.02, 80},
    {3.98, 75},
    {3.95, 70},
    {3.91, 65},
    {3.87, 60},
    {3.85, 55},
    {3.84, 50},
    {3.82, 45},
    {3.80, 40},
    {3.79, 35},
    {3.77, 30},
    {3.75, 25},
    {3.73, 20},
    {3.71, 15},
    {3.69, 10},
    {3.61, 5},
    {3.27, 0},
    {0, 0}
  };

  int i, perc;

  perc = 100;

  // Procesa el porcentaje del nivel de batería.
  for(i=22; i>=0; i--) {
    if(fVoltageMatrix[i][0] >= fVoltage) {
      perc = fVoltageMatrix[i + 1][1];
      break;
    }
  }

Citar
No pensaste en usar una inductancia variable, en función del nivel, se genera una frecuencia con un circuito en el que participa esta reactancia, se mide la frecuencia, y se le hace corresponde a distintos niveles, ahora, la variable, puede ser continua, y no discreta de solo cinco punto.
Las ultimas generaciones de lavarropas emplean éste mecanismo que indico, para ser muy finos con el nivel de agua.

Desconozco como funciona ese mecanismo. Acá el problema es que el sensor ya está colocado y es muy simple (alambres a diferentes niveles), lo que yo trato de hacer es un transmisor de nivel, basándome en lo que ya está conectado.

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #5 en: 22 de Junio de 2023, 13:18:38 »
Citar
¿Por qué no conectas directamente cada interruptor a terminales o pines del microcontrolador y te olvidas del ADC? ¿Es tu microcontrolador muy pequeño?

En el diseño original está así, una entrada por señal. Pero ahora se está rediseñando la placa para ahorrar espacio y costo.

Citar
Tal vez tu arreglo de resistencias debería ser así:

Para estudiar el arreglo de las resistencias, voy a estudiar este apunte:
https://users.exa.unicen.edu.ar/catedras/edigital/teorias/c11_conversores_ad-da.pdf
« Última modificación: 22 de Junio de 2023, 13:27:45 por jonathanPIC888 »

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #6 en: 22 de Junio de 2023, 13:24:46 »
En el diseño original está así, una entrada por señal. Pero ahora se está rediseñando la placa para ahorrar espacio y costo.

Si estás rediseñando, deberías aprovechar para hacerlo más simple. Ese tipo de medición con resistencias, suele tener problemas como ruido eléctrico, cambio de los valores de las resistencia con el tiempo o cambios de temperatura, sobre todo cuando está muy lejos entre los interruptores y el microcontrolador.

Debe ir de la mano de un filtro para eliminar el ruido.

Si es algo didáctico, tal vez no sea necesario.



En mi caso los "interruptores" son salidas de amplificadores operacionales, por lo que tendrían que estar si o si colocados a través de una resistencia a la red de división de tensión.

Si las salidas son amplificadores operaciones, podrían ir todas esas salidas a un sumador con otro amplificador operacional y en el mismo un filtro para alminar el ruido.

Tal vez deberías compartir el circuito verdadero para analizarlo de mejor manera.



Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #7 en: 22 de Junio de 2023, 13:34:04 »
Para darle un poco más de claridad a lo que quiero hacer, este sería el circuito que se está implementando.
circuito" border="0

Todo el circuito funciona ok hace ya un par de años, sin problema de ruido o falsas lecturas. Lo que se está ensayando es la red de división de tensión y la lógica para procesar el nivel.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #8 en: 22 de Junio de 2023, 13:44:49 »
Para darle un poco más de claridad a lo que quiero hacer, este sería el circuito que se está implementando.
circuito" border="0

Todo el circuito funciona ok hace ya un par de años, sin problema de ruido o falsas lecturas. Lo que se está ensayando es la red de división de tensión y la lógica para procesar el nivel.

Si, ahora se comprende, y ese circuito si posee un filtro con el último operacional.

Respecto a tu pregunta, si deseas mantener el mismo circuito original o uno parecido, es decir analógica la salida final, el análisis para resolver la consulta 1 puede ser un poco complejo y creo que tomaría algo de tiempo.

Sigo pensando que las salidas de los operacionales deberían ir directamente a entradas del microcontrolador, al menos que no poseas más entradas disponibles.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #9 en: 22 de Junio de 2023, 13:57:39 »
Citar
Si, ahora se comprende, y ese circuito si posee un filtro con el último operacional.

Respecto a tu pregunta, si deseas mantener el mismo circuito original o uno parecido, es decir analógica la salida final, el análisis para resolver la consulta 1 puede ser un poco complejo y creo que tomaría algo de tiempo.

Sigo pensando que las salidas de los operacionales deberían ir directamente a entradas del microcontrolador, al menos que no poseas más entradas disponibles.

Es necesario mantener el circuito original, porque está funcionando bien, pero necesito que la salida sea analógica. Tengo solo 1 entrada analógica disponible de mi microcontrolador.

Citar
el análisis para resolver la consulta 1 puede ser un poco complejo y creo que tomaría algo de tiempo.

En mi cabeza creo tenerlo más o menos resuelto, tengo que escribir código y hacer pruebas.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #10 en: 22 de Junio de 2023, 13:58:18 »
Podrías simular tu circuito para determinar que voltaje obtienes con las combinaciones mencionadas, pero tu primer circuito con interruptores, creo que está mal, ya que cuando un interruptor no está presionado, la salida del operacional está en 0 lógico, es decir está conectada a tierra.

A la izquierda de la siguiente imagen, puse un circuito equivalente.

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #11 en: 22 de Junio de 2023, 14:02:53 »
Citar
Podrías simular tu circuito para determinar que voltaje obtienes con las combinaciones mencionadas, pero tu primer circuito con interruptores, creo que está mal, ya que cuando un interruptor no está presionado, la salida del operacional está en 0 lógico, es decir está conectada a tierra.

Cierto, me olvidé que tenían que estar a tierra cuando estaban abiertos.

Voy a hacer algunas simulaciones y pruebas y les comento mis resultados.

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #12 en: 22 de Junio de 2023, 14:05:10 »
Para la Consulta1 tenés que armar una tabla con los límites de voltaje y rango para cada caso.
Los limites no son los valores del ADC sino un valor intermedio entre dos situaciones

Ojo porque diferentes combinaciones de switchs te pueden dar voltajes muy parecidos, como consecuencia no serán combinaciones confiables.


Algo asi:
Código: [Seleccionar]
// los límite deben estar en orden ascendente
const int8 limites[] = {0 , 24 , 45 , 130 ,...} ; 

// los rangos deben corresponderse con cada límite
const int8 rango[] =   {25 , 50 , 35 , 12 , 84 ,...} ; 

Código: [Seleccionar]
int LeoSwitchs(void){       
    int k ;
   
    voltaje = ADC_Read() ;                       // Lee el voltaje
       
    for(k=Nestados; voltaje < limites[k] ;k--);  // Se detiene cuando el voltaje
                                                 // está entre dos de la tabla
   
    return rango[k] ;
}

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #13 en: 22 de Junio de 2023, 14:06:22 »
Pues creo que deberías usar otro diseño, ya que si la salida 1 y 2 están activas (izquierda), el voltaje es 0.441V, mientras que si las salidas 3 y 4 están activas, el voltaje es 2.647.

Y según lo que mencionaste, al estar activas dos de las 4 salidas (cualquiera), el voltaje debería ser el mismo.25% (O eso entendí)

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re:Control de nivel de líquidos - Consulta de implementación
« Respuesta #14 en: 22 de Junio de 2023, 15:23:21 »
Esta sería la tabla de referencia que voy a usar.

Sin-t-tulo" border="0

Ahora tengo que agarrar la simulación y ver que valores obtengo. Luego agarrar el circuito real y comparar.