¿Ni usando un AO en modo buffer?
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
Si no es lineal no es lineal, cuanto mas lo toques menos lineal será.¿Ni usando un AO en modo buffer?
namespace Bomba_combustible_adoradora_.NET_8._0___01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
double a, b, c, d, porcentaje100, resultado;
private void button_Resultado_Click(object sender, EventArgs e)
{
a = Convert.ToDouble(textBox_a.Text);
b = Convert.ToDouble(textBox_b.Text);
c = Convert.ToDouble(textBox_c.Text);
d = Convert.ToDouble(textBox_d.Text);
porcentaje100 = Convert.ToDouble(textBox_100.Text);
resultado = (a - b) / (c - d) * porcentaje100;
label_Resultado.Text = resultado.ToString("0.00") + " %";
}
}
}
#include <LiquidCrystal.h>
// Inicializa la librería con sus pines indicados.
// RS, RW, Enable, D4, D5, D6, D7.
LiquidCrystal lcd(8, NULL, 9, 4, 5, 6, 7);
// LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// Pin 10 para saber que es luz de fondo.
const byte LuzFondo = 10;
int valorPot = 0;
float voltajePot = 0;
float porcentaje = 0;
float valorOhmicoMinimo = 23; // Valor óhmico mínimo.
float valorOhmicoMaximo = 278; // Valor óhmico máximo.
float valorMinimo = 23; // Valor mínimo.
float porcentaje100 = 100;
float resultado = 0;
float resultadoFinal = 0;
void setup()
{
Serial.begin(115200); // Puerto serie 115200 baudios.
lcd.begin(16, 2); // Formato de pantalla.
// lcd.clear(); // Borra la pantalla y su posición superior izquierda.
lcd.print(" HOLA ");
delay(2000);
}
void loop()
{
valorPot = analogRead(1);
//voltajePot = valorPot * (5.0 / 1023.0);
//porcentaje = valorPot * (100.0 / 1023.0);
resultado = (valorPot - valorOhmicoMinimo) / (valorOhmicoMaximo - valorMinimo) * porcentaje100;
resultadoFinal = porcentaje100 - resultado;
lcd.setCursor(0, 0);
lcd.print("Gasolina ");
//lcd.setCursor(10, 0);
lcd.print(resultadoFinal);
}
Por viejo no por estrellarseComo la gente se estalla y cambian de coche
Lamentablemente tu idea no funciona por que la medición del nivel de combustible en el depósito no es lineal con la resistencia del potenciómetro, así que tu equivalente a la función map() de Arduino es inaplicable.En una aforadora, bomba de combustible, tiene una resistencia de 23 a 278 Óhmios. En la pantalla, tiene que demostrar porcentaje del 0 % al 100 %.
Lo que dices arriba, de tomar valores según el porcentaje, es un método, este de variar el potenciómetro es otro método, los dos valen.Variación lineal. La resistencia es directamente proporcional al ángulo de giro. Denominados con una letra B, según la normativa actual (anteriormente, A).
Variación logarítmica. La resistencia depende logarítmicamente del ángulo de giro. Denominados con una letra A, según normativa actual (anteriormente, B).
Variación senoidal. La resistencia es proporcional al seno del ángulo de giro. Dos potenciómetros senoidales solidarios y girados 90° proporcionan el seno y el coseno del ángulo de giro. Pueden tener topes de fin de carrera o no.
Variación antilogarítmica. La resistencia es directamente proporcional a 10 con potencia el ángulo girado. Generalmente denominados con la letra F o la letra C.
Variacion de balance. Se utiliza principalmente en audio para obtener la misma salida en dos canales en configuración estéreo. Para esto se utiliza un potenciómetro doble, el cual obtiene su máximo valor resistivo en el centro del potenciómetro y el mínimo en los extremos. Generalmente este lleva una detención en el centro para que la salida sea simétrica, y suele denominarse con las letras MN.
El potenciómetro puede ser lineal, y seguramente lo es, pero lo que NO es lineal es el movimiento del eje del potenciómetro respecto al volumen del líquido en el tanque. Y esto es por que los tanques no son uniformes ni tienen formas regulares ya que van puestos en el lugar que queda libre en el chasis.No son mis cálculos pero bueno, y si, son lineales me dijeron unos matemáticos.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
float valorPot, valorOhmicoMinimo, valorOhmicoMaximo, valorMinimo, porcentaje100, resultado, resultadoFinal;
private void button_Resultado_Click(object sender, EventArgs e)
{
valorPot = (float)Convert.ToDouble(textBox_valorResistencia.Text);
valorOhmicoMinimo = (float)Convert.ToDouble(textBox_b.Text);
valorOhmicoMaximo = (float)Convert.ToDouble(textBox_c.Text);
valorMinimo = (float)Convert.ToDouble(textBox_d.Text);
porcentaje100 = (float)Convert.ToDouble(textBox_100.Text);
resultado = (valorPot - valorOhmicoMinimo) / (valorOhmicoMaximo - valorMinimo) * porcentaje100;
resultadoFinal = porcentaje100 - resultado;
label_Resultado.Text = resultadoFinal.ToString("0.##") + " %";
}
}
Cambia de "matemáticos" NPI tienen de matemáticas, ni de depósitos ni de aforadores, ni de ley de ohm ni de nada de nada. Que vuelvan a primaria.No son mis cálculos pero bueno, y si, son lineales me dijeron unos matemáticos.
Lo mas simple es tomar un conjunto de medidas de volumen y resistencia luego construir una lookup-table con valores interpolados linealmente (tantos como quieras). Luego solo es cuestión de medir, entrar a la tabla y tomar el valor mas cercano...o interpolar de nuevo...y punto final. Cero cálculo y máxima performance.Acabas antes llenando de 5 en 5l u tomando directamente la lectura del potenciómetro. Esos tramos los puedes considerar líneas rectas, que no serán pero mas o menos se aproximaran razonablemente.
En su defecto tras tomar esos 5, 19, 10000 puntos de llenado puedes usar un polinomio interpolador como el método de Runge-Kutta o como se escriba y sacarás algo más preciso que la poligonal, a cambio de mayor esfuerzo de cómputo.