Eurotherm Umrichter


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Zweipunktregler mit Ultraschall

Der Versuch „Zweipunktregler mit Ultraschall“ ähnelt sehr dem Versuch „Niveauregler mit Lichtschranke“. Das Experiment ist unter folgendem Link beschrieben:

Niveauregler mit Lichtschranke

Die folgende Schaltung gestalten wir ein wenig komplizierter. Mit dem Ultraschall HC-S04 kann man ähnlich wie mit einer Lichtschranke das gewünschte Ziel der Regelung problemlos einstellen. Zusätzlich, da Auswertung des Ultraschalls mit Arduino realisiert wird, führen wir ein Potenziometer, mit dem das Ziel während der Regelung variabel verstellt werden kann, ein. Darüber hinaus wird der aktuelle Wasserstand kontinuierlich gemessen. Anschließend kann man sich die Ergebnisse anschauen und die Stärken und Schwächen eines Zweipunktreglers feststellen.

Ultraschall-Sensor HC-SR04

Ultraschall

Ultraschall HC-SR04

Ultraschallsensoren eignen sich sehr gut für Positionserfassung, Hinderniserkennung und Abstandsmessung. Sie arbeiten mit Schallwellen im Ultraschallbereich, der ab 20 kHz beginnt. Sie liegen außerhalb des Hörfrequenzbereichs des Menschen. Die Sensoren können im Zusammenhang mit festen, pulverförmiger oder flüssigen Stoffen verwendet werden. Sie senden und empfangen die Schallwellen, die von den untersuchten Objekten reflektiert werden. Auf Basis der Laufzeitmessung wird dann die aktuelle Distanz zum Objekt errechnet. Die Sensoren sind günstig, zuverlässig und werden u.a. breit in der Industrie angewendet.

HC-SR04 Rückseite

HC-SR04 Rückseite

Bei dem Ultraschallsensor HC-SR04 handelt es sich um ein fertiges Modul, das den Sender, Empfänger und notwendige Steuer-Elektronik beinhaltet. Er arbeitet im Bereich von 40 kHz. Es können Abstände im Bereich von 2 bis 400 cm erfasst werden. Die Messgenauigkeit liegt bei 3 mm.

Die Spannungsversorgung beträgt 5 VDC, Stromaufnahme übersteigt nicht 2mA.

Pinbelegung

Pinbelegung


Arduino Uno

Arduino Uno

Arduino Uno

Arduino


Arduino- SD Card Shield

SD Card Shield

SD Card Shield

SD Card Shield


Relais

Relais

4-Relais-Modul HW-316. Die Relais können lasten bis zu 10A schalten.


Die Wasser-Behälter

Die Wasser-Behälter

Die Wasser-Behälter (Wasservorratsbehälter unten, Versuchsbehälter mit Ultraschallsensor oben)

Der Versuch wird mit zwei Wasserbehältern durchgeführt. Der oben angebrachte Versuchsbehälter wurde aus einer Kunststoffflasche herausgeschnitten. Im unteren Bereich des Behälters befindet sich ein Loch, durch das Wasser kontinuierlich abfließt. Zwei Wasser-Tauchpumpen fördern, wenn das Wasserniveau in dem Behälter zu stark absinkt, neues Wasser aus einem Vorratsbehälter nach. Der Vorratsbehälter ist unten positioniert. Über den oberen Versuchsbehälter ist der Ultraschallsensor angebracht, der das aktuelle Wasserniveau überwacht. Den Wasserspiegel in dem Versuchsbehälter auf einem möglichst konstanten Niveau zu halten, ist es, worauf es in diesem Versuch ankommt.

Der Schaltplan

Schaltplan

Schaltplan

Zwei Leuchtdioden (Rot und Grün) berichten, ob das SD Card Shield im Betrieb ist. Sobald die grüne Leuchtdiode aufleuchtet, kann der eigentliche Versuch gestartet werden. Wenn die rote Leuchtdiode aufleuchtet, muss geprüft werden, ob das Shield richtig aufgesteckt ist und die Speicherkarte eingesetzt wurde. Mit dem Taster S1 wird das Programm gestartet. Das gewünschte Zielniveau wird mit dem Potenziometer P1 eingestellt. Die gelbe Leuchtdiode leuchtet dann auf, wenn sich der aktuelle Wasserstand im Zielbereich befindet.

