이번에는 전자공학과 학생들은 한 번씩 만들어서 로봇공학의 가장 기초가 되는 제어공학에 대해서 배울 수 있는 라인트레이서에 대해서 알아보겠습니다. “라인트레이서” 라는 이름에서도 알 수 있듯이 길이 있으면 길을 따라가고 만약 길이 없는 길을 찾는 기능을 가지고 있습니다. 이러한 라인트레이서는 TV를 시청하시다 보면 공장 같은 곳 바닥에 일자로 된 선이 그려져 있고 그 선위를 따라 움직이는 로봇들을 보신 기억이 있으실 것입니다. 보통 공장 같은 곳에서 특정한 루틴으로 로봇을 보낼 일이 있을 때 많이 쓰입니다. 원래는 회로 전부를 만능기판에 납땜해서 만들지만 저는 전공이 아닌 다른 수업을 들을 때 키트를 하나 얻은 게 있어서 완성품을 사용해서 라인트레이서를 제작했습니다.
라인트레이서의 앞면에는 상태를 표시해 주는 LED들과 저항들이 붙어 있는 것을 알 수 있습니다. 앞에 있는 2개의 빨간색 LED와 중간에 있는 파란색 LED는 조금 있다가 살펴볼 아래쪽에 있는 적외선 센서와 연결이 되어 있어서 적외선 센서가 제대로 동작을 하고 있고 지금은 어떤 상태에 있는지 시각적으로 확인을 할 수 있게 해줍니다.
앞의 반대쪽에는 파란색으로 가운데 노란색으로 + 드라이버를 가지고 돌릴 수 있는 부분이 있습니다. 이 부품은 가변저항으로 + 드라이버를 사용해서 살살 돌리면 저항의 값이 변경이 됩니다. 이것은 아래에 붙어 있는 적외선 센서의 감도를 조절하게 해주는 역할을 합니다. 이러한 센서의 감도조절은 S/W나 하드웨어 2가지의 방법으로 가능한데 S/W적으로 하기 위해서는 CPU를 분리해내야 하기 때문에 하드웨어적으로 조정하는 게 조금 더 빠른 결과를 낼 수 있습니다. 그리고 가변저항 밑에는 스위치가 하나 달려 있는 요 넘은 터보버튼으로 라인트레이서를 조금 더 빨리 달리게 해줍니다.
뒷면에는 전원스위치와 기어를 가지고 있는 DC모터 2개가 보터가 보이는 것을 알 수 있습니다. 원래는 둘 다 멀쩡한 바퀴가 있었는데 한번 떨어트리는 바람에 한쪽 바퀴가 깨져버려서 한쪽에는 임시로 처치가 되어 있는 것을 알 수 있습니다. 그리고 모터의 주변에는 종이를 끼워두었는데 이것은 DC모터의 기어부가 조금 부실해서 자꾸 벌어지기에 응급처치를 해 놓았습니다.
위에 있는 배터리 수납부를 들어내면 라인트레이서의 CPU역할을 하는 ATMEL AT89C2051 가 붙어 있는 것을 알 수 있습니다. 요 넘은 8-bit로 데이터를 처리할 수 있고 1000번의 읽고 쓰기가 가능한 2Kbyte의 플래시 메모리가 내장이 되어 있습니다. 이런 종류의 CPU는 스스로 클록을 만들어 낼 수 없기 때문에 외부에 클록발생기를 달아 주어야 하는데 그것이 바로 아래에 있는 22.1184라고 쓰여 있는 부품입니다. 클록은 디지털 CPU에서 핵심적인 부분으로 클록이 1-2개 정도 수행이 되어야지 하나의 명령어를 처리할 수 있습니다. 일반적으로 사용하는 PC의 CPU에서 사용하는 몇 기가나 하는 클록과 비슷한 개념입니다.
2개의 DC모터가 PCB에 연결이 되어 있는 것을 알 수 있습니다. 2개의 모터가 사용된 이유는 별도의 핸들 장비가 없기 때문에 좌우 방향전환을 위해서 2개가 사용이 된 것입니다. 그리고 중간 아래에 있는 동그란 부품은 조금 있다가 동영상에서도 확인할 수 있듯이 삑~삑~ 하는 소리를 내는 역할을 하는 부저입니다.(아주 너무 시끄럽습니다.)
요거는 아래에 있는 적외선 센서입니다. 적외선 센서는 일종의 다이오드이기 때문에 극성표시가 되어 있고 가운데에 길을 인식하기 위한 센서가 6개가 달려 있는 것을 알 수 있습니다. 적외선 센서는 송, 수신부로 구성이 되어서 사용이 되기 때문에 2쌍식 3세트가 사용이 된 것입니다. 센서의 사용동영상은 아래에 있습니다.
동영상에서 보면 검은 배경에 하얀색 줄이 가 있는데 센서가 줄을 넘나들면 LED가 켜졌다 꺼졌다 하는 것을 알 수 있는데 이것은 센서가 반응을 해서 그에 해당하는 동작을 한다는 것입니다.
위는 별도의 PCB로 구성이 되어 있는 배터리 수납부입니다. DC모터는 생각보다 전력을 많이 요구하기 때문에 3개의 건전지가 직렬로 연결이 되어서 약 4.5V의 전압을 내지만 에네루프는 1.2V 이기 때문에 총 3.6V의 전압이기 때문에 일반 건전지를 사용하는 것 보다는 조금 느리게 갑니다. 그러나 메인 CPU는 2.7V ~ 6V 까지의 전압에서 동작을 보장하기 때문에 동작 자체에는 무리가 없습니다.
라인트레이서에서 사용된 DC모터는 12:1 기어 비를 가지고 있습니다. 이런 기어 비를 가지고 있는 것은 속도보다는 토크 쪽에 조금 더 힘들 실어주기 위해서입니다. 토크란 회전을 하려고 하는 힘을 의미하는데 토크가 클수록 힘이 세져서 높은 경사를 올라가거나 할 때 유리합니다.
이제 동작을 하는 영상입니다. 이 라이트레이서는 초기에 한쪽 방향으로 돌다가 라인을 찾기 시작합니다. 일단 센서를 이용해서 라인을 찾은 다음 라인을 따라서 잘 도는 것을 알 수 있습니다.
이 라인트레이서의 소스입니다. 역시 C언어로 구성이 되어 있고 전체는 약 250라인정도로 구성이 되어 있습니다. 주석이 상세하게 달려 있어서 자신이 원하는 부분을 수정할 수 있습니다. 이러한 부분을 수정을 하면 일자형태의 라인에서는 빨리 달리게 할 수도 있고 코너가 나오면 감속을 하는 등 자신이 원하는 데로 라인트레이서를 조정을 할 수 있습니다. 그러나 이러한 S/W는 정말 무한하지만 H/W의 한계를 뛰어넘을 수 없고 S/W와 H/W의 원활한 조합만이 좋은 로봇을 만들 수 있습니다.
위에 있는 블록 다이어그램은 로봇과 같은 자동화 제어에서 가장 기본이 되는 제어 블록도입니다. 이것은 거의 모든 종류의 로봇에 적용이 되는 부분인데 입력이 있고 바로 출력이 있는 한가지 일밖에 할 수 없게 됩니다. 그러나 센서 같은 것을 이용해서 출력의 일부를 입력과 연관을 지어서 다시 입력을 하면(이것을 FEEDBACK이라고 부릅니다.) 시스템 전체의 출력을 수정할 수 있게 됩니다. 이것을 위에 있는 라인 트레이서와 연관 지어서 생각을 하면 라인트레이서는 처음에 한쪽 방향으로 계속 돌다가 센서에 라인이 걸리면 센서는 입력에 변화를 주어서 모터의 출력에 영향을 주게 됩니다. 이러한 기능을 계속 수행해서 라인트레이서는 라인을 따라서 계속 전진할 수 있는 것입니다.
이렇게 자동제어는 로봇공학의 가장 기초가 되는 기능입니다. 우리들 주변에 있는 로봇들은 우리가 인지하는 것도 있고 인지하지 못하는 것들도 있습니다. 그러나 이렇게 겉모습들이 다르다고 해서 속까지 다르지는 않습니다. 가장 기본적인 부분에서는 서로 공유를 하고 연결이 되어 있는 것입니다. 라인트레이서에 대한 간단한 설명만 하려고 했는데 제어공학까지 와버렸네요. 암튼 결론은 “로봇은 맛있다!”입니다.