본문 바로가기

Electronics

아두이노로 만드는 로봇 Blinky 1편

요즘 대전에 있는  메이커스페이스인 무규칙이종결합공작소 용도변경에서 아두이노를 이용한 인형인지 로봇인지를 만드는 워크샵을 진행하고 있다. 일주일에 한번씩 2~3시간 정도 진행하는데 어제 3주차가 지났다. 처음엔 반짝 반짝 작은 LED 라는 제목으로 시작해서 그냥 LED를 켜는 다양한 방법들을 알려주는 것으로 생각하고 시작했으나, 응용이 아닌 원론위주의 재미없는 강의가 될것 같아서 간단한 로봇을 만들어 보는 것으로 목표를 바꿨다.

일단 몸통으로는 주변에 굴러다니던 프링글스 미니 용기를 쓰기로 했다. 꼭 프링글스 미니가 아니라도, 테이크아웃 커피 컵 같은 것으로 만들어도 충분하다. 사용할 LED크기에 따라 3mm에서 5mm의 구멍을 드릴로 뚫어주고 안쪽에서 LED를 끼워 넣으면 딱 맞게 들어 간다. 코 위치에 있는 것은 빛감지 센서인 cds소자이다. 압정으로 구멍을 두 개 뚫고 밖에서 부터 다리를 넣고 안쪽에서 납땝으로 전선을 연결했다.



이번 워크샵에서는 아두이노 프로 미니 보드를 브레드보드에 꽂아서 쓰고있다.  아래 사진에서 프링글스 용기에 넣고 있는 보드는 내가 예전 부터 가지고 있던 모던디바이스의 RBBB보드이고, 그 왼쪽에 있는 파란 보드가 아두이노 프로 미니 보드 되겠다. 이번 워크샵에서는 5V형을 쓰고 있어서, Tools 메뉴의  Board에서 고를때는 Arduino Pro or Pro Mini (5V, 16MHz)  w/ Atmega 328을 선택하면 된다. 

아두이노 프로 미니 보드도 역시 USB로 부터 전원을 공급받을 수도 있고 보드에 RAW라고 써 있는 단자로부터 외부 전원을 공급받을 수도 있지만 둘 중에 한가지만 연결해야만 한다.  두 전원을 동시에 연결하면 안좋은(?) 일이 생긴다고 한다. 나도 안해봐서 구체적으로 어떤 상황이 벌어지는지는 모른다. 해보신 분이 있으시다면 상세한 제보 바란다.

 
 
코부분에 있는 빛감지 센서가 감지해서 어두워지면 눈에 좌우로 불이 번갈아 들어오도록 프로그래밍 했다.

아래는 아두이노 코드,



int sensorPin = A0;   
int leftEye = 5;      
int rightEye = 6; 
int sensorValue = 0;  

void setup() {
  Serial.begin(9600);
  pinMode(leftEye, OUTPUT);  
  pinMode(rightEye, OUTPUT);
}

void loop() {
  // read the value from the sensor:
  sensorValue = analogRead(sensorPin);    
  Serial.println(sensorValue);
  if (sensorValue > 900)
  {
    digitalWrite(leftEye, HIGH); 
    digitalWrite(rightEye, LOW);
    delay(50);
    digitalWrite(rightEye, HIGH);
    digitalWrite(leftEye, LOW);
    delay(50); 

  }  
  else 
  {
    digitalWrite(rightEye, LOW);
    digitalWrite(leftEye, LOW);
  }   
}



입력된 신호의 전압을 1024단계의 숫자로 표시해주는 아날로그포트중에 0번인 A0포트를 이용해서 빛감지 센서의 신호를 받아들여 어두운지 아닌지를 감지하도록 했다. analogRead()명령이 아날로그 포트의 값을 읽어주는 명령어인데 이 아두이노의 동작전압인 5V가 입력될때 1023이 출력되고 0V일때는 0이 나오는 명령어 이다. 물론 그 중간의 전압이 들어오면 전압에 비례해서 값이 출력 된다. 워크샵 하는 곳의 밝기에서는 900이 손으로 센서를 가렸을때와 그냥 뒀을때의 중간 값 정도 되서 900을 판단 기준으로 잡았다.

아날로그 포트에 값이 얼마나 찍히는지를 시리얼 모니터로 보고 알 수 있도록 하기위해 setup() 함수에서 Serial.begin을 9600 bps의 속도로 세팅해주고 sensorValue를 Serial.println 명령으로 찍어주고 있다.

아래는 빛감지 센서를 설치하는 회로를 보여주는 사진이다. 빛감지 센서와1.5K ohm의 다리 하나씩을 모아서 아두이노의 A0포트와 이어주고 빛감지 센서의 나머지 다리는 - 에 꽂고 저항의 다른 다리는 +에 꽂아 주면 된다. 왼쪽에서온 꼬여 있는 빨강과 흰색 전선이 빛감지센서에서 오는 전선이고, 갈색 초록색 빨간색의 띠를 두른 저항이 1.5K ohm저항이고 오른쪽으로 나간 흰색 전선이 아두이노의 A0포트로 가는 전선이다.



이런 회로를 볼티지 디바이더 회로 라고 하는데, 이러면 빛감지 센서가 빛을 받을 때마다 저항값의 변화가 생겨서, +에서 -에 이르는 일련의 저항들의  중간을 따서 연결해 놓은 A0핀에 가해지는 전압이 달라지게 된다.  만약 빛감지 센서가 저항과 같은 1.5K ohm의 저항값을 가지게 된다면 A0포트에는 2.5V의 전압이 가해지는 것이고, 빛감지 센서가 더 큰 저항을가지게 될 수록 전압은 점점 커져서 공급전압인 5V에 가까워지는 것이 볼티지 디바이더 회로인 것이다. 

저항은 좀 더 큰 저항값을 가진것을 써도 무방하다. 저 상태에서 900정도의 값을 경계로 어두울때와 밝을때가 갈라지니,  두 세배 크기의 저항을 쓰면 500부근에서 경계가 생기지 안을까 싶다.

오늘은 여기까지 하고 다음 편에서는 LED의 밝기를 조절해보는 코드를 추가 해보기로 하겠다.