쓰레기통 조립하기

이번에는 쓰레기통을 최종 조립하여 완성하는 시간이다. 코드도 다 짰고,, 이제 붙이기만 하면 되는거 아닌가? 라고 생각하면 오산이다. 오늘이 제일 힘든 시간이 될 것이다.
아주 단순해 보여도, 하드웨어는 그렇게 내 생각대로 쉽게(그리고 단 한번에!) 척척 진행되지 않는다. 말로는 설명이 어려우니 따라하면서 직접 몸으로 느껴보길 바란다.

우선, 쓰레기통의 머리를 분해해보자. 서보모터는 안보이게 안쪽에 고정하고, 바깥쪽 여닫이를 서보모터에 의해서 움직이게 만들것이다.

쓰레기통 머리의 연결 피봇 부분을 커터 칼로 잘라버렸다..(힘으로 안빠지길래) 각자가 편한 방식대로 분해하길 바란다. 나는 인두기를 이용하여 구멍의 크기를 조금 넓혀주었다. (서보모터의 회전파트가 들어가게 하기 위해서)

그러고 나서 서보모터와 바깥부분 서보모터의 혼(서보모터의 날개 부분을 혼이라고 부른다)을 연결하는 상황을 시뮬레이션해본다. (제대로 돌아가는지 테스트 하기 전에 고정부터 하면 안될수도 있기 때문에 아직 고정은 하지말자) 나는 첫번째 시도에서 망했다. 그래서 오른쪽 부분을 또 커터갈로 자르고 더 힘이 센 서보모터를 장착했다.

제대로 잘 작동하는지 확인했으면 글루건으로 접착하자.

우선 아래 코드를 아두이노에 업로드한다. (이전 글 초음파 센서로 서보모터 제어하기 와 코드가 약간 다릅니다!)

코드

코드 보기
#include  <Servo.h>

Servo myservo;

int pos = 100; // 테스트하면서 수정

int echoPin = 7;
int trigPin = 8;

float duration;
float distance = 100;

void setup() {
  myservo.attach(9);  //서보모터 핀번호를 9번으로 설정
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  Serial.begin(9600);
}

void loop() {
  digitalWrite(trigPin, HIGH);
  delay(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장
  distance = ((float)(340 * duration) / 10000) / 2; // 거리 계산
  // Serial.println(distance);
  
  if (distance < 10) {
    //쓰레기통의 문을 연다
    for (pos = 100; pos >= 10; pos -= 2)
    {
      myservo.write(pos);
      delay(10);
    }
    delay(3000); // 3초의 지연시간을 주고 난 뒤 쓰레기통의 문을 닫는다
    for (pos = 10; pos < 100; pos += 2)
    {
      myservo.write(pos);
      delay(10);
    }
  }
  delay(50);
}

영상과 같이 잘 작동하는지 확인했으면, 이제 회로를 잘 정리해서 안보이는 곳에 붙여주면 된다. 초음파 센서만 손이 접근하기 용이한 위치에 고정해주자.

완성 영상