태지쌤

로봇 & 코딩교육 No.1 크리에이터

파이썬

Vincibot 파이썬 9강 | 다섯 개 센서로 라인 트레이서 만들기

태지쌤 2025. 9. 21. 20:52
반응형

https://link.coupang.com/a/cSfXLF

 

[테일봇] 기본 패키지 - 코딩완구/로봇 | 쿠팡

쿠팡에서 [테일봇] 기본 패키지 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 코딩완구/로봇 제품도 바로 쿠팡에서 확인할 수 있습니다.

www.coupang.com

 

AI 활용

오늘은 VinciBot(빈치봇)을 파이썬으로 라인 트레이서(Line Tracer) 로 만드는 과정을 깔끔하게 정리해볼게요.

강의에서 다룬 흐름을 그대로 따라가면서, 실습 팁과 예시 코드까지 담았습니다.


 

오늘의 목표

  • VinciBot 하단 라인 팔로잉 센서 5개 이해하기
  • 1, 2, 4, 5번: 그레이스케일 센서
  • 3번(가운데): 컬러 센서
  • 센서가 감지하는 값: 반사광(Reflected Light)
  • 1번과 5번 센서만으로도 라인 트레이서 구현하기
  • 무한반복 + 조건문으로 4가지 상황 처리하기
  • 모터를 PWM 제어로 부드럽게 조향하기


라인 트레이싱의 핵심 4가지 상황

라인(검은색)과 바탕(흰색)의 반사광 차이를 이용합니다.

일반적으로 검은색은 값이 낮고, 흰색은 값이 높아요. (절대값은 환경마다 다름)

  1. On the line
  2. 두 센서(1, 5)가 모두 라인 위 → 직진
  3. Off the line
  4. 두 센서 모두 라인에서 벗어남(흰색) → 후진(혹은 탐색 동작)
  5. 왼쪽으로 치우침
  6. 1번(왼쪽) 쪽이 더 흰색에 가까움 → 오른쪽으로 조향
  7. 오른쪽으로 치우침
  8. 5번(오른쪽) 쪽이 더 흰색에 가까움 → 왼쪽으로 조향

팁: 강의에서는 예시로 “라인일 때 < 40, 바탕일 때 > 80”처럼 기준을 뒀지만,

바닥 재질/조명/테이프 색에 따라 수치가 바뀝니다.

반드시 먼저 값을 찍어보고 기준(threshold)을 잡으세요.


 

캘리브레이션(기준값 잡기) 절차

  1. 로봇을 흰색 바탕 위에 두고 1번, 5번 센서의 반사광 값을 출력해 기록.
  2. 검은 라인 위에 두고 다시 기록.
  3. 두 값 사이의 중간값을 기준(threshold) 으로 삼으면 시작이 편해요.
  4. 예: 흰색=85, 검정=25라면 임계값을 55~65 사이로 잡고 테스트.

제어 로직 설계 포인트

  • 전역 변수: 함수 밖에서 센서값 변수를 선언하면, 이벤트 함수에서 global로 가져다 쓸 수 있어요.
  • 무한 반복: 센서값은 계속 변하므로 while True: 안에서 지속 체크.
  • 조건문 4개: 상황별 if-elif-elif-elif로 분기.
  • PWM 제어: 거리/시간이 아닌 속도 자체를 계속 인가해서 라인 추종.

예시 코드

# -*- coding: UTF-8 -*-
# generated by Matatalab
left_light = 0
right_light = 0


@event.button_triangle_pressed
def on_event_triangle1():
    global left_light, right_light
    while True:
        if (((sensor.get_reflection_light(5)) < 65) and (sensor.get_reflection_light(1)) < 65)):
            motion.motor_pwm('L', -40)
            motion.motor_pwm('R', 40)
        else:
            if (((sensor.get_reflection_light(5)) > 65) and ((sensor.get_reflection_light(1)) > 65)):
                motion.motor_pwm('L', 40)
                motion.motor_pwm('R', -40)
            else:
                if ((sensor.get_reflection_light(1)) < (sensor.get_reflection_light(5))):
                    motion.motor_pwm('L', -25)
                    motion.motor_pwm('R', 5)
                else:
                    if ((sensor.get_reflection_light(1)) > (sensor.get_reflection_light(5))):
                        motion.motor_pwm('L', -5)
                        motion.motor_pwm('R', 25)

왜 왼쪽이 마이너스고 오른쪽이 플러스일까?

VinciBot의 구동 모터 방향이 서로 반대라, 같은 ‘앞으로’ 회전을 만들려면 부호가 반대여야 합니다.

그래서 왼쪽 -40 / 오른쪽 40처럼 쓰면 직진이 되는 거죠.


자주 겪는 문제 & 해결 팁

  • 라인에서 자주 튀어나가요
  • → 속도가 너무 빠릅니다. PWM 절대값(예: 40)을 낮추고 다시 시도하세요.
  • → 임계값 재조정. 주변 조명 바뀌면 값도 변해요.
  • 라인 위인데도 ‘오프라인’으로 인식해요
  • → 센서 간격/라인 두께 이슈일 수 있어요. 라인을 더 두껍게 만들거나 센서 높이를 점검.
  • 커브에서 덜덜거려요
  • → 조향 차이를 조금 더 크게/미세하게 조정해보세요.
  • 예: 왼 -28 / 오 8 처럼 비율 바꿔가며 테스트.

오늘의 정리

  • 1·5번 그레이스케일 센서만으로도 라인 트레이서를 만들 수 있다.
  • 핵심은 반사광 기준값 잡기(캘리브레이션)4가지 경우 분기.
  • PWM 제어로 속도를 계속 인가하면서 상황에 따라 속도 차로 방향을 만든다.
  • 환경이 바뀌면 임계값, 속도, 비율을 재조정하자.

#VinciBot #빈치봇 #Python #파이썬 #라인트레이서 #라인팔로워 #라인센서 #반사광 #그레이스케일 #컬러센서 #PWM #모터제어 #로봇코딩 #교육용로봇 #STEM #블록코딩 #데코레이터 #전역변수 #조건문 #무한반복 #LineTracer #LineFollower

반응형