Abstract
Virtual reality headsets can make you see something that isn't really there, but can you feel an object that isn't there? In this project, you will build a device that lets you feel invisible sound waves in midair.
Summary
Previous Arduino experience is recommended. See our How to Use an Arduino page for tutorials.
A kit is available from our partner Home Science Tools®. See the Materials section for details.
Even though you cannot hear it, long-term exposure to high levels of ultrasonic sound can cause hearing damage. Avoid running this project for hours at a time or holding the transmitters directly up to your ear. You can wear hearing protection as an added precaution.
Objective
Test an ultrasonic haptic system to maximize human sensitivity to it.
Introduction
When you type on a physical computer keyboard, you can feel the buttons move up and down. The buttons are springy - it takes some force to push them down, and when you let go, they spring back to their original position. This makes it easy for your brain to register that you have pushed the button, even without looking at the keyboard.
What about touch screens on tablets and phones? There are no physical buttons that move up and down when you type. However, you might have noticed that your phone vibrates or pulses slightly when you tap on the letters to type out a text message. Your phone contains a tiny motor that makes it vibrate when you touch the screen. You can feel the vibration with your sense of touch. Even in the absence of a physical button, this helps your brain confirm that you have pushed something - it gives your brain feedback. This process of creating a sense of touch using forces, vibrations, or motion is called haptic feedback or simply haptics. "Haptic" comes from an ancient Greek word related to touch. Many other modern electronic devices, like smartwatches and video game controllers, use small vibration motors to create haptic feedback.
Now think about virtual reality. Virtual reality (VR) headsets can let people see things that aren't really there, like an object floating in midair in front of them. However, without haptics, you cannot feel that virtual object in front of you. One approach to this problem is to use haptic gloves or controllers that the user wears or holds along with the headset (Figure 1). These peripherals can vibrate to simulate the sense of touch for the user.

What if you could create haptic feedback without the user needing to wear gloves or hold a controller at all? Could we "feel" vibrations in the air? It turns out that you can do this using ultrasonic sound, or sound that has a frequency beyond the range of human hearing. We measure a sound wave's frequency in units of hertz (Hz), the number of sound waves per second. Typical human hearing extends from about 20 Hz up to 20,000 Hz, or 20 kilohertz (kHz), but the exact value can vary with age and from person to person. Some animals, like bats, use ultrasonic sound for echolocation. Other animals, like elephants, can hear sounds below 20 Hz. This is called infrasound (Figure 2). Even though we cannot hear ultrasonic sound (above 20 kHz), under the right conditions, we can feel the vibrations in the air with our fingertips.

Ultrasonic transmitters, also called transducers, are special speakers designed to produce ultrasonic sound. They have a resonant frequency - the frequency at which they vibrate the most - in the ultrasonic range. By carefully controlling the signals to a large array of multiple transmitters, scientists can create targeted vibrations at focal points in the air. See the reference in the bibliography to learn more about a virtual reality haptic feedback system with an entire array of ultrasonic transmitters.
In this project, you will do your own experiments with a single ultrasonic transmitter. Specifically, you will examine the modulation frequency of the ultrasonic signal. You will generate ultrasonic sound at a frequency of about 40 kHz, meaning the transmitter pulses on and off 40,000 times per second. However, the sense of touch in our fingertips is most sensitive to vibrations at much lower frequencies, around a few hundred hertz or even lower. This means that we cannot feel a continuous 40 kHz ultrasonic sound wave, and the sound must be pulsed on and off at a lower frequency for our sense of touch to detect it (Figure 3).

