Arduino UNO Q - Regensensor

Ein Regensensor kann Regen oder Schnee erkennen und die Regenmenge messen. Er bietet sowohl einen digitalen Ausgang (Regen/kein Regen) als auch einen analogen Ausgang (Intensitätsstufe). Auf Arduino UNO Q liefert der 12-Bit-ADC des MCU höher aufgelöste Intensitätsmessungen. Mit Bridge und Telegram erhalten Sie sofortige Regenwarnungen auf Ihrem Telefon.

In diesem Tutorial werden Sie lernen:

Arduino UNO Q Regensensor

Erforderliche Hardware

1×Arduino UNO Q
1×USB Cable for Arduino Uno Q
1×Regensensor
1×Verbindungskabel
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 Regensensor

Der Regensensor besteht aus zwei Teilen: einer Sensorplatte und einem elektronischen Modul.

Regensensor Pinbelegung

Sensorplatte: Wird draußen angebracht (auf einem Dach oder einer Fensterbank). Verfügt über abwechselnde Stromversorgungs- und Sensorkupferleitungen — Wasser verbindet diese Leitungen, wenn es regnet.

Elektronisches Modul: Konvertiert das Pad-Signal in lesbare Ausgänge:

  • VCC-Pin: 3,3V bis 5V Stromversorgung
  • GND-Pin: Masse
  • DO-Pin: Digitaler Ausgang — HOCH = kein Regen, TIEF = Regen erkannt. Die Empfindlichkeit wird durch ein Potentiometer auf der Platine eingestellt.
  • AO-Pin: Analoger Ausgang — niedrigerer Wert = mehr Regen, höherer Wert = weniger Regen. Das Potentiometer beeinflusst den AO nicht.

Es hat auch zwei LEDs:

  • PWR-LED: Stromanzeige
  • DO-LED: Leuchtet auf, wenn Regen erkannt wird (DO-Pin TIEF)

Funktionsweise

  • DO-Pin: Das Potentiometer setzt einen Schwellenwert. Wenn Regen den Schwellenwert überschreitet, geht DO auf TIEF. Stellen Sie das Potentiometer ein, um die Empfindlichkeit anzupassen.
  • AO-Pin: Gibt kontinuierlich eine Analogspannung proportional zum Wasser auf dem Pad aus. Auf Arduino UNO Q liest der MCU dies als 12-Bit-Wert (0–4095) — niedrigere Werte bedeuten mehr Regen.

※ Notiz:

Verbinden Sie VCC mit einem digitalen Ausgangspin (nicht immer 5V an) und schalten Sie den Sensor nur während der Messungen ein. Dies reduziert elektrochemische Korrosion und verlängert die Lebensdauer des Sensors.

Schaltplan

Arduino UNO Q Regensensor Schaltplan

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

Regensensor-Pin Arduino UNO Q MCU
GND GND
VCC D3 (gesteuerte Stromversorgung)
DO D4
AO A0

Wie man für den Regensensor programmiert

  • Pins einrichten:
pinMode(POWER_PIN, OUTPUT); pinMode(DO_PIN, INPUT);
  • Sensor einschalten, beide Ausgänge auslesen, dann ausschalten:
digitalWrite(POWER_PIN, HIGH); // power on delay(10); // stabilize int do_state = digitalRead(DO_PIN); // HIGH = no rain, LOW = rain int ao_value = analogRead(AO_PIN); // 0-4095, lower = more rain digitalWrite(POWER_PIN, LOW); // power off
  • Regen vom digitalen Ausgang überprüfen:
if (do_state == LOW) { Serial.println("Rain DETECTED"); } else { Serial.println("No rain"); }

Arduino UNO Q Code

Arduino UNO Q hat zwei Prozessoren, die zusammenarbeiten:

  • Der STM32 MCU liest jeden Sekunde sowohl DO (digital) als auch AO (analog) Ausgänge vom Regensensor
  • Der Qualcomm MPU läuft Debian Linux und verwaltet Wi-Fi, Python und Cloud-Konnektivität
  • In diesem Abschnitt wird nur der MCU programmiert — die Linux-Seite bleibt untätig. Ein späterer Abschnitt zeigt, wie beide Prozessoren via Bridge zusammenarbeiten.

