안녕하세요! 이번 포스트에서는 자율 로봇 프로젝트의 중요한 단계인 라인 트래킹과 장애물 감지에 대해 설명드릴게요. 로봇이 길을 따라가는 기본적인 기능을 성공적으로 구현하기 위해 어떤 과정을 거쳤는지, 어떤 코드가 사용되었는지 함께 알아보겠습니다.
1. 라인 트래킹(Line Tracking)
라인 트래킹은 로봇이 지정된 경로(흰색 라인)를 따라가는 기능이에요. 이를 위해 적외선(IR) 센서를 사용해 흰색과 검은색을 구분하여 로봇이 정확하게 라인을 따라가게 합니다.
IR 센서란?
IR 센서는 적외선을 이용해 물체의 색이나 반사를 감지하는 장치입니다. 흰색과 검은색을 구분할 수 있기 때문에 로봇이 바닥에 있는 흰색 라인을 따라 이동할 수 있게 돕죠.
IR 센서를 이용한 라인 트래킹 과정
- 로봇에는 두 개의 IR 센서가 장착되어 있어요. 하나는 왼쪽, 다른 하나는 오른쪽에 있습니다.
- 흰색은 빛을 많이 반사하고, 검은색은 빛을 거의 반사하지 않기 때문에 IR 센서가 이를 통해 색을 구분합니다.
- 흰색 라인을 따라가기 위해 센서가 감지한 값에 따라 로봇의 바퀴가 자동으로 조정됩니다.
라인 트래킹 코드 설명
먼저 라인 트래킹 기능을 위한 기본 코드를 소개할게요:
void lineFollowing() { while (true) { readIRsensors(); // IR 센서 값을 읽음 if (detectObstacle()) { // 장애물을 감지하면 멈춤 stopMove(); break; } // 왼쪽 센서가 검은색, 오른쪽 센서가 흰색을 감지하면 왼쪽으로 회전 else if (leftIRval == black && rightIRval == white) { leftTurn(); } // 왼쪽 센서가 흰색, 오른쪽 센서가 검은색을 감지하면 오른쪽으로 회전 else if (leftIRval == white && rightIRval == black) { rightTurn(); } // 두 센서 모두 검은색을 감지하면 직진 else if (leftIRval == black && rightIRval == black) { goForward(); } delay(30); // 센서 값을 읽는 속도 조절 } } |
이 코드에서 로봇은 적외선(IR) 센서를 이용해 라인을 따라갑니다. 센서가 흰색과 검은색을 구분하여 로봇의 방향을 제어하죠. 흰색을 감지하면 로봇이 해당 방향으로 회전하고, 검은색을 감지하면 직진하게 됩니다.
IR 센서 값 읽기
void readIRsensors() { leftIRval = analogRead(leftIRpin) < 50 ? white : black; // 왼쪽 IR 센서 값 rightIRval = analogRead(rightIRpin) < 50 ? white : black; // 오른쪽 IR 센서 값 } |
이 함수는 로봇의 IR 센서가 감지한 값을 읽는 역할을 해요. 각 센서 값이 흰색 또는 검은색으로 구분되면, 로봇의 바퀴 방향을 조절할 수 있습니다.
2. 장애물 감지(Ultrasonic Obstacle Detection)
라인을 따라 주행하던 로봇이 책장이나 다른 장애물을 만나면 어떻게 해야 할까요? 이때 필요한 기능이 바로 초음파 센서를 이용한 장애물 감지입니다.
초음파 센서란?
초음파 센서는 음파를 발사해 물체까지의 거리를 측정하는 센서입니다. 물체에서 반사된 음파가 돌아오는 시간을 계산해 로봇이 장애물까지의 거리를 측정할 수 있어요. 이 기능을 통해 로봇은 장애물을 감지하고 멈출 수 있습니다.
장애물 감지 코드 설명
초음파 센서를 이용해 로봇이 일정 거리 내에서 장애물을 감지하면 멈추고, 그 이후에 바코드 스캔을 준비하게 됩니다. 다음은 장애물을 감지하는 코드입니다:
bool detectObstacle() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); unsigned long duration = pulseIn(echoPin, HIGH); float distance = ((float)(340 * duration) / 10000) / 2; return distance < 10; // 장애물을 10cm 이내로 감지하면 true 반환 } |
이 코드는 초음파 센서에서 음파를 발사하고, 그 음파가 돌아오는 시간을 계산하여 장애물과의 거리를 측정합니다. 만약 로봇과 장애물 사이의 거리가 10cm 이하라면, 로봇이 멈추게 됩니다.
장애물 감지 후 멈춤 동작
로봇이 장애물을 감지하면 멈추고, 바코드 스캐닝 모드로 전환됩니다.
if (detectObstacle()) { stopMove(); // 장애물을 감지하면 멈춤 Serial.println("장애물 감지: 책장 앞 도착"); scanForBarcode(); // 바코드 스캔 시작 } |
이 코드는 장애물을 감지하면 로봇이 정지하고, 이후 바코드를 스캔하는 동작을 준비합니다.
마무리
이번 포스트에서는 라인 트래킹과 장애물 감지 기능을 성공적으로 구현하는 방법을 설명드렸어요. 이제 로봇은 라인을 따라 이동하고, 장애물을 만나면 멈춰서 책장을 인식할 준비를 하게 되었답니다.
다음 포스트에서는 바코드 스캔과 레이저 포인터 작동에 대해 알아보겠습니다. 책을 찾고 레이저 포인터로 가리키는 멋진 동작을 구현할 예정이니 기대해 주세요!
다음 포스트: [바코드 스캔과 레이저 포인터 작동 (링크)]
궁금한 점이나 도움이 필요한 부분이 있다면 댓글로 남겨주세요. 그럼 다음 포스트에서 만나요! 😄
'창의과학' 카테고리의 다른 글
비숑의 성장 과정과 주의사항 (14) | 2024.10.15 |
---|---|
비숑 입양 가이드 (5) | 2024.10.15 |
로봇의 똑똑한 주행, 책장에서 책을 찾아내는 전체 시나리오 (0) | 2024.10.14 |
책을 찾아내다! 바코드 스캔과 레이저 포인터로 책을 정확하게 가리키는 로봇 (0) | 2024.10.14 |
자율주행 로봇 프로젝트의 첫 걸음! 로봇 만들기 준비하기-1 (1) | 2024.10.14 |