Projekt 65: Wasserstandsmessgerät-Aufsatz für Arduino: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 192: Zeile 192:


==Auswertung==
==Auswertung==
Zur Auswertung wurde der Wassertank zunächst mit zwei Litern Wasser gefüllt. Im nächsten Schritt wurde die Füllhöhe mittels Maßband ermittelt, sodass das im Rohr befindliche Wasservolumen bestimmt werden konnte. Im nächsten Schritt wurde über den Seriellen Monitor die vom Arduino ermittelte Füllhöhe und das Volumen ausgegeben. Dieser Vergleich zeigt, dass die Messung korrekt funktioniert, d.h. auf dem Seriellen Monitor wurde das Volumen an Wasser ausgegeben was zuvor durch Berechnung ermittelt wurde. Zudem wurde durch das Füllen des Wassertanks und anschließendes Ablassen des Wassers über den Ablasshahn eine Kennlinie über den Seriellen Plotter erstellt. Dies zeigt, dass es auch bei verschiedenen Füllhöhen nicht zu Messfehlern kommt. [[Datei:Fehler Messung.JPG|200px|thumb|right|Laufzeitmessung]] Für Messfehler durch Temperaturänderungen kann gesagt werden das bei einer Temperaturdifferen von 20°C ein Fehler von 3,4% entsteht. Messergebnisse zur Laufzeitmessung sind in der Tablle rechts zu sehen.
Zur Auswertung wurde der Wassertank zunächst mit zwei Litern Wasser gefüllt. Im nächsten Schritt wurde die Füllhöhe mittels Maßband ermittelt, sodass das im Rohr befindliche Wasservolumen bestimmt werden konnte. Im nächsten Schritt wurde über den Seriellen Monitor die vom Arduino ermittelte Füllhöhe und das Volumen ausgegeben. [[Datei:Fehler Messung.JPG|200px|thumb|right|Laufzeitmessung]]Dieser Vergleich zeigt, dass die Messung korrekt funktioniert, d.h. auf dem Seriellen Monitor wurde das Volumen an Wasser ausgegeben was zuvor durch Berechnung ermittelt wurde. Zudem wurde durch das Füllen des Wassertanks und anschließendes Ablassen des Wassers über den Ablasshahn eine Kennlinie über den Seriellen Plotter erstellt. Dies zeigt, dass es auch bei verschiedenen Füllhöhen nicht zu Messfehlern kommt. Für Messfehler durch Temperaturänderungen kann gesagt werden das bei einer Temperaturdifferen von 20°C ein Fehler von 3,4% entsteht. Messergebnisse zur Laufzeitmessung sind in der Tablle rechts zu sehen.





Version vom 21. Januar 2017, 22:51 Uhr

Autoren: Lukas Brexler | Thorsten Drees
Betreuer: Prof. Göbel
→ zurück zum Hauptartikel: Angewandte Elektrotechnik (WS 16/17)

Aufgabe

Entwickelung eines Wasserstandsmessgerätes zur Vermessung der Füllhöhe in einem Tank, die Ausgabe soll per Serial Monitor am PC erfolgen.

Erwartungen an die Projektlösung

  • Recherche nach bestehenden Lösungen
  • Erstellen Sie das System als prototypischen Eigenbau auf einem Proto-Shield für einen Arduino Uno
  • Beschaffen Sie die Bauteile
  • Realisierung und Erprobung des Aufbaus
  • Machen Sie ein spektakuläres Video, welches die Funktion visualisiert.
  • Test und wiss. Dokumentation
  • Live Vorführung während der Abschlusspräsentation

Schwierigkeitsgrad

Anspruchsvoll (***)


Einleitung

Diese Aufgabe wurde im Rahmen der Lehrveranstaltung "Angewandte Elektrotechnik" im Masterstudiengang "Business & Systems Engineering" vergeben und bearbeitet. Dieser Wiki-Artikel stellt das Vorgehen dar und zeigt den Lösungsweg auf. Dabei wird darauf eingegangen welche Hard- und Software benötigt wird, wie das Wasserstandsmessgerät funktioniert und welche Möglichkeiten zur Verbesserung oder Weiterentwicklung bestehen.

Aufgabenstellung

Die Aufgabe dieser Projektarbeit bestand darin, einen Wasserstandsmessgerät zur Vermessung der Füllhöhe in einem Tank zu entwickeln. Als Plattform soll der Arduino Uno R3 dienen. Der ermittelte Füllstand soll per Serial Monitor am PC ausgegeben werden. Die Auswahl der eingesetzten Sensorik und Messmethode ist dabei vom Projekteam zu wählen.

Theorie

