Arduino – Zisternen-Überwachung mit VL53L0X

Wie schon in meinem Beitrag zur Zisternen-Überwachung mit einem Ultraschallsensor, habe ich auch die Variante mit einem VL53L0X-Laufzeitsensor getestet.

Die VL53L0X-Sensoren gibt es für etwas mehr als 10€. Diesen hier habe ich von DIYnik:

Der Vorteil des Sensors liegt darin, dass kein Schall, sondern Infrarotlicht verwendet wird. Dadurch können Messungen in einem viel kürzeren Zeitintervall durchgeführt werden.

Zudem ist auch der Sensor um einiges kleiner. Dadurch wird weniger Platz benötigt und Wasser kann schlechter eindringen.

Im Vergleich zur Ultraschall-Variante ist der Aufbau fast identisch. Der Unterschied besteht nur darin, dass der Sensor, sowie das Display über den I²C-Bus angesteuert wird.

Bei einem Arduino Uno R3 hat man die zusätzlichen SCL und SDA Pins. Diese sind parallel mit den analogen Pins A4 und A5 verschaltet. Dadurch entfallen eventuelle Lötarbeiten.

In meinem Testaufbau hat soweit alles super funktioniert. Der Sensor ist hier schon in seinem Gehäuse untergebracht.

Zur Programmierung habe ich mich für die Libary von pololu entschieden. Nachstehend der Code mit den entsprechenden Anpassungen zum ansteuern des Sensors:

...
void setup() {
 // ToF
 Wire.begin();
 sensor.init();
 sensor.setTimeout(500);
 sensor.setMeasurementTimingBudget(200000); // 200ms delay pro Messung
 ...
}

void loop() {
 ... 
 // Reset VARs
 mm_gesamt = 0;
 erf_messungen = 0;

 // Messung
 while (erf_messungen < durchgaenge) {
  if (!sensor.timeoutOccurred()) {
  mm_gesamt = mm_gesamt + sensor.readRangeSingleMillimeters();
  erf_messungen++;
  }
 }

 // Berechne cm
 cm = ((mm_gesamt / durchgaenge) / 10)
...

Für das passende Sensor-Gehäuse musste wieder der 3D-Drucker ran:

Um den Sensor in der Zisterne anzubringen musste nur umgelötet sowie die entsprechenden Pins am Arduino umgesteckt werden.

Da der Sensor über den I²C-Bus kommuniziert, ist auf die Kabellänge zu achten. Diese sollte erfahrungsgemäß 10 Meter nicht überschreiten, da es sonst zu Kommunikationsproblemen kommen kann.

In meinem Aufbau beträgt die Kabellänge ca. 7 Meter.

Zudem bietet die Libary noch die Möglichkeit, Feintuning vorzunehmen. Vor allem die Funktionen setSignalRateLimit, setVcselPulsePeriod und VcselPeriodPreRange können sehr hilfreich sein, wenn es darum geht, falsche Reflektionen zu ignorieren. Diese sind nochmal detailliert in der ReadMe auf GitHub beschrieben.

Über ein Feedback würde ich mich freuen - viel Spaß beim Nachbauen.

Posted in Arduino and tagged , , , .