오늘은 아두이노에서 서보모터 (TG9e) 를 작동시켜 보도록 하겠습니다.

 

서보모터는 회전각도를 제어할 수 있는 모터입니다.

제가 가지고있는 서보모터 TG9e 입니다.

 

 

 

각도제어를 하는 서보모터는 내부에 가변저항이 포함되어 있어 회전에 따라 저항값이 변하게 됩니다. 이를 사용하여 서보모터는 비교적 정확한 회전각을 출력하게 됩니다.

 

서보모터의 제어에는 PWM 파형이 사용됩니다. 서보모터 제어의 주기는 20 ms 마다 이루어지며 펄스의 길이로 각도제어를 하게 됩니다.

이때 보통의 서보모터는 1 ms 일때 반시계 방향의 최대각을 출력하고, 2 ms 일때 시계방향의 최대각을 출력합니다.

 

 

 

※아두이노 구현

 

보드는 아두이노 우노(UNO)를 사용하여 구현하였습니다.

 

서보모터 ( TG9e )의 선을 보면 3개의 선을 볼 수 있습니다. 검정색, 빨강색, 노란색으로 이루어져 있는데

검정색은 Gnd, 빨강색은 5V에 연결하여 전원을 공급하는 선이며, 노란색은 아두이노를 통해 서보모터를 제어하는 선으로 아두이노의 9번핀을 사용하였습니다.

또한 서보의 각도를 조절할 수 있도록 하기 위해 가변저항을 하나 사용하여 이를 통해 서보모터의 각도를 결정하였습니다. 가변저항의 출력은 전압값을 입력받기 위해 A0 핀에 연결하였습니다.

 

 

- 아두이노 소스 코드

 

#include <Servo.h>

Servo servo1;
int angle;

void setup() {
  servo1.attach(9);
  servo1.write(90);
  Serial.begin(9600);
}

void loop() {
  angle = map(analogRead(0),0,1023,0,180);
  servo1.write(angle);
  delay(10);
}

 

아두이노에서는 서보모터를 구동하기위한 라이브러리를 제공하고 있습니다. <Servo.h> 라이브러리로 이를 사용하면 간단하게 서보모터를 제어할 수 있습니다. 또한 서보모터의 각도는 가변저항의 출력을 통해 결정하는데, analogRead 함수는 0~1023으로 반환합니다. 서보모터의 제어는 0~180으로 이루어지므로 0~1023을 0~180으로 변환해주는 함수인 map 함수를 사용하고 서보모터에 입력하였습니다.

 

- 아두이노 동작

 

 

 

블로그 이미지

1lime

아두이노와 프로그래밍, 전자공학 학생의 개인적 프로젝트 모음

,

오늘은 조이스틱 모듈의 사용법에 대해 알아보겠습니다.

 

우선 제가 가지고 있는 조이스틱 모듈입니다.

 

기본적인 X, Y축 측정 외에도 스위치가 하나 달려있어 조이스틱을 누르면 스위치가 눌리게됩니다.

 

 

 

조이스틱 모듈은 생각보다 간단한 원리로 동작하는 모듈입니다.

조이스틱 모듈의 내부는 2개의 가변저항으로 이루어져 있고 각각 수직과 수평 축에 맞춰져 있습니다. 따라서 조이스틱을 한쪽 방향으로 밀게되면 해당하는 축의 저항값이 변하고 전압분배법칙에 의해 출력되는 전압이 바뀌게됩니다.  

따라서 조이스틱 모듈의 출력 전압을 측정하면 조이스틱이 어느 위치에 있는지 알 수 있게됩니다.

 

※아두이노 구현

 

보드는 아두이노 우노(UNO)를 사용하여 구현하였습니다.

 

조이스틱 모듈의 V 핀은 전압값을 측정해야 하므로 아두이노의 아날로그 입력 핀인 A0에 연결하고 H 핀은 아두이노 A1에 연결하였습니다. 또한 스위치 입력을 받기위해 KEY 핀은 아두이노 9번 핀에 연결하였습니다.

 

 

- 아두이노 소스 코드

 

#define V 0
#define H 1
#define key 9

int x_axis, y_axis;


void setup() {
  Serial.begin(9600);
  pinMode(key,INPUT);
}

void loop() {
  x_axis = analogRead(V);
  y_axis = analogRead(H);
 
  Serial.print( "X : ");
  Serial.print(x_axis);
  Serial.print( "\t");
  Serial.print( "Y : ");
  Serial.print(y_axis);
  if(digitalRead(key)==LOW){
    Serial.print("   Key_Push");
  }
  Serial.print( "\n");
  delay(20);
}

 

조이스틱의 입력값을 컴퓨터 화면에 출력하기 위해 시리얼 통신을 사용하였습니다.

