재료 및 구성품
4:11
회로연결하기
서보모터 연결하기 (서보모터의 3가지 단자를 아래와 같이 연결해봅시다. 위의 회로도 그림을 참고하세요)
갈색(Gnd) - Gnd
빨강(VCC) - 5V
주황(Signal) - 9번핀
초음파센서 연결하기 (초음파센서의 4가지 단자를 아래와 같이 연결해봅시다. 위의 회로도 그림을 참고하세요.)
VCC - 3.3 V
Trig - 2번핀
Echo - 3번핀
Gnd - Gnd
const int trig_pin=2;
const int echo_pin=3;
void setup() {
pinMode(trig_pin, OUTPUT);
pinMode(echo_pin, INPUT);
Serial.begin(115200);
}
void loop() {
digitalWrite(trig_pin,LOW);
delayMicroseconds(2);
digitalWrite(trig_pin,HIGH);
delayMicroseconds(10);
digitalWrite(trig_pin,LOW);
long duration=pulseIn(echo_pin,HIGH);
long distance=(duration/2)/29.1;
Serial.print(distance);
Serial.println("cm");
}
#include <Servo.h>
Servo myServo;
void setup() {
myServo.attach(9);
}
void loop() {
myServo.write(10);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(170);
delay(1000);
myServo.write(90);
delay(1000);
}
#include <Servo.h>
Servo myServo;
void setup() {
myServo.attach(9);
}
void loop() {
myServo.write(10);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(170);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(10);
delay(1000);
myServo.detach();
}
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
#include <Servo.h>
Servo myservo;
int pos = 10;
int trigPin = 2;
int echoPin = 3;
float duration;
float distance = 100;
void setup() {
myservo.attach(9);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delay(2);
digitalWrite(trigPin, HIGH);
delay(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = ((float)(340 * duration) / 10000) / 2;
if (distance < 20){
for (pos = 10; pos < 120; pos += 2)
{Serial.print(distance);
Serial.println("cm");
myservo.write(pos);
delay(10);
}
delay(5000);
for (pos = 120; pos >= 10; pos -= 5){
myservo.write(pos);
delay(10);
}
}
delay(50);
}
01: Servo 관련 함수 사용 위해 Servo.h 헤더 포함
02: 서보제어를 위해 Servo 클래스인 myservo 객체를 생성합니다.
03: 모터의 처음 위치를 10도로 초기값 설정
04: 초음파센서 Trig를 2번 핀으로 설정
05: 초음파센서 Echo를 3번 핀으로 설정
06: duration 변수 사용
07: distance(거리) 값을 임의의 초기값 100cm로 설정
08: setup 함수를 정의
09: 서보모터 신호핀을 9번핀으로 설정
10: 초음파센서의 Trig핀을 출력모드로 설정
11: 초음파센서의 Echo핀을 입력모드로 설정
12:시리얼통신을 9600속도로 시작
14: loop 함수를 정의
15: Trig핀 신호 없음으로 초기화
16: 2밀리초 대기
17: Trig핀 신호 발생
18: 10밀리초 대기
19: Trig핀 신호 중단
21: 측정한값으로 물체와 센서 사이의 거리를 계산하여 변수 duration에 저장(거리=속력x시간)
21:distance에 실제 우리가 사용하는 cm단위 거리값 저장
22:만약 거리가 20cm보다 작다면(20cm 이내로 들어온다면)
23~25:서보모터를 10도에서 120도까지 2도씩 올리기(문 열기)
29: 5초 대기
30~32:서보모터를 120도에서 10도까지 5도씩 내리기(문 닫기)
#include <Servo.h>
Servo myservo;
int pos = 10;
int trigPin = 2;
int echoPin = 3;
float duration;
float distance = 100;
void setup(){
myservo.attach(9);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop(){
digitalWrite(trigPin, LOW);
delay(2);
digitalWrite(trigPin, HIGH);
delay(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = ((float)(340 * duration) / 10000) / 2;
if(distance < 20){
for (pos = 10; pos < 120; pos += 2){
Serial.print(distance);
Serial.println("cm");
myservo.write(pos);
delay(10);
}
delay(5000);
for (pos = 120; pos >= 10; pos -= 5){
myservo.write(pos);
delay(10);
}
}
delay(50);
}