2016년 4월 2일 토요일

아두이노 초보! 서보모터 제어방법

안녕하세요. 아두이노 초보자를 위한 강의를 재밌게 진행하기 위해 아두이노 공부를 했습니다~ 

이번에는 서보모터를 알아 볼꺼예요. 서보모터는 특정한 각도로 회전할 수 있어, 로봇 팔 같은 것 만드는 데 많이 사용되요.
서보 모터



회로 연결
아두이노의 2번핀과 서버 모터의 신호핀(노란색)을 연결하세요. 아두이노의 5볼트 전압핀과모터의 적색핀을 연결하세요. 아두이노의 GND핀과 모터의 황토색 핀을 연결하세요. 

코드 소스
여러분은 프로그래밍에 대하여 어떻게 생각하나요?
아마 여러분은 밑의 예제를 보자마자 이 창을 닫고 싶을 겁니다. 하지만 해보면 쉬워요.

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

void setup() {
  myservo.attach(2);  // attaches the servo on pin 2 to the servo object
}

void loop() {
  myservo.write(90);                  // sets the servo position according to the scaled value
  delay(2000);
  myservo.write(0);                    // waits for the servo to get there 
  delay(3000);
  myservo.write(150);
  delay(1000);
  myservo.write(160);
  delay(1000);
}

설명
예제를 보시죠. "근데, 이 영어는 뭐죠? 어려울 것 같아요!" 라고 생각하지 마세요. 하나씩 알려드릴테니까요.

자... 여기서 delay라는 게 있는데요, 이건 얼마나 기다릴지 정하는 함수입니다. 여기서1000은 1초이고, 2000은 2초이고, 3000은 3초 입니다.

그리고 myservo.write 라는 기호가 또 있네요^^ 이 함수는 몇 도 움직일지 정하는 함수인데요, 괄호 안에 90도 라고 쓰면 서보모터가(서보모터가 뭔지는 다들 대충 아시죠?) 90도 돌아갑니다.

void loop라는 기호가 있죠? '반복' 실행하는 함수입니다. 이 기호를 문단의 위에 써 주면 {} 안의 명령문을 반복합니다.

그리고 아두이노로 실행하고 싶으시면! 아두이노에 케이블을 꼿아 컴퓨터와 연결 시키고, 업로드하면 실행가능해요.

아! 그리고 팁이 있는데, 명령문 마지막에 다 끝난후엔 ;을 붙여 주세요. 안 그러면 컴퓨터가 이 명령문장이 끝난건지~ 안 끝난건지~ 이해를 못 해요!

컴퓨터는 생각을 못하니까 하나하나 다 말해 줘야 합니다. 아니면 이해를 못해요. 에러가 날 수도 있으니 조심하시길 바랍니다.

// 글자의 뒤에 있는 건 설명해 주는 겁니다.

그렇게 어렵지 않지요? 

끝인사
자, 오늘은 아두이노 코딩이 처음이니까 짧게 마침니다. 그리고 처음에 너무 이해하려 하지 마세요. 처음에는 그냥 듣는겁니다. 제가 만들기 중간중간에 알려드릴게요~
처음부터 잘하는 사람 없으니 천천히 열심히 하자구요!

거리측정기 만들기

1. 인사말

네,,, 벌써 4월이네요...
아시다시피 4월은 과학의 달 입니다.
과학의 달을 맞이해서 간단한 발명품 하나를 만들어 볼려고 합니다.
요번에 만들것은, 거리측정기 입니다!

2. 거리측정 원리

거리측정을 위해서 초음파센서를 만들어 볼꺼예요. 초음파로 거리를 측정하는 원리는 다음과 같아요. 발사된 초음파가 물체에 튕기면 그것이 반사되어서 돌아올때의 시간을 측정해, 초음파의 속도를 곱하면 거리를 구할 수 있어요.


3. 준비물

만들기 위한 재료는 초음파 센서, 아두이노, LCD예요. 
초음파 센서 아이콘에 대한 이미지 검색결과

초음파 센서 한 개
아두이노 아이콘에 대한 이미지 검색결과
아두이노 한 개

LCD
            

4. 회로도     

회로는 다음과 같이 연결해요. 복잡해 보여도 하나하나씩 잘 따라하면 할 수 있어요.


5. 소스 코드

회소스 코드는 다음과 같아요. 

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Ultrasonic ultrasonic(A0,A1);
void setup() {
//Lcd init
lcd.begin(16, 2); //16 rows, 2 columns
}
void loop() {
lcd.clear();
lcd.print(" Ardumotive ;) "); // You can change this message.
lcd.setCursor(0, 1); //Change line...
lcd.print("Distance: ");
lcd.print(ultrasonic.Ranging(CM));
lcd.print("cm");
delay(1000); // 1sec delay
}

6. 끝인사

거리측정기는 자로 일일이 잴 필요 없이 측정만 하면 되니까, 생활하는 데에 많은 도움이 될 것 입니다. 
소스코드가 오류났을 경우에는 아두이노와 연결이 잘 않됬거나, 포트를 잘 못 하셨거나-_- 아마 둘 중 하나일 겁니다. 아니라면 선이 절지됬거나, 부품에 문제가 있는 것 일지도 모릅니다. 그럴 때는 일일이 다 알아보아야 하기 때문에 노가다가 많아요! 그러니 부품들을 먼저 잘 점검하시고 만들기를 시작하세요!