-
아두이노 라이브러리 | 서보모터Technology/Arduino 2024. 1. 19. 18:00
1. 아두이노 라이브러리
LED나 택트 스위치와 같이 간단한 전자 소자는 아두이노 플랫폼에서 지원하는 함수를 이용하여 쉽게 제어할 수 있지만, 초음파 센서와 서보모터 같이 특별한 기능을 가진 장치를 사용하기 위해서는 장치의 동작 원리와 제어 방법을 알아야 한다. 그러나 아두이노 플랫폼에서는 동작 원리와 제어 방법을 모르더라도 이러한 장치들을 간단하게 제어할 수 있도록 다양한 라이브러리를 지원하고 있다. 아래 링크로 접속하면 아두이노 플랫폼에서 지원하는 라이브러리에 대한 정보를 확인할 수있다.
2. 서보모터
서보모터(Servo motor)는 신호선을 통해 입력받은 디지털 신호에 따라 특정한 각도로 동작하는 구동기로, 정확한 동작 제어가 필요한 경우에 사용된다. 서보모터는 DC모터와 기어박스, 가변저항, 제어기로 구성되어 있으며, 신호선을 통해 디지털 신호를 받으면 제어기로 DC모터를 제어하여 신호에 따른 각도로 회전한다. 또한 가변저항을 포함하고 있기 때문에 현재 회전 각도가 어떠한지 확인할 수 있다. 일반적으로 서보모터에는 세 가닥의 전선이 있는데, 빨간색 전선은 서보모터에 전원을 공급하기 위한 전원선, 갈색 혹은 검은색 전선은 접지선, 주황색 혹은 흰색 전선은 서보모터에 신호를 전달하기 위한 신호선이다. 아두이노 플랫폼에서 자주 사용되는 5V 서보모터 SG-90은 아래 링크로 접속하면 구매할 수 있다.
3. 제어 방법
서보모터도 PWM 신호를 받아 동작한다. 펄스의 한 주기 20 ms에서 1.0 ms동안 디지털 신호 HIGH를 유지하면 서보모터는 0도로 회전하고, 2.0 ms동안 디지털 신호 HIGH를 유지하면 180도로 회전한다. 0도와 180도 사이 각도는 디저털 신호 HIGH를 유지한 시간에 비례한다. 이와 같이 서보모터에 PWM 신호를 주어 제어하는 방법도 있지만, 아두이노 플랫폼은 사용자가 서보모터를 직관적으로 제어할 수 있도록 서보모터 라이브러리를 제공하고 있다. 아두이노 플랫폼에서 제공하는 서보모터 라이브러리를 사용하면 서보모터 신호선을 PWM 신호 출력이 가능한 디지털 입출력 핀과 연결할 필요가 없다. 다만 해당 라이브러리를 사용하면 PWM 신호 출력이 가능한 9번 핀과 10번 핀은 PWM 출력을 사용할 수 없게 되므로 주의하도록 하자. 아래 링크로 접속하면 아두이노 플랫폼에서 지원하는 서보모터 라이브러리와 이에 대한 설명을 확인할 수 있다.
4. 예제
4.1. 회로 구성
4.2. 프로그램 작성
#include <Servo.h> // 서보모터 라이브러리 추가 Servo myServo; // myServo라는 이름의 서보모터 객체 생성 void setup() { myServo.attach(12); // 서보모터를 제어할 핀으로 12번 핀을 설정 Serial.begin(9600); // 시리얼 통신 시작 (통신 속도: 9600 bps) } void loop() { myServo.write(0); // 서보모터를 0도로 회전 Serial.print("Angle: "); // 시리얼 모니터에 문자열을 출력 // 시리얼 모니터의 현재 서보모터의 각도를 출력한 뒤 줄 바꿈 Serial.println(myServo.read()); delay(3000); // 3000 ms 대기 myServo.write(90); // 서보모터를 90도로 회전 Serial.print("Angle: "); Serial.println(myServo.read()); delay(3000); myServo.write(180); // 서보모터를 180도로 회전 Serial.print("Angle: "); Serial.println(myServo.read()); delay(3000); int i = 0; while (i <= 180) // 서보모터를 10도씩 회전 { myServo.write(i); Serial.print("Angle: "); Serial.println(myServo.read()); delay(1000); i += 10; } delay(1000); while (i >= 0) // 서보모터를 10도씩 역회전 { myServo.write(i); Serial.print("Angle: "); Serial.println(myServo.read()); delay(1000); i -= 10; } delay(1000); }
[함께 읽으면 좋은 페이지]
참고문헌
- 최훈. (2022). 팅커캐드 & 아두이노. 길벗캠퍼스.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 | PIR 센서 모듈 HC-SR501 (0) 2024.02.02 아두이노 프로젝트 | 마이크로 서보 로봇 (0) 2024.01.26 아두이노 | DC모터 드라이버 L298N 모듈 (0) 2024.01.12 아두이노 | DC모터 드라이버 L293D 모듈 (1) 2024.01.05 아두이노 | DC모터 드라이버 L293D (0) 2024.01.05