※ Notiz:

Der Arduino UNO Q MCU verwendet einen 12-Bit-ADC (0–4095). Die AO-Intensitätswerte liegen in diesem Bereich — passen Sie die Erkennungsschwellenwerte entsprechend an.

/* * 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-rain-sensor */ // Rain sensor has two outputs: // DO: digital — HIGH = no rain, LOW = rain detected // AO: analog — lower value = more rain (12-bit ADC: 0-4095) // POWER_PIN: power sensor only when reading to reduce corrosion #define POWER_PIN 3 // The Arduino UNO Q MCU pin providing power to the rain sensor #define DO_PIN 4 // The Arduino UNO Q MCU pin connected to DO of the rain sensor #define AO_PIN A0 // The Arduino UNO Q MCU pin connected to AO of the rain sensor void setup() { Serial.begin(9600); pinMode(POWER_PIN, OUTPUT); pinMode(DO_PIN, INPUT); digitalWrite(POWER_PIN, LOW); // start with sensor powered off Serial.println("Arduino UNO Q Rain Sensor ready"); } void loop() { digitalWrite(POWER_PIN, HIGH); // power the sensor delay(10); // allow sensor to stabilize int do_state = digitalRead(DO_PIN); // HIGH = no rain, LOW = rain int ao_value = analogRead(AO_PIN); // 0-4095: lower = more rain digitalWrite(POWER_PIN, LOW); // power off sensor // Digital output if (do_state == LOW) { Serial.print("Rain DETECTED | "); } else { Serial.print("No rain | "); } // Analog output Serial.print("Intensity (AO): "); Serial.println(ao_value); delay(1000); }

Schnellschritte

Zum ersten Mal mit Arduino UNO Q? Folgen Sie dem Erste Schritte mit Arduino UNO Q Tutorial, bevor Sie fortfahren.

  • Verbinden Sie: Verdrahten Sie den Regensensor mit Arduino UNO Q MCU wie im Schaltplan 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, zum Beispiel: RainSensor
  • Klicken Sie auf Erstellen, um zu bestätigen.
Arduino App Lab App-Ordner und -Dateien auf Arduino UNO Q
  • Fügen Sie die Skizze ein: Kopieren Sie den MCU-Code oben und fügen Sie ihn in sketch/sketch.ino ein. Halten Sie andere Dateien als Standard.
  • Keine Bibliothek erforderlich — verwendet nur die integrierten digitalRead() und analogRead().
  • Hochladen: Klicken Sie auf die Schaltfläche Ausführen in Arduino App Lab.
Klicken Sie auf die Schaltfläche Ausführen in Arduino App Lab auf Arduino UNO Q
  • Geben Sie ein paar Tropfen Wasser auf die Sensorplatte und beobachten Sie die Ausgabe im Seriellen Monitor.
  • Stellen Sie das Potentiometer auf dem Modul ein, wenn die DO-LED nicht richtig reagiert.

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 Rain Sensor ready [2026-04-29 09:00:02] No rain | Intensity (AO): 4090 [2026-04-29 09:00:03] No rain | Intensity (AO): 4088 [2026-04-29 09:00:04] Rain DETECTED | Intensity (AO): 1243 [2026-04-29 09:00:05] Rain DETECTED | Intensity (AO): 876 [2026-04-29 09:00:06] Rain DETECTED | Intensity (AO): 512 [2026-04-29 09:00:07] No rain | Intensity (AO): 3950

Bridge: Linux + MCU

Dieser Abschnitt zeigt, wie Sie beide Prozessoren des Arduino UNO Q programmieren, damit die Linux-Seite den Regenzustand lesen und Regenstarterereignisse via Bridge empfangen kann:

  • Der Regensensor ist mit dem MCU verbunden — der MCU liest DO und AO jede Sekunde und speichert die Werte zwischen
  • Der MPU kann die Sensorstifte nicht direkt auslesen — er ruft Bridge-Funktionen auf, um den Zustand, den Analogwert oder Ereignisse zu erhalten
  • Der MPU hat Wi-Fi — es läuft vollständiges Debian Linux, kann also Telegram-Benachrichtigungen senden, sobald Regen erkannt wird
  • Arduino_RouterBridge ermöglicht RPC-Kommunikation zwischen den beiden Prozessoren
  • ⚠️ /dev/ttyHS1 (Linux) und Serial1 (MCU) sind RESERVIERT für den Router — öffnen Sie diese nie im Benutzercode

