Important Note: This repository contains the basic prototype version of the ultrasonic levitator. The advanced version (Version 2.0) with motorized conveyor belt and automated features was the actual award-winning model that earned the prizes mentioned below.
Award-winning high school science exhibition project demonstrating acoustic levitation using ultrasonic transducers
This project showcases the fascinating physics of acoustic levitation - the ability to suspend objects in mid-air using nothing but sound waves! By creating precise standing wave patterns with ultrasonic transducers, small particles can be trapped and levitated against gravity.
- π₯ 1st Prize - State Level Science Exhibition
- π₯ 2nd Prize - Zonal Level Science Fair
ultrasonic_levitator.mp4
Watch the complete levitation system in action
ultrasonic_levitator_closeup.mp4
Principle:
Uses intense sound wave radiation pressure to counteract gravity on small objects via nonlinear acoustic effects.
-
Standing Wave Generation
Opposing ultrasonic transducers create interference patterns. -
Stable Trapping
Objects are trapped at pressure nodes (minimal acoustic pressure variation). -
Force Balance
Time-averaged radiation pressure (nonlinear Bernoulli effect) provides upward force equal to gravity. -
Frequency Scaling
Ultrasonic frequencies (e.g., 40 kHz) match wavelength to object size (Ξ» β 8.6 mm for mm-scale particles), not object resonance.
- Standing Wave Interference
- Acoustic Radiation Pressure
- Gor'kov Potential Theory
- Wavelength-Object Size Matching
Component | Purpose | Specifications |
---|---|---|
Arduino Uno | Signal Generation | 40kHz via Timer1 interrupts |
HC-SR04 Transducers | Ultrasonic Emission | 40kHz piezoelectric elements |
Power Supply | System Power | 5V DC source |
Support Framework | Alignment System | Manual positioning mechanism |
- Transducers: Connect to analog pins A0, A1, A2, A3, A4, A5
- Power: All transducers VCC to Arduino 5V
- Ground: All transducers GND to Arduino GND
Circuit diagram showing the connection setup for ultrasonic transducers
Credit: Schematic reference from Edison Science Corner - was really helpful while building the project
The system uses Timer1 interrupts for precise 40kHz frequency generation. This provides more accurate timing than the basic tone()
function:
byte TP = 0b10101010; // Every other port receives the inverted signal
void setup() {
DDRC = 0b11111111; // Set all analog ports to be outputs
// Initialize Timer1
noInterrupts(); // Disable interrupts
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 200; // Set compare register (16MHz / 200 = 80kHz square wave -> 40kHz full wave)
TCCR1B |= (1 << WGM12); // CTC mode
TCCR1B |= (1 << CS10); // Set prescaler to 1 ==> no prescaling
TIMSK1 |= (1 << OCIE1A); // Enable compare timer interrupt
interrupts(); // Enable interrupts
}
ISR(TIMER1_COMPA_vect) {
PORTC = TP; // Send the value of TP to the outputs
TP = ~TP; // Invert TP for the next run
}
void loop() {
// Nothing left to do here :)
}
code/prototype_code.ino
- Complete levitation code
- Precise Timing: Uses hardware Timer1 for exact 40kHz generation
- Multiple Outputs: Can drive transducers on analog pins A0-A5
- Efficient: Interrupt-based operation with minimal CPU overhead
Code Reference: Timer-based implementation adapted from Edison Science Corner - was really helpful while building the project
Status: Completed and Demonstrated
Basic prototype setup showing the ultrasonic levitation system
Features:
- Dual transducer setup using salvaged HC-SR04 elements
- Arduino-based 40kHz signal generation
- Manual alignment system
- Successfully levitates thermocol/foam particles
Demonstration: Available in project videos
Status: Award-Winning Model (State and zonal level)
Enhanced Features:
- Integrated motorized conveyor belt system
- L298N motor driver for precise movement control
- Automated particle feeding mechanism
- Enhanced stability and precision
Unfortunately, I lost the videos and documentation for Version 2.0 during a phone data transfer
- Operating Frequency: 40 kHz Β± 100 Hz
- Maximum Levitation Height: 5-8 mm
- Particle Size Range: 0.5-3 mm diameter
- Power Consumption: < 2W
- Setup Time: < 5 minutes
- β Thermocol/Styrofoam particles
- β Small plastic beads
- β Lightweight foam pieces
- β Paper fragments
- β Metal objects (too dense)
- β Water droplets (surface tension)
- Arduino Uno
- HC-SR04 ultrasonic sensor modules (for transducers)
- Jumper wires and breadboard
- Arduino IDE installed
-
Extract Transducers
- Carefully remove ultrasonic transducers from HC-SR04 modules
- Keep the original wiring intact
-
Make Connections
- Connect transducers to Arduino analog pins A0-A5
- Connect VCC to Arduino 5V
- Connect GND to Arduino GND
-
Upload Code
- Download
prototype_code.ino
from the/code/
folder - Upload to Arduino using Arduino IDE
- Download
-
Physical Setup
- Position two transducers face-to-face, about 2-3cm apart
- Ensure they are perfectly aligned
- Place small thermocol particles between them
-
Test
- Power on Arduino
- Observe levitation of small particles!
This project is open source and available under the MIT License.