Projekt 65: Wasserstandsmessgerät-Aufsatz für Arduino: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 117: | Zeile 117: | ||
const float pi = 3.14; // Definition Zahl Pi | const float pi = 3.14; // Definition Zahl Pi | ||
// Berechnung des Pulsweitensignals | |||
digitalWrite(trig, LOW); | digitalWrite(trig, LOW); | ||
delayMicroseconds(2); | delayMicroseconds(2); | ||
Zeile 124: | Zeile 124: | ||
digitalWrite(trig, LOW); | digitalWrite(trig, LOW); | ||
t = pulseIn(echo, HIGH); | t = pulseIn(echo, HIGH); | ||
a = t / 58; // Distanz = Pulsweite Signal-PIN / 29 /2 | a = t / 58; // Distanz = Pulsweite Signal-PIN / 29 /2 | ||
// (Die Schallschwindigkeit beträgt ca. 29ms/cm und das Signal muss den | // (Die Schallschwindigkeit beträgt ca. 29ms/cm und das Signal muss den |
Version vom 18. Dezember 2016, 14:20 Uhr
Autoren: Lukas Brexler, Thorsten Drees
Betreuer: Prof. Göbel
→ zurück zum Hauptartikel: Angewandte Elektrotechnik (WS 15/16)
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 hoch Frequenz Ton (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 Schall Geschwindigkeit beträgt in einem Raum um 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.
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 48cm 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.
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
Der hier beschriebene Sensor wurde in eine Abzweigdose verbaut wodurch dieser vor Spritzwasser geschützt ist und sich mittels eines Belches an der Abzweigdose einfach am Rohr befestigen lässt. Abbildung 4 zeigt den verbauten Ultraschallsensor.
Die Verbindung zum Proto-Shield des Arduino Uno R3 erfolg mittels einer 4 x 0,5mm² Steuereitung. 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.
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); }
}
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. Im nächsten Schritt wurde über den Seriellen Monitor die vom Arduino ermittelte Füllhöhe und das Volumen ausgegeben. Dieser Vergleich zeigt das die Messung korrekt funktioniert. 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 das es auch bei verschiedenen Füllhöhen nicht zu Messfehlern kommt.
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.
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 [2].
Quellen
[1] http://www.pepperl-fuchs.com/global/de/25518.htm
[2] http://deskfactory.de/arduino-projekt-utraschall-sr-04
→ zurück zum Hauptartikel: Angewandte Elektrotechnik (WS 15/16)