본문 바로가기

Gadgets

[LED 잔상기] 마구 마구 흔들어보자!

반응형
사용자 삽입 이미지

오늘은 제가 예전에 만들어 놓았던 LED 잔상기와 로봇의 S/W의 중요성에 대해서 알아보겠습니다. 혹시! 잔상기를 흔들고 있는 제 손위에서 웃고 있는 스마일맨이 보이십니까? 보이신다면 이제 시작해 보도록 하겠습니다. 안 보이신다면 모니터에서 10cm 거리에서 양 눈을 위치하시고 약 30초가량 응시하시면 보실 수 있습니다.

사용자 삽입 이미지

몸체는 조금 민망할 정도로 간단합니다. 잔상을 발생하기 위한 LED와 메인 CPU 그리고 CPU에 필요한 약간의 회로가 전부입니다. 아참! 3~5V 전압을 공급받기 위한 케이블도 있습니다. 사실 이 잔상기의 핵심은 바로 S/W에 있습니다.(써 놓고도 민망하네요.)

사용자 삽입 이미지

메인 제어부입니다. 저는 ATMEL사의 AT90S2313라는 CPU를 사용했습니다. 이 CPU는 총 20개의 PIN을 가지고 있고 외부로 표시할 수 있는 제어신호는 총 16개를 사용할 수 있습니다. 즉 16개까지의 LED를 동시에 제어할 수 있다는 이야기입니다. 그리고 내부 프로그래밍 가능한 2KByte의 메모리를 내장하고 있어서 자신이 원하는 이미지를 프로그래밍해서 넣을 수 있습니다. 그리고 CPU옆에 있는 8.000 이라고 표시가 되어 있는 은색 캡으로 되어 있는 부품은 크리스털이라고 불리는 것으로 컴퓨터의 CPU클록이 2GHz라는 표시가 있듯이 이 CPU는 8MHz의 클록을 가지고 있는 것입니다. 센스 있으신 분들은 더 빠른 크리스털을 사용하면 되지 않는가? 하는 의문을 가지실지 모르겠지만 이 CPU는 최대 10MHz까지 입력을 받을 수 있습니다. 그리고 이러한 크리스털은 전자시계에 하나씩 다 들어가 있습니다.

사용자 삽입 이미지

잔상을 만들어 주는 12개의 LED입니다. LED가 많을수록 더 많은 이미지를 표시할 수 있겠지만 제가 사용한 CPU인 AT90S2313의 외부제어 포트에도 한계가 있고 좌우로 흔들면서 이미지를 만들어내기 때문에 10~12사이의 LED가 가장 적당한 것 같습니다. 그리고 LED의 뒤쪽에는 노란 저항이 있는데 이 넘은 LED의 전압범위가 2~3V 사이이기 때문에 표준적으로 많이 사용하는 5V를 입력했을 때 LED가 차지 않도록 전압강하를 해주기 위한 저항입니다.

사용자 삽입 이미지

저는 이 잔상기를 만들 때는 패턴이 완성된 PCB를 가지고 만들었지만 회로가 간단하기 때문에 일반 만능기판에 만드셔도 상관없습니다. 납땜은 최대한 깔끔하게 해 보려고 노력을 해 보았건만 역시 잘 되지는 않았습니다. PCB에 대해서 잘 모르시는 분들께서 보셔도 별로 복잡할 것 없는 패턴입니다. 그리고 다른 곳은 선으로 되어 있는데 한쪽 귀퉁이들이 면으로 되어 있는 것을 알 수 있습니다. 이 부분은 GND 부분으로 이 부분을 이렇게 넓게 만들면 회로에서 생기는 노이즈를 줄여준다고 합니다. 사실 이러한 회로에서는 별로 효과가 없지만 휴대폰과 같은 전파에 민감한 회로의 경우에는 이렇게 노이즈를 줄여주는 기법이 매우 중요하다고 합니다.

