Arduino UNO Q - Wassersensor

Ein Wassersensor kann Wasserlecks, Niederschlag und Tanküberlauf erkennen. Auf Arduino UNO Q wird das analoge Signal des Sensors vom 12-Bit-MCU-ADC gelesen (Bereich 0–4095). Mit Bridge und Telegram erhalten Sie sofortige Benachrichtigungen auf Ihrem Telefon, sobald Wasser erkannt wird.

In diesem Lernprogramm werden Sie lernen:

Arduino UNO Q Wassersensor

Hardware erforderlich

1×Arduino UNO Q
1×USB-Kabel für Arduino Uno Q
1×Wasserstands-Sensor
1×Jumper-Kabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Sensors/Servo Expansion Shield for Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über den Wassersensor

Pinbelegung

Der Wassersensor hat drei Pins:

  • S (Signal): Analoger Ausgang — mit einem analogen Eingangspin auf dem MCU verbinden
  • + (VCC): Stromversorgung — mit 3,3V oder 5V verbinden. In diesem Lernprogramm mit einem digitalen Pin für Stromsteuerung verbunden
  • - (GND): Masse
Wassersensor Pinbelegung

※ Notiz:

Es wird empfohlen, VCC mit einem digitalen Ausgangspin statt mit dem immer eingeschalteten 5V zu verbinden. Schalten Sie den Sensor nur beim Auslesen ein, um Korrosion der Kupferkontakte in feuchten Umgebungen zu verringern.

Funktionsweise

Der Sensor hat 10 Kupferspuren — abwechselnde Strom- und Signalleitungen. Wenn trocken, sind sie isoliert. Wenn ins Wasser getaucht, überbrückt das Wasser die Lücken und ändert den Widerstand.

  • Mehr Wasser → niedrigerer Widerstand → höhere Ausgangsspannung → höherer ADC-Wert
  • Weniger Wasser → höherer Widerstand → niedrigere Ausgangsspannung → niedrigerer ADC-Wert

Der Arduino UNO Q MCU verwendet einen 12-Bit-ADC mit 3,3V-Referenz, daher reichen die Messwerte von 0 bis 4095 (nicht 0–1023 wie beim klassischen Arduino Uno). Kalibrieren Sie den Schwellwert für Ihren spezifischen Sensor und Wassertyp.

※ Notiz:

Nur die freiliegenden Kupferspuren sollten mit Wasser in Kontakt kommen. Tauchen Sie die gesamte Sensorplatine oder Komponenten niemals ein. Installieren Sie mit den Sensorkontakten nach unten in die Flüssigkeit.

Verdrahtungsdiagramm

Arduino UNO Q Wassersensor Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Wassersensor-Pin Arduino UNO Q MCU
* (GND) GND
+ (VCC) D5 (gesteuerte Stromversorgung)
S (Signal) A0

Programmiertipps für Wassersensor

  • Pins einrichten:
pinMode(POWER_PIN, OUTPUT); digitalWrite(POWER_PIN, LOW); // off by default
  • Sensorwert auslesen:
digitalWrite(POWER_PIN, HIGH); // power on delay(10); // stabilize int value = analogRead(SIGNAL_PIN); // 0-4095 (12-bit ADC) digitalWrite(POWER_PIN, LOW); // power off
  • Wasser erkennen:
if (value > THRESHOLD) { Serial.println("Water detected!"); }

Arduino UNO Q Code

Der Arduino UNO Q hat zwei Prozessoren, die zusammenarbeiten:

  • Der STM32 MCU liest den Wassersensor über den 12-Bit-ADC jede Sekunde und gibt das Ergebnis aus
  • Der Qualcomm MPU läuft unter Debian Linux und verwaltet Wi-Fi, Python und Cloud-Konnektivität
  • In diesem Abschnitt wird nur der MCU programmiert — die Linux-Seite bleibt inaktiv. Ein späterer Abschnitt zeigt, wie beide Prozessoren über Bridge zusammenarbeiten.

