Arduino UNO Q - Ultraschallsensor mit OLED-Display

In diesem Leitfaden erfahren Sie, wie Sie mit einem Ultraschallsensor den Abstand messen und ihn zentriert auf einem OLED-Bildschirm mit Arduino UNO Q anzeigen können.

Arduino UNO Q Ultraschallsensor OLED

Erforderliche Hardware

1×Arduino UNO Q
1×USB-Kabel für Arduino UNO Q
1×Ultraschallsensor
1×SSD1306 I2C OLED-Display 128x64
1×SSD1306 I2C OLED-Display 128x32
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.

Kaufhinweis: Wenn Sie ein größeres OLED-Display möchten, verwenden Sie das 2.42 inch OLED Display 128x64.

Über OLED und Ultraschallsensor

Erfahren Sie mehr über das OLED-Display und den Ultraschallsensor in den folgenden Tutorials:

Schaltplan

Arduino UNO Q Ultraschallsensor OLED Schaltplan

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

MCU Code

Der Arduino UNO Q verfügt über zwei Prozessoren: den STM32 MCU (verwaltet Hardware-Echtzeitsteuerung) und den Qualcomm MPU (läuft Debian Linux). 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-oled */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width in pixels #define SCREEN_HEIGHT 64 // OLED display height in pixels #define TRIG_PIN 4 // The Arduino UNO Q pin connected to the ultrasonic sensor's TRIG pin #define ECHO_PIN 3 // The Arduino UNO Q pin connected to the ultrasonic sensor's ECHO pin Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); String distStr; void oledDisplayCenter(String text) { int16_t x1, y1; uint16_t width, height; oled.getTextBounds(text, 0, 0, &x1, &y1, &width, &height); oled.clearDisplay(); oled.setCursor((SCREEN_WIDTH - width) / 2, (SCREEN_HEIGHT - height) / 2); oled.println(text); oled.display(); } void setup() { pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { while (true); // halt if OLED not found } delay(2000); oled.clearDisplay(); oled.setTextSize(2); oled.setTextColor(WHITE); distStr.reserve(10); } 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 long duration_us = pulseIn(ECHO_PIN, HIGH); // calculate the distance float distance_cm = 0.017 * duration_us; distStr = String(distance_cm, 1); distStr += " cm"; oledDisplayCenter(distStr); delay(500); }

※ Notiz:

Der Code zentriert den Entfernungstext sowohl horizontal als auch vertikal auf dem OLED-Display.

