Adventure Design

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

4. 컨베이어 벨트와 초음파 센서 연동

전공 공부하기 싫어서(?) 프로젝트를 깔짝대다 보니

컨베이어 벨트와 초음파 센서를 연동하는 것에 별안간 성공했습니다..

첫번째 초음파 센서에 닿았을 땐 5초 정지 후 정속도로 움직이고,

두번째 초음파센서에 닿았을 땐 5초 정지 후 점점 감소하는 속도로 움직입니다.

그 후 정지합니다. 

아직 완벽한 코드는 아니지만, 차차 기능을 수행하며 수정해나가면 될 것같습니다.

기초적인 기능구현에 성공했다는 점에서 기분이 매우 좋습니다.

 

아, 물론 슬픈 점도 있습니다.

지난 시간부터 제가 열심히 짰던 초음파센서 안정화 소스코드가

본 프로젝트에선 별로 쓸모가 없다는 사실을 인지하고... (눈물)

즉각 폐기했습니다. 폐기하고 나니 훨씬 잘돌아가더군요.

슬프긴 하지만 그 안정화 코드는 다른 곳에 유용하게 쓰게 되리라 생각하며

마음 한구석에 묻어놓겠습니다.

 


소스 코드


//코드 안정화 삭제
// 초음파 센서 2개
 
int IN1 = 6;
int IN2 = 7;
int ENA =10;
int trig_1 = 8;
int echo_1 = 9;
 
int trig_2 = 13;
int echo_2 = 12;
 
long distance_return(int trig, int echo);
void motor_go(int IN1, int IN2, int ENA);
void motor_go_slow(int IN1, int IN2, int ENA);
void motor_stop(int IN1, int IN2);
void sensor_Print(long distance);
 
void setup() 
{
 
Serial.begin(9600);
Serial.println("초음파 센서 시작");
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(trig_1, OUTPUT);
pinMode(echo_1, INPUT);
pinMode(trig_2, OUTPUT);
pinMode(echo_2, INPUT);
pinMode(ENA, OUTPUT);
}
 
void loop() 
{
  
  long new_distance_1 = distance_return(trig_1, echo_1);
  long new_distance_2 = distance_return(trig_2, echo_2);
  //sensor_Print(new_distance_1);
  
  if(new_distance_1 > 50 && new_distance_2 > 50)
  {
   motor_go(IN1, IN2, ENA);
 
  }
 
  else if (new_distance_1 <50 && new_distance_2 > 50)
  {
    delay(250);
    motor_stop(IN1, IN2);
    delay(5000); // 나중에 토핑 나오는 시간으로 계산하자
    motor_go(IN1, IN2, ENA);
    delay(2000);
  }
 
  else if (new_distance_1 >50 && new_distance_2 < 50)
  {
    delay(250);
    motor_stop(IN1, IN2);
    delay(5000); // 나중에 토핑 나오는 시간으로 계산하자
    motor_go_slow(IN1, IN2, ENA);
    //delay(1000);
    motor_stop(IN1, IN2);
    delay(10000);
  }
 
 //마지막 센서 달아서는 거기서 완전히 끝나게 하기
 // 아마 while이랑 break를 쓰면 될것같긴함...
}
 
 
long distance_return(int trig, int echo)
{
  long duration, distance;
 
  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
 
  duration = pulseIn(echo, HIGH);
 
  distance = duration * 170 / 1000 ;
 
 
  return distance;
  
  
}
 
void sensor_Print(long distance)
{
  Serial.print("거리: ");
  Serial.print(distance);
  Serial.println("mm");
  delay(100);
}
 
void motor_go(int IN1, int IN2, int ENA)
{
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW); 
  analogWrite(ENA, 150); 
}
 
void motor_go_slow(int IN1, int IN2, int ENA)
{
    
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  for(int pwm =150; pwm>=1; pwm-=5)
  {
     analogWrite(ENA, pwm);
     delay(100);
  }
  
}
 
void motor_stop(int IN1, int IN2)
{
  
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  
}

주석은 제가 나중에 코드 수정할 때 참고하려고 써둔거라, 무시하고 봐주세요!

댓글

댓글 본문
graphittie 자세히 보기