저비용으로 간단하게 어디에서든 가능한
arduino
아두이노 레오나르도 - 초음파 센서로 서보모터 제어하기
입력 | 출력 | 실습내용 |
초음파센서 | 서보모터 | 초음파센서로 일정 거리 안에 물체가 있을 때 서보모터가 움직임 |
준비물 | 수량 |
아두이노 (레오나르도) | 1 |
브레드보드 | 1 |
초음파 센서 | 1 |
서보모터 | 1 |
점퍼케이블 | 9 |
결선도
- 코딩 1
#include <Servo.h> // 서보모터 라이브러리 호출
int pos = 10;
int trigPin = 11; // trig핀 11번
int echoPin = 12; // echo핀 12번
float duration = 0;
float distance = 0;
Servo myservo; // 서보모터 제어문
void setup() {
Serial.begin(9600); // 시리얼통신 시작
myservo.attach(10); // servo을 서보모터를 제어할 핀으로 설정
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, HIGH); // trig핀을 HIGH로 바꿈
delay(10);
digitalWrite(trigPin, LOW); // trig핀을 LOW로 바꿈
duration = pulseIn(echoPin, HIGH);
// echo핀이 HIGH를 유지하는 시간이 몇 밀리세컨드 동안 유지하는지 반환해 timeDistance에 저장
distance = ((float)(340 * duration) / 10000) / 2;
// (왕복거리/2) 해주고 음속인걸 고려해 29.1로 나누어 cm의 거리값으로 나타내기
// 몇cm인지 시리얼모니터에 출력
Serial.print(distance);
Serial.println("cm");
if (distance < 150) { // 10cm미만일 때
myservo.attach(10);
myservo.write(0);
delay(1000); // 0.5초간 유지를 위해 딜레이
myservo.write(180);
delay(1000);
myservo.detach();
}
else {
delay(300);
}
}
- 코딩 2
#include <Servo.h> // 서보모터 라이브러리 호출
int pos = 10;
int trigPin = 11; // trig핀 11번
int echoPin = 12; // echo핀 12번
float duration = 0;
float distance = 0;
Servo myservo; // 서보모터 제어문
void setup() {
Serial.begin(9600); // 시리얼통신 시작
myservo.attach(10); // servo을 서보모터를 제어할 핀으로 설정
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, HIGH); // trig핀을 HIGH로 바꿈
delay(10);
digitalWrite(trigPin, LOW); // trig핀을 LOW로 바꿈
duration = pulseIn(echoPin, HIGH);
// echo핀이 HIGH를 유지하는 시간이 몇 밀리세컨드 동안 유지하는지 반환해 timeDistance에 저장
distance = ((float)(340 * duration) / 10000) / 2;
// (왕복거리/2) 해주고 음속인걸 고려해 29.1로 나누어 cm의 거리값으로 나타내기
// 몇cm인지 시리얼모니터에 출력
Serial.print(distance);
Serial.println("cm");
int a = map(distance, 100, 600, 90, 180);
myservo.write(a);
delay(120);
}