5월 27일.

스테핑 모터, 바퀴를 비롯한 LCD모듈, 7Segment(FND), 적외선 센서 등 수없이 많은 부품을 주문한 게 이번주 월요일, 물건 도착은 며칠 전에 했으나 정보올림피아드 준비 관계로 개봉을 절대적으로 자제하고 있다가 오늘 드디어 모두 열어봤습니다.

역시 가장 눈에 띄는 것은 모터였습니다. 생각보다는 꽤 큰 크기에 무게도 묵직한 것이 힘도 좋아보였습니다. 바퀴도 가격(하나에 11,000원이라니..)에 걸맞게 마찰도 좋고 튼튼해보여 다행이었습니다. 자잘한 부품들이 잔뜩 들어있는 비닐을 뜯어보니 FND, OSC, 적외선 수/발광소자, 가변저항 등 여러 가지 부품들이 눈에 들어왔습니다. 가장 만만해보이는 FND부터 컨트롤해보자는 마음으로 멀티테스터기로 불빛이라도 내 보려고 했습니다.

제가 주문한 FND는 초록색의 Annode Common 타입이었습니다. 그렇다면 당연히 멀티테스터기의 붉은색 침에 Common Pin(3, 8번)을 대 주고 나머지에 검은색 침을 대 주면 불이 들어올 것이라고 생각했으나, 아니었습니다. 왜인지는 아직까지 미스테리입니다. 혹시나 하는 마음에 침을 바꾸어서 대 보니 선명하게 불빛이 들어오더군요. 저는 잘못해서 Cathod Common이 온 줄 알고 Eleparts에 문의글까지 올렸다지요...ㅡㅡ;

Cathod Common이어도 제어 못 하는 건 아니니 일단 Atmega128과 연결해보자라는 마음에 회로를 꾸몄습니다.
사용자 삽입 이미지

FNDTest.c (Language : c)
  1. //FND에 1부터 10까지가 순서대로 나타나는 프로그램입니다.
  2. #include <avr/io.h>
  3.  
  4. short int table[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xA7, 0xA1, 0x86, 0x8E, 0xFF};
  5.  
  6. void delay(int time)
  7. {
  8.     while(time>0)
  9.         time--;
  10. }
  11.  
  12. int main(void)
  13. {
  14.     DDRA=0xff;
  15.     PORTA=0xff;
  16.     int pp=0;
  17.     while(1)
  18.     {
  19.         PORTA=table[pp++];
  20.         delay(10000);
  21.         if(pp==17) pp=0;
  22.     }
  23.        
  24.     return 0;
  25. }

정상적으로 동작하는 것을 확인하고 모터에 도전했습니다.

구입한 스테핑 모터에는 선이 6개가 달려 있습니다. 그런데 도대체 이 녀석을을 어떻게 쓰는 것인지 알 수가 없어 각 선의 용도를 찾는데만 몇 시간이 걸렸습니다.

일반적으로 스테핑 모터의 선은 세트로 되어 있습니다. 6가닥인 경우 3선씩 두 세트입니다. 3선 중 한 가닥은 Common(이라는 말을 써도 될까?) 선이고, 나머지는 Common 선과 반대되는 선입니다. 즉, Common에 +를 접속하면 나머지 두 선에는 -를 접속하면 됩니다. 모터의 선 배치를 모식도로 그려보면 다음과 같습니다.
사용자 삽입 이미지
모터에 6선이 있을 때, 이를 순서대로 A~F라고 하면, 위와 같은 선 구조로 볼 수 있습니다. B와 E에 +를 접속하고 C, D, F에 모두 +를 준 상태에서 A에 -를 주면 A-B에만 전류가 흐르므로 그 사이에 전기장이 형성되고, 그쪽으로 모터에 토크가 걸립니다. 그 상태에서 A에 다시 +를 주고 C에 -를 주면 C-B에만 전류가 흐르므로 A-B쪽에 불어있던 회전자가 C-B쪽으로 이동합니다. 같은 원리로 A, C, D, F에 번갈아 신호를 주면 회전자가 번갈아가면서 붙기 때문에 회전을 할 수 있게 됩니다.

하지만 모터에 공급하는 전압은 정격 9.4V, 보통 11~12V정도 주기 때문에 마이컴으로는 엄두도 못내고, 외부 전원을 연결해야 합니다. 저는 외부전원으로 12V를 걸어주었습니다. 하지만 분명 모터를 돌리고 남는 전압이 있을 것이고, 그것이 마이컴으로 들어가야되는데, 어느 정도가 남는지 아직 확인이 안 되어서 확인하던 도중에 밤이 되었습니다.

휴,, 이제 다음에는 확실히 모터 돌려봐야지요.
이올린에 북마크하기(0) 이올린에 추천하기(0)

5월 17일.

드디어 마이컴을 이용하여 LED를 제어하는 데 성공했습니다!

어제 오늘 계속 프로그램 다운로드가 안되어서 못하고 있었는데, AVR Studio 4에서 다운로드 할 때 뜨는 펌웨어 업그레이드 메시지에서 취소를 누르니 다운로드가 정상적으로 되는군요.

연결은 매우 원시적?으로 했습니다. 아직 회로를 설계하는 기술이 없어서, 어떤 게 좋은 회로인지 감이 안잡히더군요.

사용자 삽입 이미지

사용자 삽입 이미지

