Inhaltsverzeichnis:
- Schritt 1: Die Mathematik…
- Schritt 2: Praktisches
- Schritt 3: Die Zutaten
- Schritt 4: Testen des Prototyps (und des Codes)
- Schritt 5: Regenwassermesser Ino Sketch
- Schritt 6: Laden von Code auf einen Arduino Pro Mini (ohne USB)
- Schritt 7: Montage
- Schritt 8: Der fertige Artikel
- Schritt 9: Postscript - Hundert (und fünf) Prozent?
- Schritt 10: Nachdenken
Video: Ultraschall-Regenwassertank-Kapazitätsmesser - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:21
Wenn Sie so etwas wie ich sind und ein bisschen Umweltbewusstsein haben (oder nur Geizhals sind, die ein paar Dollar sparen wollen - das bin ich auch …), haben Sie vielleicht einen Regenwassertank. Ich habe einen Tank, um den eher seltenen Regen zu ernten, den wir in Australien bekommen - aber Junge, Junge, wenn es hier regnet, regnet es WIRKLICH! Mein Tank steht ca. 1,5m hoch und steht auf einem Sockel, d.h. ich muss aussteigen, um den Wasserstand zu überprüfen (oder - weil ich so faul bin, prekär auf einer alten Gasflasche vom Grill balancieren, die jetzt aufgebraucht ist dauerhaften Wohnsitz als 'Stufe' neben dem Tank).
Ich wollte irgendwie den Wasserstand im Tank überprüfen können, ohne das ganze Klettern und mit einer Hand am Abflussrohr hängen zu müssen (während ich mir Sorgen mache, welche Spinnen dahinter stecken könnten - Sie haben von australischen Spinnen gehört - oder?) … Also, mit einem erneuten Interesse an Elektronik und billigen Arduino-Klonen aus China bei ebay, beschloss ich, ein "Widget" zu bauen, das die Arbeit für mich erledigt.
Jetzt sollte mein 'Traum'-Widget fest im Tank installiert sein, eine solargeladene Stromquelle verwenden, mit einer Fernanzeige in meiner Garage oder vielleicht ein drahtloser Sender mit Bluetooth, den ich von meinem Telefon aus überprüfen könnte, oder vielleicht sogar ein ESP-Gerät, das eine automatisch aktualisierte Webseite hostet, damit ich den Wasserstand in meinem Tank von überall auf der Welt über das Internet überprüfen kann … aber wirklich - warum brauche ich das alles? Also habe ich meine großen Ideale etwas zurückgenommen (naja, ganz erheblich) und auf die Funktechnik der Lösung, die Festinstallation, die Solarladung und die Möglichkeit, den Füllstand meines Tanks von hinten (immer) zu überprüfen, abgeschafft vorausgesetzt, das Back-End von Beyond verfügt über WLAN, das heißt…)
Das daraus resultierende Projekt wurde in das oben gezeigte Handgerät heruntergestuft, das einfach über die Tanköffnung gehalten und per Druckknopf aktiviert werden kann, mit einer vom Boden aus ablesbaren Digitalanzeige - viel praktischer.
Schritt 1: Die Mathematik…
Nachdem ich mit mehreren Ideen zur Bestimmung des Wasserstands gespielt hatte, entschied ich mich für einen Ultraschallsender / -empfänger als Grundlage für mein Widget und mit einem Arduino, um die Messwerte zu erfassen und alle Berechnungen durchzuführen. Die vom Sensor zurückgegebenen Messwerte sind (indirekt) in Form eines Abstands - vom Ultraschallsensor zur Oberfläche, von der er abgeprallt ist (der Wasseroberfläche - oder dem Boden des Tanks, falls leer) und wieder zurück, also brauchen wir ein paar Dinge damit zu tun, um zu einem Prozentsatz zu kommen, der im Tank verbleibt.
Hinweis - Tatsächlich ist der vom Sensor zurückgegebene Wert nur die Zeit, die das Signal benötigt, um die Senderseite zu verlassen und zum Empfänger zurückzukehren. Dies ist in Mikrosekunden - aber zu wissen, dass die Schallgeschwindigkeit 29 Mikrosekunden pro cm beträgt (Was? Das wussten Sie nicht? Pfft…) macht eine einfache Umrechnung von einer Zeitdauer in eine Entfernungsmessung.
Zuerst müssen wir natürlich den Abstand durch 2 teilen, um den Abstand des Sensors zur Oberfläche zu erhalten. Ziehen Sie dann den konstanten Abstand vom Sensor zur 'max' Wassertiefe ab. Der verbleibende Wert ist die verwendete Wassertiefe. Ziehen Sie als nächstes diesen Wert von der maximalen Wassertiefe ab, um die verbleibende Wassertiefe im Tank zu ermitteln.
Dieser Wert ist dann die Grundlage für alle anderen Berechnungen, wie zum Beispiel die Berechnung dieser Wassertiefe als Prozentsatz der maximalen Tiefe oder die Multiplikation der Tiefe mit der konstanten "Oberfläche", um eine Wassermenge zu erhalten, die angezeigt werden kann in Litern (oder Gallonen oder einer anderen Einheit - solange Sie die Mathematik kennen - ich halte mich der Einfachheit halber an einen Prozentsatz).
Schritt 2: Praktisches
Das Gerät könnte in der Hand gehalten werden, aber dies führt zu geringfügigen Ungenauigkeiten, wenn das Gerät nicht jedes Mal an der gleichen Stelle und im gleichen Winkel gehalten wird. Es wäre zwar nur ein sehr kleiner Fehler und wahrscheinlich nicht einmal einer, der sich registrieren würde, aber es wäre die Art von Dingen, die an mir nagte.
In der Hand gehalten zu werden, bringt jedoch die viel größere Möglichkeit mit sich, dass das verdammte Ding in den Tank fällt und nie wieder gesehen wird. Um also BEIDE Möglichkeiten abzuschwächen, wird es auf einem Holzstück befestigt, das dann über die Tanköffnung gelegt wird - so dass die Messung jedes Mal aus der exakt gleichen Höhe und im gleichen Winkel erfolgt (und wenn es in die Tank, zumindest schwimmt das Holz).
Ein Druckknopf aktiviert das Gerät (wodurch ein Ein / Aus-Schalter und die Möglichkeit einer versehentlich entladenen Batterie überflüssig werden) und startet die Skizze im Arduino. Dies nimmt eine Reihe von Messwerten vom HC-SR04 und bildet den Durchschnitt davon (um fehlerhafte Messwerte abzumildern).
Ich habe auch ein bisschen Code eingefügt, um an einem der digitalen Arduino-E / A-Pins nach High oder Low zu suchen und damit das Gerät in den sogenannten "Calibration"-Modus zu versetzen. In diesem Modus zeigt das Display einfach die tatsächliche Entfernung (durch 2 geteilt) vom Sensor zurück, sodass ich die Genauigkeit mit einem Maßband überprüfen kann.
Schritt 3: Die Zutaten
Das Gerät besteht aus drei Hauptkomponenten…
- Ein HC-SR04 Ultraschall-Sende-/Empfangsmodul
- Ein Arduino Pro Mini-Mikrocontroller
- Eine 4-stellige 7-Segment-LED-Anzeige oder ein Anzeige-'Modul' wie ein TM1637
Alle oben genannten Begriffe können bei ebay leicht gefunden werden, indem Sie einfach nach den fett gedruckten Begriffen suchen.
In dieser Anwendung verwendet das Display einfach 3 Stellen, um einen %-Wert von 0-100 anzuzeigen oder 4 Stellen, um die Literzahl anzuzeigen (maximal 2000 in meinem Fall), also ist jede 4-stellige Anzeige ausreichend - Sie müssen es nicht Machen Sie sich Sorgen, ob das Modul Dezimalpunkte oder Doppelpunkte hat. Ein Display-"Modul" (LED auf einer Breakout-Platine mit einem Schnittstellenchip montiert) ist einfacher, da es weniger Pin-Verbindungen verwendet, aber eine rohe LED-Anzeige mit 12 Pins könnte vom Arduino mit einigen kleinen Modifikationen am Code untergebracht werden (tatsächlich basierte mein ursprüngliches Design auf diesem Setup). Beachten Sie jedoch, dass die Verwendung einer rohen LED-Anzeige auch 7 Widerstände erfordert, um den von jedem Segment gezogenen Strom zu begrenzen. Ich hatte zufällig ein TM1637-Uhranzeigemodul zur Verfügung, also entschied ich mich, dieses zu verwenden.
Zu den zusätzlichen Kleinigkeiten gehören ein 9-V-Batterieclip (und natürlich eine Batterie), ein "Push-to-Make"-Taster, eine Projektbox, Kopfstifte, Verbindungsdrähte und eine Länge von 2 "x 4" Holz, die überschreitet der Durchmesser der Tanköffnung.
Die zusätzlichen Kleinigkeiten (abgesehen von dem Stück Holz) wurden von meiner lokalen Hobbyelektronik-Verkaufskette gekauft - Jaycar in Australien. Ich kann mir vorstellen, dass Maplin in Großbritannien eine praktikable Alternative wäre, und ich denke, es gibt einige in den USA, wie Digikey und Mouser. Für andere Länder weiß ich es leider nicht, aber ich bin sicher, wenn Sie in Ihrem Land kein geeignetes Outlet oder Online-Anbieter haben, werden chinesische Ebay-Verkäufer für Sie durchkommen, wenn Sie dies nicht tun Denken Sie daran, ein paar Wochen auf die Lieferung zu warten (ironischerweise sind 6 Wochen oder mehr für eine Lieferung aus China nach Australien nicht ungewöhnlich, obwohl wir einer unserer nächsten Nachbarn sind!).
Stellen Sie sicher, dass Sie eine Projektbox erhalten, die groß genug ist - ich habe bei mir vermutet, bevor die Komponenten verfügbar sind, und es ist wirklich sehr eng - ich muss mir möglicherweise einen anderen Druckknopf besorgen, der weniger Platz beansprucht.
Oh, und übrigens, die Länge des Holzes stammte nur von einigen Schrottresten, die ich in der Ecke meiner Garage lagere (als Zuhause für mehr dieser schönen Spinnen).
Sobald Sie das Schema und die Funktionalität verstanden haben, können Sie sich entscheiden, Ihre Version anzupassen und einen Ein-/Aus-Schalter hinzuzufügen oder eine 18650 Li-Ion-Stromquelle mit Solarpanel und Laderegler zu verwenden, um sie ständig nachzufüllen und einsatzbereit zu halten, oder ändern Sie die einfache LED-Anzeige gegen ein mehrzeiliges LCD oder grafisches OLED mit mehr Informationsanzeigeoptionen, z. B. gleichzeitige Anzeige des Prozentsatzes UND der verbleibenden Liter. Oder Sie entscheiden sich für die singende, alles tanzende drahtlose IoT-Einheit, die fest im Tank MIT Solarladung installiert ist. Ich würde gerne von Ihren Variationen und Modifikationen hören.
Schritt 4: Testen des Prototyps (und des Codes)
Nachdem ich den HC-SR04 von einer billigen chinesischen Quelle bei ebay gekauft hatte, hatte ich nicht wirklich erwartet, ein sehr genaues Gerät zu erhalten, also wollte ich es zuerst auf dem Steckbrett testen, falls ich einen Entfernungskorrekturcode hinzufügen musste meine Skizze.
An diesem Punkt suchte ich nach grundlegenden Informationen zum Anschließen und Verwenden des HC-SR04 und muss das anweisbare "Einfache Arduino- und HC-SR04-Beispiel" von jsvester anerkennen. Sein Beispiel und seine Erfahrung waren für mich ein guter Ausgangspunkt, um mit dem Programmieren zu beginnen.
Ich habe die NewPing-Funktionsbibliothek für den HC-SR04 gefunden, die integrierte Funktionen enthält, um den Durchschnitt mehrerer Messwerte zu ermitteln, wodurch mein Code viel einfacher wird.
Ich habe auch eine Bibliothek für das Uhranzeigemodul TM1637 gefunden, die die Anzeige von Zahlen viel einfacher machte. In meinem ursprünglichen Code (für die 4-stellige 7-Segment-Anzeige) musste ich die Zahl in einzelne Ziffern aufteilen, dann jede einzelne Ziffer auf dem Display aufbauen, indem ich wusste, welche Segmente beleuchtet werden sollen, und dann jede Ziffer in der Zahl durchgehen, und bauen diese Zahl auf der entsprechenden Anzeigeziffer auf. Diese Methode wird Multiplexing genannt und zeigt effektiv nur eine einzelne Ziffer gleichzeitig an, wechselt sie jedoch so schnell von einer Ziffer zur nächsten, dass das menschliche Auge es nicht bemerkt und Sie glauben lässt, dass alle Ziffern eingeschaltet sind zur selben Zeit. Wie bei der HC-SR04-Bibliothek, die die Messoperationen erleichtert, kümmert sich diese Display-Bibliothek um das gesamte Multiplexing und die Handhabung der Ziffern. Die oben verlinkten Arduino-Referenzseiten enthalten einige Beispiele, und natürlich wird jede Bibliothek mit Beispielcode geliefert, der eine große Hilfe sein kann.
n
Die Bilder oben zeigen also meinen Teststand - ich teste ihn der Einfachheit halber auf meinem Arduino Uno, da dieser bereits für temporäre wiederverwendbare Verbindungen für das Prototyping eingerichtet ist. Das Gerät arbeitet hier im 'Kalibrierungs'-Modus (beachten Sie, dass der digitale Pin 10 - das weiße Kabel - mit Masse verbunden ist) und liest genau 39 cm von der Box ab, die ich zufällig davor platziert hatte, wie das Maßband zeigt. In diesem Modus zeige ich das kleine 'c' vor der Messung an, nur um anzuzeigen, dass es sich nicht um die normale Messung handelt.
Neben Vcc (5v) und Ground benötigt der HC-SR04 noch 2 weitere Anschlüsse - den Trigger (gelb an Pin 6) und Echo (grün an Pin 7). Das Display benötigt außerdem Vcc (5v) und Masse sowie 2 weitere Anschlüsse - Clock (blau an Pin 8) und DIO (lila an Pin 9). Wie bereits erwähnt, wird die Betriebsart durch ein High oder Low an Pin 10 (weiß) gesteuert. Die Anschlüsse verwenden die gleichen Pins wie beim Arduino Pro Mini, werden jedoch dauerhaft verlötet. Der Betriebsmodus wird mit einem Jumper über zwei von drei Header-Pins ausgewählt, die jeweils mit Vcc, Pin 10 und Masse verbunden sind.
Die offiziellen Spezifikationen für den HC-SR04 beanspruchen so etwas wie einen maximalen Fehler von nur 3 Millimetern bis zum maximalen Betriebsabstand von 4 Metern ist weit mehr als ich brauche. Aufgrund des begrenzten Platzes für einen schnellen und schmutzigen Testaufbau wurden meine Testergebnisse über diese Entfernung hinaus durch Reflexionen von anderen Oberflächen als meinem Testziel verfälscht, da sich der Strahl des Senders ausbreitete und einen größeren Bereich erfasste. Aber solange es gut ist bis 1,5 Meter - das tut mir gut, vielen Dank:-)
Schritt 5: Regenwassermesser Ino Sketch
Der vollständige Code ist beigefügt, aber ich werde unten einige Auszüge einfügen, um einige der Schritte zu erklären.
Als erstes die Einrichtung…
#enthalten
#include #include // Pins für HC-SR04 #define pinTrig 6 #define pinEcho 7 NewPing Sonar (pinTrig, pinEcho, 155); // 400 cm ist max für HC-SR04, 155 cm ist max für Tank // LED-Modul-Anschlussstifte (digitale Pins) #define CLK 8 #define DIO 9 TM1637Display display (CLK, DIO); // Andere Pins #define opMode 10
Neben den Bibliotheken TM1637 und NewPing habe ich auch eine Math-Bibliothek eingefügt, die mir Zugriff auf die Rundungsfunktion gibt. Ich verwende dies in einigen der Mathematik, um mir beispielsweise zu ermöglichen, den Prozentsatz auf die nächsten 5% genau anzuzeigen.
Als nächstes werden die Pins für die beiden Geräte definiert und die Geräte initiiert.
Schließlich definiere ich Pin 10 für den Betriebsmodus.
// setze alle Segmente für alle Ziffern aus
uint8_t bytes = {0x00, 0x00, 0x00, 0x00}; display.setSegments(Bytes);
Dieser Codeabschnitt zeigt eine Möglichkeit zur Steuerung des Anzeigemoduls, die eine individuelle Steuerung jedes Segments in jeder Ziffer ermöglicht. Ich habe die 4 Elemente im Array namens Bytes so eingestellt, dass sie alle null sind. Das bedeutet, dass jedes Bit jedes Bytes Null ist. Die 8 Bits werden verwendet, um jedes der 7 Segmente und den Dezimalpunkt (oder den Doppelpunkt in einer Uhranzeige) zu steuern. Wenn also alle Bits null sind, wird keines der Segmente beleuchtet. Die Operation setSegments sendet den Inhalt des Arrays an das Display und zeigt (in diesem Fall) nichts an. Alle Segmente sind aus.
Das höchstwertige Bit in einem Byte steuert den DP, und dann steuern die verbleibenden 7 Bits die 7 Segmente von G nach A in umgekehrter Reihenfolge. Um beispielsweise die Zahl 1 anzuzeigen, sind die Segmente B und C erforderlich, die binäre Darstellung wäre also '0b00000110'. (Danke an CircuitsToday.com für das Bild oben).
// Nehmen Sie 10 Messungen vor und verwenden Sie die mittlere Dauer.
int-Dauer = sonar.ping_median(10); // Dauer ist in Mikrosekunden if(duration == 0) // Messfehler - nicht schlüssig oder kein Echo { uint8_t bytes = { 0x00, 0b01111001, 0b01010000, 0b01010000 }; // Segmente, um "Err" zu buchstabieren display.setSegments(bytes); }
Hier sage ich dem HC-SR04, 10 Messungen durchzuführen und mir das durchschnittliche Ergebnis zu geben. Wenn kein Wert zurückgegeben wird, liegt die Einheit außerhalb des zulässigen Bereichs. Ich verwende dann die gleiche Technik wie oben, um bestimmte Segmente an den 4 Ziffern zu steuern, um die Buchstaben (leer), E, r und r zu buchstabieren. Die Verwendung der binären Notation macht es etwas einfacher, die einzelnen Bits den Segmenten zuzuordnen.
Schritt 6: Laden von Code auf einen Arduino Pro Mini (ohne USB)
Wie ich bereits sagte, dauert es oft 6 Wochen oder länger, bis Artikel von chinesischen Ebay-Verkäufern ankommen, und ein Großteil meiner Prototypen- und Codeerstellung wurde durchgeführt, während ich auf die Ankunft einiger Komponenten wartete - der Arduino Pro Mini ist einer davon.
Eine Sache, die mir beim Pro Mini nicht aufgefallen ist, bis ich ihn bereits bestellt hatte, ist, dass er keinen USB-Anschluss zum Herunterladen des Sketches hat. Nach einigem hektischem Googeln habe ich also festgestellt, dass es in diesem Fall zwei Möglichkeiten gibt, eine Skizze zu laden - eine erfordert ein spezielles Kabel, das vom USB an Ihrem PC zu 6 bestimmten Pins am Pro Mini führt. Diese Gruppe von 6 Pins sind als ISP-Pins (In-System Programmer) bekannt, und Sie können diese Methode tatsächlich auf jedem Arduino verwenden, wenn Sie möchten - aber da die USB-Schnittstelle auf so ziemlich allen anderen Arduino-Varianten verfügbar ist (I denken), ist die Verwendung dieser Option viel einfacher. Die andere Methode erfordert, dass Sie einen anderen Arduino mit einer USB-Schnittstelle haben, um als "Vermittler" zu fungieren.
Glücklicherweise bedeutete mein Arduino Uno, dass ich die zweite Methode verwenden konnte, die ich unten für Sie skizzieren werde. Es wird mit dem 'Arduino als ISP' aufgerufen. Kurz gesagt, Sie laden eine spezielle Skizze auf Ihren "Vermittler" Arduino, die ihn in eine serielle Schnittstelle verwandelt. Laden Sie dann Ihre eigentliche Skizze, aber anstelle der normalen Upload-Option verwenden Sie eine Option aus dem IDE-Menü, die "mit dem Arduino als ISP" hochlädt. Der "Vermittler" Arduino nimmt dann Ihre eigentliche Skizze von der IDE und leitet sie an die ISP-Pins des Pro Mini weiter, anstatt sie in den eigenen Speicher zu laden. Es ist nicht schwer, wenn Sie sich erst einmal mit der Funktionsweise vertraut gemacht haben, aber es ist eine zusätzliche Ebene der Komplexität, die Sie möglicherweise vermeiden möchten. Wenn dies der Fall ist oder Sie keinen anderen Arduino haben, den Sie als "Vermittler" verwenden können, möchten Sie vielleicht einen Arduino Nano oder eines der anderen Modelle mit kleinem Formfaktor kaufen, die die USB-Schnittstelle enthalten und macht die Programmierung einfacher.
Im Folgenden finden Sie einige Ressourcen, die Ihnen beim Verständnis des Prozesses hilfreich sein könnten. Die Arduino-Referenz bezieht sich speziell auf das Brennen eines neuen Bootloaders auf das Zielgerät, aber Sie können genauso einfach eine Skizze auf die gleiche Weise laden. Ich fand, dass Julian Iletts Video das Konzept viel klarer macht, obwohl er den Teil in der Arduino-Referenz überspringt, der erklärt, wie die beiden Arduinos miteinander verbunden werden, und stattdessen einen bloßen Chip auf einem Steckbrett programmiert.
- Das Arduino-Referenzhandbuch - Verwenden von Arduino als ISP
- Julian Iletts YouTube-Video - Verwendung eines Arduino als ISP
Da beim Pro Mini die 6 ISP-Pins nicht bequem gruppiert sind, müssen Sie decodieren, welche der digitalen Pins sich auf die 4 Programmierpins beziehen (die anderen beiden Anschlüsse sind nur Vcc und Gnd - also ziemlich einfach). Zu deinem Glück habe ich das schon durchgemacht - und bin bereit, das Wissen mit dir zu teilen - was für ein großzügiger Mensch ich bin!!
Der Arduino Uno und viele andere in der Arduino-Familie haben die 6 Pins handlich in einem 3x2-Block angeordnet, wie hier (Bild von www.arduino.cc).
Leider nicht beim Pro Mini. Wie Sie unten sehen können, sind sie eigentlich recht einfach zu identifizieren und immer noch in 2 Blöcken mit 3 Pins angeordnet. MOSI, MISO und SCK sind identisch mit den digitalen Pins 11, 12 bzw. 13 sowohl beim Pro Mini als auch beim Arduino Uno, und für die ISP-Programmierung verbinden Sie einfach 11 mit 11, 12 mit 12 und 13 mit 13. Der Pro Der Reset-Pin des Mini sollte mit dem Uno-Pin 10 verbunden werden, und der Vcc (5v)/Ground des Pro Mini sollte mit dem Arduino +5v/Ground verbunden werden. (Bild von www.arduino.cc)
Schritt 7: Montage
Wie ich bereits erwähnt habe, habe ich den Fall gewagt und es bereut. Alle Komponenten einzupassen war eine echte Herausforderung. Tatsächlich musste ich die Druckknopfkontakte seitlich herausbiegen und etwas Verpackung an der Außenseite anbringen, um sie etwas weiter anzuheben, damit sie in die Tiefe der Box passt, und ich musste 2-3 mm von jeder Seite abschleifen die Anzeigemodulplatine, damit sie auch passt.
Ich habe 2 Löcher in das Gehäuse gebohrt, damit die Ultraschallsensoren durchstoßen können. Ich habe die Löcher etwas zu klein gebohrt und dann mit einem kleinen Drehschleifer nach und nach vergrößert, damit ich sie schön 'Push-Fit' bekommen konnte. Leider waren sie zu nah an den Seiten, um den Grinder von innen bedienen zu können, und dies musste von außen gemacht werden, was zu vielen Kratzern und Schlittschuhspuren führte, wo der Grinder verrutschte - na ja, das ist alles auf der Unterseite sowieso - wen interessiert das..?
Ich schneide dann an einem Ende einen Schlitz, der die richtige Größe hat, damit das Display durchstechen kann. Nochmals - meine Vermutung über die Boxgröße biss mich auf die Rückseite, da der Schlitz mir ein sehr schmales Stück über dem Display hinterließ, das unweigerlich brach, während ich es glatt feilte. Naja – dafür wurde Sekundenkleber erfunden…
Schließlich, mit allen Komponenten, die grob in der Box positioniert waren, maß ich, wo das Loch im Deckel platziert werden sollte, damit der Körper des Druckknopfes in den letzten verfügbaren Platz fallen würde. NUR!!!
Als nächstes lötete ich alle Komponenten zusammen, um zu testen, dass sie alle nach meinem Biegen und Schleifen und Trimmen noch funktionierten, bevor ich sie alle in das Gehäuse montierte. Sie können die Jumper-Verbindung direkt unter dem Anzeigemodul sehen, wobei Pin 10 des Arduino (weißes Kabel) mit Gnd verbunden ist, wodurch das Gerät in den Kalibrierungsmodus versetzt wird. Das Display zeigt 122 cm von meiner Bank entfernt an - es muss ein Signal empfangen haben, das von der Oberseite des Fensterrahmens reflektiert wird (es ist zu niedrig, um die Decke zu sein).
Dann ging es darum, die Heißklebepistole auszubrechen und alle Komponenten an ihren Platz zu bringen. Nachdem ich das getan hatte, stellte ich fest, dass der winzige Abstand zwischen der Oberseite des Displaymoduls und dem Deckel, sobald das Modul festgeklebt war, eine kleine Ausbuchtung hinterließ, wo der Deckel nicht ganz so fest sitzt, wie ich es gerne hätte. Ich könnte versuchen, eines Tages etwas dagegen zu unternehmen - oder wahrscheinlicher, ich werde es nicht tun …
Schritt 8: Der fertige Artikel
Nach ein paar Tests nach der Montage und einer Korrektur meines Codes, um die Tiefe des Holzstücks zu berücksichtigen, an das ich das Gerät geschraubt hatte (was ich bei meinen Berechnungen völlig übersehen habe - oh oh!), ist alles fertig. Schließlich!
Zusammengebaute Prüfung
Wenn das Gerät nur mit dem Gesicht nach unten auf meiner Bank liegt, wird offensichtlich kein reflektiertes Signal vorhanden sein, sodass das Gerät korrekt einen Fehlerzustand anzeigt. Das gleiche gilt, wenn die nächste reflektierende Oberfläche außerhalb der Reichweite des Geräts liegt.
Sieht so aus, als ob von meiner Bankoberseite bis zum Boden 76 cm lang sind (naja, 72 cm plus die 4 cm Tiefe des Holzstücks).
Die Unterseite des Geräts, die den Sender und Empfänger zeigt, die über das Holzstück hinausragen - ich sollte wirklich aufhören, es Holzstück zu nennen - wird fortan als Plattform für die Instrumentenstabilisierung und Präzisionsplatzierung bezeichnet! Zum Glück ist dies wahrscheinlich das letzte Mal, dass ich es erwähne;-)
Ooh - du kannst all diese fiesen Kratzer und Schlittschuhspuren in diesem sehen …
… und hier ist der fertige Artikel, der in den normalen Betriebsmodus versetzt wurde und tatsächlich die Kapazität meines Tanks auf die nächsten 5% misst. Es war ein (sehr) regnerischer Sonntagnachmittag, an dem ich dieses Projekt beendete, daher die Regentropfen auf dem Gerät und die sehr erfreuliche 90%-Anzeige.
Ich hoffe, dass Sie es genossen haben, dieses anweisbare zu lesen, und dass Sie ein wenig über Arduino-Programmierung, Physik und die Verwendung von Sonar- / Ultraschallreflexion gelernt haben, die Fallstricke bei der Verwendung von Vermutungen in Ihrer Projektplanung, und dass Sie inspiriert wurden, Ihre eigenen Regenwassertankanzeige - und dann einen Regenwassertank zu installieren, um ihn zu verwenden, während Sie der Umwelt ein wenig helfen und Ihre Wasserrechnung sparen.
Bitte lesen Sie weiter - denn was am nächsten Tag geschah…!
Schritt 9: Postscript - Hundert (und fünf) Prozent?
Am Montag nach dem verregneten Sonntag war der Tank also absolut voll. Da es eines der wenigen Male ist, in dem ich es jemals vollständig gesehen habe, dachte ich, es wäre der ideale Zeitpunkt, um die Anzeige zu vergleichen, aber raten Sie mal, es wurde mit 105% registriert, also war offensichtlich etwas nicht in Ordnung.
Ich holte meinen Messstab heraus und stellte fest, dass meine ursprünglichen Annahmen von 140 cm als maximale Wassertiefe und 16 cm Kopffreiheit (basierend auf visuellen Schätzungen von außerhalb des Tanks) beide etwas von den tatsächlichen Messungen abwichen. Mit den echten Daten für meinen 100%-Benchmark bewaffnet, konnte ich meinen Code optimieren und das Arduino neu laden.
Die maximale Wassertiefe beträgt 147 cm, wobei der Messpunkt bei 160 cm liegt, was eine Kopffreiheit von 13 cm ergibt (die Summe aus der Kopffreiheit im Tank, der Höhe des Tankhalses und der Tiefe des Brockens… whoa, nein, was?! Ich meine die Tiefe der Instrumentenstabilisierungs- und Präzisionsplatzierungsplattform!).
Nachdem ich die Variablen maxDepth und Headroom entsprechend korrigiert und die maximale Reichweite des Sonarobjekts auf 160 cm zurückgesetzt hatte, zeigte ein schneller erneuter Test, dass 100 % auf 95 % fielen, als ich die Anzeige etwas anhob (um einen kleinen Teil der Wasser verwendet wurde).
Job erledigt!
PS - dies ist mein erster Versuch einer instructable. Wenn Sie meinen Stil, meinen Humor, meine Ehrlichkeit gegenüber Fehlern (hey – auch ich bin nicht perfekt…) usw. mögen, lassen Sie es mich wissen und es kann mir den Anstoß geben, noch einen zu machen.
Schritt 10: Nachdenken
Nutzbare Kapazität
Es ist nun ein paar Wochen her, seit ich dieses Instructable veröffentlicht habe, und ich habe viele Kommentare als Antwort erhalten, von denen einige einige alternative Mechanismen vorgeschlagen haben - sowohl elektronisch als auch manuell. Aber das hat mich zum Nachdenken gebracht, und ich hätte vielleicht am Anfang auf etwas hinweisen sollen.
- Mein Tank hat eine Pumpe, die ebenerdig installiert ist - knapp unterhalb des Tankbodens. Da die Pumpe der tiefste Punkt im System ist und das Wasser aus der Pumpe unter Druck steht, kann ich die volle Kapazität meines Tanks nutzen.
- JEDOCH - wenn Ihr Tank keine Pumpe hat und auf Schwerkraftzufuhr angewiesen ist, dann ist die effektive Kapazität des Tanks durch die Höhe Ihres Wasserhahns begrenzt. Sobald das verbleibende Wasser in Ihrem Tank niedriger ist als der Wasserhahn, fließt kein Wasser mehr.
Unabhängig davon, ob Sie ein elektronisches Messgerät, ein manuelles Schauglas oder ein Schwimmer- und Flaggensystem verwenden, beachten Sie, dass die effektive „Basis“Ihres Tanks ohne Pumpe tatsächlich die Höhe des Tankauslasses ist oder Zapfhahn.
Empfohlen:
Wie man Ultraschall-Levitator zu Hause herstellt - Acostic Levitator -: 4 Schritte
Wie man Ultraschall-Levitator zu Hause herstellt | Acostic Levitator |: Hey Leute, ich habe gerade einen acostischen Aufzug mit Ultraschallsensor und Arduino gemacht. Für eine kurze Erklärung, wie es funktioniert, habe ich mein Video auf YouTube hochgeladen. Du kannst hingehen und zuschauen
So verwenden Sie Ultraschall HC-SR04 mit "skiiiD": 6 Schritte
So verwenden Sie Ultrasonic HC-SR04 mit "skiiiD": Tutorial zur Verwendung des Ultrasonic HC-SR04-Moduls mit "skiiiD". /Erste-Schritte-mit-SkiiiD-Editor
Ultraschall-Regenmesser: Raspebbery Pi Open Weather Station: Teil 1: 6 Schritte
Ultraschall-Regenmesser: Raspebbery Pi Open Weather Station: Teil 1: Kommerziell verfügbare IoT (Internet of Things) Wetterstationen sind teuer und nicht überall verfügbar (wie in Südafrika). Extreme Wetterbedingungen treffen uns. SA erlebt die härteste Dürre seit Jahrzehnten, die Erde heizt sich auf und Ackerbau