📌프로젝트 주제 선정 과정
- 브레인스토밍
- 아이디어와 문제 결합
- 선택된 주제
- 최종 선택 주제
➡️ 근접센서 +모터로 파리지옥 만들기
📌파리지옥 동작 설명
- 전원 공급
- 인체감지 센서(PIR) 초기값은 LOW로 기본 설정
- 가정1
- 인체감지 센서에 움직임 감지
- 초음파 센서 측정 시작
- 하단에 위치한 초음파 센서에 거리가 5cm이하로 감지
- 입 열기 + LCD에 hi출력
- 가정2
- 인체감지 센서에 움직임 감지
- 초음파 센서 움직임 감지 시작
- 입안에 위치한 초음파 센서에 거리가 5cm이하로 감지
- 입 닫기 + LCD에 이모티콘 + yum-yum 출력
- 인체감지 센서에 움직임이 감지X
- 초음파 센서 측정 중지
📌프로젝트에 사용한 센서
- 인체감지센서(PIR)
- 역할 : 물체 or 사람의 움직임을 감지 -> 감지 시 초음파센서 측정 시작
- 문제 : 기존 PIR을 사용하지 않았을 경우 초음파센서가 계속해서 측정 전력 낭비 발생
- 해결방안 : PIR센서를 통해 움직임을 감지할 경우에만 초음파센서 측정을 시작하도록 설계 불필 요한 전력 낭비 해결
- 서보모터
- 서보모터(입을 닫을때)
- 역할 : 파리지옥 입안에 있는 초음파 센서로 부터 신호를 전달 입을 닫는다.
- (상단 모터 : 120°)
- (하단 모터 : 60°)
- 서보모터(입을 열때)
- 역할 : 파리지옥 줄기 하단에 있는 초음파 센서로 부터 신호 전달 입을 연다.
- (상단 모터 : 180°)
- (하단 모터 : 15°)
- 초음파센서
- 초음파센서1
- 위치 : 파리지옥 입안
- 역할 : 초음파센서를 통해 거리를 측정하여 물체가 5cm 이내에 측정이 되면 서보모터에 신호를 보 내 입을 닫는다.
- 초음파센서2
- 위치 : 줄기 하단
- 역할 : 초음파센서를 통해 거리를 측정하여 물체가 5cm 이내에 측정이 되면 서보모터에 신호를 보내 열도록 한다.
- LCD모니터(16*4)
- 역할 : 입을 열고 닫을때 LCD창에 상태를 나타냄
- 동작
- 초음파 센서로 부터 신호 전달 입 닫기 LCD창에 yum-yum + 이모티콘 출력
- 초음파 센서로 부터 신호 전달 입 열기 LCD창에 hi 출력
📌서보 모터 설정
서보 모터 설정 // 서보 모터 변수 Servo myservo; // 모터1 -> 본체 머리 윗부분에 부착 Servo myservo2; // 모터2 -> 본체 머리 아랫부분에 부착 int pos; // 모터1 각도 변수 int pos2; // 모터2 각도 변수![]()
📌PIR 센서 설정
PIR 센서 설정 // 사람의 움직임 감지를 위한 pir센서 변수 int inputPin = 5; // 센서 신호 핀 설정 int pirState = LOW; // 초기 상태-움직임이 없음을 가정 int val = 0; // 센서 신호 판별을 위한 변수
void setup() { // 거리 감지를 위해 초음파센서의 trig 출력 pinMode(trigPin, OUTPUT); // 하단 초음파센서1 pinMode(trigPin2, OUTPUT); // 상단 초음파센서2 // echo 입력 pinMode(echoPin, INPUT); // 하단 초음파센서1 pinMode(echoPin2, INPUT); // 상단 초음파센서2 // 모터 핀 연결 myservo.attach(2); // 입 윗부분 모터1을 2번 핀에 연결 myservo2.attach(3); // 입 아랫부분 모터2를 3번 핀에 연결 // 모터1, 모터2의 시작 각도 설정 myservo.write(160); myservo2.write(45); pinMode(inputPin, INPUT); // pir센서의 input 설정 lcd.init(); // I2C LCD 초기화 lcd.backlight(); // LCD 백라이트 켜기 }
void setup() { // 거리 감지를 위해 초음파센서의 trig 출력 pinMode(trigPin, OUTPUT); // 하단 초음파센서1 pinMode(trigPin2, OUTPUT); // 상단 초음파센서2 // echo 입력 pinMode(echoPin, INPUT); // 하단 초음파센서1 pinMode(echoPin2, INPUT); // 상단 초음파센서2 // 모터 핀 연결 myservo.attach(2); // 입 윗부분 모터1을 2번 핀에 연결 myservo2.attach(3); // 입 아랫부분 모터2를 3번 핀에 연결 // 모터1, 모터2의 시작 각도 설정 myservo.write(160); myservo2.write(45); pinMode(inputPin, INPUT); // pir센서의 input 설정 lcd.init(); // I2C LCD 초기화 lcd.backlight(); // LCD 백라이트 켜기 }
void loop() { // pir 센서가 사람의 움직임을 감지하기 위함 val = digitalRead(inputPin); // 센서 신호값을 읽어와서 val 변수에 저장 // pir센서에 움직임이 감지되면 초음파센서가 작동 if (val == HIGH) // 센서 신호 값이 HIGH면 – 움직임이 감지되었을 경우 { if (pirState == LOW) // 센서 초기상태면 – 움직임이 없는 상태 { ... ① // 파리지옥의 동작 수행 } } else // 센서 신호값이 LOW면 - 움직임이 없을 경우 { ... ② // 아무 동작도 수행하지 않음 } }
if (val == HIGH) // 움직임이 감지되었을 경우 { if (pirState == LOW) // 상태가 센서 초기상태면 {... ① // 초음파센서의 trig를 출력하여 물체와의 거리 감지하기 digitalWrite(trigPin, LOW); delay(2); digitalWrite(trigPin, HIGH); delay(10); digitalWrite(trigPin, LOW); // 하단 초음파센서1 거리 측정 duration = pulseIn(echoPin, HIGH); // 초음파 보낸 시간 저장 distance = ((float)(340 * duration) / 10000) / 2; digitalWrite(trigPin, LOW); delay(2); digitalWrite(trigPin2, HIGH); delay(10); digitalWrite(trigPin2, LOW); // 상단 초음파 센서2 거리측정 duration2 = pulseIn(echoPin2, HIGH); distance2 = ((float)(340 * duration2) / 10000) / 2;
📌LCD 모니터 설정
LCD 모니터 설정1 LiquidCrystal_I2C lcd(0x27, 20, 4); // lcd 주소 설정 // lcd 한 칸의 픽셀 on/off 설정 -> 1:on, 0:off byte customChar[] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111 }; // 모두 1로 설정 -> lcd 한 칸을 키면 한 칸 전체 on
LCD 모니터 설정2 // lcd 화면에 파리지옥이 입 열고 있는 모습 출력하는 함수 void OpenMouse() { lcd.createChar(1, customChar); // 픽셀on/off 설정을 1로 지정 for (int i = 5;i < 9;i++) { lcd.setCursor(i,0); // i행 0열 lcd.write(1); // 픽셀 모두 켜기 lcd.setCursor(i,3); // i행 3열 lcd.write(1); // 픽셀 모두 켜기 } lcd.setCursor(4,1); // 4행 1열 lcd.write(1); // 픽셀 모두 켜기 lcd.setCursor(4,2); // 4행 1열 lcd.write(1); // 픽셀 모두 켜기 }
LCD 모니터 설정3 // lcd 화면에 파리지옥이 입 닫는 모습 출력하는 함수 void CloseMouse() { lcd.createChar(1, customChar); // 픽셀on/off 설정을 1로 지정 for (int i = 4;i < 9;i++) { lcd.setCursor(i,1); // i행 1열 lcd.write(1); // 픽셀 모두 켜기 lcd.setCursor(i,2); // i행 2열 lcd.write(1); // 픽셀 모두 켜기 } } 
📌구현 모습 및 동작 영상
- 파리지옥 입
- 서브모터 활용
- 초음파 센서, 모니터 활용
- 기타 제작
- 동작 영상