무인주차관리시스템 조 장 : 201001040 정재훈 조 원 : 201101010 이찬영 201101031 고종광 201101005 이민욱 201001004 김경탁 200901008 김병철 201313010 김평원.

Slides:



Advertisements
Similar presentations
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Advertisements

1 모터 (Motors) 김원웅. 2 모터 (Motor) □ 모터 응용분야 □ Desktop PC 의 DVD ROM, HDD □ 러닝머신, 전동드릴, 선풍기 등 전력에 의해서 뭔가가 움직이 는 분야에는 거의 모두 모터가 사용 □ 우리가 배울 모터의.
Vision System Lab, Sang-Hun Han
제 3 장 변수와 자료형.
ARDUINO (센서활용프로그래밍/ICT융합실무) - 아두이노 활용 > 전자 주사위 제작
C++ Espresso 제1장 기초 사항.
LCD를 활용한 특수문자 표시 및 알람 시계 만들기
PIC는 우리의 친구 한국정보통신대학교 디지털미디어연구소.
2015년 2학기 PULSE 4 전자물리실험 11주차 – 초음파 거리 측정 실험 - DSU 메카트로닉스 융합공학부 -
(수) 실시 제7회 전국동시지방선거 정당 및 예비후보자를 위한 선거사무안내.
아두이노 프로그래밍 1일차 – Part2 아두이노 사양 강사: 김영준 목원대학교 겸임교수.
컬러 LED바 이해하기 목차 재료준비 및 브레드 보드 배선 구성하기 컬러 LED바 이해 및 프로그램 실습 응용 작품 만들기.
Arduino와 Led를 이용하여 Wearable Display 만들기
GPIO RaspberryPi Sejin Oh.
아두이노 프로그래밍 5일차 – Part2 지그비 통신 강사: 김영준 목원대학교 겸임교수
12. 아두이노와 센서를 이용한 제어 - 스마트 폰으로 제어하는 아두이노 -.
FND (Flexible Numeric Display)
AVR - Chapter 15 황 지 연.
고등용 LED를 이용한 재미있는 표현.
기초C언어 제3주 C프로그램 구성요소, 변수와 자료형 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
조도 센서 김한수.
제 3 장 아두이노 무조건 따라하기 - 스마트 폰으로 제어하는 아두이노 -.
변수와 자료형.
AVR - Chapter 2 황 지 연.
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수.
캡스톤 물리 음성 인식을 통한 무드 등 지금은 6시 55분 조.
아두이노 프로그래밍 2일차 – Part2 PSD 거리센서 강사: 김영준 목원대학교 겸임교수.
아두이노 프로그래밍 2일차 – Part2 PSD 거리센서 강사: 김영준 목원대학교 겸임교수
제 3 장 상수와 변수
9. 아두이노를 이용한 FND 제어 - 스마트 폰으로 제어하는 아두이노 -.
아두이노 프로그래밍 3일차 – Part1 컬러 LED바 활용하기 강사: 김영준 목원대학교 겸임교수
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
adopted from KNK C Programming : A Modern Approach
Arrays 요약.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
8051 IO-PORT 정보통신•컴퓨터 공학부 송명규
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
아두이노 프로그래밍 1일차 – Part4 값출력 및 디지털 읽기 강사: 김영준 목원대학교 겸임교수
2015년 2학기 PULSE 4 전자물리실험 09-Servo Motor 제어 - DSU 메카트로닉스 융합공학부 -
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
마이크로소프트 박종호.
02강 아두이노 LED 기본 개념 LED Example1 LED Example2 LED Example3
클라우드 서버로 사용자 데이터 전송하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
클라우드 서버로 부터 값 읽어오기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
8. 아두이노를 이용한 아날로그 제어 - 스마트 폰으로 제어하는 아두이노 -.
4. 아두이노로 LED 제어하기 - 스마트 폰으로 제어하는 아두이노 -.
15. STEP 모터 제어 - 스마트 폰으로 제어하는 아두이노 -.
제 3장 데이터형과 연산자 Hello!! C 언어 강성호 김학배 최우영.
센서값 전송하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
ST 모드 활용하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
ST모드에서 데이터 읽기 및 제어하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
클라우드 서버로 데이터 전송하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
함수를 이용한 키패드 센서 제어하기 재료준비 및 브레드 보드 배선 구성하기 키패드 센서를 통한 함수 이해하기 및 활용 실습
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
코딩체험교실 아두이노 로봇 코딩 4차산업기술 체험 (SW코딩/자율주행기술).
아두이노 프로그래밍 4일차 – Part1 모바일 로봇 강사: 김영준 목원대학교 겸임교수
아두이노 프로그래밍 Lecture #
박성진 컴퓨터 프로그래밍 기초 [03] 변수와 자료형 박성진
Tone 명령어 이해하기 목차 재료준비 및 브레드 보드 배선 구성하기 Tone 명령어 기본 및 프로그램 이해 응용 작품 만들기.
아날로그일까? 디지털일까? -사용자 경험 기반 디지털 기술을 활용한 반응하는 액자 만들기-
아두이노 서보로봇 제어 (블루투스 스마트폰 조종) -03차시-
C.
printf("Global Korea\n");
4 LED 출력 LED 점멸 LED 밝기 조절 RGB LED로 색상 표현하기 FND 제어 4-digit FND 제어 Dot matrix 제어 Dot matrix를 이용한 애니메이션.
사물인터넷(IoT) 프로그래밍 기초 5. 시리얼통신.
Choi Younghwan CSE HUFS
3. Arduino 실습 – 아날로그 입력(1) 아날로그 입력 – 먼지 센서 먼지 센서 개요 먼지 센서 특징 먼지 검출 센서
Presentation transcript:

