1. 아두이노 함수 선언
아두이노는 C언어 기반으로 void 함수이름(){ } 형식으로 문법을 선언할 수 있다.
2. 함수 선언과 각도 제어
아두이노에서 함수를 선언하여 특정 작업을 수행하는 코드 블록을 만들 수 있습니다.
이 예제에서는 move90과 move180이라는 두 개의 함수를 선언하여 서보모터를 각각 90도와 180도 위치로
움직이게 합니다.
먼저, Servo.h 라이브러리를 포함시키고 서보모터 객체를 생성합니다. 그 다음, setup() 함수에서 서보모터를
특정 핀에 연결합니다. loop() 함수 내에서는 두 개의 사용자 정의 함수를 번갈아가며 호출하여 서보모터가
0도에서 90도, 그리고 0도에서 180도로 움직이게 합니다.
사용자 정의 함수 move90()과 move180()
- move90(): 서보모터를 0도에서 90도로 천천히 움직이게 하는 함수선언
- move180(): 서보모터를 0도에서 180도로 천천히 움직이게 하는 함수선언
#include <Servo.h>
Servo servo_1; // 서보모터 객체 생성
// 서보모터를 0도에서 90도로 움직이는 함수 선언
void move90() {
for(int angle = 0; angle <= 90; angle++) { // 0도에서 시작하여 90도까지
servo_1.write(angle);
delay(15); // 각도 변경 사이의 짧은 지연
}
}
// 서보모터를 0도에서 180도로 움직이는 함수 선언
void move180() {
for(int angle = 0; angle <= 180; angle++) { // 0도에서 시작하여 180도까지
servo_1.write(angle);
delay(15); // 각도 변경 사이의 짧은 지연
}
}
void setup() {
servo_1.attach(3); // 서보모터를 디지털 3번 핀에 연결
servo_1.write(0); // 서보모터 처음 각도 세팅
}
void loop() {
move90(); // 서보모터를 90도로 움직임
delay(1000); // 1초 대기
move180(); // 서보모터를 180도로 움직임
delay(1000); // 1초 대기
}
이 코드는 먼저 서보모터를 0도에서 90도로 천천히 움직이게 한 다음, 1초 후
서보모터를 0도에서 180도로 천천히 움직이고 다시 1초를 기다립니다.
move90()과 move180() 함수는 서보모터의 움직임을 제어하기 위해
for 루프와 servo_1.write() 메서드를 사용합니다.
각 함수는 서보모터를 점진적으로 원하는 각도로 회전시키며,
각도 변경 사이에는 짧은 지연(delay(15))을 둬서 움직임을 더 부드럽게 만듭니다.
3. 시리얼통신으로 제어하기
아두이노와 서보모터를 사용하여 시리얼 통신을 통해 특정 문자를 받았을 때
서보모터를 각각 90도와 180도로 움직이게 하는 예제입니다.
#include<Servo.h>
Servo servo_1;
void move90() {
for(int angle = 0; angle <= 90; angle++) {
servo_1.write(angle);
delay(15);
}
}
void move180() {
for(int angle = 0; angle <= 180; angle++) {
servo_1.write(angle);
delay(15);
}
}
void setup() {
Serial.begin(9600);
servo_1.attach(3);
servo_1.write(0); // 서보모터 처음 각도 세팅
}
void loop() {
while (Serial.available() > 0) { // 시리얼 통신으로 데이터가 들어올 때까지 대기
char data = Serial.read(); // 시리얼 통신으로 받은 데이터를 읽어옴
if (data == 'a') { // 만약 데이터가 'a'이면
move90();
}
if (data == 'b') { // 만약 데이터가 'b'이면
move180();
}
}
}
- loop() 함수 내부에서 Serial.available() > 0을 통해 시리얼 버퍼에 데이터가 있는지 확인합니다. 데이터가 있으면, Serial.read()를 사용하여 1바이트(문자)를 읽어옵니다.
- 읽어온 데이터가 'a'인 경우 move90() 함수를 호출하여 서보모터를 90도로 움직입니다.
- 읽어온 데이터가 'b'인 경우 move180() 함수를 호출하여 서보모터를 180도로 움직입니다.
이 코드를 사용하면, 시리얼 모니터나 다른 시리얼 통신을 지원하는 장치에서 'a'나 'b' 문자를 아두이노로 전송함으로써
서보모터를 원하는 각도로 조절할 수 있습니다.
이는 예를 들어, 원격 제어 시스템이나 인터랙티브한 프로젝트에 유용하게 사용될 수 있습니다.
서보모터와 해 볼만한 프로젝트
https://www.youtube.com/watch?v=bLnAJ-mSElE&t=35s
https://www.youtube.com/watch?v=HsUPwkwDK8Q
https://swmakerjun.tistory.com/37
'아두이노' 카테고리의 다른 글
아두이노 온습도센서 활용하기. (0) | 2024.08.21 |
---|---|
아두이노 서보 360 회전 사용하기. (1) | 2024.04.01 |
아두이노 서보모터 활용 (0) | 2024.03.18 |
아두이노 배열(자료구조)로 피에조 스피커 활용하기 (3) | 2024.01.26 |
아두이노로 피에조 스피커를 사용해 소리 내기 (0) | 2021.12.07 |