아두이노, 초음파 센서와 서보모터 예제
글. 오상문 sualchi@daum.net
초음파센서에 3cm 정도 가까이 손을 대면 서보모터를 120도로 돌리고 2초 후에 제자리로 보내는 예제입니다.
[초음파센서] [아두이노] [서보모터]
GND ------------------ GND
GND ----------------- GND (갈색 또는 검정)
Echo ---------------- 디지털 12핀
Trig ------------------디지털 7핀
VCC ------------------ 5V ------------------ VCC (빨간색)
디지털 8핀 ------------- Data (주황 또는 흰색)
[화면] 실제 모습 (5V는 Y 케이블을 만들어서 초음파센서와 서보모터에 연결함)
예제 코드는 다음과 같습니다.
#include <Servo.h>
#define PING_PIN 7
#define SERVO_PIN 8
Servo servo; // servo 객체
void setup() {
servo.attach(SERVO_PIN); // 서보모터 출력 8번핀
// Serial.begin(9600); // 시리얼 모니터 사용 시
servo.write(0); // 서보모터 각도를 0도로 초기화
}
void loop() {
long duration, cm;
// 초음파 거리 측정
pinMode(PING_PIN, OUTPUT);
digitalWrite(PING_PIN, LOW);
delayMicroseconds(2);
digitalWrite(PING_PIN, HIGH);
delayMicroseconds(5);
digitalWrite(PING_PIN, LOW);
pinMode(PING_PIN, INPUT);
duration = pulseIn(PING_PIN, HIGH);
cm = microsecondsToCentimeters(duration);
// 시리얼 모니터에 출력
// Serial.print(cm);
// Serial.print("cm");
// Serial.println();
if(cm < 5) { // 거리가 5cm 이하면
servo.write(120); // 서보모터 각도 변경
delay(2000); // 2초 지연
servo.write(0); // 서보모터 각도를 원래대로 변경
} else // 아니면
delay(100); // 0.1초 지연
}
long microsecondsToCentimeters(long microseconds) {
// 소리 속도는 340 m/s 또는 29 microseconds/cm
// 핑은 갔다가 되돌아오는 거리이므로 2로 나누어야 실제 거리가 됨
return microseconds / 29 / 2;
}
// 인치 단위로 변경
// long microsecondsToInches(long microseconds) {
// return microseconds / 74 / 2;
// }
<이상>
'아두이노, 라즈베리파이' 카테고리의 다른 글
아두이노, 거리 센서 종류 (0) | 2019.11.04 |
---|---|
아두이노, 풀업 저항, 풀다운 저항 (0) | 2019.11.03 |
아두이노, 서보모터 제어 예제 (0) | 2019.10.31 |
아두이노, 릴레이로 꼬마전구 외부전원 제어하기 (0) | 2019.10.29 |
아두이노, 초음파 센서와 부저 예제 (0) | 2019.07.18 |