가변저항(Potentiometer)의 회전에 따라 서보 모터 회전시키기.
가변저항: 우하단 볼륨 조절기처럼 생긴 것
서보모터: 상단의 파란색 박스 위 흰색 모터날개를 가진 것

어느샌가 상당히 저렴해진 아두이노 RFID 입문 세트를 구입해 가지고 놀다.

아두이노는 2012년 쯤 아두이노 개발자인 마시모 반지가 직접 쓴 '손에 잡히는 아두이노'란 얇은 소개 책자를 읽어 보곤 관심이 생겼었다. 한데 당시 아두이노 우노 39,000원, 스타터 킷 77,000원 정도의 저렴했음에도 개인적으론 부담스러웠던 가격과 활용도가 과연 많을까 하는 의구심에 미뤄뒀었다.

근래 문득 다시 생각나서 찾아 봤는데, 아두이노 회로도와 기판도의 내용이 공개된 덕인지 여러 곳에서 생산해 내어 아두이노 우노 호환 기판 단품의 경우 채 만원이 되지 않는 가격에 구매가 가능해졌다.
하여 계속 뒤지다 RFID 입문 세트를 쿠폰 할인 포함하여 4만원이 안되는 가격에 결국 구매, 오늘 도착했다.
이것저것 따라해 보다 마지막으로 가변저항 회전에 맞춰 서보 모터를 회전시키는 예제를 따라해 보고 감탄했다.

16/10/13 목

* 아두이노 공식홈:
https://www.arduino.cc

http://www.arduino.org

* 아두이노 위키백과 항목
* 아두이노 나무위키 항목

* 아두이노 공식홈의 다운로드 페이지(https://www.arduino.cc/en/Main/Software)에서 이전 버전인 Arduino-1.0.6-windows-Install 버전을 다운받아 설치. 현 최신버전은 1.6.12

* 처음 아두이노를 연결하니 제대로 하드웨어 설정이 잡히지 않았는데 컴을 재부팅한 뒤 하니 제대로 된다.

* 아두이노 스케치 프로그램을 띄우고 아두이노 보드 상의 LED 깜빡이기와 빵판위에 빨간 LED, 220저항을 각각 MM(Male to Male)점퍼로 디지털 8번, GND에 연결하고 깜빡이기 성공. 신기하고 재밌다. 게다가 납땜같은 복잡한 작업 필요없이 그냥 꼽기만 하면 되니 너무 편하고 좋다.

* 부저로 소리내기, 멜로디 울리기 따라하기. 아두이노 버튼 클릭시 부저로 멜로디 울리기 테스트 중. 여전히 버튼 클릭 관련해선 제대로 작동되지 않고 있다. 한데 버튼과 연결된 점퍼를 코딩상에서 4번이라 해놓곤 2번에 끼우면 손가락을 가까이 접근시키면 멜로디가 울리는 묘한 현상이 생겼다. 다시 확인해 보니 버튼은 아예 제거해도 상관없고 부저와 연결된 점퍼 근처에 다가가면 울린다. 마치 근접 센서같은 형태.
* 서보 모터 동작시키기 성공.
* 스위치로 LED 켜고 끄기 성공. 빨간 LED의 +-를 헷갈려서 안되었던듯 하다.
* RGB LED 테스트 성공.
* 가변저항(Potentiometer) 테스트 성공.

* 가변저항(Potentiometer)의 회전에 따라 서보 모터 회전시키기 성공. 이건 꽤 근사하다. 로봇 원격조종의 가장 기초적인 단계가 가시화 된 것.

//가변저항(Potentiometer) 회전에 따라 서보 모터 회전시키기
//서보모터 선을 각각 Yellow: D9, Red: 5v, Brown: GND에 연결.
//Potentiometer 선을 각각 가운데: A0, 왼쪽: 5v, 오른쪽: GND에 연결.

#include <Servo.h> //서보용 라이브러리 불러오기
Servo myServ; //서보모터용 객체 생성

int SERV0 = 9; //서보모터 디지털 9번에 연결
int SENSOR = A0; //가변저항 아날로그 0번에 연결

//기본 값 초기화
int sensorValue = 0; 
int motorValue = 0;

void setup(){ //초기화
  myServ.attach(SERV0); //서보모터 객체에 연결
  Serial.begin(9600); //모니터에 값 디스플레이용
}
void loop(){ //계속 반복
  sensorValue = analogRead(SENSOR); //가변저항 입력값 받아들이기
  //360도 회전하는 가변저항 입력값을 180도 회전 가능한 서보모터용으로 변환.
  motorValue = map(sensorValue, 0, 1023, 0, 179);

  //화면에 포텐시오미터와 서보모터 값 디스플레이
  Serial.print("Sensor Value: ");
  Serial.print(sensorValue);
  Serial.print(", Angle Value: ");
  Serial.print(motorValue);
  Serial.print("\n");
 
  myServ.write(motorValue); //입력 변환값에의해 서보 회전값 변경
  delay(15); //0.015초 대기
}