Go Down

Topic: Wasserstandsanzeige mit SMS Benachrichtigung (Read 782 times) previous topic - next topic

Clud

Hallo zusammen

Ich möchte euch ein Projekt vorstellen, welches ich plane zu verbauen.

Ich darf vermutlich für unsere Gemeinde eine neue Wasserstandsanzeige installieren, da die alte Anlage den Dienst nicht mehr ausführt… und auch nie richtig ausgeführt hat. Und als ambitionierter Handwerker (ursprünglich gelernter Elektromonteur) bin ich der Meinung, dass ein Arduino auf günstige Art und Weise absolut geeignet ist dafür.
Im Detail handelt es sich um einen unterirdischen Wassertank einer Waldhütte mit zirka 2000l Kapazität, aus welchem der Füllstand mittels entsprechender Anlage auszulesen ist. Realisieren möchte ich die Anlage so, dass sich 4 Schwimmerschalter im Wassertank befinden und den Wert (1/0) jeweils dem Arduino mitteilen. Die Leitungslänge wird bei geschätzt 10m liegen, aber das sollte Widerstandstechnisch theoretisch kein Problem darstellen. Der Arduino zeigt den Füllstand anschliessend per LED (in meinem Fall die Grove Led Bar) an. Weiter wird bei einer Niveauveränderung eine SMS an mich versendet, damit ich weiss, wann der Wassertank wieder aufzufüllen ist.

Soweit die Theorie.
Ich habe den Anfängercrashkurs mit dem Arduino soweit bestanden und habe bereits ein paar einfache Programme selbst geschrieben, die auch gut funktioniert haben. Den Code für die Füllstandsanlage habe ich nun beinahe fertig geschrieben, nur die SMS Funktion möchte ich jetzt „einpflanzen". Ihr werdet im Code bemerken, dass ich viel mit delay's gearbeitet habe. Meine Idee dahinter ist, dass der Schwimmerschalter damit „entprellt" wird und ich nicht 10 SMS für eine einzige Niveauveränderung erhalte, falls der Schwimmer wackelt. Womöglich lässt sich das Problem auch mit der millis() Funktion beheben, aber das ist für meine Stufe noch ein wenig zu hoch. Ausserdem läuft das Programm mit den delay's zufriedenstellend für mich, sodass ich es vermutlich in dieser Hinsicht nicht verändern werde.

Ich habe mir nun ein Arduino GSM Shield 2 besorgt, damit ich die SMS Funktion realisieren kann. Die ersten Tests haben auch gut funktioniert damit (Danke nochmals für die Hilfe im Forum). Nun stellt sich ein weiteres, mir unverständliches Problem in den Weg:
Wenn sich gemäss dem angehängten Code das Niveau unter „Voll" senkt, bekomme ich eine SMS mit der Mitteilung „Wasserstand von Voll gesunken" und im Serial Monitor ebenfalls die Benachrichtigung. Wenn sich das Niveau nun aber wieder auf „Voll" erhebt, bekomme ich keine entsprechende SMS. Und das ist das Problem, welches ich nicht verstehe. Ich habe im Code diverse „ok" per Serial Monitor eingeschrieben, damit ich sehe, wo das Programm hängen bleibt. Tatsächlich bleibt der Code bei „sms.endSMS();"  bei der Mitteilung „Wasserstand komplett gefuellt" hängen. Gemäss den „ok" sehe ich das im Serial Monitor. An was könnte das liegen?

Sorry für den Aufsatz, aber ich möchte euch ein gutes Bild von meinem Projekt geben.

Code: [Select]

#include <Grove_LED_Bar.h>
#include <GSM.h>

Grove_LED_Bar bar(8, 9, 0);  // Clock pin, Data pin, Orientation
GSM gsmAccess;
GSM_SMS sms;

const int SchwimmerEinviertel = 4;
const int SchwimmerHalbvoll = 5;
const int SchwimmerDreiviertel = 6;
const int SchwimmerVoll = 7;
const int LedStoerung = 10;
int Umschalter1 = 0;
int Umschalter2 = 0;
int Umschalter3 = 0;
int Umschalter4 = 0;
int SchwimmerzustandEinviertel;
int SchwimmerzustandHalbvoll;
int SchwimmerzustandDreiviertel;
int SchwimmerzustandVoll;
char NatelNummer[20] = "0781234567";

