전공 공부하기 싫어서(?) 프로젝트를 깔짝대다 보니
컨베이어 벨트와 초음파 센서를 연동하는 것에 별안간 성공했습니다..
첫번째 초음파 센서에 닿았을 땐 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);
}
|
주석은 제가 나중에 코드 수정할 때 참고하려고 써둔거라, 무시하고 봐주세요!