Arduino UNO Q - Ultrasonic Sensor - LED

In this tutorial, you will learn how to use an ultrasonic sensor to control an LED based on object distance:

Arduino UNO Q Ultrasonic Sensor LED

Hardware Preparation

1×Arduino UNO Q
1×USB Cable for Arduino Uno Q
1×Ultrasonic Sensor
1×LED Kit
1×LED (red)
1×LED Module
1×220Ω Resistor
1×Breadboard
1×Jumper Wires
1×Recommended: Screw Terminal Block Shield for Arduino Uno
1×Recommended: Sensors/Servo Expansion Shield for Arduino Uno
1×Recommended: Breadboard Shield for Arduino Uno
1×Recommended: Enclosure for Arduino Uno
1×Recommended: Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Disclosure: Some of the links provided in this section are Amazon affiliate links. We may receive a commission for any purchases made through these links at no additional cost to you.
Additionally, some of these links are for products from our own brand, DIYables .

Buy Note: Use the LED Module for easier wiring. It includes an integrated resistor.

Overview of LED and Ultrasonic Sensor

Learn about LED and ultrasonic sensors in the tutorials below:

Wiring Diagram

The wiring diagram between Arduino UNO Q Ultrasonic Sensor LED

This image is created using Fritzing. Click to enlarge image

MCU Code

The Arduino UNO Q has two processors: the STM32 MCU (handles real-time hardware control) and the Qualcomm MPU (runs Debian Linux). In this section, only the STM32 MCU is programmed — the Linux side stays idle. A later section will show how both processors work together.

/* * This Arduino UNO Q code was developed by newbiely.com * * This Arduino UNO Q code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-ultrasonic-sensor-led */ #define TRIG_PIN 8 // The Arduino UNO Q pin connected to the ultrasonic sensor's TRIG pin #define ECHO_PIN 7 // The Arduino UNO Q pin connected to the ultrasonic sensor's ECHO pin #define LED_PIN 3 // The Arduino UNO Q pin connected to the LED's pin #define DISTANCE_THRESHOLD 50 // centimeters float duration_us, distance_cm; void setup() { pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(LED_PIN, OUTPUT); } 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; if (distance_cm < DISTANCE_THRESHOLD) digitalWrite(LED_PIN, HIGH); // turn on LED else digitalWrite(LED_PIN, LOW); // turn off LED delay(500); }

Detailed Instructions

  • First time with Arduino UNO Q? Follow the Getting Started with Arduino UNO Q tutorial to get your development environment ready before proceeding.
  • Wire the components: Connect TRIG → pin 8, ECHO → pin 7, LED (with 220 Ω resistor) → pin 3.
  • Connect: Plug the Arduino UNO Q into your computer with a USB-C cable.
  • Open Arduino App Lab: Launch Arduino App Lab and wait until it detects your Arduino UNO Q.
  • Create a new App: Click the Create New App button.
Create New App in Arduino App Lab on Arduino UNO Q
  • Give the App a name, for example: DIYables_UltrasonicLED
  • Click Create to confirm.
  • You will see a set of folders and files generated inside your new App.