void setup(){
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
pinMode(10,OUTPUT);

bar.begin();

Serial.begin(9600);
while (!Serial) {}
Serial.println("Wassenstandsanlage wurde neu gestartet aufgrund Wartung oder Stromausfall");
boolean notConnected = true;
while (notConnected) {
  if (gsmAccess.begin() == GSM_READY) {
      notConnected = false;}
      else {Serial.println("Not connected");
      delay(1000);}}
Serial.println("GSM Bereit");
sms.beginSMS(NatelClaudio);
sms.print("ok");
sms.endSMS();
}

void loop(){
SchwimmerzustandEinviertel = digitalRead(SchwimmerEinviertel);
SchwimmerzustandHalbvoll = digitalRead(SchwimmerHalbvoll);
SchwimmerzustandDreiviertel = digitalRead(SchwimmerDreiviertel);
SchwimmerzustandVoll = digitalRead(SchwimmerVoll);

char NatelNummer[20] = "0781234567";

//Nachfolgend der oberste Schwimmer:
if (SchwimmerzustandVoll == HIGH){
    bar.setLevel(10);}
    else {bar.setLevel(0);}
if (SchwimmerzustandVoll == LOW && Umschalter4 == 0) {
    Umschalter4 = 1;
    delay(5000);
    Serial.println("Von Voll gesunken");
    char VonVollgesunken[200] = "Wasserstand von Voll gesunken";
    Serial.println("ok");
    sms.beginSMS(NatelNummer);
    Serial.println("ok");
    sms.print(VonVollgesunken);
    Serial.println("ok");
    sms.endSMS();
    Serial.println("ok");}
   
  else if (SchwimmerzustandVoll == HIGH && Umschalter4 == 1) {
    Umschalter4 = 0;
    delay(5000);
    Serial.println("Komplett gefüllt");
    char Komplettgefuellt[200] = "Wasserstand gefuellt";
    Serial.println("ok");
    sms.beginSMS(NatelNummer);
    Serial.println("ok");
    sms.print(Komplettgefuellt);
    Serial.println("ok");
    sms.endSMS();
    Serial.println("ok");}
   
//Nachfolgend der zweitoberste Schwimmer:
  if (SchwimmerzustandDreiviertel == HIGH){
    bar.setLevel(7);}
    else {bar.setLevel(0);}
if (SchwimmerzustandDreiviertel == LOW && Umschalter3 == 0) {
    Umschalter3 = 1;
    delay(5000);
    Serial.println("Gesunken unter drei Viertel");}
  else if (SchwimmerzustandDreiviertel == HIGH && Umschalter3 == 1) {
    Umschalter3 = 0;
  delay(5000);
    Serial.println("Gefüllt auf drei Viertel");}

//Nachfolgend der zweitunterste Schwimmer:
  if (SchwimmerzustandHalbvoll == HIGH){
    bar.setLevel(5);}
    else {bar.setLevel(0);}
if (SchwimmerzustandHalbvoll == LOW && Umschalter2 == 0) {
    Umschalter2 = 1;
    delay(5000);
    Serial.println("Gesunken unter Halbvoll");}
  else if (SchwimmerzustandHalbvoll == HIGH && Umschalter2 == 1) {
    Umschalter2 = 0;
  delay(5000);
    Serial.println("Gefüllt auf Halbvoll");}
 
//Nachfolgend der unterste Schwimmer:
if (SchwimmerzustandEinviertel == HIGH){
    bar.setLevel(3);}
    else {bar.setLevel(1);
    delay(300);
    bar.setLevel(0);
    delay(300);}
if (SchwimmerzustandEinviertel == LOW && Umschalter1 == 0) {
    Umschalter1 = 1;
    delay(5000);
    Serial.println("Gesunken unter ein Viertel. Tank auffüllen!");}
  else if (SchwimmerzustandEinviertel == HIGH && Umschalter1 == 1) {
    Umschalter1 = 0;
  delay(5000);
    Serial.println("Gefüllt auf ein Viertel");}
 
//Nachfolgend die Störungskriterien:
  if (SchwimmerzustandEinviertel == 0 && SchwimmerzustandHalbvoll == 1) {
    digitalWrite(LedStoerung,HIGH);}
  else if (SchwimmerzustandHalbvoll == 0 && SchwimmerzustandDreiviertel == 1) {
    digitalWrite(LedStoerung,HIGH);}
  else if (SchwimmerzustandVoll == 1 && SchwimmerzustandDreiviertel == 0) {
    digitalWrite(LedStoerung,HIGH);}
    else {digitalWrite(LedStoerung,LOW);}
}