Do you think you can create the sensation of touching an invisible object in midair? Try this project and find out!
Terms and Concepts
- Feedback
- Haptic feedback
- Haptics
- Virtual reality
- Ultrasonic
- Frequency
- Transmitter
- Transducer
- Resonant frequency
- Focal point
- Modulation
Questions
- What vibration frequency do you think your skin will be most sensitive to?
- Do you think this result will vary from person to person?
- How do phased arrays of multiple ultrasonic transmitters work?
Bibliography
- Finio, B. (n.d.). How to Use an Arduino. Science Buddies. Retrieved July 28, 2025
- Park, C., Lee, Y., and Yoon, S. (June 2025). UltraBoard: Always-available Wearable Ultrasonic Mid-air Haptic Interface for Responsive and Robust VR Inputs. Proc. ACM Interact. Mob. Wearable Ubiquitous Technol. Vol. 9, No. 2. Retrieved July 28, 2025
Materials and Equipment 
Recommended Project Supplies
-
Electronics Kit for Arduino, available from our partner Home Science Tools®.
- Note: This project will work with the Arduino UNO R3, UNO R4 Minima, UNO R4 WiFi, and compatible third-party boards.
- Windows or Mac computer. See this page if you have a Chromebook. Your computer will need:
- Access to the Arduino IDE, either installed local version or web-based editor. Watch this video for a comparison of the two options.
- USB port. The Science Buddies kit comes with a USB-A to C cable. The "C" end plugs into the Arduino, and the "A" end plugs into your computer. You will need an adapter or different cable if your computer only has USB-C ports. Watch this video to learn about the different types of cables and adapters.
- Additional parts (not included in the kit) must be purchased separately. Note that many parts are available in bulk on Amazon. You can purchase individual parts from electronics vendors like SparkFun, Adafruit, or Jameco Electronics.
Disclaimer: Science Buddies participates in affiliate programs with Home Science Tools®, Amazon.com, Carolina Biological, and Jameco Electronics. Proceeds from the affiliate programs help support Science Buddies, a 501(c)(3) public charity, and keep our resources free for everyone. Our top priority is student learning. If you have any comments (positive or negative) related to purchases you've made for science projects from recommendations on our site, please let us know. Write to us at [email protected].
Experimental Procedure

- Assemble the circuit as shown in Figures 4 and 5. You can also access a Tinkercad Circuits version of the circuit here. Note that the power and ground buses on your breadboard may be reversed from what is shown in the figures. In the figures, the power (+) buses are on the left and the ground (-) buses are on the right. This orientation is reversed on some breadboard.
- Connect the Arduino's 5V pin to the right-side power bus.
- Connect one of the Arduino's GND pins to one of the ground buses. Connect the two ground buses with a jumper wire.
- Make sure you do not get the H-bridge and the inverter mixed up. They look similar. The H-bridge has 16 pins (8 per side) and should have the text L293D on it. The inverter has 14 pins (7 per side) and should have the text 74HC04 on it. There may be additional text on either part.
- Insert the H-bridge into the breadboard so it spans the gap in the middle, with the semicircular notch pointed towards the top of the breadboard. The H-bridge's pins are numbered 1 through 16, going counterclockwise from the top left. Connect them as follows. We will leave some of the pins empty for now:
- Pin 1 to 5V (right-side power bus)
- Pin 2 to Arduino pin 3
- Pin 4 to ground
- Pin 5 to ground
- Pin 8 to the left-side power bus (you have not connected an external power supply yet)
- Pin 12 to ground
- Pin 13 to ground
- Pin 16 to 5V (right-side power bus)
- Insert the inverter into the breadboard the same way you inserted the H-bridge (spanning the gap in the middle with the notch pointed up). Connect the pins as follows:
- Inverter pin 1 to H-bridge pin 2
- Inverter pin 2 to H-bridge pin 7
- Inverter pin 7 to ground
- Inverter pin 14 to 5V (right-side power bus)
- Connect your ultrasonic transmitter to the breadboard using alligator clips and jumper wires, as shown in Figure 4.
- Connect one pin to H-bridge pin 3.
- Connect one pin to H-bridge pin 6.
- Connect your 18V external power supply to the power and ground buses on the left side of your breadboard.
- Use the barrel jack adapter and jumper wires to connect the power supply to the breadboard, as shown in Figure 4.
- Note that it is important for your entire circuit to have a common ground, which is why the breadboard ground buses, the power supply's negative wire, and the Arduino GND pin are all connected.
- It is important not to connect the two different positive power buses, which have two different voltages (5V and 18V). This will create a short circuit and can damage your Arduino.


