Arduino, 서보모터
서보모터 SG-90
- 모터드라이버, 회전센서, 모터, 제어회로가 내장된 기어 박스를 포함하고 있는 형태의 모터로, 스텝모터보다 힘이 강함
- 보통 선이 3가닥이며, 회전수와 각도 등의 움직임 제어가 가능
- 아두이노에서 많이 다루는 SG90 제품의 경우 0~180˚ 제어가 가능
- 아두이노UNO의 USB 전류량이 500mA 정도가 한계이므로 별도의 전원을 사용하지 않으면 1~2개의 서보모터만 사용 가능
라이브러리 추가하기
서보모터를 사용하기 위한 Servo 라이브러리는 아두이노 IDE에 기본으로 포함되어 있다.
- 스케치> 라이브러리 포함하기> Servo 를 선택하면,
- #include <servo.h> 라이브러리가 스케치에 추가 된다.
schematic
SG90 | Brown | Red | Orange |
---|---|---|---|
Arduino | GND | 5V | 10 |
sketch : 서보모터 180º 회전 왕복하기
1 |
|
- servomotor.write(숫자)를 사용할때, 숫자는 현재 위치에서의 ‘회전각’을 의미하는 것이 아니다!
- 초기 위치를 0º로 기준삼아, 표시된 숫자의 각도 위치로 이동하라는 의미이다. 예를들어서 servomotor.write(90)와 servomotor.write(30)을 연속으로 실행하면,
- 90도를 회전한 뒤, 추가로 30도를 회전하여 120도 위치에 있다 → ×
- 90도의 위치로 회전한 뒤, 역회전하여 (처음위치를 기준으로) 30도의 위치로 이동한다. → ○
- 단, servo.h 라이브러리를 사용하면, 스케치 내에서 analogWrite를 사용할 수 없다는 단점도 있다.
sketch: 시리얼모니터에서 각도값을 입력받아 회전시키기
1 |
|
서보모터 SG-90: 라이브러리 없이 사용하기
for SG90 with Arduino
- Frequency of that signal should be 50hz.
- Its range is 544-2450 micro seconds for 0-180 degree angle.
- Again its a little complex.
- For example 0 degree signal will be something like 5 volts for 544 micro seconds and 0 volt for 19465.
- highDelay
- the time in which we want to keep voltage high on pin 10 and this unit is in micro seconds.
- lowDelay
- the time in which want to keep voltage zero across pin 10 again this unit is going to be in micro seconds
- only HIGH part of signal wont operate servo. we have to send complete HIGH and LOW signal to make servo work.
- deg_factor
- signal range (2450 - 544) for SG90 divided by 180 which is equal to 10.6 something that we make 11 as an integer.
- Loop = 20000;
- 20000 micro seconds or 20 milli seconds is signal cycle or u can say total signal should be equal to 20 milli seconds including HIGH and LOW input. (50Hz)
1 | int servoPin = 10; // servo is connected to pin 10. |
시리얼 모니터에 입력한 문자로 서보모터 회전시키기
1 | int servoPin = 10; // servo is connected to pin 10. |
- l 을 입력하면, 5도 좌회전하며, ll을 입력하면 10도 좌회전한다.
- r 을 입력하면, 5도 우회전하며, rr을 입력하면 10도 우회전한다.
서보모터와 인터럽트 동시에 사용하기
서보모터가 180도 회전하는 동안, 스위치를 누르면 13번 LED가 토글되도록 만들어보자.
schematic
sketch
1 | int servoPin = 10; // servo is connected to pin 10. |
- 스위치를 눌렀다 뗄 때, 물리적 요인에 의해 다시 스위치가 눌리는 효과가 나타나기도 함 (chattering)
- Chattering 효과를 방지하기 위해, 하드웨어적으로 콘덴서를 붙이거나, 소프트웨어적으로 debounce 시간을 만들어 해결해야 한다.
레이저 모듈 추가: 서보모터 날개에 부착
schematic
sketch
13번 핀에 레이저모듈을 연결하므로 위 스케치를 그대로 이용
조도센서 추가
반대편에 조도센서를 놓고, 레이저 모듈이 움직이는 동안 버튼을 눌러 조도센서를 정확하게 맞추면 점수가 올라가는 게임을 만들어보자.
Keypad에서 값을 입력받아 회전시키기
schematic
sketch
1 |
|
비밀번호 확인하여 서보모터 회전시키기
서보모터의 날개를 금고의 개폐장치로 사용하여, 비밀번호 금고를 만들어 보자.
sketch
1 |
|
Joystick을 사용하여 2개의 서보모터 제어하기
schematic
sketch
1 |
|
Arduino, 서보모터