무인주차관리시스템 조 장 : 정재훈 조 원 : 이찬영 고종광 이민욱 김경탁 김병철 김평원

목 차

주차장의 혼잡성과 대기시간 감소를 추구하기 위해 작품 선정 최단거리를 제시하여 주차장의 효율성을 기대 실시간으로 주차 현황을 파악하여 주차 시간 절약 무인화와 동시에 자동화로 시스템을 구축 무인시스템을 통한 인건비 절약 무인 주차장 정보 시스템을 설계 및 조립함으로써 하드웨어 능력 향상 센서와 모터 LED 메인부의 MCU 까지 다양한 부품들의 기능과 활용능력을 향상 소프트웨어 적인 데이터 처리능력을 향상 다양한 통계 산출과 자료분석 및 차트를 구현 시킴

모터부 서보모터 메인부 아두이노 센서부 초음파센서 Display 부 Display 전원부 11.1V 주 차 장주 차 장

도트매트릭스 LED 모듈 [LK-DOTM16-ADU2K]

4 채널 서보모터 드라이버 (LK-SVMC-K)

센서부

메인부

모터, 전원부

Display

No Yes 차량 진입 출입 차단기 open 출입 차단기 내에 차량 대기 여부 확인 시 작시 작 YesNo 출입차단기 open 상태 유지 차량과 출입차단기 충돌 방지를 위한 delay LED 를 통한 빈 주차공간으로 유도 Display 동기화 종 료종 료 Display 를 통한 주차 현황 파악 차량 진입 대기 출입 차단기 close

각 자리 초음파센서 #define TrigPinA 2 //A 구역 송수신 핀 정의 #define EchoPinA 3 #define TrigPinB 4 //B 구역 송수신 핀 정의 #define EchoPinB 5 #define TrigPinC 6 //C 구역 송수신 핀 정의 #define EchoPinC 7 #define TrigPinD 8 //D 구역 송수신 핀 정의 #define EchoPinD 9 #define TrigPinE 10 //E 구역 송수신 핀 정의 #define EchoPinE 11 #define TrigPinF 12 //F 구역 송수신 핀 정의 #define EchoPinF 13 #define LEDA 14 //A 구역 LED 녹색 정의 #define LEDA1 15 //A 구역 LED 적색 정의 #define LEDB 16 //B 구역 LED 녹색 정의 #define LEDB1 17 //B 구역 LED 적색 정의 #define LEDC 18 //C 구역 LED 녹색 정의 #define LEDC1 19 //C 구역 LED 적색 정의 #define LEDD 20 //D 구역 LED 녹색 정의 #define LEDD1 21 //D 구역 LED 적색 정의 #define LEDE 44 //E 구역 LED 녹색 정의 #define LEDE1 45 //E 구역 LED 적색 정의 #define LEDF 46 //F 구역 LED 녹색 정의 #define LEDF1 47 //F 구역 LED 적색 정의 void setup() // 셋업 함수 { Serial.begin(9600); // 데이터 통신 속도 설정 pinMode(TrigPinA, OUTPUT); //A 구역 송수신 핀 출력으로 설정 pinMode(EchoPinA, INPUT); pinMode(TrigPinB, OUTPUT); //B 구역 송수신 핀 출력으로 설정 pinMode(EchoPinB, INPUT); pinMode(TrigPinC, OUTPUT); //C 구역 송수신 핀 출력으로 설정 pinMode(EchoPinC, INPUT); pinMode(TrigPinD, OUTPUT); //D 구역 송수신 핀 출력으로 설정 pinMode(EchoPinD, INPUT); pinMode(TrigPinE, OUTPUT); //E 구역 송수신 핀 출력으로 설정 pinMode(EchoPinE, INPUT); pinMode(TrigPinF, OUTPUT); //F 구역 송수신 핀 출력으로 설정 pinMode(EchoPinF, INPUT); pinMode(LEDA, OUTPUT); //A 구역 LED 녹색 출력으로 설정 pinMode(LEDA1, OUTPUT); //A 구역 LED 적색 출력으로 설정 pinMode(LEDB, OUTPUT); //B 구역 LED 녹색 출력으로 설정 pinMode(LEDB1, OUTPUT); //B 구역 LED 적색 출력으로 설정 pinMode(LEDC, OUTPUT); //C 구역 LED 녹색 출력으로 설정 pinMode(LEDC1, OUTPUT); //C 구역 LED 적색 출력으로 설정 pinMode(LEDD, OUTPUT); //D 구역 LED 녹색 출력으로 설정 pinMode(LEDD1, OUTPUT); //D 구역 LED 적색 출력으로 설정 pinMode(LEDE, OUTPUT); //E 구역 LED 녹색 출력으로 설정 pinMode(LEDE1, OUTPUT); //E 구역 LED 적색 출력으로 설정 pinMode(LEDF, OUTPUT); //F 구역 LED 녹색 출력으로 설정 pinMode(LEDF1, OUTPUT); //F 구역 LED 적색 출력으로 설정 }