Serial Monitor Auszug:

Wassenstandsanlage wurde neu gestartet aufgrund Wartung oder Stromausfall
GSM Bereit
Von Voll gesunken
ok
ok
ok
ok
Komplett gefüllt
ok
ok
ok (Hier bliebt es bei sms.endSMS() hängen)


Arduino: Uno
GSM Shield 2: https://www.distrelec.ch/de/arduino-gsm-shield-a000106-arduino-a000106/p/30078155
Grove Led Bar: http://wiki.seeed.cc/Grove-LED_Bar/

HotSystems

Deine IF-Abfragen sind leider sehr unübersichtlich und damit für mich nicht zu entschlüsseln.

Auch stören die langen delays in deinem Sketch, die solltest du komplett ersetzen.
Das geht über die Funktion "millis()", mit der du den Sketch aufbauen solltest.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Clud

Ja die delays sind nicht gut, aber sie werden vermutlich für das Problem nicht vernatwortlich sein. Ich bin im Begriff es zu ändern... Im Prinzip kann man den Sketch bis und mit dem ersten Schwimmer beachten, damit es nicht ganz so schlimm aussieht. Der Rest sind gleichgelagerte Schwimmerabfragen und Störungskriterien.

Clud

Oder ich zeige das Problem mal in einem einfachen Sketch...

Code: [Select]

#include <GSM.h>

GSM gsmAccess;
GSM_SMS sms;

const int schliesser = 7;

int Umschalter = 0;

char Natel[20] = "078xxxxxxx";

void setup(){
pinMode(7,INPUT);

Serial.begin(9600);
while (!Serial) {}
boolean notConnected = true;
while (notConnected) {
  if (gsmAccess.begin() == GSM_READY) {
      notConnected = false;}
      else {Serial.println("Not connected");
      delay(1000);}}

}