※ Notiz:

Der Arduino UNO Q MCU verwendet einen 12-Bit-ADC (0–4095) mit einer 3,3V-Referenz. Dies unterscheidet sich vom klassischen Arduino Uno, der einen 10-Bit-ADC (0–1023) mit 5V-Referenz verwendet. Passen Sie den THRESHOLD-Wert entsprechend an, wenn Sie kalibrieren.

/* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-water-sensor */ // Arduino UNO Q has a 12-bit ADC (0-4095) with 3.3V reference. // The water sensor VCC is powered only when reading to reduce corrosion. #define POWER_PIN 5 // The Arduino UNO Q MCU pin connected to VCC of water sensor #define SIGNAL_PIN A0 // The Arduino UNO Q MCU pin connected to the signal pin of water sensor // Threshold for detecting water (calibrate for your sensor and water) // With 12-bit ADC (0-4095), typical dry=0, partial=300-800, fully wet>1500 #define THRESHOLD 500 int value = 0; void setup() { Serial.begin(9600); pinMode(POWER_PIN, OUTPUT); digitalWrite(POWER_PIN, LOW); // start with sensor powered off Serial.println("Arduino UNO Q Water Sensor ready"); } void loop() { digitalWrite(POWER_PIN, HIGH); // power the sensor delay(10); // allow sensor to stabilize value = analogRead(SIGNAL_PIN); // read 12-bit ADC value (0-4095) digitalWrite(POWER_PIN, LOW); // power off the sensor Serial.print("Sensor value: "); Serial.print(value); if (value > THRESHOLD) { Serial.println(" => Water detected!"); } else { Serial.println(" => No water"); } delay(1000); }

Schnelle Schritte

Erste Erfahrung mit Arduino UNO Q? Folgen Sie dem Erste Schritte mit Arduino UNO Q Lernprogramm, bevor Sie fortfahren.

  • Verdrahten: Verbinden Sie den Wassersensor mit dem Arduino UNO Q MCU wie im Verdrahtungsdiagramm gezeigt.
  • Öffnen Sie Arduino App Lab: Starten Sie Arduino App Lab und warten Sie, bis es Ihr Arduino UNO Q erkennt.
  • Erstellen Sie eine neue App: Klicken Sie auf die Schaltfläche Neue App erstellen.
Neue App in Arduino App Lab auf Arduino UNO Q erstellen
  • Geben Sie der App einen Namen, z. B.: WaterSensor
  • Klicken Sie auf Erstellen, um zu bestätigen.
Arduino App Lab App-Ordner und Dateien auf Arduino UNO Q
  • Skizze einfügen: Kopieren Sie den MCU-Code oben und fügen Sie ihn in sketch/sketch.ino ein. Behalten Sie andere Dateien als Standard.
  • Keine Bibliothek erforderlich — verwendet nur die integrierten Funktionen analogRead() und digitalWrite().
  • Hochladen: Klicken Sie in Arduino App Lab auf die Schaltfläche Ausführen.
Klicken Sie auf die Schaltfläche Ausführen in Arduino App Lab auf Arduino UNO Q
  • Senken Sie die Sensorkontakte graduell in ein Glas Wasser und beobachten Sie, wie die ADC-Werte im Seriellen Monitor ansteigen.

Kalibrierung

Nach dem Hochladen beobachten Sie die Sensorwerte:

  • Vollständig trocken: Wert ≈ 0
  • Teilweise untergetaucht: Wert ≈ 300–1000
  • Meist untergetaucht: Wert ≈ 1500–3000

Stellen Sie THRESHOLD über dem Trocken-Rauschen-Pegel ein (z. B. 500), um die Anwesenheit von Wasser zuverlässig zu erkennen.