사용자 삽입 이미지

같은 기능을 하는 2가지의 기판들입니다. 작은 쪽은 아직 조립이 되어 있지 않은데 그 이유는 큰 쪽에 비해서 조금 어렵기 때문입니다. 우선 작은 쪽은 기판이 작기 때문에 일반 휴대폰이나 작은 전자부품들에 사용하는 smd 타입의 부품들을 사용해야 하는데 납땜하기가 수월하지는 않습니다. 그리고 가장 큰 이유는 작은 쪽에는 CPU를 PIC라는 시리즈를 사용하기 때문입니다. PIC시리즈는 프로그래밍을 할 때에 일반적으로 많이 사용이 되는 C언어로 작성이 되지 않고 공포의 어샘블리어로 프로그래밍을 해야 하는 것이 가장 큰 문제입니다.



같은 기능을 하는 두 가지의 소스들입니다. 왼쪽은 역시 한눈에 알아보기 쉽게 되어 있는 C언어입니다. 물론 처음 언어를 접하시는 분은 조금 생소해 보이 실지도 모르지만 C언어는 정말 강력하고 편리한 언어입니다. 그리고 오른쪽에는 공포의 어샘블리어로 작성된 코드입니다. 보기만 해도 무언가 복잡해 보이고 LED들의 불들이 실제 2진수의 코드로 맵핑이 되어 있는 것을 확인할 수 있고 아래쪽에 있는 제어 문에는 GOTO문으로 복잡하게 얽혀져 있어서 프로그램 라인이 조금만 길어지만 논리구조를 이해하기가 정말 어려워집니다. 그러면 이렇게 어려워 보이는 어샘블리어를 왜 사용하는가? 그것은 하드웨어를 직접적으로 컨트롤 할 수 있는 기계어 이기 때문입니다. 하드웨어에 대한 정확한 이해와 어샘블리어에 통달하신 분들은 C언어 보다 훨씬 적은 용량으로 빠르게 구동할 수 있는 프로그램을 만들 수 있습니다. 그래서 우리가 사용하고 있는 OS들도 핵심적인 커널 쪽은 어샘블리어로 작성이 되어 있습니다.




작동 동영상입니다. LED의 불빛을 강조하기 위해서 어두운 상태에서 찍었는데 원리 I LOVE U 스마일맨, 이런 식으로 구성을 하려고 했는데 한손에 카메라를 들고 다른 손으로 흔들려고 하니 드문드문 빠지는 문자들이 생기네요.
 
 
제가 이번 시간에 하고 싶은 이야기는 바로 로봇의 S/W에 관한 이야기입니다. 로봇은 H/W와 S/W의 결합체입니다. 물론 H/W 와 S/W는 서로 우열을 가리기 힘들 정도로 중요한 부분입니다. 그러나 위에 있는 LED잔상기에서도 알 수 있듯이 회로는 매우 간단합니다. 그러나 S/W에 따라서 연인과의 사랑을 이어주는 메시지를 쓸 수 있는 LED 잔상기라는 기능을 가지게 되었습니다.(실제로 저거 만들어서 여친에게 상납한 친구들이 많이 있습니다만 지금 와서 생각해 보면 별로 좋아하지는 않았을 것 같습니다. ^^;) 이렇게 조금 경직된 느낌의 H/W가 유연한 S/W를 만나면서부터 전혀 새로운 능력을 가지게 됩니다. 그러나 우리나라의 로봇 분야는 아직 초기이기 때문에 눈으로 잘 볼 수 없는 S/W 보다는 실체를 확인할 수 있는 H/W 분야에 많이 투자가 되고 있는 것 같습니다. 조금 안타까운 부분인데 우리나라도 이제는 S/W분야에도 더 많은 투자가 이루어졌으면 하는 것이 제 조그만 바램입니다. (뜬금없지만 S/W는 인도 애들이 정말 잘하더라고요.)
반응형