티스토리 뷰

    초음파센서와 버튼스위치로 동작하는 서보모터 실습을 해보겠습니다. 버튼스위치, 초음파센서는 구성이 단순하고 사용법이 쉬워 흔히 쓰이는 입력장치입니다. 서보모터 역시 다양한 곳에 적용되는 출력장치 중 하나입니다. 주변에 동작되는 기계들을 보면 모터로 구성된 것들이 많습니다. 돌아가는 레이더머리, 자동으로 열리는 문 등은 회전하는 모터에 바로 연결해서 사용하는 경우입니다. 컨베이어벨트나 엘레베이터처럼 모터의 회전을 직선운동으로 바꿔서 사용하기도 합니다.

    그럼 이제 자동으로 동작하는 사물함을 설계한다고 상상해 봅시다. 버튼을 누르면 문이 열리고, 사물함에 물건을 넣으면 자동으로 문이 닫힙니다. 이 동작들을 단계별 아두이노 로직으로 짜보겠습니다.

1. 버튼을 누르면 문에 연결된 서보모터가 돌아간다.(문이 열린다.)

2. 사물함 내부 초음파센서가 물건을 감지하면 잠시 후 문이 닫힌다. (물건을 넣고 손을 뺄 수있게 5초 뒤에 닫히는 걸로 하겠습니다.)

<그림 1> 완성된 회로

<그림 2> 회로도


​———완성된 코드———

#include<Servo.h>
#define TRIG 2 // 초음파센서 TRIG 2번핀 할당
#define ECHO 3 // 초음파센서 ECHO 3번핀 할당
int button = 5;  //버튼센서 입력 5번핀 할당

Servo servo;
boolean isNear = false;

void setup(){
  pinMode(TRIG,OUTPUT); // 아두이노 송신
  pinMode(ECHO,INPUT);  // 아두이노 수신
  pinMode(button,INPUT); // 아두이노 수신
  servo.attach(9);      // 서보모터 제어 9번핀 할당
  servo.write(180);     // 서보모터 초기각도 180도 셋팅
}
void loop()
{
  digitalWrite(TRIG,LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG,HIGH);
  delayMicroseconds(5);
  digitalWrite(TRIG,LOW);

  long distance = pulseIn(ECHO,HIGH)/58; // 초음파 간격   
  
  //만약 버튼이 눌러졌다면
  if (digitalRead(button)) { 
      servo.write(0); // 서보모터 0도로 회전
  }
 
  else if(distance < 10){ // 만약 10cm보다 가까우운 곳에 물체가 있으면 
  delay(5000); // 5초 뒤에
  servo.write(180); // 서보모터 180도로 회전
  }
}


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함