App Lab Konsolenausgabe

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Arduino UNO Q Water Sensor ready [2026-04-29 09:00:02] Sensor value: 0 => No water [2026-04-29 09:00:03] Sensor value: 0 => No water [2026-04-29 09:00:04] Sensor value: 312 => No water [2026-04-29 09:00:05] Sensor value: 875 => Water detected! [2026-04-29 09:00:06] Sensor value: 1943 => Water detected! [2026-04-29 09:00:07] Sensor value: 2501 => Water detected!

Bridge: Linux + MCU

Dieser Abschnitt zeigt, wie Sie beide Prozessoren des Arduino UNO Q programmieren, damit die Linux-Seite Sensorwerte auslesen und Wasserereignisse über Bridge empfangen kann:

  • Der Wassersensor ist mit dem MCU verbunden — der MCU liest den ADC jede Sekunde und speichert den Wert
  • Der MPU kann den ADC nicht direkt auslesen — er ruft Bridge-Funktionen auf, um den Sensorwert, Status oder Ereignisse abzurufen
  • Der MPU hat Wi-Fi — läuft unter vollständiger Debian Linux und kann Telegram-Benachrichtigungen senden, wenn Wasser zuerst erkannt wird
  • Arduino_RouterBridge ermöglicht RPC-Kommunikation zwischen den beiden Prozessoren
  • ⚠️ /dev/ttyHS1 (Linux) und Serial1 (MCU) sind RESERVIERT vom Router — öffnen Sie diese niemals im Benutzercode

Zusammengefasst: MCU liest jede Sekunde ADC → erkennt Zustandsänderung → setzt Ereignis-Flag → MPU fragt ab und sendet Telegram-Benachrichtigung.

MCU-Code (Bridge)

/* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-water-sensor */ // Arduino UNO Q has a 12-bit ADC (0-4095) with 3.3V reference. #include "Arduino_RouterBridge.h" #define POWER_PIN 5 // The Arduino UNO Q MCU pin connected to VCC of water sensor #define SIGNAL_PIN A0 // The Arduino UNO Q MCU pin connected to the signal pin of water sensor #define THRESHOLD 500 int cached_value = 0; bool water_event = false; bool prev_water_detected = false; unsigned long last_read_ms = 0; const unsigned long READ_INTERVAL = 1000; String get_value(String arg) { return String(cached_value); } String get_status(String arg) { return cached_value > THRESHOLD ? "water_detected" : "no_water"; } String get_event(String arg) { if (water_event) { water_event = false; return "water_detected"; } return "none"; } void setup() { Bridge.begin(); Monitor.begin(); pinMode(POWER_PIN, OUTPUT); digitalWrite(POWER_PIN, LOW); Bridge.provide("get_value", get_value); Bridge.provide("get_status", get_status); Bridge.provide("get_event", get_event); Monitor.println("Arduino UNO Q Water Sensor Bridge ready"); } void loop() { unsigned long now = millis(); if (now - last_read_ms >= READ_INTERVAL) { last_read_ms = now; digitalWrite(POWER_PIN, HIGH); delay(10); cached_value = analogRead(SIGNAL_PIN); digitalWrite(POWER_PIN, LOW); bool water_detected = cached_value > THRESHOLD; if (water_detected && !prev_water_detected) { water_event = true; Monitor.print("Water detected! Sensor value: "); Monitor.println(cached_value); } else if (!water_detected && prev_water_detected) { Monitor.println("Water gone. Sensor dry."); } prev_water_detected = water_detected; } }

Python-Code (Bridge)

/* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-water-sensor */ from arduino.app_utils import * import time def loop(): value = Bridge.call("get_value") status = Bridge.call("get_status") print(f"Sensor value: {value} Status: {status}") time.sleep(1) App.run(user_loop=loop)

