아두이노 기반 스마트 자동 주차장 시스템 제작
부품 및 소모품
| 부품 | 수량 |
| 아두이노 UNO (모든 보드 가능) | 1 |
| 서보 모터 (Tower Pro MG996R) | 1 |
| 근접 센서 (적외선) | 3 |
| LED (일반) | 1 |
| UTSOURCE 전자 부품 | 1 |
앱 및 온라인 서비스
프로젝트 개요
만들기 너무 쉽고 재미있는 아두이노 자동 주차 시스템입니다. 차가 도착하면 빈 슬롯 수를 표시하고(빈 슬롯이 있으면) 차단기를 엽니다. 빈 슬롯이 없으면 차단기가 열리지 않습니다. 놀라운 점은 이 전체 프로젝트를 파워뱅크로만 구동할 수 있다는 것입니다!!
전체 튜토리얼은 영상을 참고하세요.
참고: 직접 만든 LED 표시 대신 디스플레이(LCD 또는 OLED)를 사용해도 됩니다.
1단계: 부품 준비
- 아두이노 - 모든 보드 가능
- 적외선 근접 센서 (두 종류 모두 작동)
- 330옴 저항
- 일부 LED
- 서보 모터 - 원하는 모델/크기
2단계: LED 디스플레이 제작
브레드보드 조각에 LED와 330옴 저항을 납땜하고 리본 케이블로 마무리했습니다. 저항은 뒤에서 납땜하여 앞면에서 보이지 않게 하여 디스플레이를 깔끔하게 만들었습니다.
참고: LCD나 저렴한 OLED 디스플레이를 사용하는 것이 더 좋습니다. 제가 없어서 직접 만들었습니다.
3단계: 주차장 구조물 제작
종이 상자를 잘라 경사로를 만들고, 서보 모터에 종이 조각을 붙여 차단기를 만들었습니다. 입구에 센서 1개, 각 슬롯에 센서 1개씩 총 3개 센서를 설치했습니다. 젓가락 두 개로 LED 디스플레이를 고정하고 상자에 붙였습니다. 아두이노 USB 케이블로 전원을 공급하므로 해당 포트 접근을 위해 상자 일부를 잘라냈습니다. 적당히 페인트칠도 했습니다.
4단계: 회로 구성
LED 배선 때문에 좀 지저분해 보이지만 실제로는 매우 간단한 회로입니다.
주의: 근접 센서는 5V로 동작하므로 아두이노 5V 핀에 바로 연결하면 됩니다.
서보를 VIN에 연결한 이유: 파워뱅크는 보통 5V 1A를 출력하며, 아두이노 USB 포트로 입력되어 온보드 레귤레이터가 0.5A를 보드에 공급합니다. VIN에 연결하면 브레드보드 없이 파워뱅크 전원에 직접 접근할 수 있어 안전하고 잘 작동합니다.
5단계: 코드
아래 코드를 아두이노에 업로드하세요.
다운로드: GitHub 또는 아래 코드 복사
/* Automated Parking Garage by Ashraf Minhaj
* www.youtube.com/c/fusebatti
* 문의: ashraf_minhaj@yahoo.com
*/
#include <Servo.h>
Servo gate; // 서보 모터로 차단기 개폐
int slot1 = 5; // 슬롯 1 IR 센서 - 디지털 핀 5
int slot2 = 4; // 슬롯 2 IR 센서 - 디지털 핀 4
int gateSensor = 3; // 차단기 앞 IR 센서 - 디지털 핀 3
int slot1_l = 13; // 슬롯 1 표시 LED
int slot2_l = 12; // 슬롯 2 표시 LED
int gate_grn = 11; // 차단기 녹색 LED
int gate_red = 10; // 차단기 적색 LED
void setup() {
gate.attach(7); // 차단기 서보 - 핀 7
pinMode(slot1, INPUT);
pinMode(slot2, INPUT);
pinMode(gateSensor, INPUT);
pinMode(slot1_l, OUTPUT);
pinMode(slot2_l, OUTPUT);
pinMode(gate_grn, OUTPUT);
pinMode(gate_red, OUTPUT);
Serial.begin(9600);
}
void loop() {
// 차 도착 감지 (센서 LOW = 차량 감지)
if (!digitalRead(gateSensor) && digitalRead(slot1) && digitalRead(slot2)) {
// 슬롯 1, 2 모두 비어있음
Serial.println("Welcome, Available: SLOT1, SLOT2");
digitalWrite(slot1_l, HIGH);
digitalWrite(slot2_l, HIGH);
delay(1000);
digitalWrite(gate_grn, HIGH);
gate.write(75); // 차단기 열기
}
if (!digitalRead(gateSensor) && !digitalRead(slot1) && digitalRead(slot2)) {
// 슬롯 1 차지, 슬롯 2 비어있음
Serial.println("Welcome, Available: SLOT2");
digitalWrite(slot1_l, LOW);
digitalWrite(slot2_l, HIGH);
delay(1000);
digitalWrite(gate_grn, HIGH);
gate.write(75);
}
if (!digitalRead(gateSensor) && digitalRead(slot1) && !digitalRead(slot2)) {
// 슬롯 2 차지, 슬롯 1 비어있음
Serial.println("Welcome, Available: SLOT1");
digitalWrite(slot1_l, HIGH);
digitalWrite(slot2_l, LOW);
delay(1000);
digitalWrite(gate_grn, HIGH);
gate.write(75);
delay(100);
}
if (!digitalRead(gateSensor) && !digitalRead(slot1) && !digitalRead(slot2)) {
// 만차
Serial.println("Welcome, Parking Full");
digitalWrite(slot1_l, LOW);
digitalWrite(slot2_l, LOW);
delay(1000);
digitalWrite(gate_red, HIGH);
delay(100);
digitalWrite(gate_red, LOW);
delay(100);
digitalWrite(gate_red, HIGH);
delay(100);
digitalWrite(gate_red, LOW);
}
if (digitalRead(gateSensor)) {
// 차량 미감지
Serial.println("Welcome");
gate.write(5); // 차단기 닫기
digitalWrite(slot1_l, LOW);
digitalWrite(slot2_l, LOW);
digitalWrite(gate_red, LOW);
digitalWrite(gate_grn, HIGH);
delay(100);
digitalWrite(gate_grn, LOW);
delay(100);
}
}
6단계: 완성
USB 케이블로 아두이노에 전원을 연결하고 즐기세요.
어떻게 업그레이드할지, 왜 그렇게 생각하는지 알려주세요. 감사합니다.
추가 자료
회로도
회로도 이미지 참조