Tengo un proyecto en el que quiero agregar un sensor de combustible flexible a un automóvil que no tiene uno. Tengo instalado y cableado el sensor de combustible flexible. Mi plan es usar un Arduino para leer la señal del sensor y convertir la frecuencia al porcentaje de etanol. Compré un clon de Arduino con el chip ATMega34U4.
Esta es la documentación del sensor de combustible flexible:
El sensor de combustible utiliza un microprocesador para medir el porcentaje de etanol y la temperatura del combustible, que utiliza para producir y emitir la señal. La señal del sensor de combustible es una señal de voltaje de onda cuadrada. La señal varía tanto en frecuencia como en ancho de pulso:
La frecuencia de la señal indica el porcentaje de etanol. La frecuencia de salida es lineal con respecto al porcentaje de contenido de etanol en el combustible. El PCM proporciona un pull-up interno a cinco voltios en el circuito de señal, y el sensor de combustible empuja los 5 voltios a tierra en pulsos. El rango normal de frecuencia de operación es entre 50 y 150 Hertz:
50 Hertz indica 0% de etanol
150 Hertz indica 100% de etanol
El ancho del pulso indica la temperatura del combustible. El ancho de pulso normal es entre 1 y 5 milisegundos:
1 milisegundo indica -40 ° C (-40 ° F)
5 milisegundos indican 125 ° C (257 ° F)
No sé casi nada sobre electrónica, así que lo que me confunde es la resistencia de pull-up. He leído acerca de la resistencia de pull-up interna pero el valor en eso parece demasiado alto, de acuerdo con esto ( enlace ) la resistencia debe ser de 1.2 a 3k mientras que la interna está más cerca de 30k.
Entonces, mi pregunta es ¿cómo soldar la resistencia de pull-up? Intenté soldar un extremo de la resistencia al pin 10 y el otro al cable VOUT en el sensor de combustible flexible, pero eso dio lecturas inconsistentes en el mejor de los casos. Aquí hay un pinout para un producto similar ( enlace . ¿Cómo puedo soldar este resistor de pull-up en este sistema?
Debajo está mi código. Veo principalmente ceros después de H: y L:
int inputPinNumber = 10;
double sum = 0;
int count = 0;
unsigned long pulseTime = 0;
int frequency = 0;
unsigned long high = 0;
unsigned long low = 0;
void setup()
{
Serial.begin(57600);
pinMode(10, INPUT);
LCD.init(0x3C);
LCD.clearDisplay();
LCD.setTextWrap(false);
LCD.setTextSize(2);
}
void loop()
{
high = pulseIn(inputPinNumber, HIGH);
low = pulseIn(inputPinNumber, LOW);
pulseTime = high + low;
LCD.clearDisplay();
LCD.setCursor(0, 0);
LCD.print("H: ");
LCD.println(high);
LCD.print("L: ");
LCD.println(low);
LCD.print("C: ");
LCD.println(count);
LCD.display();
if (pulseTime > 0)
{
sum += ((1000000 / pulseTime) - 50);
count = count++;
}
if (count > 50) {
LCD.clearDisplay();
frequency = (sum / count);
Serial.println(frequency);
LCD.setCursor(0, 0);
LCD.print(" E");
LCD.println(frequency);
LCD.display();
sum = 0;
count = 0;
}
}