Displays HC-SR04 ultrasonic distance readings in ARC; scriptable via GetPing(), pausable, sets a variable with multiplier, optional NMS output
How to add the Ultrasonic Distance robot skill
- Load the most recent release of ARC (Get ARC).
- Press the Project tab from the top menu bar in ARC.
- Press Add Robot Skill from the button ribbon bar in ARC.
- Choose the Ultrasonic category tab.
- Press the Ultrasonic Distance icon to add the robot skill to your project.
Don't have a robot yet?
Follow the Getting Started Guide to build a robot and use the Ultrasonic Distance robot skill.
How to use the Ultrasonic Distance robot skill
What this skill does NOT do: It does not automatically steer, stop, or avoid obstacles. For navigation/avoidance, use the Ultrasonic Radar skill.
Ultrasonic sensors measure distance using sonar (sound navigation ranging)—they send out a quick burst of sound and listen for the echo. The time it takes for the echo to return is used to estimate how far away an object is. This is similar to how bats and dolphins “see” with sound.
Good to Know (Beginner Tips)
- Works well on hard surfaces (walls, wood, plastic, boxes).
- Less reliable on soft or angled surfaces (fabric, carpet, curtains, plush items) because they absorb or deflect the sound.
- Unlike many IR sensors, ultrasonic sensors are generally not affected by sunlight or black materials.
- Temperature and voltage can affect readings (sound travels differently in warm vs. cold air).
When an HC-SR04 (or equivalent) Ultrasonic Distance Sensor is wired to your EZB and configured in this skill, the skill will display a distance value for whatever is directly in front of the sensor.
How Readings Work (Important)
The value shown by this skill is typically 0–255. This number is a raw sensor value and is not automatically “cm” or “inches”. The raw value can vary depending on the sensor model, input voltage, the surface you’re detecting, and even room temperature.
Main Window
What You See
1. Ultrasonic Distance Value
- Shows the current distance reading (usually 0–255).
- Higher/lower values represent farther/closer objects depending on sensor and configuration.
2. Bar Display
- A quick visual way to see changes in distance without watching the number.
- Helpful for testing wiring and sensor direction (point it at a wall and move closer/farther).
3. Pause Checkbox
- When checked, the skill stops continuously sampling the sensor.
- This is useful if you only want readings on demand from a script (see next section).
Using This Skill with Scripts (GetPing)
This skill integrates with ARC scripting. If the Pause checkbox is checked, the skill will not constantly poll the sensor.
Instead, it will update when your script calls GetPing() (as long as the skill’s configured ports match your wiring).
Why pause + GetPing() is useful
- Reduces unnecessary communication traffic to the EZB.
- Lets you control exactly when a reading is taken (for example, only when the robot is moving forward).
- You can keep the skill paused permanently and still see updated values whenever
GetPing()is called.
Settings
Sets the name shown on the skill’s window. You can rename it to match where it’s installed (example: “Front Ultrasonic”).
Note: Changing the title also changes the name used in the controlCommand() reference for this skill.
Choose which EZB you are using (example: EZB #0). If you only have one EZB connected, it is usually 0.
- Trigger port: the digital pin used to send the ultrasonic “ping”.
- Echo port: the digital pin used to listen for the returning echo.
- 3-wire sensors: some combine trigger/echo into one signal wire—when using that type, set Echo to the same port as Trigger (as required by the sensor design).
Controls how often the skill samples the sensor (in milliseconds). Range: 100–60000 ms. Default: 250 ms.
- Smaller number = faster updates (more frequent readings).
- Larger number = fewer updates (less traffic and CPU usage).
Variable
- Stores the most recent reading into a variable automatically.
- This can reduce the need to call
GetPing()repeatedly, which can add unnecessary communication overhead.
Multiplier
- Scales the raw value into a more useful unit.
- Example: the default multiplier of 1.25 is commonly used to convert the reading into centimeters (depending on the sensor and setup).
- For best accuracy, calibrate: measure a known distance with a tape measure, compare to the raw value, then adjust the multiplier until it matches.
Optionally pushes distance data into the NMS (Level #3, Group #1) so other navigation skills (such as The Navigator) can use it. If you are new, you can leave this disabled until you start working with navigation behaviors. Use the ? help icons in ARC and the NMS manual for details on each option.
Wiring Diagram
Ultrasonic distance sensors commonly come in two styles: 3-wire (trigger+echo combined) and 4-wire (separate trigger and echo). Some versions include a voltage regulator (inline or built-in).
If your ultrasonic sensor has a regulator, it typically needs +6V or higher (often connected to Vin).
If it does not have a regulator, it typically needs +5V.
3-wire Wiring (with built-in regulator)
- Ground: Black wire to GND
- Power: Red wire to Vin
- Trigger/Echo: White wire to a Digital pin
4-wire Wiring (with regulator)
- Ground: Black wire from regulator to GND
- Power: Red wire from regulator to Vin
- Trigger: White wire to a Digital pin
- Echo: Green wire to a second Digital pin
Beginner Troubleshooting Checklist
- No reading / stuck value: confirm GND and power wiring, then confirm the configured digital ports match where you plugged in trigger/echo.
- Reading seems random: try changing the Interval to a slower value (e.g., 500–1000 ms), and test with a flat wall 30–100 cm away.
- Always detects “something”: check for nearby surfaces that could reflect sound (robot body panels, brackets), and see the “Fix Resolution” section below.
- Inconsistent on fabric: test with a hard surface; fabric often absorbs sonar.
Fix Resolution (False Positives on Some Housings)
If you use an EZ-Robot ultrasonic distance sensor, you may occasionally see false positives caused by the ping echoing inside the sensor casing. A common fix is placing a few small cotton balls inside the case around the sensors to dampen internal reflections.
Tech Details (Video)
Resources
Synthiam’s ultrasonic hardware reference design is available here.
Related Tutorials
Related Robots
Related Questions
Wire Length For The EZB Ultrasonic Sensor
How Do I... Not Be Hopelessly Lost?
Upgrade to ARC Pro
Unlock the true power of automation and robotics by becoming a proud subscriber of Synthiam ARC Pro.
Hardware Info

Nomad,
I don't have rechargeable batteries.
This loop works. The "GetPing(d1,d2)" does not. :
Thanks for trying.
Thomas, I’m unsure if you know that I am working for EZ-Robot and am offering you customer support here. There’s not much more @DJ can really help with as the software works fine. Do you have the most up-to-date software?
I’m not looking for the reward money either.
It looks like you need to dig deeper into your hardware, check voltages, check continuity. In theory what you have there should work but there’s something unforeseen.
jeremie
indeed the rgb is facing down . would it not be easier to use the radar window ? there you can see it working .
Can you show me the voltage out of the regulator with the connected ping sensor?
Also, in your video, the sensor is facing down. That will return 255 because there’s no echo, and it cannot operate within the specifications of the sensor's datasheet. There’s a great video on how to connect that sensor to an ezrobot product above on this page. I posted the video below to save on scrolling.
Notice in this video where the sensor is pointed during testing by Jeremie. It will be essential to test the sensor within its capabilities to know if it is working. Otherwise, you may have the sensor connected correctly and working, but it cannot operate within the confines of your test.
If you hold your ear to the sensor, you should hear an audible click each time the sensor is reading the distance. That will help you determine if the sensor is faulty or if the trigger/echo wires are reversed.
I'll just throw this idea out there. Try adding a longer sleep to give the device time to react? Change it from 100 to 1000. FYI I've never used a ping sensor but I've never heard anyone having this kind of trouble and seen lots of users of this hardware over the years. Good luck with your issue. I have a new ping sensor here I've never used and a new EZB. If I have time tomorrow I'll play around with it to see if I can get it to work. Sounds like a fun little project. I'll let you know.
DJ, 4.8 v DJ, 4.8 volts coming from the regulator with no sensor. 4.7 volts coming from the regulator with the ping sensor attached and "running." I had the sensor pointing away, but the bend in the wires kept directing it downward. But, down or up, I get the same "255" results. No clicking is coming from the sensor while plugged in and running. Thanks for helping me troubleshoot this issue.
David, Thanks. I tried slowing down the sleep to 1000 as you suggested. No improvement.
Nomad, Thanks. It was only facing down for a short time. Up or down, it does not work.
Jeremie, No, I did not know that you worked for EZ-Robot. I have the latest ARC update. I tried to connect with EZ-Robot via Facebook, but no one replied.
Thanks everyone,
Thomas
so the sensor is death . no clicking .
The sensor is dead if connected to the EZ-B, but alive if connected to the Arduino.