Die Testschaltung

Die Testschaltung

Die Testschaltung

Komplette Versuchsanordnung

Komplette Versuchsanordnung

Komplette Versuchsanordnung

Das Programm (Sketch)

// *****************************************************************************
// Zweipunktregler mit dem Ultraschall HC-SR04
// Verlauf-Aufzeichnung mit SD Card Shield
// Arduino Uno, IDE 1.8.16
// *****************************************************************************
                                                   // Bibliotheken
#include <SPI.h>
#include <SD.h>
#include <HCSR04.h>

int chipSelect = 4;                                // SD-Karte Pins
int SD_Karte_OK = 7;                               // LED grün, Karte OK
int SD_Karte_Fehler = 6;                           // LED rot, Karte Fehler
int SR04_Trig_Pin = 8;                             // Ultraschall Trigger Pin
int SR04_Echo_Pin = 9;                             // Ultraschall Echo Pin
int Programm_Start = 4;                            // Schalter Programm Start
int Ziel_erreicht = 5;                             // LED gelb, Regelungsziel erreicht
int Pumpe_1 = 2;                                   // Ausgang Pumpe 1
int Pumpe_2 = 3;                                   // Ausgang Pumpe 2
int Analogeingang = A0;                            // Potenziometer
int Messung_Nummer = 0;
int Hysterese = 10;
int Pumpen_ea;

UltraSonicDistanceSensor distanceSensor(SR04_Trig_Pin, SR04_Echo_Pin);  // Initialisierung des Sensors

void setup() {
    pinMode(Programm_Start, INPUT_PULLUP);
    pinMode(SD_Karte_Fehler, OUTPUT);              // LED rot
    pinMode(SD_Karte_OK, OUTPUT);                  // LED grün
    pinMode(Pumpe_1, OUTPUT);                      // Pin 2 als Ausgang
    pinMode(Pumpe_2, OUTPUT);                      // Pin 3 als Ausgang
    pinMode(Ziel_erreicht, OUTPUT);                // gelbe LED
    
    if (!SD.begin(chipSelect)) {                   // SD-Karte initialisieren
        digitalWrite (SD_Karte_Fehler, HIGH);      // Karte-Fehler oder nicht 
        digitalWrite (SD_Karte_OK, LOW);           // vorhanden, rote LED an
    while (1);
    }
    digitalWrite (SD_Karte_Fehler, LOW);           // Karte OK, grüne LED an
    digitalWrite (SD_Karte_OK, HIGH);

    digitalWrite(Pumpe_1, HIGH);                   // Pumpe AUS
    digitalWrite(Pumpe_2, HIGH);                   // Pumpe AUS 
}

void loop() {   
                                                             // Ist-Niveau ablesen
   int Ist_Niveau = distanceSensor.measureDistanceCm()*10;
                                                             // Ziel-Niveau bestimmen
                                                             // Min = 150 mm 
                                                             // Max = 40 mm
    float Multiplikator = 150.0 / 1023.0;
    int Poti_Wert = analogRead(Analogeingang);
    int Ziel_Niveau = Multiplikator * Poti_Wert;
    if (Ziel_Niveau < 40) {
      Ziel_Niveau = 40;
    }

    if (digitalRead(Programm_Start) == LOW) {                // Programm start
                                                             // Regelung
        int Schaltpunkt_Unten = Ziel_Niveau + (Hysterese/2);
        int Schaltpunkt_Oben = Ziel_Niveau - (Hysterese/2);
        
        if (Ist_Niveau > Schaltpunkt_Unten) {                // Pumpen EIN
            digitalWrite(Pumpe_1, LOW);
            digitalWrite(Pumpe_2, LOW);
            Pumpen_ea = 1;
        }
        if (Ist_Niveau < Schaltpunkt_Oben) {                 // Pumpen AUS
            digitalWrite(Pumpe_1, HIGH);
            digitalWrite(Pumpe_2, HIGH);
            Pumpen_ea = 0;
        }   
                  
        if ((Ist_Niveau > Schaltpunkt_Oben) && (Ist_Niveau < Schaltpunkt_Unten)) {   
            digitalWrite(Ziel_erreicht, HIGH);               // gelbe LED ein
        } else {
            digitalWrite(Ziel_erreicht, LOW);
        }
                                                             // Daten aufzeichnen
        String Meine_Daten = "";
        Messung_Nummer ++;                                   // Messung Nummer
        Meine_Daten += String(Messung_Nummer);
        Meine_Daten += ",";
        Meine_Daten += String(Ziel_Niveau);                  // Sollwert
        Meine_Daten += ",";
        Meine_Daten += String(Ist_Niveau);                   // Istwert
        Meine_Daten += ",";
        Meine_Daten += String(Pumpen_ea);                    // Pumpen Status
        
        File dataFile = SD.open("datalog.txt", FILE_WRITE);
        if (dataFile) {
            dataFile.println(Meine_Daten);                   // Daten schreiben
            dataFile.close();
        }
    }
    delay (1000);                                            // Wartezeit
} 
// *****************************************************************************

        

