Arduino UNO Q - Ultraschallsensor

Dieses Tutorial zeigt Ihnen, wie Sie ein Arduino UNO Q mit einem HC-SR04-Ultraschallsensor verwenden, um die Entfernung zu einem Objekt zu messen. Sie werden lernen:

Arduino UNO Q Ultraschallsensor

Erforderliche Hardware

1×Arduino UNO Q
1×USB-Kabel für Arduino Uno Q
1×Ultraschallsensor
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 Ultraschallsensor

Der HC-SR04-Ultraschallsensor misst die Entfernung zu Objekten mit Schallwellen. Er sendet eine Schallwelle aus, die der Mensch nicht hören kann, und wartet dann auf das Echo, wenn der Schall zurückprallt. Durch die Messung der Echtzeit des Hin- und Rückwegs berechnet der Sensor die Entfernung.

Pinbelegung

Der HC-SR04 hat vier Pins:

  • VCC-Pin: Mit VCC (5V) verbinden.
  • GND-Pin: Mit GND (0V) verbinden.
  • TRIG-Pin: Mit einem MCU-Ausgangspin verbinden, um einen Mesimpuls auszulösen.
  • ECHO-Pin: Mit einem MCU-Eingangspin verbinden, um die Echo-Impulsdauer zu empfangen.
Ultraschallsensor Pinbelegung
image source: diyables.io

Schaltplan

Arduino UNO Q Ultraschallsensor Schaltplan

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

MCU-Code

Das Arduino UNO Q hat zwei Prozessoren: den STM32 MCU (übernimmt die Echtzeit-Hardwaresteuerung) und die Qualcomm MPU (führt Debian Linux aus). In diesem Abschnitt wird nur der STM32 MCU programmiert – die Linux-Seite bleibt untätig. Ein späterer Abschnitt zeigt, wie beide Prozessoren zusammenarbeiten.

/* * 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-ultrasonic-sensor */ #define TRIG_PIN 9 // The Arduino UNO Q pin connected to the ultrasonic sensor's TRIG pin #define ECHO_PIN 8 // The Arduino UNO Q pin connected to the ultrasonic sensor's ECHO pin float duration_us, distance_cm; void setup() { pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { // generate 10-microsecond pulse to TRIG pin digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // measure duration of pulse from ECHO pin duration_us = pulseIn(ECHO_PIN, HIGH); // calculate the distance distance_cm = 0.017 * duration_us; delay(500); }

Schnelle Schritte

  • Erste Zeit mit Arduino UNO Q? Folgen Sie dem Tutorial Getting Started with Arduino UNO Q, um Ihre Entwicklungsumgebung vorzubereiten, bevor Sie fortfahren.
  • Komponenten verdrahten: VCC → 5V, GNDGND, TRIG → Pin 9, ECHO → Pin 8 verbinden.
  • Verbinden: Schließen Sie das Arduino UNO Q mit einem USB-C-Kabel an Ihren Computer an.
  • Arduino App Lab öffnen: Starten Sie die Arduino App Lab und warten Sie, bis Ihr Arduino UNO Q erkannt wird.
  • Neue App erstellen: Klicken Sie auf die Schaltfläche Create New App.
Neue App in Arduino App Lab auf Arduino UNO Q erstellen
  • Geben Sie der App einen Namen, z. B.: DIYables_Ultrasonic
  • Klicken Sie auf Create, um zu bestätigen.
  • Sie sehen einen Satz von Ordnern und Dateien in Ihrer neuen App.