X축, Y축 데이터를 아두이노 내장함수인 analogRead 함수를 사용하여 입력받습니다. analogRead함수는 0~1023의 값을 반환하고, 그 값을 그대로 시리얼 통신을 통해 컴퓨터 화면에 출력하도록 하였습니다. 또한 스위치가 눌린경우 메시지를 출력하도록 구현하였습니다.

 

 

- 아두이노 동작

 

 

 

 

 

 

블로그 이미지

1lime

아두이노와 프로그래밍, 전자공학 학생의 개인적 프로젝트 모음

,

오늘은 초음파 센서 (HC-SR04)의 사용법에 대해 알아보겠습니다.

 

초음파 센서(HC-SR04)란 초음파를 발생시키고 초음파가 장애물에 부딪히고 돌아오는 시간을 측정하여 거리를 측정할 수 있는 센서입니다.

 

아래는 초음파 센서 종류중 하나인 HC-SR04 입니다. 2cm~400cm 까지의 거리를 측정할 수 있는 모듈입니다.

 

 

초음파 센서(HC-SR04) 에는 두개의 스피커 비슷하게 생긴것이 달려있는데 하나는 초음파를 발생시키는 부분이고, 나머지 하나는 장애물에 부딪히고 돌아온 초음파를 감지하는 부분입니다.

 

HC-SR04 모듈의 동작은 아래 타이밍과 같이 이루어집니다.

우선 HC-SR04 모듈을 동작하기 위해서는 Trig 핀에 10uS 길이의 펄스를 넣어주어야 합니다. 펄스가 들어오면 HC-SR04 모듈은 초음파를 발생시키고, 초음파가 돌아오기 까지의 시간을 측정하게 됩니다. 초음파가 돌아오면 ECHO 핀으로 펄스를 출력하는데 이 펄스의 길이는 초음파가 돌아오는데 걸린 시간에 비레하게 됩니다. 따라서 이 펄스의 길이를 측정하여 길이를 측정할 수 있습니다. 

 

초음파가 돌아오는데 걸리는 시간을 거리로 바꾸는 식은

( 거리 = 속력 * 시간 ) 을 통해 구하게 되는데 속력은 소리의 속력인 340 m/s 와 시간을 곱하여 구하게 됩니다.

 

HC-SR04의 데이터 시트에 따르면 ECHO 핀으로 출력된 펄스의 uS 시간을 58로 나누면 cm가 된다고 언급하고 있습니다.

따라서 cm = uS / 58

 

 

※아두이노 구현

 

보드는 아두이노 우노(UNO)를 사용하여 구현하였습니다.

 

초음파 센서(HC-SR04)의 Trig에 펄스를 인가하고, Echo로 출력된 펄스를 입력받기 위해서 Trig는 아두이노 8번핀, Echo는 9번핀에 연결하도록 하겠습니다.

 

아두이노 우노를 사용한 회로 구현은 아래와 같습니다.

 

 

- 아두이노 소스 코드

 

#define TRIG 8
#define ECHO 9

int us;   // microsecond time
int cm;   //

 

void setup() {
  Serial.begin(9600);
  pinMode(TRIG,OUTPUT); 
  pinMode(ECHO,INPUT);
}

 

void loop() {
  digitalWrite(TRIG,HIGH);   //send Pulse
  delayMicroseconds(10);
  digitalWrite(TRIG,LOW); 

  us = pulseIn(ECHO,HIGH,50000);    //get return time
  cm = us/58;

  Serial.print("cm : ");
  Serial.print(cm);
  Serial.print("\n");
  delay(60);
}

 

측정된 거리를 컴퓨터로 출력하기 위해 시리얼 통신을 사용하였습니다.

ECHO 핀을 통해 출력된 펄스의 길이를 측정하는데에는 아두이노 내장함수인 pulseIn 함수를 사용하였습니다. pulseIn 함수는 펄스가 입력되면 그 시간을 측정하여 반환하는 함수입니다. pulseIn(ECHO,HIGH,50000) 와 같이 사용하면 ECHO(9번)핀에 HIGH가 되었다가 LOW가 되는 펄스의 길이를 측정하여 uS 단위로 반환하며, 이때 50000 uS가 초과해도 펄스가 들어오지 않으면 0을 반환하여 측정이 실패하였음을 알리게 됩니다.

 

초음파 센서(HC-SR04)는 2cm~400cm까지 측정이 가능하므로 400cm를 초과하는 거리는 측정이 불가능합니다. 따라서 400cm이상의 거리에서는 ECHO핀에 펄스가 입력되지 않아 0이 출력될 것입니다.

 

입력된 펄스의 시간을 58로 나누어 cm단위의 거리로 바꾸고 이를 시리얼포트를 통해 출력하는 코드를 구현하였습니다.

 

- 아두이노 동작

 

 

 

블로그 이미지

1lime

아두이노와 프로그래밍, 전자공학 학생의 개인적 프로젝트 모음

,