손소독제 키트 외형 조립하기
손소독제 회로 구성 및 코딩하기
01.초음파 센서 연결하기
ㅇㅇㅇ
02.서보모터 연결하기
03. 피에조부저 연결하기
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <Servo.h>
Servo servo;
int piezoPin = 11;
int echoPin = 3;
int trigPin = 2;
int servoPin = 9;
unsigned long currentTime = 0;
boolean flag = 0;
int checkTime = 500;
int pushAngle = 10;
int currentAngle = 90;
void setup() {
servo.attach(servoPin);
servo.write(currentAngle);
delay(100);
servo.detach();
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(piezoPin, OUTPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
digitalWrite(echoPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
unsigned long duration = pulseIn(echoPin, HIGH);
float distance = duration / 29.0 / 2.0;
if (distance <= 10) {
if (flag == 0) {
currentTime = millis();
flag = 1;
}
if (millis() >= currentTime + checkTime) {
servo.attach(servoPin);
tone(piezoPin, 1046, 200);
delay(200);
tone(piezoPin, 1175, 200);
delay(200);
tone(piezoPin, 1319, 200);
delay(800);
servo.write(pushAngle);
delay(1000);
servo.write(currentAngle);
delay(1000);
servo.detach();
flag = 0;
}
}
else {
flag = 0;
noTone(piezoPin);
}
delay(100);
}
01:Servo관련 함수 사용 위해 servo.h 헤더 포함
02: 서보제어를 위해 Servo클래스인 servo 객체를 생성합니다.
03: 피에조를 11번으로 제어하기 위해 piezoPin을 11번으로 설정
04:초음파센서의 echoPin을 3번으로 설정
05:초음파센서의 trigPin을 2번으로 설정
06:서보모터 설정핀을 9번으로 설정
07:초음파센서의 손 측정 시간을 설정하는 변수 생성(현재 0)
08:손소독제 크기에 따라 각도조절 변수 생성( 현재 0)
09: checkTime를 500으로 설정(손 측정 시간 변수)
10: pushAngle 값을 10으로 설정(손소독제 각도)
11: currentAngle 값을 90으로 설정(손소독제 각도)
12: setup 함수들을 정의(1회 실행)
13:서보모터 신호핀을 servoPin으로 설정(앞에서 9번으로 했음)
14:서보모터 각도를 90도로 제어
15:100밀리초 대기
16:서보모터 신호를 중단
17:trig핀을 출력으로 설정
18:echo핀을 입력으로 설정
19:piezo핀을 출력으로 설정
20:loop 함수들을 정의(무한 반복 실행)
21:trig핀 신호 없음으로 초기화
22:echo핀 신호 없음으로 초기화
23:2마이크로초 대기
24:trig핀 신호 발생
25:10마이크로초 대기
26:trig핀 신호 중단
28:측정한 값으로 물체와 센서 사이의 거리를 계산하여 duration에 저장
29:distance에 실제 우리가 사용하는 cm단위 거리값 저장
30: 만약 거리가 10cm보다 작거나 같다면
31:만약 flag(스위치 신호)가 0이면(앞에서 0으로 했으니 무조건 실행)
32: currentTime는 아두이노보드 시작 후 지난 밀리초 시간
33: 스치가 켜지는 의미
34: 만약 손측정 시간이 0.5초(checkTime값)보다 크다면 {}코드 실행
35:서보핀을 동작 설정
36:피에조 소리를 발생
42: 서보모터 각도를 pushAngle로 작동(10도)
43:1초 대기
44:서보모터 각도를 currentAngle로 작동(90도)
45:1초 대기
46:서보모터 작동 중지
47: 스위치 끄기
48:그렇지 않으면
49:스위치 끄고
50:소리도 출력하지 않음