처음으로 켠 LED의 모습입니다. LED에 불이 들어왔을 때 너무 기뻐 울 뻔(ㅡㅡ;) 했다는...;;

위 LED를 켠 소스코드입니다.

(Language : c)
  1. #include <avr/io.h>
  2.  
  3. int main(void)
  4. {
  5.     DDRA=0xff;
  6.     PORTA=0xff;
  7.     return 0;
  8. }

보시다시피 캐소드 커먼 방식입니다. 전구가 많아지면 빛이 약해진다는,,,

처음 LED를 켜고 이번엔 센서를 해보겠다는 마음으로 백방으로 일단 발광 소자에서는 LED와 같은 방법으로 발광을 시켰고, 수광은 VCC - 수광 - 저항 - 입력포트 순으로 연결을 하였습니다. 그런데 전혀 반응을 안하더군요. 테스터기로 찍어보니 빛의 밝기에 따라 전류의 양은 변하던데, 전압이 안 변해서 읽지를 못하는 건지 아무튼 3~4시간정도 센서와 씨름하다가 결국에는 카페에 질문 하나 올려 놓고 포기했습니다.

그래도 그걸로 끝내긴 뭐해서 LED와 슈퍼플럭스 8개를 쭉 달아서 순차적으로 불이 들어오는 것을 만들어봤습니다.

사용자 삽입 이미지

사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지

이번엔 애노드 커먼 방식으로 했습니다. 확실히 밝더군요.

8개의 LED 순차적으로 점등 (Language : c)
  1. #include <avr/io.h>
  2.  
  3. int table[8]={0x7e, 0xfc, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0x3f};
  4.  
  5. void DELAY(int time)
  6. {
  7.     while(time>0)
  8.         time--;
  9. }
  10.  
  11. int main(void)
  12. {
  13.     int i;
  14.     DDRA=0xff;
  15.     PORTA=0xff;
  16.     for(i=0;i<8;i++)
  17.     {
  18.         PORTA=table[i];
  19.         DELAY(10000);
  20.     }
  21.     return 0;
  22. }


오늘은 이것으로 만족해야겠습니다.
인터넷을 뒤져보니 센서 활용에는 ADC가 필수던데, 다음번엔 ADC 공부좀 해서 센싱에 성공해야겠습니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
5월 10일.

컨트롤러를 포함한 여러 가지 부품은 모두 도착을 하였습니다. 하지만, 막상 조립을 해 보려고 하니 서로 전압이 안 맞아 연결을 할 수가 없더군요. 저항을 주문하지 않았다는 사실을 그제서야 깨닫고서 저항 주문했습니다. 확실히 어느 정도의 저항을 연결해야 될지 감이 안 잡혀서 60옴 ~ 160옴 사이의 것들을 적당히 주문했습니다.

다음은 필요한 저항의 크기를 계산하는 방법입니다.

공급되는 전압을 V, LED의 소모 전압을 v, 전류를 I라고 할 때,
(V-v)/I
 가 필요한 저항의 크기입니다.
이 때 전류를 어떤 값으로 해야 될 지 몰라서 LED의 정격 전류를 잡았습니다. 보통 20~30mA입니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
5월 8일.

10시가 넘어서 택배가 오는 경우는 처음봤습니다. AVR Mall에서 시킨 물품들이 택배회사 홈페이지에는 분명 '배송중'이라고 되어 있는데 시간이 늦도록 오지 않아 내일 올 것이라고 생각하고 포기하고 있었는데 10시가 넘어서 오네요.

AVR Mall에서는 LED와 적외선 센서, 그리고 MCU와 ISP Board를 샀습니다. LED가 생각보다 무식하게 크길래 불은 얼마나 밝을까 궁금하여 전선을 이어 건전지에 대 보았습니다. 그런데 불이 안 들어 오더군요. 왜일까 의아해하며 1.5V * 4짜리 배터리 홀더에 건전지 4개를 넣고 연결해 보았습니다.

3mm짜리 초록색 고휘도 LED와 10mm짜리 빨간색 LED는 아주 멋지게 불이 들어옵니다. 그런데 10mm짜리 노란색 LED를 연결한 순간, '피직'하는 소리와 함께 타는 냄새가 났습니다. 놀래서 LED를 분리하고 보니 LED가 나간 것 같더군요. 더이상 그 LED에서는 불빛을 볼 수 없었습니다...;;

LED의 정격 전압을 전혀 모른 상태에서 6V나 줬으니 탈 만도 하지요. 이참에 LED의 전압을 조사해보았습니다.

종      류

최소전압

최대전압

일반전류

최대전류

Red

1.8V

2.3V

20 ㎃

50 ㎃

Orange

2.0V

2.3V

30 ㎃

50 ㎃

Real yellow

2.0V

2.8V

20 ㎃

50 ㎃

Emerald green

1.8V

2.3V

20 ㎃

50 ㎃

Real green

3.0V

3.6V

20 ㎃

50 ㎃

Sky blue

3.4V

3.8V

20 ㎃

50 ㎃

Real blue

3.4V

3.8V

20 ㎃

50 ㎃

Pink

3.4V

3.8V

20 ㎃

50 ㎃

white

3.4V

4.0V

20 ㎃

50 ㎃



잘 알고 씁시다.ㅠ
이올린에 북마크하기(0) 이올린에 추천하기(0)
TAG LED, 로봇, 전압