A comprehensive IoT-enabled real-time parking and transit information system for Delhi NCR, featuring Arduino sensor integration, interactive maps, community reporting, and intelligent parking search.
Park & Ride+ is a full-stack IoT web application that combines real Arduino hardware sensors with cloud-based deployment to help Delhi NCR commuters find parking, track public transit, and share community reports. The platform bridges physical parking sensors with a modern web interface for real-time availability tracking.
π Live Application: https://park-ride-new1.vercel.app/
Real Hardware Integration:
-
β Arduino Mega 2560 with IR sensors detecting actual car entry/exit
-
β USB Serial Communication forwarding sensor data to cloud
-
β Node.js Serial Bridge running on local machine
-
β Vercel Serverless Functions receiving Arduino data via HTTP POST
-
β Firebase Firestore storing real-time parking availability
-
β React Frontend displaying live Arduino data (updates every 10 seconds)
Key Features:
-
π Real Arduino Sensors - Physical IR sensors tracking parking occupancy
-
πΊοΈ Interactive Google Maps with real-time transit tracking
-
π ΏοΈ Hybrid Data Model - 1 real Arduino parking + 2 simulated locations -
π Community reporting system with image uploads
-
β User favorites and personalized parking recommendations
-
π Intelligent parking search with location-based filtering
-
π Secure Firebase authentication
-
π 10 Metro lines visualization
-
β‘ Serverless Architecture - Works with Arduino locally and Vercel remotely
Hardware Setup:
-
Microcontroller: Arduino Mega 2560
-
Sensors: 2x IR Obstacle Sensors (Entry & Exit detection)
-
Display: LCD 16x2 with I2C interface
-
Actuator: SG90 Servo Motor (automated gate control)
-
Communication: USB Serial (9600 baud)
System Architecture:
βββββββββββββββββββ
β Arduino Mega β β IR Sensors (Pins 2 & 3)
β (Hardware) β β LCD Display (I2C)
ββββββββββ¬βββββββββ β Servo Motor (Pin 9)
β USB Serial (9600 baud)
β
βββββββββββββββββββ
β Serial Bridge β β Node.js (serialport)
β (Local PC) β β Runs continuously
ββββββββββ¬βββββββββ
β HTTP POST every 5s
β
βββββββββββββββββββ
β Vercel Function β β /api/arduino/parking
β (Cloud API) β β Serverless
ββββββββββ¬βββββββββ
β Store in Firestore
β
βββββββββββββββββββ
β Firebase β β Collection: arduino-parking
β (Database) β β Real-time updates
ββββββββββ¬βββββββββ
β GET /api/transit-data (10s polling)
β
βββββββββββββββββββ
β React Frontend β β Displays live data
β (Vercel) β β Green card + parking list
βββββββββββββββββββ
Arduino Features:
-
β Real-time car counting (entry/exit tracking)
-
β Available slots calculation (Total - Occupied)
-
β JSON output via Serial (
{"parkingLotId":"SAB_Mall_Parking","totalSlots":3,"availableSlots":2}) -
β LCD display showing availability
-
β Automated gate control with servo
-
β Entry/exit beep indicators
Current Arduino Parking Locations:
- SAB Mall Parking - 3 slots (Real Arduino data)
-
Location: Sector 27, Noida
-
GPS: [28.567582, 77.322673]
-
Hourly Rate: βΉ30/hr
-
Status: π’ Live (Real-time updates)
- Noida City Centre Parking (Optional second Arduino)
-
Location: Sector 32, Noida
-
GPS: [28.5744, 77.3564]
-
Status: Can be configured in bridge script
Serial Bridge Configuration:
// arduino-serial-bridge.js
const port = '/dev/ttyUSB0';
const baudRate = 9600;
const serverUrl = 'https://park-ride-new1.vercel.app';
const postInterval = 5000; // 5 seconds-
Google Maps Integration - Primary mapping with
@react-google-maps/api -
Route Visualization - Polylines showing complete transit routes
-
Color-coded Markers - Green (available), Orange (limited), Red (full) for parking
-
Marker Clustering - Smart grouping of reports for better map clarity
-
Location Search - Google Places API integration for address lookup
Hybrid Data Model:
-
1 Real Arduino Location (SAB Mall Parking - Live sensors)
-
2 Simulated Locations (Connaught Place, India Gate - Demo data)
Arduino Parking Features:
-
β Real-time occupancy from IR sensors
-
β Automatic availability updates (every 5 seconds from hardware)
-
β Visual indicators: Green (available), Orange (limited), Red (full)
-
β Live percentage calculation
-
β "π Arduino Connected" badge on cards
-
β Appears first in parking list (sorted by Arduino connection)
-
β Green gradient card in sidebar for selected Arduino parking
Simulated Parking Features:
-
Realistic data using Faker.js
-
Random availability changes (Β±5% every update)
-
Used for demonstration and testing
-
Same UI/UX as real Arduino data
Parking Card Information:
-
Real-time availability tracking (e.g., "2/3 available")
-
Capacity vs occupied visualization
-
Hourly rate information
-
Distance calculation from user location
-
Quick add to favorites
-
GPS coordinates for mapping
Metro Lines (10) - Simulated Data:
Metro Tracking Features:
-
Route path visualization with DMRC color coding
-
Speed and status indicators
-
Next station information
-
Simulated real-time movement
Note: Transit data is currently simulated using Faker.js for demonstration purposes.
Report Categories:
-
π Parking Issues
-
π Metro Updates
-
π General Reports
Features:
-
Location-based reporting (click on map or use current location)
-
Image upload support (Cloudinary + local storage fallback)
-
Rich text descriptions with validation
-
Community upvoting system
-
Category-specific emoji markers
-
Real-time report filtering
-
Search functionality
-
Report resolution tracking
-
Save frequently used parking locations
-
User-specific favorites tied to Firebase Auth
-
Persistent storage in Firestore
-
Quick access from dedicated Favorites page
-
One-click add/remove functionality
-
Visual indication on map for favorited lots
-
Location-based Search - Find parking near any address
-
Distance Filtering - 1km, 3km, 5km, 10km radius options
-
Google Places Integration - Autocomplete address search
-
Visual Results - Map markers for matching parking lots
-
Detailed Cards - Distance, availability, and rates
-
User Location - GPS-based current location detection
-
Route Planning - Integration with route planner
-
Firebase Authentication - Email/password login
-
Protected Routes - Login required for app access
-
Auth Context - Global authentication state management
-
Session Persistence - Stay logged in across sessions
-
User Profile - Display name and email management
-
Secure API - Token-based API authentication
-
Input Validation - Validator.js for sanitization
| Component | Model | Purpose |
|-----------|-------|---------|
| Microcontroller | Arduino Mega 2560 | Main controller for parking system |
| Entry Sensor | IR Obstacle Sensor | Detects car entry |
| Exit Sensor | IR Obstacle Sensor | Detects car exit |
| Display | LCD 16x2 (I2C) | Shows availability to drivers |
| Gate Control | SG90 Servo Motor | Automated barrier |
| Communication | USB Serial (9600) | Data transmission to PC |
| Technology | Version | Purpose |
|------------|---------|---------|
| React | 18.2.0 | UI library |
| React Router | 6.30.1 | Client-side routing |
| Vite | 4.5.14 | Build tool & dev server |
| Google Maps API | 2.20.7 | Primary mapping solution |
| React Leaflet | 4.2.1 | Leaflet React components |
| React Leaflet Cluster | 3.1.1 | Marker clustering |
| Firebase | 10.14.1 | Client-side auth SDK |
| Technology | Version | Purpose |
|------------|---------|---------|
| Express.js | 5.1.0 | Web framework (local dev) |
| Node.js | 16+ | Runtime environment |
| SerialPort | 12.0.0 | Arduino USB communication |
| Axios | 1.7.9 | HTTP client for bridge |
| Firebase Admin | 13.5.0 | Server-side SDK |
| Faker.js | 10.1.0 | Simulated data generation |
| Multer | 2.0.2 | File upload handling |
| Cloudinary | 2.8.0 | Cloud image storage |
| Validator | 13.15.20 | Input sanitization |
| Winston | 3.18.3 | Logging framework |
| Helmet | 8.1.0 | Security middleware |
| Compression | 1.8.1 | Response compression |
| CORS | 2.8.5 | Cross-origin support |
-
Firebase Firestore - NoSQL database for reports, favorites, and Arduino parking data
-
Cloudinary - Cloud-based image CDN (optional)
-
Local Storage - Fallback for image uploads
-
Vercel Serverless Functions - Production API endpoints
-
Vercel Static Hosting - React frontend deployment
-
Express Server - Local development fallback
-
Node.js Serial Bridge - Runs on local machine with Arduino
-
Continuous Deployment - Auto-deploy from Git (GitHub β Vercel)
-
Node.js 16.0.0 or higher (Download)
-
npm (comes with Node.js)
-
Firebase Project (Create one)
-
Google Maps API Key (Get key)
-
Arduino Mega 2560 (optional - for real sensor data)
-
Arduino IDE (if using hardware) (Download)
git clone https://github.com/bikund2017/Park-Ride.git
cd Park-Ride# Install backend dependencies
npm install
# Install frontend dependencies
cd client
npm install
cd ..- Create Firebase Project:
-
Go to Firebase Console
-
Click "Add Project"
-
Enable Authentication (Email/Password)
-
Enable Firestore Database
- Download Service Account Key:
-
Go to Project Settings β Service Accounts
-
Generate New Private Key
-
Save as
serviceAccountKey.jsonin project root
- Get Web App Credentials:
-
Go to Project Settings β General
-
Add Web App
-
Copy configuration values
-
Go to Google Cloud Console
-
Create or select a project
-
Enable APIs:
-
Maps JavaScript API
-
Places API
-
Geocoding API
-
Create credentials (API Key)
-
Restrict key (optional but recommended)
Backend Configuration (Create /.env):
# Server Configuration
NODE_ENV=development
PORT=3002
# Optional: Delhi Transit API
DELHI_TRANSIT_API_KEY=your_api_key_if_available
# Optional: Cloudinary Image Upload
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
# Optional: CORS Origins (comma-separated)
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173
Frontend Configuration (Create /client/.env):
# Firebase Configuration
VITE_FIREBASE_API_KEY=your_firebase_api_key
VITE_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your-project-id
VITE_FIREBASE_STORAGE_BUCKET=your-project.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
VITE_FIREBASE_APP_ID=your_app_id
# Google Maps API Key
VITE_GOOGLE_MAP_API=your_google_maps_api_keyOption 1: Run
# Terminal 1 - Backend (Port 3002)
npm run dev
# Terminal 2 - Frontend (Port 3000)
cd client
npm run devComponents Needed:
-
1x Arduino Mega 2560
-
2x IR Obstacle Sensors
-
1x LCD 16x2 with I2C module
-
1x SG90 Servo Motor
-
1x Breadboard
-
Jumper wires
-
1x USB A to B cable
-
Power supply (if needed)
IR Sensors:
-
Entry Sensor:
-
VCC β Arduino 5V
-
GND β Arduino GND
-
OUT β Arduino Pin 2
-
Exit Sensor:
-
VCC β Arduino 5V
-
GND β Arduino GND
-
OUT β Arduino Pin 3
LCD Display (I2C):
-
VCC β Arduino 5V
-
GND β Arduino GND
-
SDA β Arduino SDA (Pin 20)
-
SCL β Arduino SCL (Pin 21)
Servo Motor:
-
Red Wire β Arduino 5V
-
Brown Wire β Arduino GND
-
Orange Wire β Arduino Pin 9
-
Open Arduino IDE
-
Install Required Libraries:
-
Go to Sketch β Include Library β Manage Libraries
-
Install:
LiquidCrystal_I2C -
Install:
Servo
- Load the Code:
-
Open
arduino/parking_sensor_system.ino -
Or copy code from
arduino/folder
- Configure Settings:
#define TOTAL_PARKING_SLOTS 3 // Change based on your parking lot
#define PARKING_LOT_ID "SAB_Mall_Parking" // Unique identifier
- Upload to Arduino:
-
Select Board: Arduino Mega 2560
-
Select Port: (e.g., COM3 or /dev/ttyUSB0)
-
Click Upload
- Verify Operation:
-
LCD should display: "Available: X/3"
-
Serial Monitor (9600 baud) should show JSON output
-
Test sensors by moving hand in front of IR sensors
- Find Arduino Port:
# Linux
ls /dev/tty*
# Look for /dev/ttyUSB0- Edit Bridge Configuration:
# Open arduino-serial-bridge.js
nano arduino-serial-bridge.js
- Update Port Settings:
const portPath = '/dev/ttyUSB0'; // Change to your port
const baudRate = 9600;
const serverUrl = 'https://park-ride-new1.vercel.app'; // Or localhost:3002 for local- Install Bridge Dependencies:
npm install serialport axios
- Run Serial Bridge:
node arduino-serial-bridge.js
- Verify Connection:
-
You should see:
β Arduino connected on /dev/ttyUSB0 -
Every 5 seconds:
β Data sent to server successfully! -
Check Vercel/local server logs for incoming data
- Check Firebase:
-
Go to Firebase Console β Firestore
-
Look for collection:
arduino-parking -
Should see document:
SAB_Mall_Parkingwith latest data
- Check Frontend:
-
Open http://localhost:5173 (or Vercel URL)
-
Search for "parking"
-
SAB Mall Parking should appear first with π badge
-
Availability should match Arduino LCD display
- Test Real-Time Updates:
-
Wave hand in front of Entry IR sensor
-
LCD should update: "Available: 2/3"
-
After 5 seconds, website should refresh
-
Green card should show: "2 / 3 available"
Option 1: Screen (Linux/Mac)
screen -S arduino-bridge
node arduino-serial-bridge.js
# Press Ctrl+A, then D to detach
# Reattach: screen -r arduino-bridge
Park-Ride/
βββ api/ # Vercel Serverless Functions
β βββ arduino/
β β βββ parking.js # POST/GET Arduino sensor data
β βββ favorites.js # GET/POST favorites
β βββ health.js # Health check endpoint
β βββ report.js # POST new report
β βββ reports.js # GET all reports
β βββ transit-data.js # GET parking + transit data (hybrid)
β βββ favorites/
β β βββ delete.js # DELETE favorite
β βββ reports/
β βββ [id]/
β βββ upvote.js # POST upvote report
βββ arduino/ # Arduino Hardware Code
β βββ parking_sensor_system.ino # Main Arduino sketch
β βββ arduino-serial-bridge.js # Node.js USBβHTTP bridge
β βββ README.md # Arduino setup guide
βββ client/ # React Frontend
β βββ public/ # Static assets
β βββ src/
β β βββ components/ # React components
β β β βββ Header.jsx # App header
β β β βββ Navbar.jsx # Navigation bar
β β β βββ Sidebar.jsx # Sidebar with real-time Arduino updates
β β β βββ MapViewGoogle.jsx # Google Maps component
β β β βββ ParkingSearch.jsx # Search functionality
β β β βββ RoutePlanner.jsx # Route planning
β β β βββ ReportForm.jsx # Report submission
β β β βββ ProtectedRoute.jsx# Auth guard
β β β βββ LoadingSpinner.jsx# Loading UI
β β βββ contexts/
β β β βββ AuthContext.jsx # Auth state management
β β βββ pages/ # Route pages
β β β βββ Home.jsx # Landing page
β β β βββ Login.jsx # Login page
β β β βββ Signup.jsx # Registration page
β β β βββ Reports.jsx # Reports page
β β β βββ Favorites.jsx # Favorites page
β β β βββ About.jsx # About page
β β β βββ NotFound.jsx # 404 page
β β βββ App.jsx # Main app component
β β βββ main.jsx # App entry point
β β βββ firebaseConfig.js # Firebase client config
β β βββ index.css # Global styles
β β βββ map-fix.css # Map-specific styles
β βββ package.json # Frontend dependencies
β βββ vite.config.js # Vite configuration
βββ services/
β βββ transitAPI.js # Transit API integration
βββ utils/
β βββ logger.js # Winston logger
βββ uploads/ # Local image storage
βββ config.js # Server configuration
βββ firebase.js # Firebase Admin SDK
βββ server.js # Express server (local dev)
βββ package.json # Backend dependencies
βββ vercel.json # Vercel deployment config
βββ nodemon.json # Nodemon configuration
βββ cleanup-firebase.js # Firebase cleanup utility
βββ serviceAccountKey.json # Firebase credentials (gitignored)
βββ VERCEL_ARDUINO_SETUP.md # Arduino deployment guide
βββ README.md # This file
-
Local:
http://localhost:3002/api -
Production:
https://park-ride-new1.vercel.app/api
POST /api/arduino/parking
-
Description: Receive Arduino sensor data (called by serial bridge)
-
Body:
{
"parkingLotId": "SAB_Mall_Parking",
"totalSlots": 3,
"availableSlots": 2
}
- Response:
{
"success": true,
"message": "Arduino parking data saved successfully",
"data": {
"parkingLotId": "SAB_Mall_Parking",
"name": "SAB Mall Parking",
"location": [28.567582, 77.322673],
"totalSlots": 3,
"availableSlots": 2,
"lastUpdated": "2025-11-06T10:30:00.000Z"
}
}
GET /api/arduino/parking
-
Description: Get latest Arduino parking data
-
Response:
{
"data": [
{
"parkingLotId": "SAB_Mall_Parking",
"name": "SAB Mall Parking",
"totalSlots": 3,
"availableSlots": 2,
"location": [28.567582, 77.322673],
"hourlyRate": 30,
"lastUpdated": "2025-11-06T10:30:00.000Z"
}
]
}
GET /api/transit-data
-
Description: Get all parking lots (Arduino + simulated) and transit vehicles
-
Response:
{
"parkingLots": [
{
"id": "SAB_Mall_Parking",
"name": "SAB Mall Parking",
"location": [28.567582, 77.322673],
"capacity": 3,
"availableSpots": 2,
"hourlyRate": 30,
"arduinoConnected": true,
"lastUpdated": "2025-11-06T10:30:00.000Z"
},
{
"id": 0,
"name": "Connaught Place Park & Ride",
"location": [28.6315, 77.2167],
"capacity": 250,
"availableSpots": 180,
"arduinoConnected": false
}
],
"transitVehicles": [...],
"timestamp": "2025-11-06T10:30:00.000Z",
"dataMode": "hybrid"
}
GET /api/health
-
Description: Server health check
-
Response:
{
"status": "operational",
"timestamp": "2025-11-01T12:00:00.000Z",
"server": { "uptime": 12345, ... },
"apis": { ... },
"data": { "transitVehicles": 19, "parkingLots": 12 }
}
POST /api/report
-
Description: Submit a new community report
-
Body:
{
"location": [28.6139, 77.2090],
"description": "Parking lot full, overflow parking needed",
"category": "parking",
"imageUrl": "https://..."
}
- Response:
{
"message": "Report submitted successfully",
"reportId": "abc123"
}
GET /api/reports?category=parking&limit=100
-
Description: Get all reports with optional filtering
-
Query Params:
-
category(optional): Filter by category -
search(optional): Search in descriptions -
limit(optional): Max results (default: 100) -
Response:
{
"reports": [...],
"total": 42
}
POST /api/reports/{id}/upvote
-
Description: Upvote a specific report
-
Response:
{
"message": "Report upvoted successfully",
"upvotes": 15
}
POST /api/favorites
-
Description: Add parking lot to favorites
-
Body:
{
"userId": "firebase_user_id",
"parkingLotId": 5
}
GET /api/favorites?userId={userId}
-
Description: Get user's favorite parking lots
-
Response:
{
"favorites": [...]
}
DELETE /api/favorites/delete?userId={userId}&parkingLotId={lotId}
- Description: Remove from favorites
1. Physical Event
ββ Car enters/exits parking lot
ββ IR Sensor detects movement (Pin 2 or 3)
ββ Arduino updates counter
ββ LCD displays: "Available: 2/3"
2. Serial Communication
ββ Arduino sends JSON via USB every loop
ββ {"parkingLotId":"SAB_Mall_Parking","totalSlots":3,"availableSlots":2}
ββ Serial Bridge (Node.js) receives data
3. HTTP POST to Cloud
ββ Bridge sends POST to Vercel
ββ https://park-ride-new1.vercel.app/api/arduino/parking
ββ Serverless function processes request
4. Database Storage
ββ Vercel function writes to Firebase
ββ Collection: arduino-parking
ββ Document: SAB_Mall_Parking
5. Frontend Polling
ββ React app fetches every 10 seconds
ββ GET /api/transit-data
ββ Merges Arduino + simulated data
6. UI Update
ββ Sidebar green card shows: "2 / 3 available"
ββ Parking list card updates with π badge
ββ Map marker changes color (Green/Orange/Red)
- Client Initialization
-
User accesses app at
localhost:5173(dev) orpark-ride-new1.vercel.app(prod) -
React app loads with Firebase Auth check
-
Google Maps API initializes with API key
- Authentication Flow
-
User logs in via Firebase Auth (email/password)
-
Auth token stored in browser localStorage
-
Protected routes check auth state via
AuthContext -
User ID used for favorites and personalized features
- Data Polling
-
Client polls
/api/transit-dataevery 10 seconds -
Server fetches Arduino data from Firebase
-
Server generates simulated parking data (Faker.js)
-
Hybrid data (1 real + 2 simulated) returned to client
- Map Rendering
-
Google Maps renders Delhi NCR centered at
[28.6139, 77.2090] -
Arduino parking lots displayed with π badge
-
Simulated parking shown with standard markers
-
Real-time availability colors: Green (>50%), Orange (20-50%), Red (<20%)
- Community Reports
-
User clicks map or uses current location
-
Fills out report form (description, category, optional image)
-
Image uploaded to Cloudinary or local storage
-
Report saved to Firestore with geolocation
-
All users see report on map immediately
- Favorites System
-
User clicks star icon on parking lot (Arduino or simulated)
-
Favorite saved to Firestore:
favorites/{userId}-{lotId} -
Favorites page fetches user-specific favorites
-
Real-time Arduino availability shown for favorited lots
- Parking Search
-
User enters address in search box
-
Google Places Autocomplete suggests addresses
-
User selects location or uses current GPS
-
Map filters parking lots within selected radius
-
Distance calculated using Haversine formula
Current Implementation:
-
Arduino Data: Real IR sensor data (SAB Mall Parking - 3 slots)
-
Simulated Data: 2 locations using Faker.js (Connaught Place, India Gate)
-
Update Frequency:
-
Arduino: Every 5 seconds (bridge POST interval)
-
Frontend: Every 10 seconds (polling interval)
-
Simulated: Random changes Β±5% on each update
Real-Time Update Chain:
Arduino (5s) β Serial Bridge (5s) β Vercel (instant) β Firebase (instant) β Frontend (10s)
Total latency: 5-15 seconds from physical event to UI update
Build Frontend:
cd client
npm run build
# Output: client/dist/
Deploy client/dist/ to any static hosting:
-
Netlify
-
GitHub Pages
-
Firebase Hosting
-
AWS S3 + CloudFront
Deploy Serverless Functions:
-
Copy
api/folder to serverless platform -
Configure environment variables
-
Ensure Firebase Admin SDK credentials are set
arduino-parking (NEW!)
{
// Document ID: parkingLotId (e.g., "SAB_Mall_Parking")
parkingLotId: "SAB_Mall_Parking",
name: "SAB Mall Parking",
address: "313 B E, I Block, Pocket E, Sector 27, Noida",
location: [28.567582, 77.322673],
totalSlots: 3,
availableSlots: 2,
hourlyRate: 30,
lastUpdated: Timestamp
}reports
{
id: "auto-generated",
location: [28.6139, 77.2090],
description: "Parking lot full",
category: "parking",
imageUrl: "https://...",
timestamp: Timestamp,
upvotes: 0,
resolved: false,
clientInfo: {
userAgent: "...",
ip: "..."
}
}favorites
{
id: "userId-parkingLotId",
userId: "firebase_user_id",
parkingLotId: 5,
parkingLot: { /* full parking object */ },
createdAt: Date
}-
β Helmet.js for HTTP headers
-
β CORS configuration (restricted origins)
-
β Input validation with Validator.js
-
β Firebase Authentication
-
β Rate limiting (10kb body limit)
-
β Sanitized user inputs
-
β Secure file uploads (5MB limit, image only)
-
β Environment variable protection (.env files gitignored)
-
β API key restrictions (Google Maps - domain-locked)
-
β Arduino data validation (JSON schema check)
-
β Firebase Admin SDK server-side only (private key secured)
-
Arduino Dependency: Serial bridge must run on local machine with USB connection
-
Single Arduino: Currently supports 1-2 Arduino devices (scalable with code changes)
-
Latency: 5-15 seconds delay from physical event to UI update
-
USB Requirement: Arduino must stay connected via USB (no WiFi module)
-
Local Bridge: Bridge computer must stay online for cloud updates
-
Transit Data: Metro tracking is simulated (real APIs pending integration)
-
Image Uploads: Require Cloudinary account (local fallback available)
-
Google Maps Billing: Requires enabled billing account (free tier available)
-
Arduino Mega 2560 integration
-
IR sensor entry/exit detection
-
LCD display for drivers
-
Servo motor gate control
-
Serial USB communication
-
Node.js serial bridge
-
Vercel serverless endpoint
-
Firebase real-time storage
-
React frontend display
-
Add WiFi module (ESP32/ESP8266) for wireless Arduino
-
Support multiple Arduino devices (scalable architecture)
-
Battery backup for power outages
-
SMS/Email alerts for parking full
-
QR code ticket system integration
-
License plate recognition (camera + OCR)
-
Integrate real Delhi Transit APIs (DMRC, DTC, Indian Railways)
-
Push notifications for parking availability
-
Reservation system (book parking spot in advance)
-
Payment gateway integration (UPI, cards)
-
Route optimization algorithm
-
Historical analytics dashboard
-
Admin panel for hardware management
-
Mobile app (React Native)
-
AI/ML parking prediction (occupancy forecasting)
-
Computer vision parking spot detection
-
Smart city API integrations
-
EV charging station integration
-
Weather-based parking suggestions
-
Physical parking sensor system
-
IR sensors detecting car entry/exit
-
LCD display showing real-time availability
-
Servo motor controlling gate barrier
-
Interactive Google Maps with parking markers
-
Real-time Arduino data display
-
Green gradient card for selected Arduino parking
-
π Badge indicating live hardware connection
-
Selected parking location card
-
Live availability: "2 / 3 available"
-
Data source indicator: "Real-time parking availability is being updated from Arduino sensors"