Bei diesem Projekt wurde sich für die Wasserstandsmessung mittels Ultraschall entschieden. Der eingesetzte Ultraschall Sensoren besitzt einen Signalgeber, den sogenannten Trigger und einen Messgeber, auch Echo genannt. Die Funktion dieser Bauteile kann mit Mund und Ohren einer Fledermaus verglichen werden.

Unter Ultraschall wird ein Hochfrequenzton (meistens 40 KHz) verstanden. Ein kurzer Stoß von Tonwellen wird durch den Signalgeber ausgegeben. Dann wartet der Messgeber auf das Echo.

Die Distanz kann nun wie folgt berechnet werden:

Dabei ist die Länge und ist die Geschwindigkeit des Schalls in der Luft. Der Zeitunterschied zwischen Senden und Empfangen der Schallwellen durch Signalgeber und Messgeber wird durch beschrieben. Da wir den Schall in eine Richtung senden und dieser von einem Gegenstand reflektiert den gleichen Weg zurück antritt, wird die Zeit durch zwei geteilt. Die Schallgeschwindigkeit beträgt in einem Raum bei 20° Grad Celsius 344 Meter pro Sekunde.

Die Geschwindigkeit des Schalls wird durch die Luftdichte bestimmt, welche sich mit der Temperatur verändert, dazu mehr im Ausblick.[2]

Benötigtes Material

Das zur Lösung der Projektarbeit verwendete Material besteht aus:

  • Ultraschallsensor HC-SR04
  • Arduino Uno R3
  • Arduino Proto-Shield Kit DEV-07914
  • 2x Schraubklemmblock 1.50 mm² Polzahl 2 AKZ350/2-5,08-V PTR Grün
  • 2x Abzweigkasten (L x B x H) 86 x 86 x 39 mm ABB 2TKA140012G1 Weiß IP65
  • 2m Datenleitung 4 x 0.5 mm²
  • div. Einzelardern 0.5 mm²
  • 1m Rohr durchmesser 50mm mit Abschlusskappe
  • Ablasshahn Kunststoff
  • Metallgestell aus ITEM Profil
  • USB-Kabel Stecker Typ A zu Stecker Typ B

Projektplanung

Um die Übersicht über das Projekt zu behalten, wurde zu Begin ein Projektplan erstellt. Die folgende Abbildung 1 zeigt einen Screenshot dieses Projektplans. Alle notwendigen Dokumente zu diesem Projekt sind im SVN [1] abgelegt.

Abbildung 1: Projektplan

Recherche nach bestehenden Lösungen

Gemäß der Aufgabenstellung ist zunächst eine Recherche nach den bestehenden Lösungen durchgeführt worden. Dabei wurde mittels Internet nach ähnlichen Realisierungen gesucht. Zur Inspiration wird hier auf einige Quellen verwiesen.

  • Arduino Forum [2]
  • Smarte Welt, Webblog [3]
  • Turaus.de [4]

Eine Lösung mit einem Flachbandkabel, siehe auch [5], kam dabei nicht in Frage. Der Wasserstand könnte hierbei nur sehr eingeschränkt gemessen werden.

Systemaufbau

Das Gesamt-System kann in drei Teilsysteme unterteilt werden. Dabei stellt der Wassertank das erste, der Arduino Uno R3 mit dem Ultraschallsensor das zweite und die Software das dritte Teilsystem dar.

Wassertank

Bei dem Projekt kommt als Wassertank ein Rohr mit einer Höhe von 49 cm und einem Durchmesser von 10 cm zum Einsatz. Am unteren Ende ist dieses Rohr durch eine Abschlusskappe verschlossen. Des Weiteren befindet sich am unteren Ende des Rohres ein Ablasshahn der es ermöglicht den Wasserstand zu verändern. Dies geschieht von unten da bei dem Befüllen von oben keine akkurate Messung möglich ist, weil das zufließende Wasser den von oben kommenden Ultraschall reflektiert. Der Ultraschallsensor wird am oberen Ende des Rohres eingehängt. Das Rohr befindet sich auf einem Gestell aus ITEM Profilen um einen sicheren Stand zu gewährleisten, sowie den Zugang zum Ablasshahn zu ermöglichen. Insgesamt fasst der Wassertank ein Volumen von 3,8 Litern. Anzumerken ist das der Durchmesser im unterm Bereich (erste 8 cm) einen um 1 cm größeren Durchmesser besitzt. Hierauf wird im Softwareteil genauer eingegangen. Abbildung 2 Zeigt den kompletten Aufbau des Wassertanks mitsamt der verbauten Sensorik.

Abbildung 2: Wassertank mit Sensorik

