Overview & Core Concept
In densely populated urban hubs, horizontal land for vehicle parking is scarce and expensive. Automated Vertical Parking Systems (AVPS) solve this challenge by stacking vehicles vertically across multi-tier towers using automated elevator lifts.

This project demonstrates a functional, 2-tier automated vertical parking elevator:
- Floor 1 Call Button (14 cm): Initiates an upward motor drive for 2,100 ms to raise the cradle to the lower parking bay.
- Floor 2 Call Button (26 cm): Initiates an upward motor drive for 3,500 ms to hoist the cradle to the upper parking bay.
- Active Electrical Dynamic Braking: Holds the motor shaft locked against gravitational slip while the vehicle is positioned for 5 seconds.
- Automated Return Cycle: Reverses the motor for the exact matching duration to safely return the elevator platform to ground level for the next incoming vehicle.
Bill of Materials (BOM)
| Component | Specification | Quantity |
|---|---|---|
| Microcontroller | Arduino Uno R3 or R4 Minima | 1 |
| Motor Driver | L298N Dual H-Bridge Motor Driver | 1 |
| Actuator Motor | GA12-N20 Micro Metal Gear Motor (100:1 or 200:1) | 1 |
| User Input | 6mm Tactile Momentary Push Buttons | 2 |
| Power Supply | 7.4V (2S 18650 Li-ion) or 9Vā12V 2A DC Supply | 1 |
| Prototyping | Mini Breadboard + Male-to-Male / Male-to-Female Jumpers | 1 set |
| Mechanical | M3/M4 threaded lead screw or pulley cable + vehicle platform | 1 kit |
Circuit Schematic & Pin Allocation
By utilizing the Arduino's internal pull-up resistors (INPUT_PULLUP), we connect push buttons directly between the digital input pins and GND without needing external pull-up or pull-down resistors!

1. Arduino Pin Connections
- Digital Pin 2 ā Floor 1 Button (14 cm cycle) ā GND
- Digital Pin 3 ā Floor 2 Button (26 cm cycle) ā GND
- Digital Pin 8 ā L298N IN1 (Motor Direction Forward / Up)
- Digital Pin 9 ā L298N IN2 (Motor Direction Reverse / Down)
- GND ā L298N GND (*Common ground reference*)
2. L298N Motor Driver to N20 Motor & Power
- ENA: Leave jumper attached (full speed) or connect to PWM pin for speed control.
- OUT1 & OUT2 ā N20 Motor Lead Wires.
- 12V Input Screw Terminal ā Battery / Power Supply Positive (+).
- GND Screw Terminal ā Battery Negative (-) AND Arduino GND (*Crucial!*).
- 5V Output Terminal ā Arduino VIN or 5V pin (if powering Arduino from the driver's onboard 5V regulator).
Deep Dive: Why Electrical Dynamic Braking is Essential
A common issue in vertical lift mechanisms is gravitational back-driving: when motor power is simply turned OFF (LOW, LOW), the weight of the platform and toy car can pull the motor shaft downward, causing the platform to drop during the parking window!
This project solves that issue with Active Electrical Dynamic Braking:
How it works:
When both IN1 and IN2 are driven HIGH simultaneously, the H-bridge's internal power switches bridge both terminals of the DC motor together. If gravity tries to turn the motor shaft, the motor acts as an electrical generator. Shorting the coils creates counter-electromotive force (Counter-EMF), resisting rotation and acting as an electromagnetic brake to hold the platform firmly at the desired floor level!
Button Debouncing & Release Latching
Mechanically pressing a button causes microscopic contact bouncing that can trigger dozens of false clicks in a fraction of a millisecond. Furthermore, if a user holds down a button, the system should only register one parking cycle.
The buttonClicked() function handles both:
- Debounce Delay (30 ms): Verifies the signal remains LOW after contact bounce settles.
- Release Latch:
while (digitalRead(buttonPin) == LOW) { delay(10); }keeps the program waiting until the user physically lifts their finger before starting the cycle.
Complete Arduino Code (vertical_parking_system.ino)
Calibration & Tuning Guide
- Travel Distance Calibration:
Depending on your N20 gear ratio (e.g. 50:1, 100:1, or 298:1) and the pitch of your lead screw or pulley spool, the platform will travel at different speeds. To calibrate:
- If the platform stops short of 14 cm, increase
FLOOR1_UP_TIME(e.g. from2100to2300). - If the platform overshoots, decrease the time value.
- Set
FLOOR1_DOWN_TIMEto match or slightly exceed the up-time to ensure the platform returns completely flush with the ground.
- Reverse Motor Direction:
If the elevator moves down when it should move up, simply swap the two motor wires connected to the L298N OUT1 and OUT2 screw terminals.
- Advanced Upgrades:
- Limit Switches / Homing Endstops: Add miniature microswitches at the ground level and top level to trigger physical cutoffs instead of relying solely on timed duration.
- IR Break-Beam Sensor: Detect when a model car is placed on the platform before permitting the lift to ascend.


