Skip to content

heyjay1002/practice-arduino-elevator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

Arduino 엘리베이터 시뮬레이터

3층 건물의 엘리베이터를 Arduino로 구현한 시뮬레이터입니다. LED와 버튼을 사용하여 실제 엘리베이터의 동작을 시각적으로 표현합니다.

프로젝트 구조

project-arduino-elevator/
├── src/
│   └── oneday_elevator/
│       └── oneday_elevator.ino    # 메인 Arduino 코드
├── docs/                          # 프로젝트 문서
└── README.md                      # 프로젝트 설명서

주요 기능

1. 3층 엘리베이터 시스템

  • 1층, 2층, 3층 지원
  • 각 층별 호출 버튼 및 상태 LED
  • 엘리베이터 위치를 7개 LED로 시각적 표현

2. 스마트 호출 시스템

  • 각 층에서 엘리베이터 호출 가능
  • 호출 상태에 따른 LED 표시
  • 호출 취소 기능 (버튼 재누름)

3. 지능형 이동 알고리즘

  • 현재 위치와 호출 층을 고려한 최적 경로 선택
  • 방향 우선순위 기반 이동 (위쪽 호출 → 아래쪽 호출)
  • 호출이 없을 때 자동 정지

하드웨어 구성

핀 구성

  • 층별 버튼: 11, 12, 13번 핀 (1층, 2층, 3층)
  • 층별 LED: 8, 9, 10번 핀 (1층, 2층, 3층 호출 상태)
  • 엘리베이터 LED: A0, 2, 3, 4, 5, 6, 7번 핀 (엘리베이터 위치 표시)

연결 방법

층별 버튼:
- 1층: 11번 핀
- 2층: 12번 핀  
- 3층: 13번 핀

층별 LED (호출 상태):
- 1층: 8번 핀
- 2층: 9번 핀
- 3층: 10번 핀

엘리베이터 위치 LED:
- 1층: A0, 2, 3번 핀
- 2층: 4, 5번 핀
- 3층: 6, 7번 핀

동작 원리

1. 초기화 (setup)

  • 모든 핀을 입력/출력 모드로 설정
  • 1층에서 시작 (A0 핀 LED 켜짐)
  • 시리얼 통신 시작 (9600 baud)

2. 메인 루프 (loop)

  1. 호출 감지: 각 층 버튼 상태 확인
  2. 방향 결정: 현재 위치와 호출 층을 고려한 이동 방향 계산
  3. 목표 층 탐색: 가장 적절한 목적지 선택
  4. 엘리베이터 이동: 500ms 간격으로 LED 이동

3. 핵심 알고리즘

호출 감지 (detectCall)

  • 버튼 상태 변화 감지 (LOW → HIGH)
  • 호출 상태 토글 및 LED 제어
  • 디바운싱 처리

방향 결정 (determineDir)

  • 현재 층보다 위쪽 호출 우선 확인
  • 위쪽 호출이 없으면 아래쪽 호출 확인
  • 호출이 없으면 정지 (0 반환)

목표 층 탐색 (findTargetFloor)

  • 현재 이동 방향에 따른 최적 경로 선택
  • 위로 이동 중: 위쪽 호출 → 아래쪽 호출 순서
  • 아래로 이동 중: 아래쪽 호출 → 위쪽 호출 순서

엘리베이터 이동 (moveElevator)

  • 500ms 간격으로 LED 한 칸씩 이동
  • 층에 도달 시 호출 상태 확인
  • 호출이 있으면 정차 및 호출 해제
  • 새로운 호출이 있으면 경로 재계산

📊 상태 표시

엘리베이터 위치 LED

  • 1층: A0, 2, 3번 핀 (인덱스 0, 1, 2)
  • 2층: 4, 5번 핀 (인덱스 3, 4)
  • 3층: 6, 7번 핀 (인덱스 5, 6)

층별 호출 LED

  • 호출 중: 해당 층 LED 켜짐
  • 호출 해제: 해당 층 LED 꺼짐

🔍 변수 설명

int currentFloor = 0;        // 현재 층 (0: 1층, 1: 2층, 2: 3층)
int targetFloor = -1;        // 목표 층
int currentIndex = 0;        // 현재 LED 인덱스 (0~6)
int targetIndex = -1;        // 목표 LED 인덱스
int direction = 0;           // 이동 방향 (0: 정지, 1: 위, -1: 아래)
bool call[3] = {false, false, false};  // 각 층 호출 상태
bool isMoving = false;       // 이동 중 여부

결과 동영상

결과 동영상

Test Case 1

  • 1층에 있는 엘리베이터가 있을 때 3층 호출 후 2층 호출

Test Case 2

  • 3층에 있는 엘리베이터가 있을 때 1층 호출 후 2층 호출

Test Caes 3

  • 1층에 있는 엘리베이터가 있을 때 3층 호출 후 호출 취소

참고 자료

프로젝트 발표 자료: Google Slides

About

개인 실습: Arduino로 구현한 3층 엘리베이터 시뮬레이터

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages