반응형

 

아두이노, 초음파 센서와 서보모터 예제

 

글. 오상문 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;
// }

 

<이상>

 

반응형

+ Recent posts