Schnelle Schritte

  • Verdrahten: Verbinden Sie den Wassersensor mit dem Arduino UNO Q wie im Verdrahtungsdiagramm gezeigt.
  • Öffnen Sie Arduino App Lab: Starten Sie Arduino App Lab und warten Sie, bis die Platine erkannt wird.
  • Erstellen Sie eine neue App: Klicken Sie auf Neue App erstellen, nennen Sie sie WaterSensorBridge, und klicken Sie auf Erstellen.
  • MCU-Skizze einfügen: Kopieren Sie den MCU-Bridge-Code oben und fügen Sie ihn in sketch/sketch.ino ein.
  • Python-Code einfügen: Kopieren Sie den Python-Bridge-Code oben und fügen Sie ihn in die Python-Datei in der App ein.
  • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
Add sketch library in Arduino App Lab on Arduino UNO Q
  • Search for Arduino_RouterBridge created by Arduino and click the Install button.
My Apps / DIYables Apps
Run
Bricks
No bricks added...
Sketch Libraries
No sketch libra...
Files
python
sketch
.gitignore
README.md
app.yaml
sketch.ino
Add sketch library
Arduino_RouterBridge Arduino

This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

0.4.1
Install
More Info
  • Hochladen: Klicken Sie in Arduino App Lab auf die Schaltfläche Ausführen.
Klicken Sie auf die Schaltfläche Ausführen in Arduino App Lab auf Arduino UNO Q
  • Tauchen Sie die Sensorkontakte in Wasser und beobachten Sie die Statusänderung in beiden Konsolen.

App Lab Konsolenausgabe

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Arduino UNO Q Water Sensor Bridge ready [2026-04-29 09:00:06] Water detected! Sensor value: 1243 [2026-04-29 09:00:09] Water gone. Sensor dry.
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Sensor value: 0 Status: no_water [2026-04-29 09:00:03] Sensor value: 0 Status: no_water [2026-04-29 09:00:06] Sensor value: 1243 Status: water_detected [2026-04-29 09:00:09] Sensor value: 12 Status: no_water

Telegram

Erhalten Sie sofortige Telegram-Benachrichtigungen, wenn auf dem Arduino UNO Q Wasser vom Sensor erkannt wird.

MCU-Skizze: Behalten Sie dieselbe MCU-Skizze aus dem vorherigen Bridge-Abschnitt.

Python-Code (Telegram)

/* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-water-sensor */ from arduino.app_utils import * import requests import time TELEGRAM_BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN" CHAT_ID = "YOUR_CHAT_ID" last_update_id = 0 def get_updates(): global last_update_id url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getUpdates" params = {"offset": last_update_id + 1, "timeout": 5} try: response = requests.get(url, params=params, timeout=10) data = response.json() if data["ok"]: return data["result"] except Exception as e: print(f"Error getting updates: {e}") return [] def send_message(chat_id, text): url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" payload = {"chat_id": chat_id, "text": text} try: requests.post(url, data=payload, timeout=10) except Exception as e: print(f"Error sending message: {e}") def loop(): # Check for water event event = Bridge.call("get_event") if event == "water_detected": value = Bridge.call("get_value") print(f"Water event! Sensor value: {value}") send_message(CHAT_ID, f"💧 Water detected! Sensor value: {value}") # Check for Telegram commands updates = get_updates() for update in updates: last_update_id = update["update_id"] if "message" not in update: continue message = update["message"] chat_id = message["chat"]["id"] text = message.get("text", "").strip() print(f"Received: {text}") if text == "/start": send_message(chat_id, "Arduino UNO Q Water Sensor Bot\n" "/value - Read raw sensor value (0-4095)\n" "/status - Read water detection status\n" "Automatic alert when water is detected") elif text == "/value": result = Bridge.call("get_value") send_message(chat_id, f"Sensor value: {result}") elif text == "/status": result = Bridge.call("get_status") send_message(chat_id, f"Status: {result}") else: send_message(chat_id, "Unknown command. Send /start for help.") time.sleep(0.5) App.run(user_loop=loop)

