터치하면 반응하는 로봇: 접촉 센서의 모든 것 > 초보자를 위한 로봇 프로젝트

본문 바로가기
사이트 내 전체검색

초보자를 위한 로봇 프로젝트

터치하면 반응하는 로봇: 접촉 센서의 모든 것

페이지 정보

profile_image
작성자 관리자
댓글 0건 조회 286회 작성일 25-11-20 14:33

본문

터치하면 반응하는 로봇: 접촉 센서의 모든 것

로봇에게 '터치'라는 감각을 부여하는 것은 마치 살아있는 생명체와 같은 상호작용을 가능하게 합니다. 특히, 사람과의 상호작용이나 주변 환경과의 물리적 접촉을 감지하는 데 필수적인 부품이 바로 **접촉 센서(Contact Sensor)**입니다.


1. 접촉 센서는 무엇이고, 왜 중요할까요?

정의: 접촉 센서는 물리적인 접촉(누름, 충돌 등)이 발생했을 때 이를 감지하여 전기적인 신호(켜짐/꺼짐, 0/1)로 변환하는 센서입니다. 가장 대표적인 접촉 센서는 **버튼(스위치)**입니다.

왜 중요할까요?:

안전: 로봇이 벽이나 사람에 부딪히는 것을 감지하여 즉시 멈추게 하는 등 충돌 방지에 사용됩니다.

상호작용: 사용자가 로봇을 '터치'하거나 '누르는' 것을 감지하여 특정 동작을 수행하게 합니다. (예: 로봇 머리를 만지면 소리를 내는 로봇 인형)

정보 수집: 특정 물체와 접촉했는지, 문이 열렸는지 닫혔는지 등 환경에 대한 정보를 수집합니다.

2. 접촉 센서의 종류

가장 흔히 사용되는 접촉 센서는 버튼이나 리미트 스위치입니다.


푸시 버튼 (Push Button):

작동 방식: 누르면 연결되고, 놓으면 분리됩니다. (또는 반대)

활용: 로봇의 시작/정지 버튼, 메뉴 선택 버튼, 게임 콘솔의 조작 버튼 등.

리미트 스위치 (Limit Switch):

작동 방식: 끝단에 레버(지렛대)가 있어 특정 물체에 닿아 레버가 눌리면 작동합니다.

활용: 로봇 팔이 특정 위치에 도달했는지 확인하거나, 로봇의 움직임을 제한하는 데 사용됩니다.

범퍼 센서 (Bumper Sensor):

작동 방식: 로봇 외부에 장착된 물리적인 범퍼가 충돌에 의해 눌리면 센서가 작동합니다.

활용: 로봇 청소기나 이동 로봇이 장애물에 부딪히는 것을 감지하여 회피 동작을 하도록 합니다.

3. 접촉 센서 연결하기 (버튼 기준)

접촉 센서는 대부분 디지털 신호(HIGH/LOW)를 출력하므로, 아두이노의 디지털 핀에 연결합니다. 노이즈 방지를 위해 풀업 또는 풀다운 저항이 필수적입니다.


배선 예시 (버튼 + 풀다운 저항):


전원 공급: 아두이노 5V 핀 → 브레드보드 전원(+) 라인. GND 핀 → 브레드보드 접지(-) 라인.

버튼 연결:

버튼 한쪽 다리 → 브레드보드 전원(+) 라인 (5V).

버튼 다른 쪽 다리 → 브레드보드 빈 열.

풀다운 저항 연결:

버튼의 다른 쪽 다리 → 10kΩ 저항 한쪽 다리.

10kΩ 저항의 다른 쪽 다리 → 브레드보드 접지(-) 라인 (GND).

신호 핀 연결:

버튼의 다른 쪽 다리(10kΩ 저항과 만나는 지점) → 아두이노 디지털 핀 2.

풀다운 저항의 역할: 버튼이 눌리지 않았을 때(LOW) 아두이노 핀이 안정적인 0V를 읽도록 합니다. 버튼이 눌리면 5V를 읽습니다.

배선 예시 (버튼 + 풀업 저항):


버튼 연결:

버튼 한쪽 다리 → 브레드보드 접지(-) 라인 (GND).

버튼 다른 쪽 다리 → 브레드보드 빈 열.

풀업 저항 연결:

버튼의 다른 쪽 다리 → 10kΩ 저항 한쪽 다리.

10kΩ 저항의 다른 쪽 다리 → 브레드보드 전원(+) 라인 (5V).

신호 핀 연결:

버튼의 다른 쪽 다리(10kΩ 저항과 만나는 지점) → 아두이노 디지털 핀 2.

