Ja gut die Schwimmer könnte man auch an einer Stange oder einem Rohr befestigen (womit man dann gleich noch eine Kabeführung hätte) das man in den Behälter einführt, das alleine wäre für mich jetzt kein Grund das so zu machen. Davon mal abgesehen das das es bei einem kleineren Behälter dann noch den nachteil der Luftfeuchtigkeit. Bei einem abgedecktem Behälter das wenn die Luftfeuchtigkeit zu hoch ist sich Kondenswasser bildet das dann die Messergebnisse verfälscht . Und das der Fließende Strom die Messergebnisse der anderen Sonden die da evtl noch im Wasser sind eben auch verfälschen könnte. Oder liege ich da jetzt falsch? ist jetzt nur so ein Gedankengang von mir.
Zu dem US Sketch. Das merkwürdige ist mit dem Standard Sensor (also der mit den 2 runden Öffnungen ,ich komm jetzt nicht auf die genaue Bezeichnung) funktioniert er wunderbar .
Deshalb bin ich davon ausgegangen das es am Sensor liegt.
Hier mal der Sketch
#include <RCSwitch.h>
#include <Wire.h>
RCSwitch mySwitch = RCSwitch(); // Transmitter is connected to Arduino Pin 9
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define ONE_WIRE_BUS 10 /* Digitalport Pin 10 definieren */
#include <NewPing.h>
#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 11 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
OneWire ourWire(ONE_WIRE_BUS); /* Ini oneWire instance */
DallasTemperature sensors(&ourWire);/* Dallas Temperature Library für Nutzung der oneWire Library vorbereiten */
void setup() {
Serial.begin(9600);
lcd.begin(16,2);
delay(1000);
mySwitch.enableTransmit(9);
sensors.begin();/* Inizialisieren der Dallas Temperature library */
{
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight(); // finish with backlight on
//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0
lcd.setCursor(0,0);
lcd.print("Reset");
delay(1000);
// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
lcd.clear();
lcd.setCursor(7,0); //Start at character 0 on line 0
lcd.print("Use Serial Mon");
lcd.setCursor(0,1);
lcd.print("Type to display");
}
void loop()
{ delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
Serial.print("Ping: ");
Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance in cm and print result (0 = outside set distance range)
lcd.clear();
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print( sensors.getTempCByIndex(0));
lcd.setCursor(5,0);
lcd.print("C ");
lcd.setCursor(0,1);
lcd.print(uS / US_ROUNDTRIP_CM);
lcd.setCursor(4,1);
lcd.print("Wasserstand");
delay(500);
}
if (uS / US_ROUNDTRIP_CM > 25 )
{
mySwitch.send(267537, 24); //Ein wasser
Serial.print ("Wasser ein");
delay( 250);
}
if (uS / US_ROUNDTRIP_CM < 10 )
{
mySwitch.send(267540, 24); //Aus wasser
Serial.print("Wasser Stop");
delay (250);
}
Serial.print(sensors.getTempCByIndex(0) );
Serial.print(" C ");
Serial.println();
Serial.print (uS / US_ROUNDTRIP_CM);
Serial.println ("cm");
delay (1000) ;
sensors.requestTemperatures(); // Temp abfragen
if ( sensors.getTempCByIndex(0) < 18 )
{
mySwitch.send(4195665, 24); //Heizung Ein
mySwitch.send(4199767, 24); //Heizung Ein
}
else if ( sensors.getTempCByIndex(0) > 18 )
{ mySwitch.send(4195668, 24); //Heizung AUS
}
byte i;
byte present = 0;
byte data[12];
byte addr[8];
while(ourWire.search(addr)) {
Serial.print("\n\r\n\r1-Wire-Device gefunden mit Adresse:\n\r");
for( i = 0; i < 8; i++) {
Serial.print("0x");
if (addr[i] < 16) {
Serial.print('0');
}
Serial.print(addr[i], HEX);
if (i < 7) {
Serial.print(", ");
}
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.print("CRC is not valid!\n\r");
return;
}
}
Serial.println();
ourWire.reset_search();
return;
delay (1000);
}
Ich Persönlich finde die Lösung mit den Schwimmern allerdings mittlerweile etwas besser, auch wen ndie an der Wasserstands und Temperatursteuerung schon wieder nicht ganz so wollen wie ich ,aber das bekomme ich schon raus was da der Fehler ist