Werteingabe mit 2 Potentiometern

Für eins meiner Projekte, brauchte ich eine Eingabemöglichkeit von min/max Temperatur und Luftfeuchtigkeitswerten. Diese Eingabe sollte so gestaltet sein, das der Benutzer Start und Endwert in einem festgelegten Wertebereich eingeben kann.


Dabei wollte ich die Eingabe jedoch einfach und intuitiv gestalten, eine Eingabe über ein Tastenfeld oder ähnliches schied also aus. Ich entschied mich für die Eingabe mittels 2 Potentiometern. Der erste dient zum vergrößern oder verkleinern des Festzulegenden Bereiches, der zweite verschiebt den Festzulegenden Bereich innerhalb der gesamten Skala nach vorne oder hinten. Gestern setzte ich diese Idee dann in einem kleinem Testprojekt um, und war erstaunt wie gut das ganze funktioniert.

serial_out

Die gesamt Skala habe ich als ein Byte (0-255) Festgelegt. Die Werte der Potentiometer werden umgerechnet (mittels map Funktion) um in die Skala hinein zu passen (die Potis geben Werte von 0-638 aus). In einer for Schleife werden je nach gesetztem Wertebereich ein + oder ein – ausgegeben. Die Angaben danach waren zum Debugen und zeigten den Start und End Punkt an.

Dabei gab es 2 Lösungsansätze, man kann den Anfangs und Endwert verwenden um den Bereich zu definieren. Oder man kann die Mitte des Bereiches als Zeiger verwenden und je die Hälfte der Bereich breite vorn und hinten drauf rechnen bzw. abziehen. In meinem Beispielcode gebe ich das ganze in der Seriellen Konsole aus und habe daher den Anzeige Bereich auf 32 verkleinert. Daher werden die Werte auch um den Faktor 8 dividiert.

value1 = map( analogRead(potiPin1), 0, 686, 0 ,258); // position
value2 = map( analogRead(potiPin2), 0, 686, 2 ,253); // width
pos = value2 / 2; // position, center of width
width = value2 / 8;

for(int i = 0; i <= 32; i++) {
  p = value1 / 8;              // divide width for view in serial out
  w = ( ( width ) / 8 ) ;
  startp = p - ( width / 2 );  // Startposition
  endp = p + ( width / 2 );    // Endposition
  if( startp < 0 ) startp = 0; // Min Startposition
  if( endp > 32 ) endp = 32;   // Max Endposition
  if( i >= startp & i <= endp ) {
    Serial.print("+");
  } else {
    Serial.print("-");
  }
     
}

Mehr über das Projekt

Das Projekt dryAir besteht aus einem Pappkasten, den man sich über ein gekipptes Fenster schieben kann. Seitlich werden dann einfach Pappkeile in die Fensterspalte geschoben um das ganze nach außen hin wieder abzudichten. In dem Pappkasten sitzt ein Arduino der Luftfeuchtigkeit und Temperatur messen und anhand dieser Daten einen Lüfter betätigen kann. Damit der Wärmeverlust nicht so groß ausfällt, habe ich innerhalb des Kastens kleine gegenüber laufende Kanäle eingearbeitet durch die eintretende und austretende Luft durchstreichen muss um dort ihre Temperaturen austauschen zu können. Eine einfache Umsetzung der Prinzips Wärmetausch.

Die Idee dahinter ist recht einfach. Da ich in der kalten Jahreszeit des öfteren eine hohe Luftfeuchtigkeit (70% und mehr) in meinem Zimmer habe, suchte ich eine Möglichkeit diese raus leiten zu können ohne viel Wärmeverlust dadurch zu haben.

Leave a comment