풀업 저항의 역할: 버튼이 눌리지 않았을 때(HIGH) 아두이노 핀이 안정적인 5V를 읽도록 합니다. 버튼이 눌리면 0V를 읽습니다. (아두이노 INPUT_PULLUP 모드를 사용하면 외부에 저항 없이도 풀업 저항을 내장할 수 있습니다.)

4. 아두이노로 접촉 센서 값 읽고 로봇 반응하게 하기 (코딩 꿀팁)

접촉 센서(버튼)는 디지털 신호를 출력하므로 digitalRead() 함수를 사용합니다.


cpp



// 버튼 연결 핀 정의 (풀다운 저항 사용 시)

const int buttonPin = 2; // 버튼을 아두이노 디지털 핀 2에 연결

const int ledPin = 13;   // 로봇의 반응 확인용 LED (아두이노 내장 LED)


void setup() {

  pinMode(buttonPin, INPUT);      // 버튼 핀을 입력으로 설정

  pinMode(ledPin, OUTPUT);        // LED 핀을 출력으로 설정

  Serial.begin(9600);             // 시리얼 통신 시작 (버튼 상태 확인용)

}


void loop() {

  int buttonState = digitalRead(buttonPin); // 버튼 핀의 상태 읽기 (HIGH/LOW)


  Serial.print("Button State: ");

  Serial.println(buttonState);


  // 로봇 반응 설정

  if (buttonState == HIGH) { // 버튼이 눌렸을 때 (풀다운 저항 기준)

    digitalWrite(ledPin, HIGH); // LED 켜기 (로봇 전진, 후진 등 명령)

    Serial.println(" -> Button PRESSED! Robot reacts.");

    // 여기에 로봇의 동작 코드를 추가합니다 (예: moveForward(), stopRobot() 등)

  } else {

    digitalWrite(ledPin, LOW);  // LED 끄기 (로봇 정지 등 명령)

    Serial.println(" -> Button RELEASED. Robot standby.");

  }


  delay(50); // 50ms마다 반복하여 상태 확인

}

코드 업로드 후 테스트: 아두이노에 코드를 업로드하고 시리얼 모니터를 엽니다. 버튼을 누르고 뗄 때마다 buttonState 값이 변하고, LED가 켜지고 꺼지는 것을 확인합니다.


5. 접촉 센서 사용 시 꿀팁

채터링 (Chattering): 기계식 스위치(버튼)는 눌리거나 떼어질 때 순간적으로 여러 번 신호가 ON/OFF를 반복하는 '채터링' 현상이 발생합니다. 이로 인해 로봇이 한 번 눌러도 여러 번 반응하는 것처럼 오작동할 수 있습니다.

해결 방법: delay() 함수를 이용하여 50ms~200ms 정도 짧은 지연 시간을 주어 채터링을 무시하거나, 코딩으로 debounce (디바운스) 기능을 구현하여 해결합니다.

센서 배치: 로봇의 어디에 '터치' 감각을 주고 싶은지, 그리고 어떤 기능을 수행하게 할 것인지에 따라 적절한 위치에 센서를 배치합니다. (예: 로봇 전면 범퍼에 리미트 스위치, 로봇 머리에 푸시 버튼)

내구성과 방수: 로봇이 야외에서 활동하거나 거친 환경에서 사용된다면, 방수/방진 기능이 있는 접촉 센서를 사용하거나 보호 케이스를 만들어야 합니다.

외부 저항의 중요성: 아두이노의 디지털 핀은 입력 상태가 불확실한 '플로팅(floating)' 상태를 방지하기 위해 풀업 또는 풀다운 저항을 반드시 사용해야 합니다. pinMode(buttonPin, INPUT_PULLUP)을 사용하면 외부 풀업 저항 없이 아두이노 내장 저항을 활용할 수 있습니다.

접촉 센서는 로봇에게 가장 기본적인 형태의 '피드백'을 제공하여, 로봇이 주변 환경과의 물리적 상호작용을 인지하고 그에 반응하게 만듭니다. '터치하면 반응하는 로봇'을 만들면서 로봇에게 '감각'을 불어넣는 즐거운 경험을 해보세요!

[이 게시물은 관리자님에 의해 2025-11-22 10:15:07 초보자를 위한 로봇 프로젝트에서 이동 됨]
[이 게시물은 관리자님에 의해 2025-11-29 13:01:12 18에서 이동 됨]

댓글목록

등록된 댓글이 없습니다.


회사소개 개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

작크와콩나무
대표:이강복 등록번호:129-30-34337 개인정보관리책임자:이경영

Copyright © https://roboman.co.kr/ All rights reserved.