Arduino-Based Smart Car Parking System with IR Sensors and LCD Display
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
This circuit is designed to manage a car parking system using an Arduino UNO microcontroller. The system includes multiple IR sensors to detect the presence of cars, a servo motor to control a gate, and an LCD display to show the status of parking slots. The Arduino UNO reads the sensor inputs and controls the servo motor and LCD display accordingly.
Component List
IR Sensor
- Description: Infrared sensor used to detect the presence of cars.
- Pins: out, gnd, vcc
Servo
- Description: Servo motor used to control the gate.
- Pins: GND, VCC, PWM
Arduino UNO
- Description: Microcontroller used to control the entire system.
- Pins: UNUSED, IOREF, Reset, 3.3V, 5V, GND, Vin, A0, A1, A2, A3, A4, A5, SCL, SDA, AREF, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0
LCD 20x4 I2C
- Description: LCD display used to show the status of parking slots.
- Pins: GND, 5v, SCA, SCL
Wiring Details
IR Sensor
- vcc connected to 5V (common power rail)
- gnd connected to GND (common ground rail)
- out connected to:
- D10 (IR Sensor 1)
- D9 (IR Sensor 2)
- D8 (IR Sensor 3)
- D7 (IR Sensor 4)
- D6 (IR Sensor 5)
- D5 (IR Sensor 6)
- D2 (IR Sensor 7)
Servo
- VCC connected to 5V (common power rail)
- GND connected to GND (common ground rail)
- PWM connected to D3
Arduino UNO
- 5V connected to 5V (common power rail)
- GND connected to GND (common ground rail)
- A4 connected to SCA of LCD 20x4 I2C
- A5 connected to SCL of LCD 20x4 I2C
- D10 connected to out of IR Sensor 1
- D9 connected to out of IR Sensor 2
- D8 connected to out of IR Sensor 3
- D7 connected to out of IR Sensor 4
- D6 connected to out of IR Sensor 5
- D5 connected to out of IR Sensor 6
- D4 connected to out of IR Sensor 7
- D3 connected to PWM of Servo
- D2 connected to out of IR Sensor 8
LCD 20x4 I2C
- 5v connected to 5V (common power rail)
- GND connected to GND (common ground rail)
- SCA connected to A4 of Arduino UNO
- SCL connected to A5 of Arduino UNO
Documented Code
#include <Servo.h> // Includes the servo library
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // Adjust LCD address and size if necessary
Servo myservo;
#define ir_enter 2
#define ir_back 4
#define ir_car1 5
#define ir_car2 6
#define ir_car3 7
#define ir_car4 8
#define ir_car5 9
#define ir_car6 10
int S1=0, S2=0, S3=0, S4=0, S5=0, S6=0;
int flag1=0, flag2=0;
int slot = 6;
void setup(){
Serial.begin(9600);
pinMode(ir_car1, INPUT);
pinMode(ir_car2, INPUT);
pinMode(ir_car3, INPUT);
pinMode(ir_car4, INPUT);
pinMode(ir_car5, INPUT);
pinMode(ir_car6, INPUT);
pinMode(ir_enter, INPUT);
pinMode(ir_back, INPUT);
myservo.attach(3);
myservo.write(90);
lcd.begin(); // Initialize the LCD
lcd.backlight(); // Turn on the LCD backlight
lcd.setCursor(0,1);
lcd.print(" Car parking ");
lcd.setCursor(0,2);
lcd.print(" System ");
delay(2000);
lcd.clear();
Read_Sensor();
int total = S1 + S2 + S3 + S4 + S5 + S6;
slot = slot - total;
}
void loop(){
Read_Sensor();
lcd.setCursor(0,0);
lcd.print(" Have Slot: ");
lcd.print(slot);
lcd.print(" ");
lcd.setCursor(0,1);
if(S1==1){lcd.print("S1:Fill ");} else{lcd.print("S1:Empty");}
lcd.setCursor(10,1);
if(S2==1){lcd.print("S2:Fill ");} else{lcd.print("S2:Empty");}
lcd.setCursor(0,2);
if(S3==1){lcd.print("S3:Fill ");} else{lcd.print("S3:Empty");}
lcd.setCursor(10,2);
if(S4==1){lcd.print("S4:Fill ");} else{lcd.print("S4:Empty");}
lcd.setCursor(0,3);
if(S5==1){lcd.print("S5:Fill ");} else{lcd.print("S5:Empty");}
lcd.setCursor(10,3);
if(S6==1){lcd.print("S6:Fill ");} else{lcd.print("S6:Empty");}
if(digitalRead(ir_enter) == 0 && flag1 == 0) {
if(slot > 0) {
flag1 = 1;
if(flag2 == 0) {
myservo.write(180);
slot = slot - 1;
}
} else {
lcd.setCursor(0,0);
lcd.print(" Sorry Parking Full ");
delay(1500);
}
}
if(digitalRead(ir_back) == 0 && flag2 == 0) {
flag2 = 1;
if(flag1 == 0) {
myservo.write(180);
slot = slot + 1;
}
}
if(flag1 == 1 && flag2 == 1) {
delay(1000);
myservo.write(90);
flag1 = 0;
flag2 = 0;
}
delay(1);
}
void Read_Sensor(){
S1 = (digitalRead(ir_car1) == 0) ? 1 : 0;
S2 = (digitalRead(ir_car2) == 0) ? 1 : 0;
S3 = (digitalRead(ir_car3) == 0) ? 1 : 0;
S4 = (digitalRead(ir_car4) == 0) ? 1 : 0;
S5 = (digitalRead(ir_car5) == 0) ? 1 : 0;
S6 = (digitalRead(ir_car6) == 0) ? 1 : 0;
}
This code initializes the IR sensors, servo motor, and LCD display. It continuously reads the status of the IR sensors to determine the availability of parking slots and updates the LCD display accordingly. The servo motor is used to control the gate based on the availability of slots and the presence of cars at the entrance and exit.