각 자리 초음파센서 void loop() // 메인함수 { UltrasonicA(); UltrasonicB(); UltrasonicC(); UltrasonicD(); UltrasonicE(); UltrasonicF(); } void UltrasonicA() { long duration, distance; // 수신값 받는 변수, 거리값 계산하는 변수 digitalWrite(TrigPinA, LOW); //A 구역 초음파센서 송신호 off delayMicroseconds(2); / /2us 정도 유지 digitalWrite(TrigPinA, HIGH); //A 구역 초음파센서 송신호 입력 delayMicroseconds(10); //10us 정도 유지 digitalWrite(TrigPinA, LOW); //A 구역 초음파센서 송신호 off duration = pulseIn(EchoPinA, HIGH); //A 구역 초음파 수신호 On->Off 간격 측정 distance = (duration/2) / 29.1; //A 구역 수신호 거리 계산 (cm 로 변환 ) if (distance < 6) //A 구역 초음파센서 수신된 거리가 6cm 이내 이면 digitalWrite(LEDA,HIGH); //A 구역 LED 녹색 On digitalWrite(LEDA1,LOW); //A 구역 LED 적색 Off } else { digitalWrite(LEDA,LOW); //A 구역 LED 녹색 Off digitalWrite(LEDA1,HIGH); //A 구역 LED 적색 On } if (distance >= 200 || distance <= 0) //A 구역 거리가 음수 혹은 2m 이상이면 { Serial.println("Out of range"); //" 범위 밖이라는 문구 표시 " } else { Serial.print(distance); //A 구역 거리값 표시 Serial.println(" cm"); //A 구역 단위 "cm" } delay(100); //0.1 초 지연 }