Arduino UNO R3 und Ultraschallsensor

Als Ultraschallsensor mit der Bezeichnung HC-SR04 zum Einsatz. Dieses Ultraschallmodul arbeitet in einem Distanzrahmen von 3 bis 400 cm. Die maximale Abweichung beträgt hierbei 0,3 Millimeter.

Die technischen Daten sind folgende:

  • Reichweite: 3 bis 400 cm
  • Betriebsspannung: 5 V DC
  • Frequenz: 40 kHz
  • Trigger-Pulsweite: 10 µs
  • Maximale Abweichung beträgt 0,3mm
Abbildung 3: Ultraschallsensor

Der hier beschriebene Sensor wurde in eine Abzweigdose verbaut wodurch dieser vor Spritzwasser geschützt ist und sich mittels eines Bleches an der Abzweigdose einfach am Rohr befestigen lässt. Abbildung 4 zeigt den verbauten Ultraschallsensor.

Abbildung 4: Ultraschallsensor eingebaut

Die Verbindung zum Proto-Shield des Arduino Uno R3 erfolg mittels einer 4 x 0,5mm² Steuerleitung. Der Schaltplan zur Verdrahung des Sensors mit dem Proto-Shield ist in Abbildung 5 zu sehen. Abbildung 6 zeigt den Arduino mit dem fertig verdrateten Proto-Shield. Hier sieht man auch wie dieser in der Abzweigdose verbaut wurde.

Abbildung 5: Schaltplan
Abbildung 6: Proto-Shield

Der Arduiuno Uno R3 wurde für das Projekt mit einem Proto-Shield erweitert. Das Proto-Shield hat dabei die Funktion das einfache wechseln bzw. den einfachen Ausbau des Arduinos zu ermöglichen. Die von dem Sensor kommende Steuerleitung wird über die am Proto-Shield angelöteten Schraubklemmen angeschlossen, somit kann der Sensor schnell gewechselt werden bzw. die länge der Steuerleitung an andere Situationen angepasst werden. Über die USB-Schnittstelle des Arduino wird dieser sowohl mit Spannung versorgt als auch programmiert. Zudem dient diese Verbindung dazu über den Serial Monitor die Füllstandshöhe sowie das aktuelle Volumen des Wassertanks zu übertragen.

Software

Die Arduino Programmierung basiert auf einer s.g. integrierten Entwicklungsumgebung. Diese Java Anwendung ist für Linux, Mac und Windows kostenlos verfügbar. Aufgrund einer GPL-Lizenz fallen keine Lizenzgebühren an. Die eigentliche Programmierung erfolgt in C bzw. C++. Für viele Programme ist es ausreichend, zwei Funktionen zu definieren:

  • setup() beim Start des Programmes, z.B. zur Pinbelegung
  • loop() als Hauptfunktion. Diese wird immer wieder aufgerufen, solange das Programm auf dem Arduino-Board aktiv ist.

Zur Messung des Wasserstandes wurde folgendes Programm geschrieben:

int trig = 12; // Pinbelegung int echo = 11; // Pinbelegung

void setup() {

 Serial.begin(9600);
 pinMode(trig, OUTPUT);
 pinMode(echo, INPUT); 

}

void loop() {

 long h = 0, t = 0, a = 0, c = 0;            // a = Distanz Wasser-Sensor, c = Korrigierter Messwert, t = Signalzeit, 
                                                             // h = Wasserstand
 float  hp1 = 0, hp2 = 0, r1 = 0, r2 = 0;    // hp1 = Füllstand Rohr in ccm bei Wasserstand von 0-8cm; r1 = Radius 1
                                             // hp2 = Füllstand Rohr in ccm bei Wasserstand von 8,1-49cm; r2 = Radius 2
 const float pi = 3.14;                      // Definition Zahl Pi

                                             // Berechnung des Pulsweitensignals
 digitalWrite(trig, LOW);
 delayMicroseconds(2);
 digitalWrite(trig, HIGH);
 delayMicroseconds(10);
 digitalWrite(trig, LOW);
 
 t = pulseIn(echo, HIGH);
 
                                                   
 a = t / 58;                                 // Distanz = Pulsweite Signal-PIN / 29 /2 
                                             // (Die Schallschwindigkeit beträgt ca. 29ms/cm und das Signal muss den 
                                             // doppelten Weg zum Hindernis und retour zurücklegen). 
                                            

 c = a + 3;                                  // offset-Korrektur
 h = 49 - c;                                 // Wasserstand ist von 0 bis 49cm möglich
 r1 = 5;                                     // Radius des Rohrs oben in cm
 r2 = 5,5;                                   // Radius des Rohrs unten in cm


 if(h<8)                                     // Falls der Wasserstand zwischen 0 und 8 ist (Radius Rohr ist größer)
 { 
 
 hp1 = pi*r2*r2*h ;                          // gibt den Füllstand des Rohrs in ccm aus
 
 // Sending to computer
 Serial.print("Der Wasserstand im Rohr ist ");
 Serial.print(h);                            // Ausgabe Wasserhöhe
 Serial.print("cm ");
 Serial.print("und das Volumen in ccm ist ");
 Serial.print(hp1);                          // Ausgabe Volumen
 // Serial.print(" cm\n");
 Serial.print("\n");
 
 delay(1000);
 }
 
 else 
 {
 hp2 = pi*r2*r2*h + 475;                   // gibt den Füllstand des Rohrs in ccm aus
  if (a>49)                                  // falls außerhalb des Messbereiches gemessen wird
  {
    Serial.print("falscher Messwert! ");
  }
 // Sending to computer
 Serial.print("Der Wasserstand im Rohr ist ");
 Serial.print(h);                            // Ausgabe Wasserstand
 Serial.print("cm ");
 Serial.print("und das Volumen in ccm ist ");
 Serial.print(hp2);                          // Ausgabe Volumen
 // Serial.print(" cm\n");
 Serial.print("\n");
 
 delay(1000);
 }
 
 

}