Schnelle Schritte

  • Ersetzen Sie YOUR_TELEGRAM_BOT_TOKEN durch Ihren aktuellen Bot-Token von BotFather.
  • Ersetzen Sie YOUR_CHAT_ID durch Ihre Telegram-Chat-ID.
  • Fügen Sie diesen Python-Code in die Python-Datei Ihrer App ein (behalten Sie dieselbe MCU-Skizze).
  • Klicken Sie auf die Schaltfläche Ausführen. Tauchen Sie den Sensor ins Wasser — erhalten Sie sofort die Telegram-Benachrichtigung.

App Lab Konsolenausgabe

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:10:00] Waiting for Telegram messages... [2026-04-29 09:10:05] Water event! Sensor value: 1567 [2026-04-29 09:10:12] Received: /status
Telegram
Telegram 12:45
Welcome to Telegram!
ArduinoBot 10:19
Chatting with Arduino...
telegram-botfather
BotFather Yesterday
Your bot has been created.

ArduinoBot

bot
Today
/value
10:15 AM ✓✓
Sensor value: 0
10:16 AM
💧 Water detected! Sensor value: 1567
10:17 AM
/status
10:18 AM ✓✓
Status: water_detected
10:19 AM
/value
10:20 AM ✓✓
Sensor value: 1567
10:21 AM

OpenClaw

You can adapt the OpenClaw to this tutorial by refering the instruction on Arduino Uno Q - OpenClaw Tutorial

Projektideen

Sie können viele nützliche Projekte mit dem Wassersensor und Arduino UNO Q erstellen:

  • Leckalarm-System: Platzieren Sie den Wassersensor unter einer Spüle, Waschmaschine oder Wassererhitzer — erhalten Sie eine sofortige Telegram-Benachrichtigung, wenn ein Leck erkannt wird, mit dem rohen ADC-Wert für die Schweregradbeurteilung
  • Regenmesser: Montieren Sie den Sensor im Freien unter einem offenen Unterstand, um Niederschlag zu erkennen — Python protokolliert Regenereignisse mit Zeitstempel in einer Datei und sendet eine tägliche Regenzusammenfassung an Telegram
  • Aquarium-Überlauffalle: Positionieren Sie den Sensor am Tankrand — wenn der Wasserspiegel den Sensor erreicht, benachrichtigt Sie der MPU über Telegram und kann optional eine Relaisschaltung über Bridge auslösen, um die Wasserpumpe abzuschalten
  • Pflanzen-Bewässerungsüberwacher: Überprüfen Sie die Bodenfeuchte mit dem Wassersensor — wenn Trockenheit erkannt wird (niedriger ADC-Wert), senden Sie eine Telegram-Erinnerung, um die Pflanzen zu gießen
  • Keller-Hochwassermonitor: Installieren Sie mehrere Sensoren auf Bodenniveau im ganzen Keller — jeder Sensor ist mit einem separaten analogen Pin verbunden, und Python meldet über Telegram, welche Zonen überflutet sind

Fordern Sie sich selbst heraus

Möchten Sie noch mehr mit dem Wassersensor auf Arduino UNO Q lernen? Versuchen Sie diese Herausforderungen:

  • Einfach: Fügen Sie Wasserstands-Kategorien in Python hinzu: wenn int(value) < 200"trocken", < 800"feucht", < 2000"nass", sonst "überflutet" — senden Sie die Kategorie mit jeder Telegram-Status-Antwort.
  • Mittel: Implementieren Sie einen Abkühlungs-Timer: Nach einem Wassererkennung-Ereignis, das eine Telegram-Benachrichtigung auslöst, warten Sie 60 Sekunden, bevor Sie eine weitere Benachrichtigung für dasselbe Ereignis senden — verhindern Sie Spam bei anhaltenden Lecks.
  • Fortgeschritten: Protokollieren Sie alle Sensorablesungen mit Zeitstempel in eine CSV-Datei auf Linux alle 10 Sekunden, und implementieren Sie einen /report Telegram-Befehl, der eine Zusammenfassung der letzten Stunde sendet: Mindestwert, Höchstwert, Anzahl der Wassererkennung-Ereignisse und Dauer des Wasserkontakts.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!