Skip to content

운전면허 장내기능시험 모의 시뮬레이터 (2023-2 임베디드시스템)

Notifications You must be signed in to change notification settings

KimTeddy/2023_Driver-s_License_Test_Simulation

Repository files navigation

Embedded System

프로젝트명 운전면허 장내기능시험 Simulation
강의수강 2023.09~12, 2023-2학기 임베디드시스템
주요일정 (a) 2023. 11. 07(화) : 제안서 제출
(b) 2023. 12. 21(목) : 최종 발표, 최종 보고서 제출
프로젝트 수행기간 (a) 초기 프로그램 : 2023. 10. 01 ~ 12. 17
(b) Device Driver : 2023. 11. 24 ~ 12. 12[3주(진도와 함께)]
(c) 최종 프로그램 : 2023. 12. 15 ~ 12. 21[1주(16주차)]
Software OS: Labtop: Linux(HamoniKR-3.0-64bit) Kit: Linux(UDOOBuntu)
Virtual Machine: Labtop: Oracle VM VirtualBox
Code Editor: Labtop: Visual Studio Code
Language: C C++ Makefile Shell script
Library: OpenGL OpenCV
Hardware Kit: Mainboard: udoo board + GPIO board: peri board
                            
==> 따라서 이 프로젝트는 디바이스 드라이버 작성을 제외하면 1주 안에 끝낸 프로젝트입니다.

프로젝트 설명

  • 프로그램 실행 시 메인 화면이 나타나고 초기 설정이 완료된다.

    • "Start" 버튼을 클릭하면 운전면허 장내기능시험 시뮬레이션이 시작되며, "Manual" 버튼 선택 시 메뉴얼이 표시되고 전/후 페이지를 넘길 수 있는 터치 버튼이 제공된다.
    • 모든 페이지를 확인한 후 "Test Start" 및 "Main Screen" 버튼으로 이동할 수 있다.
    • "Test Start"를 누르면 시뮬레이션이 시작되고, "Main Screen"을 누르면 초기 화면으로 돌아간다.
  • 기본 조작 시험에서는 "Start" 버튼을 누르면 자동차의 기본 조작 시험이 시작된다.

    • 시동 버튼을 제외한 전조등, 와이퍼, 기어, 방향 지시등 중 랜덤으로 2개가 출제되며, 사용자는 제한된 시간 내에 해당하는 버튼을 눌러 기능을 수행해야 한다.
  • 기본 조작 시험이 종료되면 주행 단계가 진행된다.

    • 게임 시작 시 Text LCD에는 시뮬레이션 진행 시간과 현재 단계가 표시되고, FND에는 현재 점수와 감점될 점수가 표기된다.
    • Color LED는 현재 신호등의 불빛을 표시한다.
    • 키트를 왼쪽으로 꺾으면 좌회전, 오른쪽으로 꺾으면 우회전하며, 앞으로 기울이면 차가 앞으로 진행하고 앞으로 많이 기울이면 가속한다.
  • 키트를 중앙에 위치시키면 기존 속도로 계속 진행된다.

    • 좌회전 또는 우회전을 해야 하는데 하지 않는 등 게임에서 제시한 조건을 만족하지 못하면 감점을 당하거나 치명적인 실수를 하면 실격 처리되고 시뮬레이션이 종료된다.
    • 반대로 완주하면 성공 화면이 출력되며 시뮬레이션이 종료된다.
    • 이를 통해 다양한 조작 요소를 통해 실제 장내 기능 시험과 유사한 시뮬레이션 경험을 즐길 수 있다.
  • 전체 모습
    KakaoTalk_20231221_053445868

  • TFT-LCD & PERI Board
       

역할분담

초기 프로젝트 기여
OpenGL, OldProject
Device Driver 제작
libmyperi
최종 프로젝트 기여
ProjectFolder
KimTeddy
(나, 팀장)
  • 팀원에게 OpenGL 알려주기
  • OpenGL 화면 분할, 시점 변환, 애니메이션
  • 자동차 이동 알고리즘(전/후진 이동, 회전)
  • Main Menu 디자인
  • opengl-egl-test
  • Buzzer
  • gyroscope, accelerometer, magnetometer Sensor
  • OpenCV사용(영상을 BMP 이미지 1000프레임으로 저장)
    해당 프로젝트(Video_to_bmp)
  • 7-segment(6digit, 점수 애니메이션)
  • Buzzer(효과음 7종)
  • BMP이미지(차선이탈, 추돌)
  • PPT 제작
kms0511
  • Color LED 신호등 기본 코드
  • LED
  • Button
  • FND
  • bmp
  • frameBuffer
  • 프로그램 알고리즘
  • 팀원 코드 합치기
  • RGB LED(신호등)
  • Button&LED(안전벨트,사이드브레이크,비상등,방향지시등,기어)
  • frameBuffer(bmp)
  • 필요한 장면 이미지 컨설팅
  • BMP이미지(MainMenu 디자인)
  • Shell Script 파일(DeviceDriver 자동 탑재, WiFi 자동 연결)