void loop(){

char Natel[20] = "078xxxxxxx";

if (digitalRead(7) == LOW && Umschalter == 0){
  sms.beginSMS(Natel);
  sms.print("low");
  sms.endSMS();
  Umschalter = 1;
}
 
if (digitalRead(7) == HIGH && Umschalter == 1){
  sms.beginSMS(Natel);
  sms.print("high");
  sms.endSMS();
}


Wenn ich den Schalter auf Pin 7 ausgeschaltet lasse, bekomme eine SMS mit dem Text "low". Schalte ich den Pin 7 ein, bekomme ich nichts. Eigentlich sollte ich doch dann eine SMS mit dem Text "high" erhalten. Genau das Problem habe ich beim anderen Sketch auch.

Tommy56

Wie hast Du denn den Schalter angeschlossen?

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Clud

Ich habe das Problem herausgefunden  :smiley-roll-sweat:

Ich habe in beiden Sketchen zu Testzwecken jeweils den Pin 7 verwendet. Zufälligerweise. Und zufälligerweise schaltet man mit dem Pin 7 das Modem ein und aus... Somit habe ich nach der ersten SMS das Modem ausgeschaltet. Da ich der englischen Sprache nicht sehr mächtig bin, habe ich es erst jetzt erfahren.

Nun funktionieren beide Sketche.

Die Sache mit den delays bringe ich allerdings noch nicht zurecht. Ich bin mir nicht sicher, ob das meine ursprüngliche Idee mit der... ich sag jetzt mal barbarischen Entprellung entgegenkommt  :smiley-slim:

SkobyMobil

Hallo,
wenn Du es "sicher" haben möchtest, dann solltest Du die delay() unbedingt
aus dem Sketch entfernen…

Wenn während eines delay etwas im Tank passiert, dann bekommst Du es nicht mit.

Du hast 4 Schwimmerschalter im Tank- d.h. 16 mögliche Zustände, davon läßt
Du Dir aber nur einen mitteileilen.

Ich würde mindestens den Status aller 4 Schalter immer senden.

Der Tank wird gefüllt, Schalter 4 signalisiert voll.
SMS voll wird gesendet
Schalter 4 ohne sinnvolle Funktion
Pegel passiert Schalter 3
SMS Schalter 3 passiert

und?!

Du bekommst nicht mit, das Schalter 4 wohl einen Defekt hat.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Clud

Ich habe im Sketch Probehalber nur der oberste Schwimmer simsen lassen. Selbstverständlich werde ich bei allen 4 Schwimmern jeweils das HIGH und LOW per SMS melden lassen. Heisst soviel wie:

- Tank ist komplett gefüllt
- Niveau sinkt und der oberste Schwimmer "fällt" => SMS: Niveau unter Voll gesunken.
- Niveau sinkt weiter und der zweitoberste Schwimmer fällt => SMS: Niveau unter Dreiviertel gesunken.
- Niveau sinkt weiter und der zweitunterste Schwimmer fällt => SMS: Niveau unter Halbvoll gesunken.
- Niveau sinkt weiter und der unterste Schwimmer fällt => SMS: Niveau unter einem Viertel. Warnung!

Spätestens dann komme ich und fülle das Wasser wieder auf:

- Niveau steigt und der unterste Schwimmer "steht" => SMS: Niveau auf ein Viertel gefüllt.
- Niveau steigt und der zweitunterste Schwimmer steht => SMS: Niveau auf Halbvoll gefüllt.
- Niveau steigt und der zweitoberste Schwimmer steht => SMS: Niveau auf Dreiviertel gefüllt.
- Niveau steigt und der oberste Schwimmer steht => SMS: Wassertank komplett gefüllt.

Und genau so funktioniert meine Schaltung bislang auch. Zumindest halb-praktisch auf meinem Steckboard und dem GSM Shield. Aufgrund den delay's herrscht eine Verzögerung von 5sek. Ich werde das versuchen auszubauen, aber grundsätzlich ist es so gut wie unmöglich, dass in diesen 5sek das Niveau bis zum nächsten Schwimmer sinkt oder steigt.

Zusätzlich habe ich ganz unten ein paar Störungskriterien eingebaut, welche eine LED einschalten lassen. Es kann ja zb. nicht sein, dass der unterste Schwimmer "hängt", also kein Wasser hat, während ein Schwimmer oberhalb "schwimmt" und Wasser meldet. Somit ist ein Defekt eines Schwimmers möglich und wird mittels Störungs-LED angezeigt.

Vielleicht wäre eine Status Variable sinnvoll, welchen ich ebenfalls per SMS abfragen kann... Aber als Anfänger bin ich schon mal zufrieden  :smiley-sweat: Jedenfalls lässt sich darauf aufbauen.

Hier noch der aktualisierte Code:
Code: [Select]

#include <Grove_LED_Bar.h>
#include <GSM.h>

Grove_LED_Bar bar(8, 9, 0);  // Clock pin, Data pin, Orientation
GSM gsmAccess;
GSM_SMS sms;

const int SchwimmerEinviertel = 4;
const int SchwimmerHalbvoll = 5;
const int SchwimmerDreiviertel = 6;
const int SchwimmerVoll = 11;
const int LedStoerung = 10;
int Umschalter1 = 0;
int Umschalter2 = 0;
int Umschalter3 = 0;
int Umschalter4 = 0;
char Natel[20] = "078xxxxxxx";

void setup(){
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(11,INPUT);
pinMode(10,OUTPUT);

bar.begin();

Serial.begin(9600);
while (!Serial) {}
Serial.println("Wassenstandsanlage wurde neu gestartet aufgrund Wartung oder Stromausfall");
boolean notConnected = true;
while (notConnected) {
  if (gsmAccess.begin() == GSM_READY) {
      notConnected = false;}
      else {Serial.println("Not connected");
      delay(1000);}}
Serial.println("GSM Bereit");
//sms.beginSMS(Natel);
//sms.print("ok");
//sms.endSMS();
}

void loop(){
int SchwimmerzustandEinviertel;
int SchwimmerzustandHalbvoll;
int SchwimmerzustandDreiviertel;
int SchwimmerzustandVoll;
SchwimmerzustandEinviertel = digitalRead(SchwimmerEinviertel);
SchwimmerzustandHalbvoll = digitalRead(SchwimmerHalbvoll);
SchwimmerzustandDreiviertel = digitalRead(SchwimmerDreiviertel);
SchwimmerzustandVoll = digitalRead(SchwimmerVoll);

char Natel[20] = "078xxxxxxx";

//Nachfolgend der oberste Schwimmer:
if (SchwimmerzustandVoll == HIGH){
    bar.setLevel(10);}
    else {bar.setLevel(0);}
if (SchwimmerzustandVoll == LOW && Umschalter4 == 0) {
    Umschalter4 = 1;
    delay(3000);
    Serial.println("Von Voll gesunken");
    sms.beginSMS(Natel);
    sms.print("Wasserstand von Voll gesunken");
    sms.endSMS();}
if (SchwimmerzustandVoll == HIGH && Umschalter4 == 1) {
    Umschalter4 = 0;
    delay(3000);
    Serial.println("Komplett gefüllt");
    sms.beginSMS(Natel);
    sms.print("Wassertank komplett gefuellt");
    sms.endSMS();}
   
//Nachfolgend der zweitoberste Schwimmer:
  if (SchwimmerzustandDreiviertel == HIGH){
    bar.setLevel(7);}
    else {bar.setLevel(0);}
if (SchwimmerzustandDreiviertel == LOW && Umschalter3 == 0) {
    Umschalter3 = 1;
    delay(1000);
    Serial.println("Gesunken unter drei Viertel");
    sms.beginSMS(Natel);
    sms.print("Wasserstand gesunken unter drei Viertel");
    sms.endSMS();}
  else if (SchwimmerzustandDreiviertel == HIGH && Umschalter3 == 1) {
    Umschalter3 = 0;
    delay(1000);
    Serial.println("Gefüllt auf drei Viertel");
    sms.beginSMS(Natel);
    sms.print("Wassertank gefuellt auf drei Viertel");
    sms.endSMS();}

//Nachfolgend der zweitunterste Schwimmer:
  if (SchwimmerzustandHalbvoll == HIGH){
    bar.setLevel(5);}
    else {bar.setLevel(0);}
if (SchwimmerzustandHalbvoll == LOW && Umschalter2 == 0) {
    Umschalter2 = 1;
    delay(1000);
    Serial.println("Gesunken unter Halbvoll");
    sms.beginSMS(Natel);
    sms.print("Wasserstand gesunken unter Halbvoll");
    sms.endSMS();}
  else if (SchwimmerzustandHalbvoll == HIGH && Umschalter2 == 1) {
    Umschalter2 = 0;
    delay(1000);
    Serial.println("Gefuellt auf Halbvoll");
    sms.beginSMS(Natel);
    sms.print("Wassertank gefüllt auf Halbvoll");
    sms.endSMS();}
 
//Nachfolgend der unterste Schwimmer:
if (SchwimmerzustandEinviertel == HIGH){
    bar.setLevel(3);}
    else {bar.setLevel(1);
    delay(300);
    bar.setLevel(0);
    delay(300);}
if (SchwimmerzustandEinviertel == LOW && Umschalter1 == 0) {
    Umschalter1 = 1;
    delay(1000);
    Serial.println("Gesunken unter ein Viertel. Tank auffüllen!");
    sms.beginSMS(Natel);
    sms.print("Wasserstand gesunken unter ein Viertel. Tank auffuellen!");
    sms.endSMS();}
  else if (SchwimmerzustandEinviertel == HIGH && Umschalter1 == 1) {
    Umschalter1 = 0;
    delay(1000);
    Serial.println("Gefüllt auf ein Viertel");
    sms.beginSMS(Natel);
    sms.print("Wassertank gefuellt auf ein Viertel");
    sms.endSMS();}
 
//Nachfolgend die Störungskriterien:
  if (SchwimmerzustandEinviertel == 0 && SchwimmerzustandHalbvoll == 1) {
    digitalWrite(LedStoerung,HIGH);}
  else if (SchwimmerzustandHalbvoll == 0 && SchwimmerzustandDreiviertel == 1) {
    digitalWrite(LedStoerung,HIGH);}
  else if (SchwimmerzustandVoll == 1 && SchwimmerzustandDreiviertel == 0) {
    digitalWrite(LedStoerung,HIGH);}
    else {digitalWrite(LedStoerung,LOW);}
}

postmaster-ino

Hi

Bekommst Du damit nicht 'regelmäßig' eine SMS?
Du sendest ja pro loop-Durchlauf eine SMS nach Sensor-Lage und wirst nur nicht mit SMSen totgeworfen, weil der Sketch 90% der Zeit schläft.
Beim Umrüsten auf millis() wird die loop tausend Mal die Sekunde diese Prüfungen ausführen - da sollte man sich 'merken', wann die letzte SMS und WELCHE dort gesendet wurde.
Ich brauche ja nicht alle drei Minuten (nur als Zahl) wissen, daß der Wasserstand auf VOLL ist.
Das reicht mir 1x am Tag, Änderungen hätte ich dagegen schon ganz gerne direkt.

MfG

HotSystems

Hat es einen bestimmten Grund, warum du es mit Schwimmern machst und nicht mit einem US-Sensor ?
Der Aufwand ist wesentlich geringer und auch ein Sketch ist nicht so kompliziert.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Clud

Bekommst Du damit nicht 'regelmäßig' eine SMS?
Nein, ich bekomme pro Veränderung nur eine Nachricht. Denn sobald die jeweilige if Bedingung erfüllt ist, wird mit dem "Umschalter" die Bedingung verändert, dass diese nach einer Ausführung nicht mehr zutrifft. Somit erhalte ich nur eine SMS.

Hat es einen bestimmten Grund, warum du es mit Schwimmern machst und nicht mit einem US-Sensor ?
Der Aufwand ist wesentlich geringer und auch ein Sketch ist nicht so kompliziert.
Ultraschall... ich habe es mir schon überlegt, allerdings kenne ich mir überhaupt nicht damit aus und die Sensoren, welche ich bislang im Internet gefunden habe und einen wetterfesten Eindruck machen, sind in einer Preisklasse um die 300.- Euro/CHF. Die 4 Schwimmer würden mich höchstens ein Drittel davon kosten. Vielleicht müsste ich noch ein wenig recherchieren.

Und noch die Sache mit den millis(). Ist es damit möglich einen Timer für eine Bedingung zu konstruieren, der nach dessen Ablauf die Bedingung nochmals prüft bevor sie ausgeführt wird? Eventuell mit einer while Schleife? Wenn der Wasserpegel schwankt und der Schwimmer oder der Ultraschall zwischen zwei Werten hin und her "wackelt", möchte ich nicht 4 SMS für dasselbe erhalten. Ich möchte quasi eine Art Entprellung mit zirka 5sek bewirken.

HotSystems

#11
Jan 12, 2018, 01:35 pm Last Edit: Jan 12, 2018, 01:37 pm by HotSystems
Ultraschall... ich habe es mir schon überlegt, allerdings kenne ich mir überhaupt nicht damit aus und die Sensoren, welche ich bislang im Internet gefunden habe und einen wetterfesten Eindruck machen, sind in einer Preisklasse um die 300.- Euro/CHF. Die 4 Schwimmer würden mich höchstens ein Drittel davon kosten. Vielleicht müsste ich noch ein wenig recherchieren.
Naja, der muss ja nicht vergoldet sein.

Hier findest du einen Sensor, den ich auch in meinem Wassertank verwende.
Und Ultraschall ist nicht so schwer zu handhaben, wie es sich anhört.

Eine Messung erfolgt bei mir alle 30 sek. und die Werte werden dann nur bei Änderung per Funk (nicht SMS) übertragen.
 
Zum vergleichen von Werten deiner Messung brauchst du keinen Timer oder millis.
Auf eine While-Schleife kannst du da auch verzichten.
Ich bin sicher, dass sich dein Sketch mit einem US-Sensor deutlich einfacher aufbauen lässt.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Clud

Wow, danke für den Tipp. Der Preis ist natürlich unschlagbar. Ich werde wohl einen solchen bestellen und mich daran versuchen. Im Forum gibt es ja bereits entsprechende Beiträge. Ich hatte vor allem Bedenken über die Messtiefe, aber gemäss Datenblatt soll eine Messung auf bis zu 4,5 Meter Tiefe damit möglich sein. Damit kann ich sicherlich den Code vereinfachen...

HotSystems

Damit kann ich sicherlich den Code vereinfachen...
Ganz sicher....und du bekommst hier deine gewünschte Hilfe.

Ich verwende den Sensor seit ca. 2 Jahren und der arbeitet problemlos.
Wichtig ist nur, es dürfen keine störenden Teile im Weg sein, die den Schall reflektieren können, dann gibt es Fehlmessungen.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Clud

Ich verwende den Sensor seit ca. 2 Jahren und der arbeitet problemlos.
Wichtig ist nur, es dürfen keine störenden Teile im Weg sein, die den Schall reflektieren können, dann gibt es Fehlmessungen.
Das klingt super. Ich habe ihn gleich bestellt. Falls das Teil seinen Geist aufgibt, ist eine Neuanschaffung keine nennenswerte Investiton. Eventuell müsste ich den Sensor mittig über der Öffnung anbringen. Wenn ich ihn an den "Hals" des Tanks montiere, wird er mir vermutlich die Wand mit messen.

Danke nochmals!

Go Up