📡

MechDog 센서 활용

초음파 센서와 터치 센서로 스마트한 로봇 만들기

🎯 학습 목표

  • • 초음파 센서로 거리 측정하기
  • • 터치 센서로 사용자 입력 받기
  • • 센서 데이터를 기반으로 LED 제어하기
  • • 실제 MechDog 하드웨어 코드 이해하기
  • • 조건문과 반복문을 활용한 센서 로직 구현하기

📖 MechDog 센서 시스템

📏 초음파 센서 (Ultrasonic Sensor)

초음파를 이용해 장애물까지의 거리를 측정합니다. MechDog이 벽이나 물체에 부딪히지 않도록 도와줍니다.

📡 작동 원리
  • 1. 초음파 발사
  • 2. 물체에 반사되어 돌아옴
  • 3. 시간 측정으로 거리 계산
  • 4. cm 단위로 결과 반환
🎯 활용 예시
  • • 장애물 회피
  • • 자동 정지
  • • 거리 기반 속도 조절
  • • 경고 시스템

👆 터치 센서 (Touch Sensor)

사용자의 터치를 감지합니다. MechDog의 머리나 몸체를 터치하여 다양한 명령을 내릴 수 있습니다.

🤚 터치 이벤트
  • • 짧은 터치 (클릭)
  • • 긴 터치 (홀드)
  • • 더블 터치
  • • 터치 해제
🎮 제어 가능한 동작
  • • 앉기/일어서기
  • • 엎드리기
  • • 모드 변경
  • • 동작 순환

💡 RGB LED 제어

센서 데이터에 따라 LED 색상을 변경하여 MechDog의 상태를 시각적으로 표현합니다.

🌈 LED 색상 의미
빨간색
위험/가까움
노란색
주의/중간거리
파란색
안전/먼거리

🔧 실제 MechDog 코드

📏 초음파 센서 코드 분석

# 실제 MechDog 초음파 센서 코드 (ultrasonic_ranging.py)
import Hiwonder
import time
import Hiwonder_IIC
from HW_MechDog import MechDog

# MechDog 객체 초기화
mechdog = MechDog()
# 7-세그먼트 디스플레이 객체 생성
tm = Hiwonder.Digitaltube()
# I2C 통신 객체 생성
i2c1 = Hiwonder_IIC.IIC(1)
# 초음파 센서 객체 생성
i2csonar = Hiwonder_IIC.I2CSonar(i2c1)

# 초기 설정
mechdog.set_default_pose()  # 기본 자세 설정
tm.setBrightness(4)         # 디스플레이 밝기 설정
time.sleep(1)

def main():
    while True:
        # 거리 측정
        distance = i2csonar.getDistance()
        tm.showNum(distance)  # 디스플레이에 거리 표시
        
        # 거리에 따른 LED 색상 변경
        if distance < 15:
            # 15cm 미만: 빨간색 (위험)
            i2csonar.setRGB(0, 0xff, 0x00, 0x00)
        elif distance > 40:
            # 40cm 초과: 파란색 (안전)
            i2csonar.setRGB(0, 0x00, 0x00, 0x99)
        else:
            # 15-40cm: 노란색 (주의)
            i2csonar.setRGB(0, 0xfd, 0xd0, 0x00)
        
        time.sleep(0.1)

main()

👆 터치 센서 코드 분석

# 실제 MechDog 터치 센서 코드 (Touch.py)
import Hiwonder
import time
from HW_MechDog import MechDog

# 전역 변수
mechdog = MechDog()
enter_flag = 0      # 버튼 누름 플래그
action_num = 0      # 동작 번호
button2 = Hiwonder.Button(2)  # 버튼 객체 생성

mechdog.set_default_pose()  # 초기 자세
time.sleep(1)

def main():
    global enter_flag, action_num
    
    while True:
        if enter_flag == 1:  # 버튼이 눌렸을 때
            if action_num == 1:
                mechdog.action_run("sit_dowm")  # 앉기
                time.sleep(1.5)
                action_num += 1
            elif action_num == 2:
                mechdog.action_run("go_prone")  # 엎드리기
                time.sleep(1.5)
                action_num += 1
            else:
                mechdog.action_run("stand_four_legs")  # 서기
                time.sleep(1.5)
                action_num = 1
            
            enter_flag = 0  # 플래그 초기화
        else:
            time.sleep(0.2)

# 버튼 클릭 콜백 함수
def on_extbutton_clicked():
    global enter_flag
    enter_flag = 1

# 버튼 이벤트 등록
button2.Clicked(on_extbutton_clicked)
main()

💻 센서 시뮬레이션 실습

센서 시뮬레이션 코드를 실행해보세요!

🎯 고급 도전 과제

다음 기능을 구현해보세요:

  1. 1. 스마트 경비 시스템: 15cm 이내 물체 감지 시 경고
  2. 2. 터치 패턴 인식: 연속 터치 횟수에 따른 다른 동작
  3. 3. 적응형 LED: 시간대별로 다른 색상 표시
  4. 4. 센서 융합: 거리와 터치를 동시에 고려한 복합 판단

🧠 센서 퀴즈

문제 1: 초음파 센서

거리 5cm일 때 어떤 색 LED가 켜져야 할까요?

빨간색 (위험)
노란색 (주의)
파란색 (안전)
초록색 (정상)

문제 2: 터치 센서

터치 센서 코드에서 콜백 함수의 역할은?

거리를 측정한다
터치 이벤트를 처리한다
LED 색상을 변경한다
모터를 제어한다

문제 3: RGB LED 제어

i2csonar.setRGB(0, 0xff, 0x00, 0x00)는 어떤 색을 나타낼까요?

빨간색
초록색
파란색
흰색

📝 정리

✅ 이번 레슨에서 배운 내용

  • • 초음파 센서: getDistance()로 거리 측정
  • • 터치 센서: 콜백 함수로 이벤트 처리
  • • RGB LED: setRGB()로 색상 제어
  • • 실제 하드웨어: Hiwonder 라이브러리 사용법
  • • 센서 융합: 다중 센서 데이터 활용

🚀 다음 레슨 미리보기

다음 레슨에서는 색상 인식을 배워봅시다! 카메라 센서로 색상을 감지하고 그에 따라 MechDog이 반응하도록 만들어보겠습니다.

← 이전 레슨 다음 레슨 →