bllobll5
  • 차량 트랙 및 맵 모델링
  • 차선 이탈 판별
  • CharactorLCD
  • Buzzer 디바이스드라이버 효과음 함수 사용
  • BMP이미지(각종 빨간 글씨 안내 메세지)
  • PPT 제작
JW-LEE-1015
  • 자동차 외형 모델링
  • Button
  • ColorLED
  • TemperatureSensor
  • TouchScreen
  • CharactorLCD(현재 진행단계, 경과시간 출력)
  • GyroSensor(기울기->엑셀,브레이크,좌/우회전 구현)
  • TouchScreen(버튼별 터치 인식 범위 지정)
  • BMP이미지(Manual 전체, 기본 조작 테스트)
  • PPT 제작
공통 디바이스 드라이버를 프로젝트 마감 2주 전에 배워서 미리 할 수 있는게 거의 없었음. -
  • bmp 이미지 제작
  • 결과보고서 작성

프로젝트 목차

  1. 초기 개발 모습
  2. 제안 아이디어
    a. 제안 배경
    b. 아이디어 기술
  3. 연구 방법
    a. SW 구성도
    b. Flow Chart
  4. 설계
    a. 빌드업/실행과정
    b. 작동 <- 작동 모습만 보고 싶다면!
  5. 결과
    a. 결론
    b. 시연
  6. 부록
    - Commit Graph

0. 초기 개발 모습

  • OpenGL 사용, 3D 그래픽 구현
    KakaoTalk_20231221_022149236
  • 1000줄 코드, 프로젝트 마감 2주 전 폐기
    • (초반에 안 알려주고 마감 2주 전에 알려준)프로젝트 제한조건 -> Xwindow 사용 불가
    • 따라서 OpenGL을 EGL로 렌더링 후 BMP 파일로 빼내어 frame buffer로 출력하는 시도를 했으나 실패 -> 빠른 코드 폐기 판단

1. 제안 아이디어

a. 제안 배경

image 출처 : 통계청

  • 점점 떨어지고 있는 운전 면허 시험 합격률
  • 초보 운전자의 운전 미숙으로 인한 다양한 사고 발생 등의 사회적인 문제
    ⇒ 현실적인 운전 경험을 모의로 제공하여 공간의 제약 없이 "운전면허 기능시험 모의 시뮬레이션"을 할 수 있도록 제작
  1. 운전 면허를 취득할 사람이라면 누구나 통과해야할 장내 기능 시험을 시뮬레이션으로 구현
  2. 시간과 공간의 제약 없이 시험해볼 수 있는 모의 시뮬레이션
  3. 키트의 가속도 센서를 이용하여 키트를 핸들로 사용하는 시뮬레이션 제작

b. 아이디어 기술

  • Color LED와 FND, Text LCD, TFT LCD(+Overlay), Buzzer를 활용한 시각적&청각적 피드백
  • TFT LCD를 통해 현재 운전자의 시야와 코스 내 구간을 한 눈에 확인하여 변화하는 환경에 즉각적으로 반응하면서 운전 능력을 높이고 주행 경험을 제공할 수 있는, "운전면허 기능시험 모의 시뮬레이션" image

2. 연구 방법

a. SW 구성도

 

b. Flow Chart

  • main
     
  • Button & LED Thread
     
  • Buzzer & FND Thread
       
  • Traffic Light Thread
     
  • Accelerometer Thread
     

3. 설계

a. 빌드업/실행과정

  1. [노트북]led.c, led.h / button.c, button.h / buzzer.c, buzzer.h, buzzer_pitch.h, buzzer_soundeffect_defs.h / fnd.c, fnd.h / colorled.c, colorled.h / lcdtext.c, lcdtext.h / temp.c, temp.h / accelMagGyro.c, accelMagGyro.h / libfbdev.c, libfbdev.h / libbmp.c, libbmp.h, bitmapFileHeader.h 를 포함한 디바이스 드라이버 코드를 Makefile을 통해 libMyPeri.a 라이브러리로 컴파일한 후 결과 파일을 main.c와 같은 폴더에 탑재한다.
  2. [노트북]touch.c, touch.h를 Makefile을 통해 libtouch.a 라이브러리 파일을 만든다.
  3. [노트북]Makefile을 통해 libMyPeri.a, libtouch.a 라이브러리와 함께 main.c를 컴파일함과 동시에 나온 실행 파일을 udoo 보드로 자동 전송한다.
  • Makefile image
  1. [키트]udoo 보드에 원격접속 후 미리 만들어 둔 loaddrv.sh파일을 실행하여 필요한 .ko 확장자인 디바이스 드라이버를 적재한다.
