Arduino/서보 모터(Servo motor)
버튼과 눌림에 따라 서보 모터의 각도 조절하기(추가로 LED까지)
DesignatedRoom
2020. 10. 28. 19:05
서보 모터의 연결은 아래를 보도록 하자.
designatedroom87.tistory.com/247
서보 모터의 기본적인 연결 및 동작
서보 모터는 3개의 선으로 구성되어 있는데, 아래의 세 선이 서보 모터에 연결된 선이다. 이 선 색을 중심으로 보면 서보 모터의 가운데는 VCC에, 갈색은 GND에, 주황색 선은 출력선이다. 이 출력선
designatedroom87.tistory.com
버튼은 풀업 저항으로 연결을 한다.
두 선만 있으면 된다. 파란선은 GND에 연결되고, 초록색 선은 아두이노의 13번핀에 연결된다.
아래의 예제는 버튼이 한 번씩 누를 때마다 서보 모터의 각도가 0도 혹은 180도로 설정하는 예제이다.
소스 코드
#include <Servo.h>
Servo servo;
void setup() {
// put your setup code here, to run once:
pinMode(13,INPUT_PULLUP); // 버튼을 13번핀으로 연결
Serial.begin(9600);
servo.attach(6); // 6번핀을 서보 모터와 연결
servo.write(0); // 서보 모터 초기화
}
bool buttonPressed = false; // 버튼이 눌려진 상태
bool servoState = false; // 서보 모터의 상태에 따라 각도를 0도 혹은 180도로 설정
void loop() {
Serial.println("버튼이 동작하지 않은 상태");
// 버튼이 눌러졌으면
if (!digitalRead(13))
{
buttonPressed = true; // true 상태로 변경
while (buttonPressed)
{
Serial.println("버튼이 동작하는 상태");
// 버튼이 눌려진 상태에서 떼어지면 while 루프를 빠져나옴.
if (digitalRead(13)) {buttonPressed = false;}
}
// 실행할 코드를 삽입
if (servoState)
{
servo.write(0);
servoState = false;
}
else
{
servo.write(180);
servoState = true;
}
}
delay(100);
}
아래는 추가로 LED를 연결하자.
서보 모터가 0도 혹은 180도가 될 때 LED를 켜거나 끄도록 만들자.
LED는 4번핀과 연결하고, 저항은 220옴을 쓴다.
소스 코드
#include <Servo.h>
Servo servo;
void setup() {
// put your setup code here, to run once:
pinMode(13,INPUT_PULLUP); // 버튼을 13번핀으로 연결
Serial.begin(9600);
servo.attach(6);
servo.write(0);
pinMode(4,OUTPUT); // LED를 4번핀으로 연결
digitalWrite(4,LOW); // LED 초기화
}
bool buttonPressed = false; // 버튼이 눌려진 상태
bool servoState = false;
void loop() {
Serial.println("버튼이 동작하지 않은 상태");
// 버튼이 눌러졌으면
if (!digitalRead(13))
{
buttonPressed = true; // true 상태로 변경
while (buttonPressed)
{
Serial.println("버튼이 동작하는 상태");
// 버튼이 눌려진 상태에서 떼지면
if (digitalRead(13)) {buttonPressed = false;}
}
// 실행할 코드를 삽입
if (servoState)
{
servo.write(0);
servoState = false;
digitalWrite(4,LOW); // LED Off
}
else
{
servo.write(180);
servoState = true;
digitalWrite(4,HIGH); // LED On
}
}
delay(100);
}