Erstellen Sie mit ESP32 einen Tankvolumenleser für unter 30 $
Das Internet der Dinge hat viele ehemals komplexe Geräteanwendungen in die Häuser vieler Craft-Brauereien und Winzer gebracht. Anwendungen mit Füllstandsensoren werden seit Jahrzehnten in großen Raffinerien, Wasseraufbereitungsanlagen und Chemieanlagen eingesetzt. Da die Sensorpreise sinken, können nun sowohl die Industrie als auch Heimwerker das Volumen jedes Tanks, Fasses oder Kanisters überwachen.
Die auf dem freien Markt erhältlichen Sensoren können fast alles erfassen und werden entsprechend klassifiziert. Der zur Messung der Luftfeuchtigkeit verwendete Sensor wird als Feuchtigkeitssensor bezeichnet, der Druck als Drucksensor , der Abstand als Positionssensor und so weiter. In ähnlicher Weise wird der zur Messung von Flüssigkeitsständen verwendete Sensor als Füllstandsensor .
Die Füllstandsensoren dienen zur Messung des Füllstandes der fließfähigen Stoffe . Zu diesen Stoffen zählen Flüssigkeiten wie Wasser, Öl, Schlämme usw. sowie Feststoffe in Granulat-/Pulverform (fließfähige Feststoffe). Diese Stoffe neigen dazu, sich aufgrund der Schwerkraft in den Behältertanks abzusetzen und im Ruhezustand ihren Füllstand beizubehalten.
In dieser Anleitung erfahren Sie, wie Sie Ihren eigenen selbstgebauten Füllstand-, Temperatur- und Feuchtigkeitssensor . Außerdem sind Anweisungen für die Nutzung neu erfasster Daten über Ubidots , eine Plattform zur Anwendungsaktivierung, enthalten.
Anforderungen
- ESP32
- Ultraschallsensor – HC-SR04
- DHT11-Sensor
- Schutzhülle aus Kunststoff
- Drähte
- Micro-USB-Kabel
- Arduino IDE 1.8.2 oder höher
- Ubidots Konto – für Bildungslizenzen
- Ubidots Konto – für Geschäfts-/Industrielizenzen
Verkabelung und Gehäuse
Der Sensor HC-SR04 (Ultraschallsensor) arbeitet mit 5V-Logik. Bitte befolgen Sie die Tabelle und das Diagramm unten, um die korrekten Verbindungen zwischen dem ESP32 und dem Ultraschallsensor herzustellen:
Bitte befolgen Sie die folgende Tabelle, um die korrekten Verbindungen zwischen dem ESP32 und dem DHT11 -Sensor (Temperatur- und Feuchtigkeitssensor) herzustellen:
Ich habe einen kleinen Prototyp mit einem maßstabsgetreuen Tank gebaut, um die Funktionen des Sensors zu zeigen, aber ein endgültiger Prototyp mit seinem Gehäuse sollte so aussehen:
Wie Sie sehen, sollte sich der Ultraschallsensor oben im Tank befinden, sodass wir damit den Abstand zwischen dem oberen Teil des Tanks und dem Endpunkt der Substanz messen können:
Platzieren Sie Temperatur- und Feuchtigkeitssensoren, um eine Umgebung zu überwachen.
Um Ihr angeschlossenes Gerät zu programmieren, verbinden Sie es mit der Arduino IDE.
Bevor Sie mit dem ESP32 beginnen, richten Sie Ihr Board mit der Arduino IDE ein. Wenn Sie mit dem Aufbau eines Boards nicht vertraut sind, lesen Sie bitte den folgenden Artikel und befolgen Sie die Schritte Schritt für Schritt, bis Sie das Board zusammengestellt haben:
Sobald Ihr Board kompiliert ist, installieren Sie die Bibliotheken, die zum Ausführen der Sensoren erforderlich sind: „ PubSubClient “ und „ DHT: “
- Gehen Sie zu Sketch/Programm -> Bibliothek einschließen -> Bibliotheksmanager und installieren Sie die PubSubClient -Bibliothek. Um einfach die richtige Bibliothek zu finden, suchen Sie in der Suchleiste PubSubClient
- Gehen Sie zum Bibliotheks-Repository, um die DHT-Bibliothek . Um die Bibliothek herunterzuladen, klicken Sie auf die grüne Schaltfläche „ Klonen oder herunterladen “ und wählen Sie „ ZIP herunterladen “.
- Klicken Sie nun zurück in der Arduino IDE auf Skizze -> Bibliothek einbinden -> .ZIP-Bibliothek hinzufügen
- Wählen Sie die ZIP-Datei von DHT und klicken Sie dann auf „ Akzeptieren “ oder „ Auswählen “.
Schließen Sie die Arduino IDE und öffnen Sie sie erneut. Der Neustart ist erforderlich; Bitte überspringen Sie diesen Schritt nicht.
Jetzt ist es an der Zeit, mit dem Codieren zu beginnen 🙂
Kopieren Sie den Code unten und fügen Sie ihn in die Arduino IDE ein.
Weisen Sie als Nächstes die Parameter zu: WLAN-Name und Passwort sowie Ihr einzigartiges Ubidots TOKEN. Wenn Sie nicht wissen, wie Sie Ihren Ubidots TOKEN finden, lesen Sie bitte den folgenden Artikel.
/***************************************************** ************************************************ * Das Beispiel sendet fest codierte Daten über einen ESP32 an Ubidots . Der Code sendet einen Abstandswert * zwischen einem Gerät und seinem gegenüberliegenden Endpunkt an Ubidots . Anschließend wird der Wert in * Ubidots verwaltet, um das Volumen eines Tanks anhand der Eigenschaften Ihres Tanks zu berechnen. * * Dieses Beispiel wird WIE ES IST, ohne jegliche Garantie bereitgestellt. * * Hergestellt von María Carlina Hernandez. ************************************************** **********************************************/ /* *************************************** * Bibliotheken einschließen ******** ********************************/ #enthalten<WiFi.h> #enthalten<PubSubClient.h> #enthalten<DHT.h> /**************************************** * Konstanten definieren ****** **********************************/ namespace { const char * WIFISSID = "Assign_your_wifi_SSID_here"; // Geben Sie hier Ihre WifiSSID ein const char * PASSWORD = "Assign_your_wifi_SSID_here"; // Geben Sie hier Ihr WLAN-Passwort ein const char * TOKEN = "Assign_your_ Ubidots _token_here"; // Setzen Sie Ihr Ubidots ' TOKEN const char * MQTT_CLIENT_NAME = "Assign_MQTT_client_here"; // MQTT-Clientname, bitte geben Sie Ihren eigenen 8-12 alphanumerischen ASCII-Zeichenfolge ein; const char * VARIABLE_LABEL_1 = "Entfernung"; // Variablenbeschriftung zuordnen const char * VARIABLE_LABEL_2 = "humidity"; // Variablenlabel zuordnen const char * VARIABLE_LABEL_3 = "temperature"; // Variablenlabel zuordnen const char * DEVICE_LABEL = "esp32"; // Gerätebezeichnung zuweisen const char * MQTT_BROKER = "things. ubidots .com"; const int DHTPIN = 33; // Pin, an dem DHT11 angeschlossen ist const int DHTTYPE = DHT11; // Typ des DHT const int trigPin = 16; // Trigger-Pin des HC-SR04 const int echoPin = 17; // Echo-Pin des HC-SR04 } /* Sensordeklarationen */ lange Dauer; Schwimmdistanz; /* Platz zum Speichern der Anfrage */ char payload[300]; char topic[150]; /* Platz zum Speichern der zu sendenden Werte */ char str_sensor[10]; char str_TempSensor[10]; char str_HumSensor[10]; /**************************************** * Hilfsfunktionen ****** **********************************/ WiFiClient ubidots ; PubSubClient-Client( ubidots ); DHT dht(DHTPIN, DHTTYPE); void callback(char* topic, byte* payload, unsigned int length) { char p[length + 1]; memcpy(p, Nutzlast, Länge); p[Länge] = NULL; String message(p); Serial.write(Nutzlast, Länge); Serial.println(topic); } void reconnect() { // Schleife, bis wir wieder verbunden sind while (!client.connected()) { Serial.println("Versuch einer MQTT-Verbindung..."); // Versuch, eine Verbindung herzustellen if (client.connect(MQTT_CLIENT_NAME, TOKEN, "")) { Serial.println("Connected"); } else { Serial.print("Failed, rc="); Serial.print(client.state()); Serial.println("versuchen Sie es in 2 Sekunden erneut"); // Warten Sie 2 Sekunden, bevor Sie es erneut versuchen. Verzögerung (2000); } } } /**************************************** * Sensorfunktionen *** *************************************/ float readDistance() { digitalWrite(trigPin, HIGH); VerzögerungMikrosekunden(10); digitalWrite(trigPin, LOW); Dauer = (pulseIn(echoPin, HIGH)); distance = float(duration/29/2); Rückweg; } /**************************************** * Hauptfunktionen ***** ***********************************/ void setup() { Serial.begin(115200); WiFi.begin(WIFISSID, PASSWORD); /* Initialisierung des DHT11 */ dht.begin(); /* Weisen Sie die PINS als INPUT/OUTPUT zu */ pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.println(); Serial.print("Warten auf WLAN..."); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); Verzögerung (500); } Serial.println(""); Serial.println("WiFi Connected"); Serial.println("IP-Adresse: "); Serial.println(WiFi.localIP()); client.setServer(MQTT_BROKER, 1883); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } /* Temperatur und Luftfeuchtigkeit ablesen */ float Moisture = dht.readHumidity(); Float-Temperatur = dht.readTemperature(); /* Funktion readDistance() aufrufen */ distance = readDistance(); /* 4 ist die Mindestbreite, 2 ist die Genauigkeit; Float-Wert wird auf str_sensor*/ dtostrf(distance, 4, 2, str_sensor) kopiert; dtostrf(humidity, 4, 2, str_HumSensor); dtostrf(temperature, 4, 2, str_TempSensor); /* Erstellen der Ubidots -Anfrage */ sprintf(topic, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf(payload, „%s“, „“); // Bereinigt die Nutzlast sprintf(payload, "{"%s": %s,", VARIABLE_LABEL_1, str_sensor); // Fügt das Variablenlabel hinzu sprintf(payload, "%s"%s": %s,", payload, VARIABLE_LABEL_2, str_HumSensor); // Fügt das Variablenlabel hinzu sprintf(payload, "%s"%s": %s}", payload, VARIABLE_LABEL_3, str_TempSensor); // Fügt das Variablenlabel hinzu //sprintf(payload, "%s {"value": %s}}", payload, str_sensor); /* Drucken Sie den Sensormesswert auf dem seriellen Monitor */ Serial.println("Veröffentlichen von Werten in Ubidots Cloud"); Serial.print("Distance = "); Serial.println(distanz); Serial.print("Humidity = "); Serial.println(Luftfeuchtigkeit); Serial.print("Temperature = "); Serial.println(temperatur); /* Veröffentlichen Sie die Anfrage auf Ubidots */ client.publish(topic, payload); client.loop(); Verzögerung (1000); }
Sobald Sie Ihren Code eingefügt und das entsprechende WLAN zugewiesen haben, überprüfen Sie dies in der Arduino IDE. Zur Überprüfung sehen Sie in der oberen linken Ecke unserer Arduino-IDE die folgenden Symbole. Wählen Sie das Häkchen-Symbol, um einen beliebigen Code zu bestätigen.
Nach der Überprüfung erhalten Sie in der Arduino IDE die Meldung Kompilierung abgeschlossen
Laden Sie als Nächstes den Code in Ihren ESP32 hoch. Wählen Sie zum Hochladen das Symbol mit dem Pfeil nach rechts neben dem Häkchensymbol.
Nach dem Hochladen erhalten Sie in der Arduino IDE die Meldung Hochladen abgeschlossen
Damit sendet der Sensor nun die Daten an den Ubidots Could!
Verwaltung der Daten in Ubidots
Wenn Ihr Gerät korrekt angeschlossen ist, wird in Ihrem Gerätebereich in Ihrer Ubidots -Anwendung ein neues Gerät erstellt. Der Name des Geräts lautet „ esp32 “. Außerdem werden im Gerät die Variablen Entfernung, Luftfeuchtigkeit und Temperatur angezeigt:
Wenn Sie Ihre Geräte- und Variablennamen in einen benutzerfreundlicheren Namen ändern möchten, lesen Sie bitte diesen Artikel:
Als nächstes müssen wir zur Berechnung des Volumens der frei fließenden Substanzen im Tank eine abgeleitete Variable erstellen, um einen Volumenwert zu berechnen.
der abgeleiteten Variablen können wir Operationen mit den Standardvariablen erstellen. In diesem Fall wenden wir also die Volumenformel mit der Charakteristik eines zylindrischen Tanks an, wobei:
- Pi = Das Verhältnis des Umfangs eines Kreises zu seinem Durchmesser (konstant)
- r = Der Radius des Tanks
- h = Die Höhe des Tanks
Klicken Sie auf „ Variable hinzufügen “ und wählen Sie „ Synthetisch “:
Wie Sie im neuen Fenster sehen können, müssen Sie die Formel in das folgende Feld einfügen:
Nachdem Sie die Formel mit den Eigenschaften Ihres Tanks verknüpft haben, wählen Sie die Variable „ Abstand“ aus. „
Sobald Sie Ihre Formel eingegeben haben, wird Ihr Volumen in Ihrer Ubidots -Anwendung eingelesen.
Ergebnisse
Jetzt ist Ihr Sensor betriebsbereit! Unten sehen Sie die Funktion des Füllstandsensors bei verschiedenen Lautstärken:
Um mehr über Ubidots Widgets und -Ereignisse zu erfahren, schauen Sie sich diese Video-Tutorials .
Viel Spaß beim Hacken 🙂