안녕하세요!! 드린이입니다 ::))
지난 포스팅을 통해서 아두이노(Arduino)의 아날로그 출력을 이용하여 CDS 센서와 LED를 결합하여 Auto Light 기능을 구현해 보았습니다. 오늘은 스텝 모터와 초음파 센서를 결합한 예제를 만들어 보도록 하겠습니다.
스텝 모터의 종류
스텝 모터의 종류는 영구자석(Permanent Magnet), 가변 릴럭턴스(Variable Reluctance)), 하이브리드(Hybrid) 형이 있습니다. 영구자석형은 회전자(Rotor)가 N/S 극성을 갖는 영구자석으로 자화 되어 있으며, 가변 릴럭턴스형은 회전자(Rotor)가 자석의 성분은 갖지 않지만 마치 기어의 톱니와 같이 회전자의 표면에 홈이 새겨져 있는 형태입니다. 또, 하이브리드형은 회전자(Rotor)가 N/S 극성을 가지며, 표면에 홈도 새겨져 있습니다.
스텝 모터의 구조
스텝 모터의 구조는 모터 위와 아래에 덮개가 있고, 내부에 회전자와 고정자가 있는 구조로 되어 있습니다.
스텝 모터의 구동 원리
스텝 모터의 구동 원리는 권선으로 전류를 흘려 주면, 코일에 전류가 흐르고, 고정자에 생긴 전자기력으로 인해 극성이 생기게 됩니다. 이때, 고정자와 회전자 사이의 자기력 발생하여 회전자가 자기력에 의해 회전을 하게 됩니다. 또 다른 권선에 전류를 흘려주면 회전자가 회전을 합니다.
아래의 그림과 같이 스텝 모터와 스텝 모터 드라이버를 연결하고 코드를 입력합니다.
스텝 모터와 UNO보드 연결
#include <Stepper.h>
#define STEPS 2037 // 한바퀴를 이루는 스텝 갯수 입력
Stepper stepper(STEPS, 8, 10, 9, 11); // 고정자 권선 순서 설정
void setup() {
stepper.setSpeed(12); // 회전 속도 지정
}
void loop() {
stepper.step(STEPS); // 정방향 회전
delay(1000);
stepper.step(-STEPS); // 역방향 회전
delay(1000);
}
|
코드 입력을 완료하고 UNO 보드에 업로드 하면, 스텝 모터가 시계 방향과 반시계 방향으로 순차적으로 회전하는 것을 확인할 수 있습니다.
여기서 주요 함수를 보면
- #include <Stepper.h> : 스텝 모터 라이브러리를 사용하기 위해서 헤더 파일을 추가하는 선언
- stepper.setSpeed() : 1분당 모터의 회전수를 설정하는 함수, 회전 시 속도 조절
이제 초음파 센서와 스텝 모터를 결합하여 마치 자동문과 같이 사물을 감지하면 스텝 모터가 동작하는 예제를 구현하기 위해 아래의 그림과 같이 연결하고 코드를 입력합니다.
스텝 모터와 초음파 센서 연결
#include <Stepper.h>
#define STEPS 2037 // 한바퀴를 이루는 스텝 갯수 입력
Stepper stepper(STEPS, 8, 10, 9, 11); // 고정자 권선 순서 설정
int trig = 2; // trig에 2를 대입
int echo = 3;
int wait=0;
void setup() {
stepper.setSpeed(12); // 회전 속도 지정
pinMode(trig, OUTPUT); // trig(2)핀을 출력모드로 설정
pinMode(echo, INPUT); // echo(3)핀을 입력모드로 설정
Serial.begin(9600); // 시리얼 통신을 시작하며, 통신속도는 9600
}
void loop() {
digitalWrite(trig, HIGH); //trig핀에 HIGH신호를 출력
delayMicroseconds(10); // 10마이크로초 동안 대기
digitalWrite(trig, LOW); // trig 핀에 LOW(0V)신호를 출력
int distance = pulseIn(echo, HIGH) * 34 / 2 / 1000;
Serial.print(distance); // distance를 시리얼 모니터에 출력
Serial.println("cm"); // 문자열 cm을 시리얼 모니터에 출력
delay(100);
if (wait==0 && distance <30) {
stepper.step(STEPS); // 정방향 회전
delay(1000);
wait=1;
}
else if (wait==1 && distance >30) {
stepper.step(-STEPS); // 역방향 회전
delay(1000);
wait=0;
}
}
|
코드 입력을 완료하고 UNO 보드에 업로드 하면, 설정한 거리에 따라서 스텝 모터가 동작하는 모습을 볼 수 있습니다. 마치 자동문 같은 모습을 확인할 수 있습니다.
오늘은 아두이노(Arduino)의 초음파 센서와 스텝모터를 이용하여 자동문 비슷한 기능을 구현하는 예제에 대해서 알아보았습니다. 다음 포스팅에서는 더 쉽고 간단한 예제를 가지고 돌아오도록 하겠습니다.
감사합니다::))