This tutorial is part of: 서보 모터
서보 모터와 관련된 모든 동영상이 여기에 나열되어 있습니다. 다른 동영상 링크는 이 글 아래에 있습니다.
포텐셔미터를 이용한 아두이노 서보 모터 제어
이 튜토리얼에서는 아두이노를 사용하여 포텐셔미터로 서보 모터를 제어하는 방법을 탐구할 것입니다. 목표는 포텐셔미터의 회전에 따라 서보의 위치가 조정되는 간단한 회로를 만드는 것입니다. 이 프로젝트가 끝나면 포텐셔미터를 돌리면서 서보 각도를 0도에서 180도까지 부드럽게 변화시키는 작동 모델을 갖게 될 것입니다. 이는 아두이노에서 아날로그 입력과 서보 제어의 기본을 이해하는 좋은 방법입니다.
이를 달성하기 위해 우리는 아두이노 보드, 서보 모터 및 가변 저항기(포텐셔미터)를 사용할 것입니다. 포텐셔미터는 가변 저항기로 작용하여 아두이노에 아날로그 입력을 제공하고, 아두이노는 이에 따라 서보 모터의 위치를 결정합니다. 이 프로젝트는 재미있을 뿐만 아니라 전자공학 및 프로그래밍의 핵심 개념을 보여주기 때문에 교육적입니다. 더 자세한 설명을 원하신다면 비디오(비디오에서 :00)를 확인해 보세요.
하드웨어 설명
이 프로젝트의 주요 구성 요소는 아두이노 보드, 서보 모터 및 포텐셔미터입니다. 아두이노는 작동의 두뇌로, 입력을 처리하고 출력을 제어합니다. 서보 모터는 아두이노로부터 받은 명령에 따라 물리적으로 움직이는 장치입니다. 포텐셔미터는 1k 옴에서 1M 옴까지 가능하며, 사용자가 서보 모터의 움직임으로 변환되는 가변 입력을 제공할 수 있게 합니다.
서보 모터는 원하는 위치를 나타내는 PWM(펄스 폭 변조) 신호를 수신하여 작동합니다. 포텐셔미터를 돌리면 저항이 변경되고, 이는 아두이노에 아날로그 전압으로 읽힙니다. 서보 모터는 5V로 작동합니다. 3.3V에서는 작동하지 않습니다. 이 전압은 서보 모터의 움직임 범위에 매핑되어 0도에서 180도까지 부드러운 움직임을 가능하게 합니다.
SG90 서보 모터 데이터시트 세부정보
| 제조업체 | 패럴랙스 |
|---|---|
| 부품 번호 | SG90 |
| 로직/입출력 전압 | 5 V |
| 공급 전압 | 4.8-6 V |
| 출력 전류 (채널당) | ~500 mA |
| 채널당 피크 전류 | 1 A |
| PWM 주파수 안내 | 50 헤르츠 |
| 입력 논리 임계값 | 0.5 V (낮음), 2.5 V (높음) |
| 전압 강하 / RDS(온)/ 포화 | 0.5 V에서 500 mA |
| 열 한계 | 0°C에서 60°C까지 |
| 패키지 | 표준 9g 서보 |
| 노트 / 변형 | RC 애플리케이션에서 일반적으로 사용됨 |
- 서보가 최대 전류 정격을 초과하지 않도록 하십시오.
- 서보가 높은 하중에서 지속적으로 작동하는 경우 히트 싱크를 사용하십시오.
- 정확한 측정을 위해 포텐셔미터를 아날로그 핀에 연결하세요.
- 서보 제어를 위한 PWM 신호 타이밍에 주의하세요.
- 서보의 움직임 범위를 확인하여 물리적 장애물을 피하십시오.
배선 지침


이 설정을 위해서는 다음과 같이 구성 요소를 연결해야 합니다:
포텐셔미터의 중간 핀(와이퍼)을 아두이노의 아날로그 핀에 연결하세요.A0가변 저항기의 다른 두 핀은 연결되어야 합니다.5V그리고GND아두이노에서. 서보 모터의 경우, 빨간색 전선을 연결합니다.5V, 검은색 전선을GND, 그리고 노란색 또는 흰색 전선을 디지털 핀에 연결합니다.9아두이노에서. 이 배치는 포텐셔미터가 아두이노에 아날로그 입력을 제공할 수 있게 하며, 아두이노는 그 입력에 따라 서보 모터의 위치를 제어합니다.
모든 연결을 확인하고 서보가 움직임 범위에서 방해받지 않도록 하십시오. 다른 아두이노 모델을 사용하는 경우 아날로그 입력 및 서보 출력의 핀 할당이 호환되는지 확인하십시오.
코드 예제 및 안내
아래는 서보를 초기화하고 포텐셔미터 값을 읽는 코드의 일부입니다:
#include
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
이 코드에서는 Servo 라이브러리를 포함하고 servo 객체를 생성합니다.myservo서보가 핀에 연결되어 있습니다.9이 핀을 사용하여 이를 제어할 수 있게 해줍니다.
void loop() {
int sensorValue = analogRead(A0); // read the potentiometer
pos = map(sensorValue, 0, 1023, 0, 180); // map to servo position
myservo.write(pos); // move servo to position
delay(15); // waits 15ms for the servo to reach the position
}
루프 함수에서 우리는 핀에서 가변 저항 값을 읽습니다.A0서보의 범위(0-180도)로부터 그 범위(0-1023)를 매핑합니다.myservo.write(pos)명령은 포텐셔미터의 회전에 따라 서보를 원하는 위치로 이동시킵니다.
시연 / 기대할 사항
이 프로그램을 실행하면 포텐셔미터를 돌릴 때 서보 모터가 0도에서 180도까지 부드럽게 움직이는 것을 볼 수 있어야 합니다. 서보가 예상대로 움직이지 않으면 배선을 확인하고 포텐셔미터가 제대로 작동하는지 확인하세요. 또한 아두이노에 전원이 제대로 공급되고 코드가 오류 없이 업로드되었는지 확인하세요. 서보가 포텐셔미터의 위치를 실시간으로 반영하는 것을 볼 수 있을 것입니다 (비디오에서 02:00).
비디오 타임스탬프
- 00:00- 프로젝트 소개
- 01:30하드웨어 설정 설명
- 03:45- 배선 지침
- 05:00- 코드 워크스루
- 07:30- 완료된 프로젝트의 시연
This tutorial is part of: 서보 모터
- Controlling a Servo with Push Buttons Using Arduino
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Controlling a Servo with a Potentiometer Using Arduino
- Controlling a Servo with Potentiometer and LCD1602 using Arduino
- Controlling Servo Motors Using an Infrared Remote with Arduino
- 아두이노를 위한 손 제스처로 서보 위치 제어하기
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- Arduino Code and Video for PCA9685 16-Channel 12-Bit Servo Controller V1
- Build an Arduino Servo Toggle Switch with a Push Button
/**
*Original source: Arduino IDE
* Arduino Project: Controlling the servo position
* This code is used with a video tutorial for Robojax.com
* Published on April 24, 2017, from Ajax, ON, Canada.
* Written/Edited by Ahmad Shamshiri
* Watch the video on YouTube: https://youtu.be/kZ9b31gVemc
* View tutorial page for this code https://robojax.com/RJT8
* Controlling a servo position using a potentiometer (variable resistor)
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
자원 및 참고자료
아직 자원이 없습니다.
파일📁
데이터시트 (pdf)
-
sg90_serveo_motor_datasheet
sg90_serveo_motor_datasheet.pdf0.13 MB