Schnellschritte

  • Erste Schritte mit Arduino UNO Q? Folgen Sie dem Tutorial Getting Started with Arduino UNO Q, um Ihre Entwicklungsumgebung vor dem Fortfahren vorzubereiten.
  • Komponenten verdrahten: Verbinden Sie TRIG → Pin 4, ECHO → Pin 3. Verbinden Sie OLED SDA → SDA, SCL → SCL.
  • Verbinden: Stecken Sie den Arduino UNO Q mit einem USB-C-Kabel in Ihren Computer.
  • Öffnen Sie Arduino App Lab: Starten Sie Arduino App Lab und warten Sie, bis es Ihren Arduino UNO Q erkennt.
  • Erstellen Sie eine neue App: 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_UltrasonicOLED
  • 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
  • Suchen Sie die Datei sketch/sketch.ino — hier fügen Sie die MCU-Skizze ein.
  • Sketch einfügen: Kopieren Sie den MCU-Code oben und fügen Sie ihn in die Sketch-Datei ein. Behalten Sie andere Dateien wie vorgegeben bei.
    • 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 Adafruit SSD1306 created by Adafruit 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
    Adafruit SSD1306 Adafruit

    SSD1306 oled driver library for monochrome 128x64 and 128x32 displays

    2.5.9
    Install
    More Info
    • 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 Run-Schaltfläche in Arduino App Lab, um den STM32 zu kompilieren und hochzuladen.
    Klicken Sie auf die Run-Schaltfläche in Arduino App Lab auf Arduino UNO Q
    • Test: Führen Sie Ihre Hand vor dem Sensor durch — der Abstand sollte alle 500 ms auf dem OLED aktualisiert werden.

    ※ Notiz:

    Dieser Code ist zum Lernen gedacht. Für die Produktion wenden Sie den Rauschfilter aus dem Ultraschallsensor-Tutorial an.

    Linux + MCU Bridge-Programmierung

    Der Arduino UNO Q verfügt über zwei Prozessoren, die zusammenarbeiten: den MPU (Qualcomm, läuft Debian Linux) und den MCU (STM32, läuft Zephyr OS mit Ihrer Arduino-Skizze). Sie kommunizieren über RPC über die Bibliothek Arduino_RouterBridge — niemals über rohe serielle Anschlüsse.

    • Der Ultraschallsensor und das OLED sind beide mit dem MCU (STM32) verbunden — Sensor auf Pins 5/9, OLED über I2C.
    • Der MPU kann diese nicht direkt steuern — er ruft Bridge.call("read_distance") auf dem MCU auf, der den Abstand misst, auf dem OLED anzeigt und im Monitor ausgibt.
    • Der MPU hat Wi-Fi — da der MPU vollständiges Debian Linux mit Wi-Fi ausführt, kann er Telegram-Befehle empfangen und Messvorgänge remote auslösen.
    • Kommunikation: Bridge.call() auf der Linux-Seite ruft Bridge.provide_safe() auf der MCU-Seite auf (da digitalWrite() und OLED-Schreibvorgänge Hardware-APIs sind)
    • ⚠️ Reserviert: /dev/ttyHS1 (Linux) und Serial1 (MCU) werden vom Arduino Router verwendet — öffnen Sie sie niemals direkt

    Kurz gesagt: MPU fordert Lesung an → MCU misst Abstand → MCU zeigt auf OLED an und druckt auf Monitor aus.

    MCU-Skizze — Ultraschallsensor OLED-Display mit 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-ultrasonic-sensor-oled */ #include "Arduino_RouterBridge.h" #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define TRIG_PIN 5 #define ECHO_PIN 9 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); String distStr; void oledDisplayCenter(String text) { int16_t x1, y1; uint16_t width, height; oled.getTextBounds(text, 0, 0, &x1, &y1, &width, &height); oled.clearDisplay(); oled.setCursor((SCREEN_WIDTH - width) / 2, (SCREEN_HEIGHT - height) / 2); oled.println(text); oled.display(); } void read_distance() { digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); long duration_us = pulseIn(ECHO_PIN, HIGH); float distance_cm = 0.017 * duration_us; distStr = String(distance_cm, 1); distStr += " cm"; oledDisplayCenter(distStr); Monitor.print("Distance: "); Monitor.print(distance_cm); Monitor.println(" cm"); } void setup() { Bridge.begin(); Monitor.begin(); pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Monitor.println("OLED init failed!"); while (true); } delay(2000); oled.clearDisplay(); oled.setTextSize(2); oled.setTextColor(WHITE); distStr.reserve(10); oledDisplayCenter("Ready..."); Bridge.provide_safe("read_distance", read_distance); Monitor.println("Ultrasonic Sensor OLED Bridge ready"); } void loop() {}

    Python-Skript (Arduino App Lab) — jede Sekunde eine Entfernungsmessung vom Linux anfordern:

    /* * 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-oled */ 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() in der MCU-Skizze aufgerufen wird und die Skizze hochgeladen wird, bevor Sie das Python-Skript auf der Linux-Seite ausführen.
    • ⚠️ Warnung: Öffnen Sie niemals direkt /dev/ttyHS1 (auf Linux) oder verwenden Sie Serial1 (auf MCU) in Ihrem Code — diese sind vom Arduino Router reserviert und der Zugriff darauf unterbricht die Bridge.

    Schnellschritte

    • MCU-Skizze hochladen: Öffnen Sie Arduino App Lab, erstellen Sie eine neue App, fügen Sie die Bridge-MCU-Skizze in sketch/sketch.ino ein, installieren Sie die Bibliotheken Adafruit SSD1306 und Arduino_RouterBridge, und klicken Sie auf Ausführen.
    • Python-Skript hinzufügen: Fügen Sie den Python-Code oben in die Python-Registerkarte derselben App ein.
    • App ausführen: Klicken Sie auf Ausführen — Python fordert jede Sekunde eine Lesung an; MCU aktualisiert das OLED und Monitor.
    • Konsole überprüfen: Öffnen Sie die Registerkarte Konsole → Unterregisterkarte MCU Monitor, 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 OLED Bridge ready Distance: 29.4 cm Distance: 27.6 cm Distance: 14.3 cm

    Telegram-Integration

    Lesen Sie die Entfernung und zeigen Sie sie über Telegram auf dem OLED remote an.

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

    MCU-Skizze: Behalten Sie die gleiche MCU-Skizze aus dem vorherigen Bridge-Abschnitt — keine Änderungen erforderlich. Stellen Sie sicher, dass sie bereits auf dem STM32 hochgeladen und ausgeführt wird, bevor Sie fortfahren.

    Python-Skript (Arduino App Lab) — Telegram-Bot für Ultraschall-OLED-Display:

    /* * 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-oled */ 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 and display on OLED") time.sleep(0.5) App.run(user_loop=loop)
    • Hinweis: Ersetzen Sie YOUR_BOT_TOKEN durch das Token, das Sie von @BotFather auf Telegram erhalten haben.
    • Senden Sie /read, um eine Entfernungsmessung auszulösen — das Ergebnis wird auf dem OLED und im Monitor angezeigt.

    Schnellschritte

    • MCU-Skizze hochladen: Verwenden Sie die Bridge-MCU-Skizze aus dem vorherigen Abschnitt (laden Sie sie zuerst hoch, falls noch nicht geschehen).
    • Telegram-Skript einfügen: Kopieren Sie den Python-Code oben in die Python-Registerkarte Ihrer App in Arduino App Lab.
    • Token festlegen: Ersetzen Sie YOUR_BOT_TOKEN im Skript durch Ihren tatsächlichen Bot-Token.
    • App ausführen: Klicken Sie auf Ausführen — der Bot beginnt, auf Telegram-Nachrichten zu warten.
    • Test: Senden Sie /read — der Bot antwortet mit dem gemessenen Abstand, der auch auf dem OLED angezeigt wird.

    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 Anweisung zu Arduino UNO Q - OpenClaw Tutorial lesen.

    Anwendungs-/Projektideen

    • Tragbares Entfernungsmessgerät: Verwenden Sie Sensor + OLED als tragbares Entfernungsmesswerkzeug
    • Parkassistent: Zeigen Sie ein Balkendiagramm des verbleibenden Platzes an, wenn ein Fahrzeug rückwärts zu einer Wand fährt
    • Wassertankpegel-Messer: Zeigen Sie den aktuellen Wasserspiegel auf dem OLED in Echtzeit an
    • Roboter-Näherungsanzeige: Zeigen Sie den aktuellen Hindernis-Abstand auf einem Bordgeräte-OLED-Bildschirm
    • Messstelle: An einer Wand montieren, um live Raumdimensionen für Heimrenovierungsprojekte anzuzeigen

    Fordere dich heraus

    • Einfach: Zeige "CLOSE!" auf dem OLED in großem Text an, wenn der Abstand < 20 cm beträgt
    • Mittel: Zeichne ein Balkendiagramm auf dem OLED, das sich füllt, wenn das Objekt näher kommt
    • Fortgeschrittene: Sende den tatsächlichen Entfernungswert (in cm) direkt als Nachricht an den Telegram-Benutzer

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