Securing Keys

[아두이노] 초음파센서 측정값을 바탕으로 서보모터 제어하기 본문

IT/IoT

[아두이노] 초음파센서 측정값을 바탕으로 서보모터 제어하기

GRACE_MJ 2020. 6. 7. 22:14

 

서보 모터 (Servo Motor)

 - 일반 모터와는 다르게 회전이 정해져 있음 → 정확한 움직임이 필요한 경우에 유용

 - Servo = (사용자의 명령에) 따른다

 - 사용자가 원하는 각도, 속도로 움직임 가능

 ex) 로봇, 장난감, 드론, CCTV 등

 - 이번에 사용하는 SG90 서보모터: 저렴 BUT 0~180도까지만 회전 가능

 

 

 

 

준비물

 - Arduino Uno R3

 - 초음파센서 (HC-SRO4)

 - 점퍼선

 - 브레드보드 (빵판)

 - UNO 케이블

 - LED 3개

 - 서보모터 (SG90)

 - (권장) 220Ω 저항

 

 

 

 

저번 포스팅에서 초음파센서를 이용하여 LED 제어를 하는 것을 구현했었습니다.

2020/06/07 - [IT/IoT] - [아두이노] 초음파센서 측정값을 바탕으로 LED 제어하기

 

 

 

 

 

 

 

 

 

 

여기에 서보모터를 추가해보도록 하겠습니다.

서보모터에 있는 주황색 단자는 데이터핀이고, 빨간색 단자는 vcc, 갈색 단자는 gnd입니다.

 

 

 

 

 

 

 

 

 

서보모터를 브레드보드와 아두이노에 연결해주었습니다.

저는 데이터핀인 주황색 단자는 디지털 5번에, vcc인 빨간색 단자는 5V와 연결된 +라인에, 그리고 gnd인 갈색 단자는 gnd와 연결된 -라인에 연결해주었습니다.

 

 

 

 

 

#include<Servo.h>

Servo servo;
int degree = 0;	// 서보모터가 돌아가는 각도

가장 바깥쪽 코드에 위와 같이 라이브러리와 변수들을 설정해줍니다.

 

 

 

 

 

void setup() {
	...(중략)...
    servo.attach(5);	// 디지털 5번에 꽂아주었기 때문에
}

그리고 setup() 함수에 서보모터가 디지털 5번에 꽂혀 있음을 명시해줍니다.

 

 

 

 

 

 

void loop() {
	...(중략)...
    if (distance <= 10){  // 10cm 이내
    	...(중략)...
        degree = 0;
    	servo.write(degree);
	} else if (distance <= 20){ // 20cm 이내
    	...(중략)...
        degree += 20;
        servo.write(degree);
        delay(500);
        degree -= 20;
        servo.write(degree);
        delay(500);
    } else {
    	...(중략)...
    	degree += 20;
        servo.write(degree);
        delay(200);
        degree -= 20;
        servo.write(degree);
        delay(200);
  	}
}

그 후 loop() 함수 안에 기존에 쓰여있던 코드를 이용하여 서보모터에 관한 코드를 작성해줍니다.

서보모터는 계속해서 0도와 20도를 왔다갔다하게끔 해주었습니다.

 

만약 10cm 이내에 장애물이 있다면 서보모터는 가만히 멈춰있고

20cm 이내에 장애물이 있을 경우에는 서보모터가 0도와 20도를 왔다갔다하고,

그 외의 경우에는 서보모터가 0도와 20도를 더욱 빠르게 왔다갔다 하게끔 설정해주었습니다.

 

 

 

 

 

 

 

 

그렇게 나타난 결과는 위와 같습니다.

Comments