Kurz gesagt: MCU erkennt Regen via DO-Pin → setzt Event-Flag → MPU fragt Bridge ab → MPU 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-rain-sensor */ #include "Arduino_RouterBridge.h" #define POWER_PIN 3 // The Arduino UNO Q MCU pin providing power to the rain sensor #define DO_PIN 4 // The Arduino UNO Q MCU pin connected to DO of the rain sensor #define AO_PIN A0 // The Arduino UNO Q MCU pin connected to AO of the rain sensor // Cache int cached_ao = 4095; // start at max (dry) bool cached_rain = false; // from DO pin bool rain_event = false; bool prev_rain = false; unsigned long last_read_ms = 0; const unsigned long READ_INTERVAL = 1000; String get_state(String arg) { return cached_rain ? "rain" : "no_rain"; } String get_value(String arg) { return String(cached_ao); } String get_event(String arg) { if (rain_event) { rain_event = false; return "rain_detected"; } return "none"; } void setup() { Bridge.begin(); Monitor.begin(); pinMode(POWER_PIN, OUTPUT); pinMode(DO_PIN, INPUT); digitalWrite(POWER_PIN, LOW); Bridge.provide("get_state", get_state); Bridge.provide("get_value", get_value); Bridge.provide("get_event", get_event); Monitor.println("Arduino UNO Q Rain 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); int do_state = digitalRead(DO_PIN); cached_ao = analogRead(AO_PIN); digitalWrite(POWER_PIN, LOW); cached_rain = (do_state == LOW); // LOW = rain detected if (cached_rain && !prev_rain) { rain_event = true; Monitor.print("Rain detected! AO value: "); Monitor.println(cached_ao); } else if (!cached_rain && prev_rain) { Monitor.println("Rain stopped."); } prev_rain = cached_rain; } }

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-rain-sensor */ from arduino.app_utils import * import time def loop(): state = Bridge.call("get_state") value = Bridge.call("get_value") print(f"Rain state: {state} AO value: {value}") time.sleep(1) App.run(user_loop=loop)

Schnellschritte

  • Verbinden Sie: Verdrahten Sie den Regensensor mit Arduino UNO Q wie im Schaltplan gezeigt.
  • Öffnen Sie Arduino App Lab: Starten Sie Arduino App Lab und warten Sie, bis das Board erkannt wird.
  • Erstellen Sie eine neue App: Klicken Sie auf Neue App erstellen, benennen Sie sie RainSensorBridge und klicken Sie dann auf Erstellen.
  • Fügen Sie die MCU-Skizze ein: Kopieren Sie den MCU-Bridge-Code oben und fügen Sie ihn in sketch/sketch.ino ein.
  • Fügen Sie den Python-Code ein: 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 auf die Schaltfläche Ausführen in Arduino App Lab.
Klicken Sie auf die Schaltfläche Ausführen in Arduino App Lab auf Arduino UNO Q
  • Fügen Sie Wasser auf die Sensorplatte hinzu — beobachten Sie die Regenzustandsä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 Rain Sensor Bridge ready [2026-04-29 09:00:05] Rain detected! AO value: 987 [2026-04-29 09:00:08] Rain stopped.
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Rain state: no_rain AO value: 4090 [2026-04-29 09:00:05] Rain state: rain AO value: 987 [2026-04-29 09:00:08] Rain state: no_rain AO value: 4080

Telegram

Erhalten Sie sofortige Telegram-Benachrichtigungen, wenn Regen auf dem Arduino UNO Q-Regensensor erkannt wird.