#!/bin/bash
# 드라이버 파일들의 배열 정의
drivers=("buttondrv.ko" "buzzerdrv.ko" "fnddrv.ko" "leddrv.ko" "textlcddrv.ko")
# 배열에 있는 각 드라이버를 순차적으로 로드
for driver in "${drivers[@]}"
do
    echo "loading: $driver"
    sudo insmod "$driver"
    if [ $? -eq 0 ]; then
        echo "SUCCESS: $driver ins complete"
    else
        echo "ERROR: $driver ins Failed"
        exit 1  # 실패 시 스크립트 종료
    fi
done
echo "insmod all complete"
  1. [키트]udoo 보드에 원격접속 후 만든 실행 파일을 실행한다.

b. 작동

  • Button & LED
    • 안전벨트 / 사이드 브레이크 / 좌측 방향지시등 / 비상등 / 우측 방향지시등 / 기어
    • 키트의 6개의 버튼으로 자동차 제어에 사용되는 기능 요소 구현.
    • 각 버튼을 누르면 LED가 On/Off 되며 현재 상태 표시.
    • 방향지시등 / 비상등의 경우 실제와 같이 깜빡임.
         
  • FND(KimTeddy 담당)
    • [“현재점수” “감점될 점수”] 형식으로 표시.
    • 7-Segments 6자리 중 3-digit 사용, 현재 점수가 정확하게 표시됨.
    • 오른쪽 2-digit은 감점 발생 시 감점될 점수 출력.
    • 감점 점수는 4번 깜빡이고, 현재 점수에서 0.07초 간격으로 1씩 감소하는 애니메이션이 끝나면 마지막으로는 감점 점수를 뺀 현재 점수만 남게 띄움.
       
  • Color LED
    • 빛의 3원색 RGB를 이용하여 신호등 빨강, 주황, 초록불 구현.
    • 신호등 불빛으로 교차로에서 빨간 불일 때 차량이 교차로를 지나면 실격처리!
       
   
  • Buzzer
    • 주행 시작 시 ”START 알림음”
    • 비상등과 방향등을 켰을 시 ”깜빡이 소리”
    • 각 단계들 넘어갈 시 “마리오 1UP 효과음”
    • 돌발상황 발생할 시 “돌발 경고음”
    • 감점 시 “감점 알림음”
       
  • Accelerometer
    • 시뮬레이션이 START되면 시작 당시의 Accel센서 값을 저장한 후, while문을 돌며 현재 Accelerometer 값과 초기 Accelerometer 값을 비교.
    • 비교된 값으로 핸들(키트)이 얼마나 기울었는지 판단하여 좌회전, 우회전, 서행, 가속, 브레이크를 구별할 수 있도록 구현.
       
  • TFT LCD(bmp+frame buffer)
    • TFT_LCD에 각 상황에 따라�다른 화면을 출력하여 시뮬레이션 진행.
    • 시뮬레이션에서는 키트의 기울기에 따라 bmp이미지가 교체되며 애니메이션처럼 동작.
    • Manual 기능
      • 이전/이후 화면으로 넘기는 버튼이 화면 하단에 오버레이로 출력됨.
      • 끝 페이지에서는 더 이상 넘어가지 않고 시뮬레이션 시작 버튼이 보임.
         
  • TFT LCD(bmp overlay)
    • TFT LCD에 각 상황에 따라안내 메시지와 UI를 오버레이하여 띄움.
       
  • LCD Touch Screen (bmp overlay)
    • 기본 조작 평가에 나오는 전조등, 와이퍼, 시동 켜기 버튼을 TFT-LCD에 이미지로 구현하여 해당 영역을 터치했을 때 On/Off동작을 하도록 구현.
    • Manual 등 다양한 화면 전환에 터치 스크린을 활용.
       

4. 결과

a. 결론

  • 본 프로젝트를 통해 운전면허 장내 기능 시험의 시뮬레이션을 구현하는 과정에서 다양한 하드웨어 및 소프트웨어 요소들이 어떻게 상호작용하는지 이해할 수 있었다.
  • LED, 버튼, Buzzer, Text LCD, 가속도 센서 등 다양한 센서의 디바이스 드라이버들을 활용하여 프로젝트를 수행하고자 노력했다. 이 과정에서 기기들 간의 상호 연결 및 통신에 대한 이해를 향상시키고, 리눅스 시스템에 대한 지식을 확장할 수 있었다.
  • 이를 바탕으로, 팀원들간의 원활한 협업을 함으로써, 이번 임베디드시스템 프로젝트를 잘 마무리할 수 있었다.

5. 부록

  • Commit Graph
    image01

About

운전면허 장내기능시험 모의 시뮬레이터 (2023-2 임베디드시스템)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •