Arduino uno gebruiken om 2 tankvlotters op 1 meter te laten zien

hallo,

ik ben mijn sinds kort aan het verdiepen in de arduino materie.

ik heb een volvo amazon van 1967 die op benzine en LPG loopt.
nu zou ik graag de tank meter willen aanpassen naar weergave van de brandstof die in gebruik is.
dus als ik op benzine rijd de benzine stand en op LPG die stand van de LPG vlotter.

ik ben op dit moment aan het stoeien met 1 van de bekende virtuele bouw programa's om uit te vogelen hoe ik wat het beste kan doen.

ik ben op het moment zover dat ik de waardes van de vlotters op een lcd scherm kan krijgen door een dubbele ohm meter te gebruiken en daarvan de vaste zo in te stellen dat de max waarde van de vlotter zo dicht mogelijk bij de 100 zin en minimale bij de 0.
nu loop ik tegen het volgende probleem aan, de zender op de Lpg tank heeft 2 dragen dus deze kan ik als 1e in de 2 serie geplaatste weerstanden zetten. maar de benzine zender heeft maar 1 draad en krijgt massa via de brandstoftank en de rest van de auto.

nu heb ik de volgende code gemaakt ( opgezocht en zover het lukt aangepast om dit werkend te krijgen).


// R1 = tankmeter lpg R2 = weerstand 910Ohm R3 = tankmeter benzine R4 = 1820 OHM
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int analogPin1 = 0;
int analogPin2 = 1;
int pwm = 7;
int raw = 0;
int raw1 = 1;
int Vin = 5;
int Vin1 = 5;
float Vout = 0;
float Vout1 = 0;
float R1 = 1000;
float R2 = 0;
float R3 = 1000;
float R4 = 0;
float buffer = 0;
float buffer1 = 1;

void setup() {
  lcd.begin(16, 2);
 pinMode(pwm,OUTPUT) ; 
}

void loop(){
    raw1 = analogRead(analogPin2);
  if(raw1){
    buffer1 = raw1 * Vin1;
    Vout1 = (buffer1)/1024.0;
    buffer1 = (Vin1/Vout1) - 1;
    R4= R3 * buffer1;
    
    
    lcd.setCursor(0, 1);
    lcd.print("Benzine: ");
    lcd.print(R4);
    lcd.print ("%");
    
  raw = analogRead(analogPin1);
  if(raw)
    buffer = raw * Vin;
    Vout = (buffer)/1024.0;
    buffer = (Vin/Vout) - 1;
    R2= R1 * buffer;

    lcd.setCursor(0, 0);
    lcd.print("LPG   : ");
    lcd.print(R2);
    lcd.print("%");
  }

}

hiermee krijg ik de waardes op de lcd te zien in procenten.

zoals nu het geval is pas ik de waarde van R3 aan tussen de 0 en 180 Ohm om een waarde tussen 0 en 100% te krijgen.

kan iemand mij opweg helpen als dit mogelijk is om R4 als variabele weerstand te krijgen en R3 als vaste weerstand om op deze manier een waarde tussen 0 en 100% te krijgen.

m.v.g. Niels

Kijk eens op de functie MAP daar kun je de waardes aanpassen in wat je wilt. zelfs dynamisch daarmee kun je dus tot op 0.1 procenst precies meten, echter hou rekening met de praktik die niet beter is dan 10 %

shooter,

dank voor je reactie.
ik was met die map functie al aan het stoeien geweest, maar is me nu toch gelukt.

dank voor de info.

zoals nu het plan is ga ik de 2 uitgaande pwm signalen omzetten met 2 pwm naar 0-10 v converters om deze dan te schakelen met een relais naar de tankmeter deze ik wil ombouwen door er het binnen werk van een voltmeter in te zetten.

zou er ook nog een mogelijkheid zijn dat de arduino dit al doet, als ik bijvoorbeeld op a3 een signaal geef dat deze waarde van LPG door geeft als pwm signaal en als dit signaal niet binnenkomt hij de Benzine pwm doorgeeft?



#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int sensorValue  = 0; // ingangs signaal LPG meter
int sensorValue1 = 0; // ingangs signaal Benzine meter.
int outputValue  = 0; // PWM signaal LPG meter.
int outputValue1 = 0; // PWM signaal Benzine meter.
int lcdValue     = 0; // LCD weergave LPG
int lcdValue1    = 0; // LCD weergave Benzine
int LOWLPG		 = 0; // LED laag LPG niveau.
int LOWBenzine	 = 0; // LED laag Benzine niveau


void setup() {
  lcd.begin(16, 2);
  pinMode(A1, INPUT); 
  pinMode(A2, INPUT); 
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  Serial.begin(9600);
  
  lcd.setCursor (0,0);
  lcd.print ("     WELKOM");
  lcd.setCursor (0,1);
  lcd.print ("  VOLVO AMAZON");
  delay (2000);
}

void loop() {
  


  sensorValue = analogRead(A1);
  outputValue = map(sensorValue, 0, 84, 0, 255);
  lcdValue = map (sensorValue, 0, 84, 0, 100);
  LOWBenzine = 7;
  LOWLPG	 = 8;
 
  analogWrite(9, outputValue);
  Serial.print("LPG IN = ");
  Serial.print(sensorValue);
  Serial.print("LPG OUT = ");
  Serial.println(outputValue);
  
 
    lcd.setCursor(0, 0);
    lcd.print("LPG       : ");
    lcd.print(lcdValue);
    lcd.print("%");
  
  if (sensorValue <= 14) digitalWrite(LOWLPG, HIGH); // wanneer LPG onder 15% lampje aan.
  if (sensorValue >= 15) digitalWrite(LOWLPG, LOW);  // wanneer LPG boven 15% lampje uit.
  
  sensorValue1 = analogRead(A2);
  outputValue1 = map(sensorValue1, 0, 156, 0, 255);
  lcdValue1 = map (sensorValue1, 0, 156, 0, 100);
 
  analogWrite(6, outputValue1);
  Serial.print("Benzine IN = ");
  Serial.print(sensorValue1);
  Serial.print("Benzine OUT = ");
  Serial.println(outputValue1);
  delay(2);
 
    lcd.setCursor(0, 1);
    lcd.print("Benzine   : ");
    lcd.print(lcdValue1);
    lcd.print("%");
    if (sensorValue1 <= 27) digitalWrite(LOWBenzine, HIGH); // wanneer Benzine onder 15% lampje aan.
 	if (sensorValue1 >= 28) digitalWrite(LOWBenzine, LOW);  // wanneer Benzine boven 15% lampje uit.
	delay(2000);
}

van de 4 led's zijn op dit moment de 2 onderste de uitgangen waar de converters op komen, en de 2 bovenste de indicator lampjes als het tank niveau onder de 15% komt.

groet niels

Ik snap even niet helemaal wat je bedoelt, heel vaak zijn meters geschikt voor 100 mVolt of zo dus dan kun je dat met een paar simpele weerstanden oplossen. In de meterstjes zit vaak een serieweerstand om dat te zetten.