각 자리 초음파센서 void UltrasonicB() { long duration,distance; digitalWrite (TrigPinB, LOW); //B 구역 초음파센서 송신호 off delayMicroseconds(2); //2us 정도 유지 digitalWrite(TrigPinB, HIGH); //B 구역 초음파센서 송신호 입력 delayMicroseconds(10); //10us 정도 유지 digitalWrite(TrigPinB, LOW); //B 구역 초음파센서 송신호 off duration = pulseIn (EchoPinB, HIGH); //B 구역 초음파 수신호 On->Off 간격 측정 distance = (duration/2) / 29.1; //B 구역 수신호 거리 계산 (cm 로 변환 ) if (distance < 6) //B 구역 초음파센서 수신된 거리가 6cm 이내 이면 { digitalWrite(LEDB,HIGH); //B 구역 LED 녹색 On digitalWrite(LEDB1,LOW); //B 구역 LED 적색 Off } else { digitalWrite(LEDB,LOW); //B 구역 LED 녹색 Off digitalWrite(LEDB1,HIGH); //B 구역 LED 적색 On } if (distance >= 200 || distance <= 0) //B 구역 거리가 음수이거나 2m 이상이면 { Serial.println("Out of range"); //" 범위 밖이라는 문구 표시 " } else { Serial.print(distance); //B 구역 거리값 표시 Serial.println("cm"); //B 구역 단위 "cm" } delay(100); //0.1 초 지연 }

각 자리 초음파센서 void UltrasonicC() { long duration,distance; digitalWrite(TrigPinC, LOW); //C 구역 초음파센서 송신호 off delayMicroseconds(2); //2us 정도 유지 digitalWrite(TrigPinC, HIGH); //C 구역 초음파센서 송신호 입력 delayMicroseconds(10); //10us 정도 유지 digitalWrite(TrigPinC, LOW); //C 구역 초음파센서 송신호 off duration = pulseIn(EchoPinC, HIGH); //C 구역 초음파 수신호 On->Off 간격 측정 distance = (duration/2) / 29.1; //C 구역 수신호 거리 계산 (cm 로 변환 ) if (distance < 6) //C 구역 초음파센서 수신된 거리가 6cm 이내 이면 { digitalWrite(LEDC,HIGH); //C 구역 LED 녹색 On digitalWrite(LEDC1,LOW); //C 구역 LED 적색 Off } else { digitalWrite(LEDC,LOW); //C 구역 LED 녹색 Off digitalWrite(LEDC1,HIGH); //C 구역 LED 적색 On } if (distance >= 200 || distance <= 0) //C 구역 거리가 음수이거나 2m 이상이면 { Serial.println("Out of range"); //" 범위 밖이라는 문구 표시 " } else { Serial.print(distance); //C 구역 거리값 표시 Serial.println("cm"); //C 구역 단위 "cm" } delay(100); //0.1 초 지연 }

각 자리 초음파센서 void UltrasonicD() { long duration,distance; digitalWrite(TrigPinD, LOW); //D 구역 초음파센서 송신호 off delayMicroseconds(2); //2us 정도 유지 digitalWrite(TrigPinD, HIGH); //D 구역 초음파센서 송신호 입력 delayMicroseconds(10); //10us 정도 유지 digitalWrite(TrigPinD, LOW); //D 구역 초음파센서 송신호 off duration = pulseIn(EchoPinD, HIGH); //D 구역 초음파 수신호 On->Off 간격 측정 distance = (duration/2) / 29.1; //D 구역 수신호 거리 계산 (cm 로 변환 ) if (distance < 6) //D 구역 초음파센서 수신된 거리가 6cm 이내 이면 { digitalWrite(LEDD,HIGH); //D 구역 LED 녹색 On digitalWrite(LEDD1,LOW); //D 구역 LED 적색 Off } else { digitalWrite(LEDD,LOW); //D 구역 LED 녹색 Off digitalWrite(LEDD1,HIGH); //D 구역 LED 적색 On } if (distance >= 200 || distance <= 0) //D 구역 거리가 음수이거나 2m 이상이면 { Serial.println("Out of range"); //" 범위 밖이라는 문구 표시 " } else { Serial.print(distance); //D 구역 거리값 표시 Serial.println("cm"); //D 구역 단위 "cm" } delay(100); //0.1 초 지연 }

각 자리 초음파센서 void UltrasonicE() { long duration,distance; digitalWrite(TrigPinE, LOW); //E 구역 초음파센서 송신호 off delayMicroseconds(2); //2us 정도 유지 digitalWrite(TrigPinE, HIGH); //E 구역 초음파센서 송신호 입력 delayMicroseconds(10); //10us 정도 유지 digitalWrite(TrigPinE, LOW); //E 구역 초음파센서 송신호 off duration = pulseIn(EchoPinE, HIGH); //E 구역 초음파 수신호 On->Off 간격 측정 distance = (duration/2) / 29.1; //E 구역 수신호 거리 계산 (cm 로 변환 ) if (distance < 6) //E 구역 초음파센서 수신된 거리가 6cm 이내 이면 { digitalWrite(LEDE,HIGH); //E 구역 LED 녹색 On digitalWrite(LEDE1,LOW); //E 구역 LED 적색 Off } else { digitalWrite(LEDE,LOW); //E 구역 LED 녹색 Off digitalWrite(LEDE1,HIGH); //E 구역 LED 적색 On } if (distance >= 200 || distance <= 0) //E 구역 거리가 음수이거나 2m 이상이면 { Serial.println("Out of range"); //" 범위 밖이라는 문구 표시 " } else { Serial.print(distance); //E 구역 거리값 표시 Serial.println("cm"); //E 구역 단위 "cm" } delay(100); //0.1 초 지연 }

각 자리 초음파센서 void UltrasonicF() { long duration,distance; digitalWrite(TrigPinF, LOW); //F 구역 초음파센서 송신호 off delayMicroseconds(2); //2us 정도 유지 digitalWrite(TrigPinF, HIGH); //F 구역 초음파센서 송신호 입력 delayMicroseconds(10); //10us 정도 유지 digitalWrite(TrigPinF, LOW); //F 구역 초음파센서 송신호 off duration = pulseIn(EchoPinF, HIGH); //F 구역 초음파 수신호 On->Off 간격 측정 distance = (duration/2) / 29.1; //F 구역 수신호 거리 계산 (cm 로 변환 ) if (distance < 6) //F 구역 초음파센서 수신된 거리가 6cm 이내 이면 { digitalWrite(LEDF,LOW); //F 구역 LED 녹색 On digitalWrite(LEDF1,HIGH); //F 구역 LED 적색 Off } else { digitalWrite(LEDF,HIGH); //F 구역 LED 녹색 Off digitalWrite(LEDF1,LOW); //F 구역 LED 적색 On } if (distance >= 200 || distance <= 0) //F 구역 거리가 음수이거나 2m 이상이면 { Serial.println("Out of range"); //" 범위 밖이라는 문구 표시 " } else { Serial.print(distance); //F 구역 거리값 표시 Serial.println("cm"); //F 구역 단위 "cm" } delay(100); //0.1 초 지연 }

#include // 서버모터 헤더파일 Servo myservoIn; // 입, 출구 서보모터 변수 Servo myservoOut; int posIn ; // 입, 출구 서보모터 각도 변수 int posOut ; int echoPinIn = 7; // 입구 센서 송수신 핀 int trigPinIn = 8; int echoPinOut = 10; // 출구 센서 송수신 핀 int trigPinOut = 11; void setup() // 셋업 함수 { Serial.begin(9600); // 데이터 통신 속도 설정 myservoIn.attach(9); // 입, 출구 서보모터 핀 설정 myservoOut.attach(12); pinMode(trigPinIn, OUTPUT); // 입구 송신 핀 출력으로 설정 pinMode(echoPinIn, INPUT); // 입구 수신 핀 입력으로 설정 pinMode (trigPinOut, OUTPUT); // 출구 송신 핀 출력으로 설정 pinMode(echoPinOut, INPUT); // 출구 수신 핀 입력으로 설정 } 출입구 초음파 서보모터 void loop() // 메인 함수 { ServoIn(); // 입구 서보모터 함수 ServoOut(); // 출구 서보모터 함수 } void ServoIn() // 입구 서보모터 함수 { float durationIn; // 입구 수신값을 받는 변수 float distanceIn; // 입구 거리값을 계산하는 변수 digitalWrite(trigPinIn,LOW); // 입구 초음파센서 송신호 off delayMicroseconds(2); //2us 정도 유지 digitalWrite(trigPinIn, HIGH); // 입구 초음파센서 송신호 입력 delayMicroseconds(10); //10us 정도 유지 digitalWrite(trigPinIn, LOW); // 입구 초음파센서 송신호 off durationIn = pulseIn(echoPinIn, HIGH); // 입구 초음파 수신호 On->Off 간격 측정 distanceIn = (durationIn/2) / 29.1; // 입구 수신호 거리 계산 (cm 로 변환 )

if(distanceIn < 6) // 입구 초음파센서 수신된 거리가 6cm 이내 이면 { posIn = 10; // 입구 서보모터 각도 초기값 posIn +=70; // 입구 서보모터 각도 증가 myservoIn.write(posIn); // 입구 서보모터 각도 읽음 delay(3000); //3 초 지연 } else if(distanceIn > 6) // 입구 초음파센서 수신된 거리가 6cm 이상 이면 { posIn-=50; // 입구 서보모터 각도 감소 myservoIn.write(posIn); // 입구 서모모터 각도 출력 delay(10); //0.01 초 지연 } delay(50); //0.05 초 지연 } 출입구 초음파 서보모터 void ServoOut() // 출구 서보모터 함수 { float durationOut; // 출구 수신값을 받는 변수 float distanceOut; // 출구 거리값을 계산하는 변수 digitalWrite(trigPinOut,LOW); // 출구 초음파센서 송신호 off delayMicroseconds(2); //2us 정도 유지 digitalWrite(trigPinOut, HIGH); // 출구 초음파센서 송신호 입력 delayMicroseconds(10); //10us 정도 유지 digitalWrite(trigPinOut, LOW); // 출구 초음파센서 송신호 off durationOut = pulseIn(echoPinOut, HIGH); // 출구 초음파 수신호 On->Off 간격 측정 distanceOut = (durationOut/2) / 29.1; // 출구 수신호 거리 계산 (cm 로 변환 ) if(distanceOut < 6) // 출구 초음파센서 수신된 거리가 6cm 이내 이면 { posOut = 10; // 출구 서보모터 각도 초기값 posOut +=70; // 출구 서보모터 각도 증가

myservoOut.write(posOut); // 출구 서보모터 각도 읽음 delay(3000); //3 초 지연 } else if(distanceOut > 6) // 출구 초음파센서 수신된 거리가 6cm 이상 이면 { posOut-=50; // 출구 서보모터 각도 감소 myservoOut.write(posOut); // 출구 서보모터 각도 출력 delay(10); //0.01 초 지연 } delay(50); //0.05 초 지연 } 출입구 초음파 서보모터

Display 부 입구파트 #include int A = 2; int B = 3; int C = 4; int D = 5; int Data_Red = 6; int Data_Green = 7; int Clk = 8; int LE = 9; int OE = 10; const int __attribute__((progmem)) string[][16]={ 0x00,0x00,0x00,0x180,0x3c0,0x7e0,0x3c0,0xff0,0x1ff8,0x1ff8,0xff0,0x180,0x3c0,0x00,0x00,0x00, // ♣ 0x00,0x00,0x8f0,0x908,0x908,0x908,0xf08,0x908,0x908,0x908,0x908,0x8f0,0x800,0x00,0x00,0x00, // 어 0x00,0x00,0x840,0x840,0x840,0x840,0xe40,0x8a0,0x8a0,0x910,0x910,0xa08,0x800,0x00,0x00,0x00, // 서 0x00,0x00,0x3c0,0x420,0x810,0x810,0x420,0x3c0,0x100,0x100,0x100,0x1ff8,0x00,0x00,0x00,0x00, // 오 0x00,0x00,0x840,0x840,0x8a0,0x920,0xa10,0x808,0x00,0x810,0xff0,0x810,0xff0,0x00,0x00,0x00, // 십 0x00,0x00,0x840,0x840,0x840,0x840,0x840,0x8a0,0x8a0,0x910,0x910,0xa08,0x800,0x00,0x00,0x00, // 시 0x00,0x00,0x3c0,0x420,0x810,0x810,0x420,0x3c0,0x100,0x100,0x100,0x1ff8,0x00,0x00,0x00,0x00, // 오 0x00,0x00,0x00,0x180,0x3c0,0x7e0,0x3c0,0xff0,0x1ff8,0x1ff8,0xff0,0x180,0x3c0,0x00,0x00,0x00, // ♣ };

Display 부 입구파트 unsigned char Dot_char_cnt=0; // 도트매트릭스에 표시 될 문자 카운터 unsigned char flag_cnt=0; // 도트매트릭스에 표시 될 색상 카운터 unsigned char move_motion=0; // 도트매트릭스에 색깔 표시 unsigned int Move_cnt=16; // 도트매트릭스 첫번째꺼를 16 번 카운트 unsigned int Move_cnt2=0; unsigned int str_speed_cnt=0; // 도트매트릭스 속력 카운트 bool flag_Oe=0; ISR(TIMER2_OVF_vect){ static bool output = HIGH; digitalWrite(1, output); output = !output; static unsigned int string_moving_speed_value=400; // 문자가 흘러가는 속도 static unsigned int cnt=0; if(flag_Oe) { digitalWrite(OE, LOW); cnt++; if(cnt>=5) { flag_Oe=0; cnt=0;

Display 부 입구파트 digitalWrite(OE, HIGH); } str_speed_cnt++; if(str_speed_cnt>string_moving_speed_value) { str_speed_cnt=0; Move_cnt--; Move_cnt2++; if(Move_cnt==0||Move_cnt2==16){ Move_cnt=16; Move_cnt2=0; move_motion++; if(move_motion>1){ move_motion=0; Dot_char_cnt+=1; flag_cnt++; if(flag_cnt==1) { flag_cnt=0; } TCNT2=0xe7; } void setup() // 셋업 함수 { pinMode(A, OUTPUT); //A 구역 송신 핀 출력으로 설정 pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); pinMode(Data_Red, OUTPUT); pinMode(Data_Green, OUTPUT); pinMode(Clk, OUTPUT); pinMode(LE, OUTPUT); pinMode(OE, OUTPUT); pinMode(1, OUTPUT); TCCR2A=0x00; TCCR2B=0x04; TIMSK2=0x01; TCNT2=0xe7; SREG=0x80; }

Display 부 입구파트 void row_dynamic() // row 열을 선택한 어드레스를 주는 함수 이함수가 호출할때 어드레스 변경 { static unsigned int str_cnt=0; // 항상 0 이 되므로 문제. 변수를 글로벌로 처리 switch(str_cnt)//ROW SHIFT! { case 0:digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, LOW); break; //1 행 LED case 1:digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, LOW); break; //2 행 LED case 2:digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, LOW); break; //3 행 LED case 3:digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, LOW); break; //4 행 LED case 4:digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, LOW); break; //5 행 LED case 5:digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, LOW); break; //6 행 LED case 6:digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); break; //7 행 LED case 7:digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); break; //8 행 LED case 8:digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, HIGH); break; //9 행 LED case 9:digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, HIGH); break; //10 행 LED case 10:digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, HIGH); break; //11 행 LED case 11:digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, HIGH); break; //12 행 LED case 12:digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, HIGH); break; //13 행 LED case 13:digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, HIGH); break; //14 행 LED case 14:digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); break; //15 행 LED case 15:digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); break; //16 행 LED }

Display 부 입구파트 ++str_cnt; if(str_cnt==16) { str_cnt=0; } void shift_Register(unsigned char out ) // 문자를 시프트 시키는 변수 { unsigned char clk=0; for(clk=0;clk<8;clk++){ //8 비트 데이터를 1 비트씩 시프트 레지스터에 입력 if(out&(0x80>>clk)) { switch(flag_cnt){ case 0:digitalWrite(Data_Green, LOW); digitalWrite(Data_Red, HIGH);break; //Red case 1:digitalWrite(Data_Green, HIGH); digitalWrite(Data_Red, LOW);break; //Green case 2:digitalWrite(Data_Green, HIGH); digitalWrite(Data_Red, HIGH);break; //Orange } else { digitalWrite(Data_Green, LOW); digitalWrite(Data_Red, LOW); } digitalWrite(Clk, HIGH); delayMicroseconds(1); digitalWrite(Clk, LOW); } void ActivePulse() { digitalWrite(LE, HIGH); delayMicroseconds(1); digitalWrite(LE, LOW); // 래치 출력 digitalWrite(OE, LOW); delayMicroseconds(500); // OUTPUT ENABLE } void dot1_display_shift(unsigned char first) // 도트매트릭스 첫번째 시프트 { static unsigned int i_cnt=0; register unsigned int buff1[16]={0}; //Dot1 buff register unsigned char high1=0; //Dot1

Display 부 입구파트 register unsigned char low1=0; //Dot1 register unsigned int i=0; for(i_cnt=0;i_cnt<16;i_cnt++) // 문자를 왼쪽으로 시프트 { if(move_motion==0) { buff1[i_cnt]=pgm_read_word(&string[first] [i_cnt])<<Move_cnt; // 1st String Dot1 in } if(move_motion==1) { buff1[i_cnt]=pgm_read_word(&string[first] [i_cnt])>>Move_cnt2; // 1st String Dot1 Out } for(i=0;i<16;i++){ high1=(buff1[i]>>8); low1=(buff1[i]&0xff); digitalWrite(OE, HIGH); shift_Register(low1); shift_Register(high1); row_dynamic(); ActivePulse(); } void loop() { // put your main code here, to run repeatedly: dot1_display_shift(Dot_char_cnt); // 도트매트릭스 문자 카운터 1 개씩 if(Dot_char_cnt==8){ Dot_char_cnt=0; }

Display 부 출구파트 #include int A = 2; int B = 3; int C = 4; int D = 5; int Data_Red = 6; int Data_Green = 7; int Clk = 8; int LE = 9; int OE = 10; const int __attribute__((progmem)) string[][16]={ 0x00,0x00,0x00,0x180,0x3c0,0x7e0,0x3c0,0xff0,0x1ff8,0x1ff8,0xff0,0x180,0x3c0,0x00,0x00,0x00, // ♣ 0x00,0x00,0x8f0,0x908,0x908,0x3908,0x908,0x8f0,0x800,0x800,0x10,0x10,0xff0,0x00,0x00,0x00, // 안 0x00,0x00,0x808,0xf08,0x808,0xf08,0x9f8,0x800,0x800,0x7e0,0x810,0x810,0x7e0,0x00,0x00,0x00, // 녕 0x00,0x00,0x8e0,0x800,0xbf8,0x800,0x8e0,0x910,0x910,0x910,0x910,0x8e0,0x800,0x00,0x00,0x00, // 히 0x00,0x00,0x9f8,0x900,0x900,0x900,0x900,0x3880,0x880,0x840,0x820,0x818,0x800,0x00,0x00,0x00, // 가 0x00,0x00,0x840,0x840,0x8a0,0x920,0xa10,0x808,0x00,0x810,0xff0,0x810,0xff0,0x00,0x00,0x00, // 십 0x00,0x00,0x840,0x840,0x840,0x840,0x840,0x8a0,0x8a0,0x910,0x910,0xa08,0x800,0x00,0x00,0x00, // 시 0x00,0x00,0x3c0,0x420,0x810,0x810,0x420,0x3c0,0x100,0x100,0x100,0x1ff8,0x00,0x00,0x00,0x00, // 오 0x00,0x00,0x00,0x180,0x3c0,0x7e0,0x3c0,0xff0,0x1ff8,0x1ff8,0xff0,0x180,0x3c0,0x00,0x00,0x00, // ♣ };

Display 부 출구파트 unsigned char Dot_char_cnt=0; // 도트매트릭스에 표시 될 문자 카운터 unsigned char flag_cnt=0; // 도트매트릭스에 표시 될 색상 카운터 unsigned char move_motion=0; // 도트매트릭스에 색쌀 표시 unsigned int Move_cnt=16; // 도트매트릭스 첫번째꺼를 16 번 카운트 unsigned int Move_cnt2=0; unsigned int str_speed_cnt=0; // 도트매트릭스 속력 카운트 bool flag_Oe=0; ISR(TIMER2_OVF_vect){ static bool output = HIGH; digitalWrite(1, output); output = !output; static unsigned int string_moving_speed_value=400; // 문자가 흘러가는 속도 static unsigned int cnt=0; if(flag_Oe) { digitalWrite(OE, LOW); cnt++; if(cnt>=5) { flag_Oe=0; cnt=0;

Display 부 출구파트 digitalWrite(OE, HIGH); } str_speed_cnt++; if(str_speed_cnt>string_moving_speed_value) { str_speed_cnt=0; Move_cnt--; Move_cnt2++; if(Move_cnt==0||Move_cnt2==16){ Move_cnt=16; Move_cnt2=0; move_motion++; if(move_motion>1){ move_motion=0; Dot_char_cnt+=1; flag_cnt++; if(flag_cnt==1) { flag_cnt=0; } TCNT2=0xe7; } void setup() // 셋업 함수 { pinMode(A, OUTPUT); //A 구역 송신 핀 출력으로 설정 pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); pinMode(Data_Red, OUTPUT); pinMode(Data_Green, OUTPUT); pinMode(Clk, OUTPUT); pinMode(LE, OUTPUT); pinMode(OE, OUTPUT); pinMode(1, OUTPUT); TCCR2A=0x00; TCCR2B=0x04; TIMSK2=0x01; TCNT2=0xe7; SREG=0x80; }

Display 부 출구파트 void row_dynamic() // row 열을 선택한 어드레스를 주는 함수 이함수가 호출할때 어드레스 변경 { static unsigned int str_cnt=0; // 항상 0 이 되므로 문제. 변수를 글로벌로 처리 switch(str_cnt)//ROW SHIFT! { case 0:digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, LOW); break; //1 행 LED case 1:digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, LOW); break; //2 행 LED case 2:digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, LOW); break; //3 행 LED case 3:digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, LOW); break; //4 행 LED case 4:digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, LOW); break; //5 행 LED case 5:digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, LOW); break; //6 행 LED case 6:digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); break; //7 행 LED case 7:digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); break; //8 행 LED case 8:digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, HIGH); break; //9 행 LED case 9:digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, HIGH); break; //10 행 LED case 10:digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, HIGH); break; //11 행 LED case 11:digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, HIGH); break; //12 행 LED case 12:digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, HIGH); break; //13 행 LED case 13:digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, HIGH); break; //14 행 LED case 14:digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); break; //15 행 LED case 15:digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); break; //16 행 LED }

Display 부 출구파트 ++str_cnt; if(str_cnt==16) { str_cnt=0; } void shift_Register(unsigned char out ) // 문자를 시프트 시키는 변수 { unsigned char clk=0; for(clk=0;clk<8;clk++){ //8 비트 데이터를 1 비트씩 시프트 레지스터에 입력 if(out&(0x80>>clk)) { switch(flag_cnt){ case 0:digitalWrite(Data_Green, LOW); digitalWrite(Data_Red, HIGH);break; //Red case 1:digitalWrite(Data_Green, HIGH); digitalWrite(Data_Red, LOW);break; //Green case 2:digitalWrite(Data_Green, HIGH); digitalWrite(Data_Red, HIGH);break; //Orange } else { digitalWrite(Data_Green, LOW); digitalWrite(Data_Red, LOW); } digitalWrite(Clk, HIGH); delayMicroseconds(1); digitalWrite(Clk, LOW); } void ActivePulse() { digitalWrite(LE, HIGH); delayMicroseconds(1); digitalWrite(LE, LOW); // 래치 출력 digitalWrite(OE, LOW); delayMicroseconds(500); // OUTPUT ENABLE } void dot1_display_shift(unsigned char first) // 도트매트릭스 첫번째 시프트 { static unsigned int i_cnt=0; register unsigned int buff1[16]={0}; //Dot1 buff register unsigned char high1=0; //Dot1

Display 부 출구파트 register unsigned char low1=0; //Dot1 register unsigned int i=0; for(i_cnt=0;i_cnt<16;i_cnt++) // 문자를 왼쪽으로 시프트 { if(move_motion==0) { buff1[i_cnt]=pgm_read_word(&string[first] [i_cnt])<<Move_cnt; // 1st String Dot1 in } if(move_motion==1) { buff1[i_cnt]=pgm_read_word(&string[first] [i_cnt])>>Move_cnt2; // 1st String Dot1 Out } for(i=0;i<16;i++){ high1=(buff1[i]>>8); low1=(buff1[i]&0xff); digitalWrite(OE, HIGH); shift_Register(low1); shift_Register(high1); row_dynamic(); ActivePulse(); } void loop() { // put your main code here, to run repeatedly: dot1_display_shift(Dot_char_cnt); // 도트매트릭스 문자 카운터 1 개씩 if(Dot_char_cnt==8){ Dot_char_cnt=0; }

작 품 사 진작 품 사 진 센서부 모터부 Display 부 주차장

작 품 동 영 상작 품 동 영 상

활 용 방 안활 용 방 안 주차장 소유주에게 높은 수익을 제공 건물주 및 관리단의 주차관리 업무 부담과 무단 주차, 불법 주차 해소, 운영비용 감축이 가능 건물 주자창, 주차전용건물 등을 소유주에게 임대료를 지급하고 임대하여 당사가 직접 운영하는 사업이 가능 기존에 운영되는 주차장을 무인화 주차장으로 전환하여 주차장과 관련된 모든 업무를 당사가 위탁하여 관리 및 운영이 가능 기존에 운영되는 주차장 보다 인건비 대비 낮은 비용으로 주차장을 관리 하여 이익을 증대