Ein Beispiel für die Aufzeichnung der Daten auf einer Speicherkarte findest du hier:

Datenspeicherung auf SD Karte

Die Bibliothek "HCSR04.h", die hier für den Ultraschall HC-SR04 zum Einsatz kommt, ist unter diesem Link zu finden:
https://github.com/Martinsos/arduino-lib-hc-sr04

Wie oben bereits erwähnt, die Schaltung wird mit dem Schalter S1 aktiviert. Der Ultraschall misst die aktuelle Entfernung zum Wasserspiegel, die im Programm in der Variable „Ist_Niveau“ festgehalten wird. Der Wert von "Ist_Niveau" wird mit dem Wert der Variable „Ziel_Niveau“ verglichen. Befindet sich der aktuelle Wasserstand unterhalb des Zieles, werden die Pumpen eingeschaltet. Sie liefern mehr Wasser, als es durch das Störungsloch abfließt. Dank dessen steigt der Wasserspiegel wieder an. Sobald er sich oberhalb des Zieles einpendelt, werden die Pumpen abgeschaltet. Das ist das Prinzip eines Zweipunktreglers. Es wird ständig zwischen zwei Schaltzuständen gewechselt. Es gilt: Entweder EIN oder AUS.
Damit die Schaltvorgänge nicht allzu oft stattfinden, wird zusätzlich eine Hysterese eingeführt. Mit dem Hysteresewert kann die Anzahl der Schaltvorgänge minimiert werden. Wenn der Hysteresewert z.B. 20 mm beträgt und das Zielwert bei 100 mm liegt, werden die Pumpen bei 110 mm ein- und erst bei 90 mm abgeschaltet. Eine hohe Hysterese verschlechtert allerdings das Regelergebnis.
Die während des Versuches (Kurzvideo) auf der Speicherkarte gesammelten Daten bestätigen (trotz Ungenauigkeiten) das Prinzip eines Zweipunktreglers. Grafische Auswertung sieht wie folgt aus:

Versuchsverlauf

Versuchsverlauf

Die blaue Linie stellt den Sollwert, der mit dem Potenziometer eingestellt wurde, dar. Bei der roten Linie handelt es sich um die Istwerte. Die grüne Linie zeigt, wann die Pumpen ein- oder ausgeschaltet wurden. Bei der Betrachtung ist darauf zu achten, dass bei niedrigem Wasserspiegel die Entfernung zum Sensor groß ist. Ein hohes Niveau ist mit kleiner Entfernung zum Sensor verbunden.

Ein großer Vorteil eines Zweipunktreglers ist seine Einfachheit, Zuverlässigkeit und geringe Kosten. Die Qualität der Regelung ist nur bedingt zufriedenstellend. Zur beachten ist u.a. die Schalthäufigkeit, die zum schnellen Verschleiß der Schaltelemente führen kann. Bevor man sich für eine Lösung mit Zweipunktregler entscheidet, soll die Regelstrecke und die Anforderungen an die Regelung genau untersucht werden. Erst dann kann entschieden werden, ob der Regler die optimale Lösung für die gestellte Aufgabe darstellt.

Kurzvideo

Kurzvideo: Niveau-Regler mit Ultraschall


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz