본문 바로가기

아두이노우노 R4

Arduino를 사용한 스마트 주차 시스템

반응형

 

 

Arduino를 사용한 스마트 주차 시스템

 

Arduino 기술을 사용한 스마트 주차 시스템은 도시 주차 관리의 증가하는 과제에 대한 혁신적인 솔루션을 제공합니다. 이 시스템은 클라우드를 통해 사용자에게 주차 가능 여부와 자세한 주차 정보를 실시간 데이터로 제공하여 주차 공간 활용의 효율성을 높입니다.

 

이 시스템의 핵심은 초음파 센서나 적외선 센서와 같은 다양한 센서에 연결된 Arduino 마이크로컨트롤러를 각 주차 공간에 배치하는 것입니다. 이러한 센서는 지정된 공간에 차량이 있는지 없는지를 감지합니다. Arduino는 이 데이터를 수집하여 처리하여 어떤 주차 공간이 점유되어 있고 어떤 주차 공간이 이용 가능한지 확인합니다.

 

수집된 정보는 Wi-Fi 또는 GSM 모듈을 사용하여 클라우드 서버로 전송되어 원격 액세스가 가능합니다. 사용자는 웹 애플리케이션이나 모바일 앱에 액세스하여 주차 상태를 실시간으로 볼 수 있습니다. 이 앱은 이용 가능한 주차 공간의 수, 위치, 각 주차 공간이 점유된 기간과 같은 귀중한 세부 정보를 사용자에게 제공합니다.

 

또한, 주차 공간이 이용 가능해지거나 지정된 시간 제한을 초과할 때 사용자에게 알림을 보내도록 시스템을 프로그래밍할 수 있습니다. 이는 주차 공간을 찾는 데 소요되는 시간을 줄여 사용자 경험을 개선할 뿐만 아니라 주차 공간의 효율적인 회전을 촉진합니다.

 

기능을 더욱 강화하기 위해 시스템은 결제 게이트웨이를 통합하여 사용자가 앱을 통해 주차 공간을 예약하고 결제할 수 있도록 할 수 있습니다. 이 기능은 주차 프로세스를 간소화하여 사용자에게 편리함을 제공하고 주차 관리 수익을 창출합니다.

 

요약하자면 Arduino 기반 스마트 주차 시스템은 도시 환경에서 주차 문제를 해결하는 효과적인 방법입니다. 클라우드 기술을 활용하여 실시간 가용성 데이터와 자세한 주차 정보를 제공하여 사용자에게 원활한 경험을 제공하는 동시에 주차 리소스 관리를 최적화합니다. 

 

코드는 맨 아래를 참고하세요.

 

유튜브 영상 참고

 

 

 

 

 

 

예제 코드

 

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// Define ultrasonic sensor pins
#define TRIG_PIN_IN 7
#define ECHO_PIN_IN 6
#define TRIG_PIN_OUT 5
#define ECHO_PIN_OUT 4
// Define servo pins
#define SERVO_PIN_IN 9
#define SERVO_PIN_OUT 10
// Initialize the LCD (I2C address 0x27)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Initialize servo objects
Servo servoIn;
Servo servoOut;
// Parking variables
int vehicleCount = 0;
int parkingCapacity = 10;  // Change this as per your parking size
// Function to measure distance using ultrasonic sensor
long measureDistance(int trigPin, int echoPin) {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  long distance = duration * 0.034 / 2;  // Distance in cm
  return distance;
}
// Setup function
void setup() {
  Serial.begin(9600);
  // Initialize ultrasonic sensor pins
  pinMode(TRIG_PIN_IN, OUTPUT);
  pinMode(ECHO_PIN_IN, INPUT);
  pinMode(TRIG_PIN_OUT, OUTPUT);
  pinMode(ECHO_PIN_OUT, INPUT);
  // Initialize servos
  servoIn.attach(SERVO_PIN_IN);
  servoOut.attach(SERVO_PIN_OUT);
  // Set initial position of gates (closed)
  servoIn.write(0);  // 0 degrees (closed)
  servoOut.write(0); // 0 degrees (closed)
  // Initialize LCD
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Parking System");
  delay(2000);
  lcd.clear();
  // Display initial parking status
  updateDisplay();
}
// Loop function
void loop() {
  // Measure distance for incoming vehicles
  long distanceIn = measureDistance(TRIG_PIN_IN, ECHO_PIN_IN);
  // Check if a vehicle is detected entering
  if (distanceIn < 10) {  // Less than 10 cm means vehicle detected
    if (vehicleCount < parkingCapacity) {
      vehicleCount++;
      Serial.println("A car is entering the parking.");
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Car entering...");
      openGate(servoIn);  // Open the incoming gate
      delay(2000);        // Simulate vehicle passing
      closeGate(servoIn); // Close the incoming gate
      updateDisplay();    // Update the LCD display
    } else {
      Serial.println("Parking is full!");
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Parking Full");
      delay(2000);  // Display "Parking Full" for 2 seconds
      updateDisplay();
    }
  }
  // Measure distance for outgoing vehicles
  long distanceOut = measureDistance(TRIG_PIN_OUT, ECHO_PIN_OUT);
  // Check if a vehicle is detected leaving
  if (distanceOut < 10) {  // Less than 10 cm means vehicle detected
    if (vehicleCount > 0) {
      vehicleCount--;
      Serial.println("A car is leaving the parking.");
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Car leaving...");
      openGate(servoOut);  // Open the outgoing gate
      delay(2000);         // Simulate vehicle passing
      closeGate(servoOut); // Close the outgoing gate
      updateDisplay();     // Update the LCD display
    }
  }
  delay(500);  // Small delay to avoid flickering
}
// Function to open the gate
void openGate(Servo &servo) {
  servo.write(90);  // 90 degrees (open)
  delay(1000);      // Keep the gate open for 1 second
}
// Function to close the gate
void closeGate(Servo &servo) {
  servo.write(0);   // 0 degrees (closed)
}
// Function to update the LCD display with the current count and capacity
void updateDisplay() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Available: ");
  lcd.print(parkingCapacity - vehicleCount);
  lcd.setCursor(0, 1);
  lcd.print("Capacity: ");
  lcd.print(parkingCapacity);
}
반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^