MCU-Skizze: Behalten Sie die gleiche 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-rain-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(): # Auto-alert when rain starts event = Bridge.call("get_event") if event == "rain_detected": value = Bridge.call("get_value") print(f"Rain detected! AO value: {value}") send_message(CHAT_ID, f"🌧️ Rain detected! Intensity (AO): {value}") # 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 Rain Sensor Bot\n" "/state - Rain detected or not (digital)\n" "/value - Read analog intensity (0-4095)\n" "Automatic alert when rain starts") elif text == "/state": result = Bridge.call("get_state") send_message(chat_id, f"Rain state: {result}") elif text == "/value": result = Bridge.call("get_value") send_message(chat_id, f"AO intensity value: {result}") else: send_message(chat_id, "Unknown command. Send /start for help.") time.sleep(0.5) App.run(user_loop=loop)

Schnellschritte

  • Ersetzen Sie YOUR_TELEGRAM_BOT_TOKEN mit Ihrem tatsächlichen Bot-Token von BotFather.
  • Ersetzen Sie YOUR_CHAT_ID mit Ihrer Telegram-Chat-ID.
  • Fügen Sie diesen Python-Code in die Python-Datei Ihrer App ein (behalten Sie die gleiche MCU-Skizze).
  • Klicken Sie auf die Schaltfläche Ausführen. Fügen Sie Wassertropfen auf den Sensor hinzu — 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] Rain detected! AO value: 875 [2026-04-29 09:10:12] Received: /state
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
/state
10:15 AM ✓✓
Rain state: no_rain
10:16 AM
🌧️ Rain detected! Intensity (AO): 875
10:17 AM
/value
10:18 AM ✓✓
AO intensity value: 875
10:19 AM
/state
10:20 AM ✓✓
Rain state: rain
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 Regensensor und Arduino UNO Q erstellen:

  • Regenwarnungssystem: Montieren Sie die Sensorplatte auf einem Dach — wenn es anfängt zu regnen, sendet der MPU eine Telegram-Benachrichtigung mit dem AO-Intensitätswert, damit Sie von überall aus Maßnahmen ergreifen können (Fenster schließen, Wäsche reinholen)
  • Automatische Markisesteuerung: Verwenden Sie den Regensensor mit einem Motor/Relais — wenn Regen erkannt wird, schließt der MCU automatisch eine Markise oder einen Jalousie über Bridge und sendet eine Telegram-Benachrichtigung
  • Regenfallprotokollierung: Protokollieren Sie jeden Regenerkennung mit Zeitstempel und AO-Intensität in einer CSV-Datei auf Linux — generieren Sie täglich eine Regenzusammenfassung und senden Sie sie um Mitternacht per Telegram
  • Intelligente Bewässerungshemmung: Kombinieren Sie mit dem Pump-Tutorial — wenn Regen erkannt wird, überspringt Python den geplanten Bewässerungszyklus, um Wasser zu sparen, und sendet eine Telegram-Nachricht zur Erklärung
  • Dachgarten-Monitor: Verfolgung der Regenintensität im Laufe der Zeit mit AO-Werten — Python berechnet alle 15 Minuten den durchschnittlichen Niederschlag und sendet eine regelmäßige Telegram-Zusammenfassung

Fordern Sie sich selbst heraus

Bereit, noch weiter mit dem Regensensor auf Arduino UNO Q zu gehen? Versuchen Sie diese Herausforderungen:

  • Einfach: AO-Intensität in Python klassifizieren: wenn int(value) > 3000"trocken", > 1500"leichter Regen", > 500"moderater Regen", sonst "starker Regen" — fügen Sie dieses Label in jede Telegram-Benachrichtigung ein.
  • Mittel: Implementieren Sie einen Regendauer-Tracker: Notieren Sie die Startzeit, wenn Regen erkannt wird, und die Endzeit, wenn es stoppt — senden Sie eine Telegram-Nachricht, wenn Regen stoppt und berichten Sie, wie lange es gedauert hat.
  • Fortgeschrittene: Erstellen Sie ein 24-Stunden-Niederschlagsdiagramm: Protokollieren Sie AO-Werte jede Minute in eine Liste in Python — implementieren Sie einen /chart Telegram-Befehl, der ein textbasiertes Balkendiagramm der Regenintensität pro Stunde über die letzten 24 Stunden sendet.

※ 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!