- Download the ultrasonic_haptics_pulse_generation.ino example code. Read through the commented code so you understand how it works.
- The example code is written for an Arduino Uno R4 or compatible third-party board. It uses the
digitalWriteanddelayMicrosecondsfunctions to rapidly toggle an Arduino pin on and off, generating an approximate 40 kHz signal. Since thedigitalWritecommand takes some time to run, the timing is not exact, but the signal should be reasonably close to 40 kHz. After each burst of ultrasonic sound, an additional delay pulses the entire signal on and off at a lower frequency. - If you are using an Arduino Uno R3 or a compatible board, you can use the Arduino
tonefunction (instead of aforloop withdigitalWriteanddelayMicroseconds) to generate a signal at almost exactly 40 kHz. You cannot use thetonefunction on an Uno R4 because it results in an actual output signal of 41.67 kHz, which is too far past the transmitter's resonant frequency.
- The example code is written for an Arduino Uno R4 or compatible third-party board. It uses the
- Upload the code to your Arduino. Hold your fingertip a few millimeters above your ultrasonic transmitter. Can you feel anything? You should feel a slight tingling sensation. Move your finger up and down slightly to try and find the spot where the sensation is strongest.
- Experiment with changing the
numPulsesvariable and see what happens. This variable controls the number of ultrasonic pulses generated in each burst of sound. Generating more pulses takes longer, so increasing this number will decrease the modulation frequency of your signal. - You can calculate the modulation frequency using the following equations. These calculations are approximate, since the amount of time it takes the
digitalWritecommand to run is not exact. Note: Since the timing of the code is very important, you should do these calculations yourself or write a separate program to do them. Avoid editing the program to do the calculations for you, or it will mess up the timing of the ultrasonic signal.- First, calculate the period of your pulsed signal (the amount of time from the beginning of one ultrasonic burst to the beginning of the next):
Equation 1: - Next, convert the period to frequency. Be careful with units! The delay times in your code are in microseconds. One microsecond is one millionth of a second. Divide your period from Equation 1 by one million to convert it to seconds before you calculate the frequency in hertz.
Equation 2:
- First, calculate the period of your pulsed signal (the amount of time from the beginning of one ultrasonic burst to the beginning of the next):
- Create a data table like Table 1.
| Sensation | |||||
|---|---|---|---|---|---|
| numPulses (number of ultrasonic pulses) | modulation frequency (Hz) | Trial 1 | Trial 2 | Trial 3 | Average |
- Sweep through a range of values for the
numPulsesvariable. For example, you could go from 10 to 300 in increments of 10, but you can try different ranges of increments. Record each value in your data table and calculate the corresponding modulation frequency. - For each value, hold your finger in the same position over the transmitter. Record the sensation you feel on a numeric scale. For example, you could use a 0-3 scale, where 0 means you cannot feel anything, and 3 means the sensation is the strongest. If you find it too difficult to differentiate between values of 1, 2, and 3 on that scale, you could simply mark the column yes or no to indicate whether or not you could feel the vibration.
- Sweep through the
numPulsesvalues two more times, for a total of three trials at each value. - Analyze your results.
- Calculate an average sensation rating for each value. If you used yes/no ratings, record the majority result.
- Create a graph with modulation frequency on the x-axis and sensation rating on the y-axis.
- What frequency did you feel most strongly? Is this consistent with your background research about what frequencies human touch is most sensitive to?
Ask an Expert
Global Goals
The United Nations Sustainable Development Goals (UNSDGs) are a blueprint to achieve a better and more sustainable future for all.
Variations
- Perform the experiment with more people. Does everyone report maximum sensitivity at the same frequency, or does it vary from person to person? Does it depend on the person's age?
- Use a higher-voltage external power supply to generate a more powerful ultrasonic signal that can be felt from farther away. Make sure you do not exceed the voltage ratings of the components in your circuit. Ask an adult experienced with electronics for help. How does the sensation rating change with distance from the transmitter? Important: wear hearing protection if you try this. Prolonged exposure to intense ultrasonic sound can potentially cause damage to your ears, even if you cannot hear the sound.
- Try using multiple ultrasonic transmitters to create a focal point in space with constructive interference and a stronger vibration. Can you change the location of this focal point either by aiming the transmitters or controlling the phase delay between the sensors' drive signals?
- Can humans feel regular sound in the same manner? Can you do this project with a regular speaker in the audible range? What are some advantages and disadvantages of doing this project with audible sound instead of ultrasonic sound?
Careers
If you like this project, you might enjoy exploring these related careers:
Contact Us
Our kits are developed in partnership with Home Science Tools®. If you have purchased a kit for this project, Home Science Tools® is pleased to answer any questions.In your email, please follow these instructions:
- Include your Home Science Tools® order number.
- Please describe how you need help as thoroughly as possible:
Examples
Good Question I'm trying to do Experimental Procedure step #5, "Scrape the insulation from the wire. . ." How do I know when I've scraped enough?
Good Question I'm at Experimental Procedure step #7, "Move the magnet back and forth . . ." and the LED is not lighting up.
Bad Question I don't understand the instructions. Help!
Good Question I am purchasing my materials. Can I substitute a 1N34 diode for the 1N25 diode called for in the material list?
Bad Question Can I use a different part?
Contact Support