Arduino App Lab App folders and files on Arduino UNO Q
  • Find the sketch/sketch.ino file — this is where you will paste the MCU sketch.
  • Paste the sketch: Copy the MCU code above and paste it into the sketch file. Keep other files as default.
    • 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
    • Upload: Click the Run button in Arduino App Lab to compile and upload to the STM32.
    Click Run button in Arduino App Lab on Arduino UNO Q
    • Test: Slide your hand toward the sensor — the LED turns on when you get within 50 cm.

    ※ NOTE THAT:

    This code is for learning. The ultrasonic sensor is sensitive to noise. For production use, apply the noise filter from the Ultrasonic Sensor tutorial.

    Linux + MCU Bridge Programming

    The Arduino UNO Q has two processors that work together: the MPU (Qualcomm, runs Debian Linux) and the MCU (STM32, runs Zephyr OS with your Arduino sketch). They communicate using RPC via the Arduino_RouterBridge library — never via raw serial ports.

    • The ultrasonic sensor and LED are connected to the MCU (STM32) — TRIG on pin 8, ECHO on pin 7, LED on pin 3.
    • The MPU cannot control these directly — it calls Bridge.call("check_distance") on the MCU, which measures distance and sets the LED accordingly.
    • The MPU has Wi-Fi — because the MPU runs full Debian Linux with Wi-Fi, it can run Telegram and loop the check automatically.
    • Communication: Bridge.call() on the Linux side invokes Bridge.provide_safe() on the MCU side (since digitalWrite() is a hardware API)
    • ⚠️ Reserved: /dev/ttyHS1 (Linux) and Serial1 (MCU) are used by the Arduino Router — never open them directly

    In short: Python calls check → MCU measures distance → MCU sets LED and prints to Monitor.

    MCU sketch — ultrasonic sensor LED control with Bridge and Monitor output:

    /* * This Arduino UNO Q code was developed by newbiely.com * * This Arduino UNO Q code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-ultrasonic-sensor-led */ #include "Arduino_RouterBridge.h" #define TRIG_PIN 8 #define ECHO_PIN 7 #define LED_PIN 3 #define DISTANCE_THRESHOLD 50 void check_distance() { digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); float duration_us = pulseIn(ECHO_PIN, HIGH); float distance_cm = 0.017 * duration_us; bool led_on = distance_cm < DISTANCE_THRESHOLD; digitalWrite(LED_PIN, led_on ? HIGH : LOW); Monitor.print("Distance: "); Monitor.print(distance_cm); Monitor.print(" cm -> LED: "); Monitor.println(led_on ? "ON" : "OFF"); } void setup() { Bridge.begin(); Monitor.begin(); pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); Bridge.provide_safe("check_distance", check_distance); Monitor.println("Ultrasonic Sensor LED Bridge ready"); } void loop() {}

    Python script (Arduino App Lab) — run distance check loop from Linux:

    /* * This Arduino UNO Q code was developed by newbiely.com * * This Arduino UNO Q code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-ultrasonic-sensor-led */ from arduino.app_utils import * import time def loop(): Bridge.call("check_distance") time.sleep(0.5) App.run(user_loop=loop)
    • Note: Make sure Bridge.begin() is called in the MCU sketch and the sketch is uploaded before running the Python script on the Linux side.
    • ⚠️ Warning: Never directly open /dev/ttyHS1 (on Linux) or use Serial1 (on MCU) in your code — these are reserved by the Arduino Router and accessing them will break the Bridge.

    Detailed Instructions

    • Upload the MCU sketch: Open Arduino App Lab, create a new App, paste the Bridge MCU sketch into sketch/sketch.ino, install the Arduino_RouterBridge library, and click Run.
    • Add the Python script: Paste the Python code above into the Python tab of the same App.
    • Run the App: Click Run — Python calls check_distance every 500 ms; the MCU measures distance and controls the LED.
    • Check the console: Open the Console tab → MCU Monitor subtab to see distance and LED state.

    App Lab Console Output

    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 LED Bridge ready Distance: 65.2 cm -> LED: OFF Distance: 32.1 cm -> LED: ON Distance: 14.3 cm -> LED: ON Distance: 78.9 cm -> LED: OFF

    Telegram Integration

    Monitor the ultrasonic sensor and LED state remotely via Telegram.

    If you do not have a Telegram bot yet, see How to Create a Telegram Bot to get your bot token before continuing.

    MCU sketch: Keep the same MCU sketch from the previous Bridge section — no changes needed. Make sure it is already uploaded and running on the STM32 before proceeding.

    Python script (Arduino App Lab) — Telegram bot for ultrasonic LED monitoring:

    /* * This Arduino UNO Q code was developed by newbiely.com * * This Arduino UNO Q code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-ultrasonic-sensor-led */ 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 Bridge.call("check_distance") # continuously control LED based on distance 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": status = Bridge.call("check_distance") send_message(chat_id, status) else: send_message(chat_id, "Commands:\n/read — check distance and LED state") time.sleep(0.5) App.run(user_loop=loop)
    • Note: Replace YOUR_BOT_TOKEN with the token obtained from @BotFather on Telegram.
    • The bot continuously checks the distance and controls the LED while listening for Telegram commands.
    • Send /read to request confirmation that the status was logged to MCU Monitor.

    Detailed Instructions

    • Upload the MCU sketch: Use the Bridge MCU sketch from the previous section (upload it first if not already done).
    • Paste the Telegram script: Copy the Python code above into the Python tab of your App in Arduino App Lab.
    • Set your token: Replace YOUR_BOT_TOKEN in the script with your actual bot token.
    • Run the App: Click Run — the bot starts controlling the LED and listening for Telegram messages.
    • Test it: Send /read — the bot replies with the current distance and LED state.

    App Lab Console Output

    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 -> LED: ON
    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 -> LED: ON
    10:16 AM

    OpenClaw Integration

    OpenClaw integration for Arduino UNO Q ultrasonic sensor controls LED is coming soon.

    • Coming Soon: OpenClaw support for this project on Arduino UNO Q will be covered in a future update.

    Application/Project Ideas

    • Proximity warning light: Flash an LED as an object gets closer (combine with distance thresholds)
    • Automatic night light: Turn on an LED when someone approaches a sensor at night
    • Obstacle indicator: Use the LED to indicate when a robot is too close to a wall
    • Child safety alert: Attach to a drawer or cabinet — LED lights when someone reaches in
    • Display brightness trigger: Activate a backlight when a user is detected nearby

    Challenge Yourself

    • Easy: Change the DISTANCE_THRESHOLD from 50 cm to 20 cm and observe the difference
    • Medium: Add multiple thresholds — blink slowly at 50 cm, blink fast at 30 cm, stay on at 15 cm
    • Advanced: Send the actual distance value (in cm) directly back to the Telegram user as a message

    ※ OUR MESSAGES

    • As freelancers, We are AVAILABLE for HIRE. See how to outsource your project to us
    • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!