Das Programm wird nach Anschluss des Arduino per USB übertragen. Über Werkzeuge>Serieller Monitor kann der Füllstand bzw. das Volumen angezeigt werden.

Auswertung

Zur Auswertung wurde der Wassertank zunächst mit zwei Litern Wasser gefüllt. Im nächsten Schritt wurde die Füllhöhe mittels Maßband ermittelt, sodass das im Rohr befindliche Wasservolumen bestimmt werden konnte. Im nächsten Schritt wurde über den Seriellen Monitor die vom Arduino ermittelte Füllhöhe und das Volumen ausgegeben.

Laufzeitmessung

Dieser Vergleich zeigt, dass die Messung korrekt funktioniert, d.h. auf dem Seriellen Monitor wurde das Volumen an Wasser ausgegeben was zuvor durch Berechnung ermittelt wurde. Zudem wurde durch das Füllen des Wassertanks und anschließendes Ablassen des Wassers über den Ablasshahn eine Kennlinie über den Seriellen Plotter erstellt. Dies zeigt, dass es auch bei verschiedenen Füllhöhen nicht zu Messfehlern kommt. Für Messfehler durch Temperaturänderungen kann gesagt werden das bei einer Temperaturdifferen von 20°C ein Fehler von 3,4% entsteht. Messergebnisse zur Laufzeitmessung sind in der Tablle rechts zu sehen.


Fazit

Aufgabe war es einen Wasserstandsmessgerät zur Vermessung der Füllhöhe in einem Tank zu entwickeln. Die Ausgabe der Füllstandshöhe sollte dabei per Serial Monitor am PC erfolgen. Das entwickelte System ist in der Lage sowohl die Füllhöhe zu ermitteln als auch das vorhandene Flüssigkeitsvolumenen auszugeben. Die Anschlüsse am am Proto-Shield zur Verbindung des Sensors wurden wie gefordert über Schraubklemmen ausgeführt.

Abbildung 7: Messestand des Projektes

Ausblick

Den größten Einfluss auf die Messgenauigkeit besitzt die Lufttemperatur. Nach der Laufzeitmessung des reflektierten Ultraschallimpulses wird wie bereits beschrieben die Entfernung zum Objekt über die Schallgeschwindigkeit berechnet. Mit der Lufttemperatur ändert sich jedoch auch die Schallgeschwindigkeit um 0,17% pro Grad Kelvin. [1] Um das Wasserstandsmessgerät weiter zu verbessern, wäre daher der Einsatz eines zusätzlichen Temperatursensors anzudenken. Dieser passt die Schallgeschwindigkeit, welche zur Entfernungsberechnung genutz wird, zyklisch an die Umgebungstemperatur an.

Youtube-Video

Zu diesem Projekt wurde ein Ergebnisvideo angefertigt. Dieses lässt sich unter dem folgenden Link abrufen [6].

Quellen

[1] http://www.pepperl-fuchs.com/global/de/25518.htm
[2] http://deskfactory.de/arduino-projekt-utraschall-sr-04
[3] http://blog.smartewelt.de/?p=2414
[4] https://www.turais.de/arduino-zisternen-pegelstandsmessung/
[5] http://www.mikrocontroller.net/topic/73496


→ zurück zum Hauptartikel: Angewandte Elektrotechnik (WS 16/17)