정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

klant님 코드를 다시짜봤는데 좀 봐주세요 ㅠ
이성현 | 2017-01-09

이렇게 짰는데 저가 아직 초짜라서 뭐가 틀렸는지 모르겠네요 ㅠ 아예 초음파센서가 작동을 안하고 서보모터가 둘다 안움직이네요 ㅠ 주제는 전에 처럼 초음파센서가 물체를 감지하면 servo1이 움직이고 그다음 복귀하면 바로 servo2가 다시 작동하는 그런건데요 ㅠ

죄송하지만 시간되시면 science7687@naver.com으로 소스좀 변경해서 보내주실수 있으신가요 ㅠ

시간상 안되면 밑에 댓글에 뭘 바꿔야하는지 부탁드려요 ㅠ

#include  <Servo.h>

Servo myservo;  //서보모터 객체 생성
Servo myservo2;
int pos = 0;

int echoPin = 7;
int trigPin = 8;
//초음파 센서의 핀번호를 설정한다.

float duration;
float distance = 100;

void setup() {
  myservo.attach(9);//서보모터 핀번호를 9번으로 설정
  myservo2.attach(10);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  // trig를 출력모드로 설정, echo를 입력모드로 설정
}

void loop() {
  digitalWrite(trigPin, HIGH);
  delay(10);
  digitalWrite(trigPin, LOW);
  // 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.

  duration = pulseIn(echoPin, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  distance = ((float)(340 * duration) / 10000) / 2;  // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.

  //초음파 센서로 측정한 거리가 20cm미만일 경우(쓰레기통에 근접하는 물체가 감지 될 경우)
  if (distance < 20) {
    //쓰레기통의 문을 연다
    for (pos = 10; pos < 100; pos += 2)
    {
      myservo.write(pos);
      delay(10);
    }
    delay(3000); //3초의 지연시간을 주고 난 뒤 쓰레기통의 문을 닫는다
    for (pos = 100; pos >= 10; pos -= 2)
    {
      myservo.write(pos);
      delay(10);
    }
  }
  delay(50);
  delay(3000);
  myservo2.write(pos);
  delay(10);
 
    delay(3000); //3초의 지연시간을 주고 난 뒤 쓰레기통의 문을 닫는다
    for (pos = 100; pos >= 10; pos -= 2)
   
      myservo.write(pos);
      delay(10);
}

프로필사진

수박쨈 2017-01-10 09:03:43

아두이노로 만든 프로젝트가 제대로 작동하지 않는 이유에는 소스코드의 문제도 있지만 하드웨어 연결 문제도 있습니다.

 

소스만 가지고서는 이게 어떤 이유에서 작동하지 않는지 알 수 없습니다. 일단 컴파일만 된다면 소스 코드 자체는 문제가 없는 코드니까요.

 

원하시는대로 코드 작성을 했는데도 작동하지 않는다면 하드웨어 연결을 확인해보세요. 정의된 핀 번호대로 모터나 초음파센서를 제대로 꽂았는지 확인하시고 전류가 제대로 공급되는지도 확인해보세요. 

서보모터2개와 초음파 센서를 사용하시면 분명 USB만으로 전류를 충당하는데 문제가 있을 수 있습니다.

 

그리고 코드를 대신 짜드리는 부탁은 도와드리지 않으니 혼자의 힘으로 도전해보셔서 깨닫는 무언가가 있길 바랍니다.

이전글   |    수박쩀님 저 좀 도와주세요 ㅠ 2017-01-09
다음글   |    초음파 센서 질문입니다 2017-01-09