Arduino/Relaisschalter schaltet nicht da wo er soll

Hallo, ichh habe ein Problem mit folgendem Sketch.Ausschalten soll er bei 21V und Einschalten ab 23.5. Soweit der Plan. Schalten tut er aber bei 22,8 und 23,3. Egal wie ich die Werte verändere die Hysterese von 0,5V bleibt. Kann man mir da weiterhelfen.

#include <SPI.h>

boolean Aus;
boolean Ein;

int analogInput = 0;
float upv = 0.0;
int values_upv = 0;
int LED = 3;


void setup() {
  
  Serial.begin(9600);
  pinMode (LED, OUTPUT);
  while (!Serial) {
    
  }
 
  Serial.print("Arduino ");
 
}


void loop() 
{

// Werte am analogen Pin A4 lesen
values_upv = analogRead(A4); 
upv = (values_upv * 0.023);
if (upv < 0.09) 
upv = 0.0; // Unterdrücken unerwünschter Anzeigen

  
  
   
    
    Serial.println(values_upv);
    
    
if (upv > 21)
 Aus = true;
if (upv > 21)
Ein = false;
if (upv < 23.5)
Aus = false;
if (upv < 23.5)
 Ein = true;     
              if (Aus == true)
              {
              digitalWrite(LED,LOW);
              }
              if (Ein == true)
              {
              digitalWrite(LED,HIGH);
              }
             
              
}

Wir können deine Spannung hier nicht sehen.
Die solltest du mit deinen Werten vergleichen und dann die Werte anpassen.

Ich habe zwischen Spannungsteiler und Spannungsquele einen Step Down Converter geschaltet. Damit kann ich beide Schaltpunkte anfahren. Die Abweichung der gemessenen Spannung zum Arduino beträgt ca.0,2V. Der Arduino schaltet wie schon beschrieben bei 23,3 Ein und bei 22,8V!! aus. Eigentlich soller das bei 21V tun.

StepDownWandler sind zur Versorgung und keine Signalwandler. Zeige uns mal Deine Schaltung und einen Link zu diesen StepDown.

Gruß Tommy

Baffi:
Ich habe zwischen Spannungsteiler und Spannungsquele einen Step Down Converter geschaltet. Damit kann ich beide Schaltpunkte anfahren. Die Abweichung der gemessenen Spannung zum Arduino beträgt ca.0,2V. Der Arduino schaltet wie schon beschrieben bei 23,3 Ein und bei 22,8V!! aus. Eigentlich soller das bei 21V tun.

dann musst du deinen "Vergleichswerte" so anpassen, dass er genau dann schaltet.
Nochmal, wir können deine Werte hier nicht sehen, also musst du das machen.

Der Converter ist nur zum prüfen der Einstellungen.

Also bei mir schaltet es genau zum gewünschten Punkt. Habe aber nur ein normales Potentiometer verwendet.

Allerdings sind die Werte deines Spannungsteilers wahrscheinlich eher ungünstig gewählt. Der gewünschte Schaltpunkt ist sehr knapp am Rande des Erfassungsbereiches des ADC:

A4       upv    Ein
--------------------------
1023    23.53   Ein: 0
1022    23.51   Ein: 0
1021    23.48   Ein: 1
1020    23.46   Ein: 1
1019    23.44   Ein: 1

1020    23.46   Ein: 1
1021    23.48   Ein: 1
1022    23.51   Ein: 0
1023    23.53   Ein: 0

const byte LED = 3;

void setup()
{
Serial.begin(9600);
pinMode (LED, OUTPUT);
while(!Serial) ;
Serial.print("Arduino ");
}

void loop()
{
float spannung = 0.023 * analogRead(A4);
Serial.println(spannung);
if(spannung > 23.5) digitalWrite(LED,HIGH);
if(spannung < 21.0) digitalWrite(LED,LOW);
}

Um absolute Spannungen zu messen, ist die externe Referenz wenig geeignet.
Denn die interne ist meist stabiler.
Die externe Referenz eignet sich gut für ratiometrische Messungen.

Der gewünschte Schaltpunkt ist sehr knapp am Rande des Erfassungsbereiches des ADC

Durchaus!
Viel zu nah, würde ich mal sagen.

combie:

Der gewünschte Schaltpunkt ist sehr knapp am Rande des Erfassungsbereiches des ADC

Durchaus!
Viel zu nah, würde ich mal sagen.

Du mußt den Spanungsteiler anders bemessen.

Danke für die Unterstützung. Habe den Spannungsteiler verändert, jetzt läuft's.