Arduino App Lab App-Ordner und Dateien auf Arduino UNO Q
  • Finden Sie die Datei sketch/sketch.ino – hier werden Sie den MCU-Sketch einfügen.
  • Sketch einfügen: Kopieren Sie den MCU-Code oben und fügen Sie ihn in die Sketch-Datei ein. Halten Sie andere Dateien auf Standardwerte.
    • 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 Run, um den Code zu kompilieren und auf den STM32 hochzuladen.
    Klicken Sie auf die Schaltfläche Run in Arduino App Lab auf Arduino UNO Q
    • Test: Halten Sie Ihre Hand vor den Sensor. Verwenden Sie den Bridge-Abschnitt unten, um die Entfernungswerte über einen Monitor anzuzeigen.

    Wie man Rauschen aus Ultraschallmessungen filtert

    Entfernungswerte vom HC-SR04 enthalten Rauschen. In einigen Anwendungen können verrauschte Daten zu falschem Verhalten führen. Verwenden Sie diese Methode zum Filtern:

    • Nehmen Sie 20 Messungen vor und speichern Sie sie in einem Array.
    • Sortieren Sie das Array vom kleinsten zum größten.
    • Entfernen Sie die 5 kleinsten und 5 größten Werte (werden als Rauschen behandelt).
    • Berechnen Sie den Durchschnitt der verbleibenden 10 mittleren Werte.
    /* * 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-ultrasonic-sensor */ #define TRIG_PIN 9 // The Arduino UNO Q pin connected to the ultrasonic sensor's TRIG pin #define ECHO_PIN 8 // The Arduino UNO Q pin connected to the ultrasonic sensor's ECHO pin float filterArray[20]; // array to store data samples from sensor float distance; // store the distance from sensor float ultrasonicMeasure() { // generate 10-microsecond pulse to TRIG pin digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // measure duration of pulse from ECHO pin float duration_us = pulseIn(ECHO_PIN, HIGH); // calculate the distance return 0.017 * duration_us; } void setup() { pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { // 1. TAKING MULTIPLE MEASUREMENTS AND STORE IN AN ARRAY for (int sample = 0; sample < 20; sample++) { filterArray[sample] = ultrasonicMeasure(); delay(30); // to avoid ultrasonic interfering } // 2. SORTING THE ARRAY IN ASCENDING ORDER for (int i = 0; i < 19; i++) { for (int j = i + 1; j < 20; j++) { if (filterArray[i] > filterArray[j]) { float swap = filterArray[i]; filterArray[i] = filterArray[j]; filterArray[j] = swap; } } } // 3. FILTERING NOISE // + the five smallest samples are considered as noise -> ignore // + the five biggest samples are considered as noise -> ignore // => get average of the 10 middle samples (from 5th to 14th) double sum = 0; for (int sample = 5; sample < 15; sample++) { sum += filterArray[sample]; } distance = sum / 10; delay(500); }

    Linux + MCU Bridge-Programmierung

    Das Arduino UNO Q hat zwei Prozessoren, die zusammenarbeiten: die MPU (Qualcomm, führt Debian Linux aus) und der MCU (STM32, führt Zephyr OS mit Ihrem Arduino-Sketch aus). Sie kommunizieren über RPC über die Arduino_RouterBridge-Bibliothek – nie über rohe serielle Anschlüsse.

    • Der Ultraschallsensor ist mit dem MCU (STM32) verbunden – TRIG auf Pin 9, ECHO auf Pin 8.
    • Die MPU kann den Sensor nicht direkt lesen – sie ruft Bridge.call("read_distance") auf dem MCU auf, was eine Messung auslöst und das Ergebnis auf dem Monitor ausgibt.
    • Die MPU hat Wi-Fi – da die MPU vollständiges Debian Linux mit Wi-Fi ausführt, kann sie Telegram-Befehle empfangen und Messwerte remote senden.
    • Kommunikation: Bridge.call() auf der Linux-Seite ruft Bridge.provide_safe() auf der MCU-Seite auf (da digitalWrite() verwendet wird, um den TRIG-Impuls auszulösen)
    • ⚠️ Reserviert: /dev/ttyHS1 (Linux) und Serial1 (MCU) werden von Arduino Router verwendet – öffnen Sie sie nie direkt

    Kurz gesagt: MPU fordert Lesung an → MCU misst Entfernung → MCU gibt Ergebnis auf Monitor aus.

    MCU-Sketch – Ultraschallsensor mit Bridge und Monitor-Ausgabe:

    /* * 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-ultrasonic-sensor */ #include "Arduino_RouterBridge.h" #define TRIG_PIN 9 #define ECHO_PIN 8 float measure_distance() { digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); float duration_us = pulseIn(ECHO_PIN, HIGH); return 0.017 * duration_us; } void read_distance() { float distance_cm = measure_distance(); Monitor.print("Distance: "); Monitor.print(distance_cm); Monitor.println(" cm"); } void setup() { Bridge.begin(); Monitor.begin(); pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); Bridge.provide_safe("read_distance", read_distance); Monitor.println("Ultrasonic Sensor Bridge ready"); } void loop() {}

    Python-Skript (Arduino App Lab) – Fordern Sie jede Sekunde eine Entfernungslesung von Linux 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-ultrasonic-sensor */ from arduino.app_utils import * import time def loop(): Bridge.call("read_distance") time.sleep(1) App.run(user_loop=loop)
    • Hinweis: Stellen Sie sicher, dass Bridge.begin() im MCU-Sketch aufgerufen wird und der Sketch hochgeladen wird, bevor Sie das Python-Skript auf der Linux-Seite ausführen.
    • ⚠️ Warnung: Öffnen Sie nie direkt /dev/ttyHS1 (auf Linux) oder verwenden Sie Serial1 (auf MCU) in Ihrem Code – diese sind vom Arduino Router reserviert und der Zugriff darauf beschädigt die Bridge.

    Schnelle Schritte

    • MCU-Sketch hochladen: Öffnen Sie Arduino App Lab, erstellen Sie eine neue App, fügen Sie den Bridge MCU-Sketch in sketch/sketch.ino ein, installieren Sie die Arduino_RouterBridge-Bibliothek und klicken Sie auf Run.
    • Python-Skript hinzufügen: Fügen Sie den Python-Code oben auf der Registerkarte Python derselben App ein.
    • App ausführen: Klicken Sie auf Run – Python fordert jede Sekunde eine Entfernungslesung an.
    • Konsole überprüfen: Öffnen Sie die Registerkarte Konsole → MCU Monitor-Unterkarte, um die Entfernungswerte anzuzeigen.

    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
    Ultrasonic Sensor Bridge ready Distance: 29.4 cm Distance: 27.6 cm Distance: 14.3 cm Distance: 13.1 cm

    Telegram-Integration

    Lesen Sie den Ultraschallsensor von überall aus remote über Telegram.

    Wenn Sie noch keinen Telegram-Bot haben, siehe How to Create a Telegram Bot, um Ihr Bot-Token zu erhalten, bevor Sie fortfahren.

    MCU-Sketch: Behalten Sie den gleichen MCU-Sketch aus dem vorherigen Bridge-Abschnitt – keine Änderungen erforderlich. Stellen Sie sicher, dass er bereits auf dem STM32 hochgeladen und ausgeführt wird, bevor Sie fortfahren.

    Python-Skript (Arduino App Lab) – Telegram-Bot für Ultraschall-Entfernungslesung:

    /* * 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-ultrasonic-sensor */ from arduino.app_utils import * import requests import time BOT_TOKEN = "YOUR_BOT_TOKEN" API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}" last_update_id = 0 def send_message(chat_id, text): requests.post(f"{API_URL}/sendMessage", json={"chat_id": chat_id, "text": text}) def get_updates(): global last_update_id resp = requests.get(f"{API_URL}/getUpdates", params={"offset": last_update_id + 1, "timeout": 5}) return resp.json().get("result", []) def loop(): global last_update_id updates = get_updates() for update in updates: last_update_id = update["update_id"] msg = update.get("message", {}) chat_id = msg.get("chat", {}).get("id") text = msg.get("text", "").strip() if text == "/read": distance = Bridge.call("read_distance") send_message(chat_id, distance) else: send_message(chat_id, "Commands:\n/read — measure distance") time.sleep(0.5) App.run(user_loop=loop)
    • Hinweis: Ersetzen Sie YOUR_BOT_TOKEN durch das von @BotFather auf Telegram erhaltene Token.
    • Senden Sie /read – der MCU misst die Entfernung und der Bot antwortet mit dem Wert in cm.

    Schnelle Schritte

    • MCU-Sketch hochladen: Verwenden Sie den Bridge MCU-Sketch aus dem vorherigen Abschnitt (laden Sie ihn zuerst hoch, falls nicht bereits geschehen).
    • Telegram-Skript einfügen: Kopieren Sie den Python-Code oben auf die Registerkarte Python Ihrer App in Arduino App Lab.
    • Token setzen: Ersetzen Sie YOUR_BOT_TOKEN im Skript durch Ihr eigentliches Bot-Token.
    • App ausführen: Klicken Sie auf Run – der Bot beginnt, auf Telegram-Nachrichten zu lauschen.
    • Test: Senden Sie /read – der Bot antwortet mit der gemessenen Entfernung in cm.

    App Lab Konsolenausgabe

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /read [2026-04-29 12:00:01] Distance: 29.4 cm [2026-04-29 12:02:05] Telegram: /read [2026-04-29 12:02:05] Distance: 13.1 cm
    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
    /read
    10:15 AM ✓✓
    Distance: 29.4 cm
    10:16 AM

    OpenClaw-Integration

    Sie können die OpenClaw an dieses Tutorial anpassen, indem Sie die Anleitung auf Arduino Uno Q - OpenClaw Tutorial beachten

    Ultraschallsensor-Anwendungen

    • Kollisionsvermeidung
    • Pegelerkennung (Wassertank, Getreidesilo)
    • Näherungserkennung
    • Objektzählung auf einem Förderband
    • Parkassistent mit Entfernungsanzeige

    Herausfordere dich selbst

    • Einfach: Fügen Sie einen Schwellenwert hinzu – geben Sie "Object nearby!" aus, wenn die Entfernung unter 10 cm fällt
    • Mittel: Senden Sie den tatsächlichen Entfernungswert (in cm) direkt an den Telegram-Benutzer
    • Fortgeschrittene: Implementieren Sie den Rauschfilter aus dem obigen Abschnitt im Bridge MCU-Sketch und vergleichen Sie gefilterte versus rohe Messwerte über den Monitor

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