This is an old revision of the document!
Nica Mioara Raluca - 334CA
The Automatic Parking Gate project simulates a real-world automated parking system with controlled access. It allows vehicles to enter only if they have valid authorization (via an RFID card) and only if parking spots are available. The system uses a servo motor to raise and lower a barrier, ultrasonic sensors to detect vehicle presence, an LCD to display the number of available spots, and colored LEDs to indicate the status of the parking lot.
The purpose of this project is to develop a smart access control system for parking areas, using multiple electronic modules and key concepts learned during laboratory sessions—such as RFID communication, PWM control, sensors, LCD interfacing, and interrupt handling. The goal is to build a functional and interactive prototype that simulates a secure and efficient real-life parking gate.
The idea for the project came from the observation that managing parking lots in crowded urban areas is increasingly difficult without automation. Many institutions and residential areas already use automated gates with card access and visual status indicators. This project aims to replicate such a system at a smaller scale, making use of accessible hardware and the skills acquired in class.
This project is useful as it demonstrates a practical implementation of several microcontroller-based technologies in a single integrated system. For us, it provided valuable experience in system design, hardware-software integration, and real-world problem solving. For others, it can serve as a learning resource or as a base for further development of smart parking or access control systems. It is educational, expandable, and applicable to real-life needs.
The Automatic Parking Gate project is a smart system that manages the entry of vehicles into a parking area based on access authorization (via RFID) and space availability (detected by ultrasonic sensors). The system integrates both hardware and software components that interact with each other in a coordinated manner, managed by the Arduino UNO microcontroller.
Below is the block diagram of the system, showing all modules involved:
| Component | Quantity | Arduino Pin Connections | Description / Role |
| Arduino Uno | 1 | – | Microcontroller central unit |
| RFID-RC522 | 1 | VCC→3.3 V, GND→GND, SDA(SS)→D10, SCK→D13, MOSI→D11, MISO→D12, RST→D8 | Reads card UID via SPI |
| HC-SR04 Ultrasonic Sensor | 2 | Sensor 1: VCC→5 V, GND→GND, Trig→D2, Echo→D4<br>Sensor 2: VCC→5 V, GND→GND, Trig→D5, Echo→D6 | Detects vehicle presence (entrance/exit) |
| SG90 Servo Motor | 1 | VCC→5 V, GND→GND, Signal→D9 | Raises/lowers the parking barrier |
| 16×2 LCD w/ I²C Backpack | 1 | VCC→5 V, GND→GND, SDA→A4, SCL→A5 | Displays spot count and status messages |
| Green LED | 1 | Anode→D7 (via 220 Ω), Cathode→GND | “Available spots” indicator |
| Orange LED | 1 | Anode→A0 (via 220 Ω), Cathode→GND | “Almost full” indicator |
| Red LED | 1 | Anode→A1 (via 220 Ω), Cathode→GND | “Full” indicator |
| 220 Ω Resistors | 3 | In series with each LED | Current limiting for LEDs |
| Push-Button (Override) | 1 | One side→D3 (INPUT_PULLUP), other side→GND | Manual barrier control (interrupt on D3) |
| Breadboard | 1 | – | Prototyping / common power rails |
| Jumper Wires | ~20 | – | Signal and power connections |
1. Development Environment * IDE: PlatformIO in VS Code * Compiler / Uploader: `avr‑gcc` + `avrdude` (bundled with the IDE) * MCU clock: 16 MHz (default) * Debugging: Serial Monitor @ 9600 baud; optional logic analyzer
## 2. Third‑Party Libraries * `Wire` – I2C bus (Arduino core) * `LiquidCrystal_PCF8574` – drives a 16×2 LCD via PCF8574 backpack * `SPI` – hardware SPI for MFRC522 (Arduino core) * `MFRC522` – high‑level API for the 13.56 MHz RFID reader *(miguelbalboa/MFRC522)* * `Servo` – PWM control for the barrier servo motor * `avr/io.h` – direct register access (fast LED control)
## 3. Architecture & Algorithms ### 3.1 Simplified State Flow 1. Idle – waiting for card LEDs show occupancy, LCD says “Scan card…”. 2. Entry granted valid UID + free spots. 3. Raise barrier (entry) only if ultrasonic #1 sees a vehicle and at least 10 s have passed since the last raise. 4. Count entry after ultrasonic #2 detects the vehicle, the barrier lowers and `carsInside++`. 5. Raise barrier (exit) if there are cars inside and ultrasonic #2 sees a vehicle and the 10 s cooldown has expired. 6. Count exit once the vehicle clears, the barrier lowers and `carsInside–`.
### 3.2 Key Data Structures
```cpp
const byte authorizedUID[][4]; whitelist of allowed UIDs
int carsInside; current occupancy counter
unsigned long lastRaiseMillis; timestamp of the most recent raise
```
### 3.3 Timing Constants
* `minRaiseInterval` = 10 000 ms – global cooldown between raises
* `carClearTime` = 1 500 ms – ensure sensor field is empty before closing
## 4. Source File & Functions
* `parking_barrier.ino`
• `setup()` – hardware init and “Welcome” message
• `loop()` – full finite‑state machine for entry/exit
• `readDistanceCm()` – HC‑SR04 helper
• `isAuthorized()` – UID whitelist check
• `updateLEDs()` – sets green / yellow / red LED
• `showMessage()` – prints text on the LCD
## 5. Planned Enhancements
* Safety photocell to prevent lowering onto obstacles
* EEPROM whitelist with master card for runtime UID management
* Web dashboard (ESP8266/ESP32) with live telemetry and OTA updates
<note tip>
Descrierea codului aplicaţiei (firmware):
* mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
* librării şi surse 3rd-party (e.g. Procyon AVRlib)
* algoritmi şi structuri pe care plănuiţi să le implementaţi
* (etapa 3) surse şi funcţii implementate
</note>
===== Rezultate Obţinute =====
<note tip>
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
</note>
===== Concluzii =====
===== Download =====
<note warning>
O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună
.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.
</note>
===== Jurnal =====
<note tip>
Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.
</note>
===== Bibliografie/Resurse =====
<note>
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.
</note>
<html><a class=“media mediafile mf_pdf” href=”?do=export_pdf”>Export to PDF</a></html>