정보나눔

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

아두이노에서 초음파센서와 블루투스를 동시에 사용하려고 하는중입니다.
하몬드 | 2021-09-30

int IR1 = 22;    // 센서핀은 22번에 연결
int IR2 = 24;
int val1;
int val2;
int trig1 = 30;
int echo1 = 31;
int trig2 = 32;
int echo2 = 33;
int trig3 = 34;
int echo3 = 35;
int wheelLeftFront = 50; 
int wheelLeftBack = 52;
int wheelRightFront = 51;
int wheelRightBack = 53;

void setup () {
  pinMode(IR1, INPUT);    // 센서값을 입력으로 설정
  pinMode(IR2, INPUT);    // 센서값을 입력으로 설정
  pinMode(echo1, INPUT); //  echo 입력
  pinMode(trig1, OUTPUT);  // trigPin 출력
  pinMode(echo2, INPUT); // echo 입력
  pinMode(trig2, OUTPUT);  // trigPin 출력
  pinMode(echo3, INPUT); // echo 입력
  pinMode(trig3, OUTPUT);  // trigPin 출력
  
  Serial.begin(9600);            // 블루투스 통신속도 9600
  Serial1.begin(9600);
}

 

void loop ()
{

//IR센서1  
  val1 = digitalRead(IR1);  // 센서값 읽어옴
  if (val1 == LOW) {          // 장애물 감지 되면
    forward();              //전진
  }
  else {                    // 장애물이 감지되면
    backward();             // 후진
    delay(2000);            // 1초 동안
    right();                // 우회전
    delay(1500);            // 1.5초 동안
  }
//IR센서2
  val2 = digitalRead(IR2);  // 센서값 읽어옴
  if (val2 == LOW) {          // 장애물 감지 되면
    forward();                // 전진
  }
  else {                   // 장애물이 감지되면
    backward();             // 후진
    delay(2000);            // 1초 동안
    right();                // 우회전
    delay(1500);            // 1.5초 동안
  }
//초음파센서1
long duration1, distance1;
  digitalWrite(trig1, LOW);
  delayMicroseconds(2);
  digitalWrite(trig1, HIGH);  // trigPin에서 초음파 발생(echoPin도 HIGH)        
  delayMicroseconds(10);
  digitalWrite(trig1, LOW);
  duration1 = pulseIn(echo1, HIGH);    // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  distance1 = ((340 * duration1) / 1000) / 2;    //거리를 mm로 출력
  
  if(distance1 < 15){      //15mm안에 들어오면
    right();               //우회전
    delay(2000);           //1초 동안
  }
    else {                   // 장애물이 감지안되면
    forward();             // 전진
  }
//초음파센서2
long duration2, distance2;
  digitalWrite(trig2, LOW);
  delayMicroseconds(2);
  digitalWrite(trig2, HIGH);  // trigPin에서 초음파 발생(echoPin도 HIGH)        
  delayMicroseconds(10);
  digitalWrite(trig2, LOW);
  duration2 = pulseIn(echo2, HIGH);    // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  distance2 = ((340 * duration2) / 1000) / 2;    //거리를 mm로 출력
  
  if(distance2 < 15){      //15mm안에 들어오면
    right();               //우회전
    delay(2000);           //1초 동안
  }
    else {                   // 장애물이 감지안되면
    forward();             // 전진
  }
//초음파센서3
long duration3, distance3;
  digitalWrite(trig3, LOW);
  delayMicroseconds(2);
  digitalWrite(trig3, HIGH);  // trigPin에서 초음파 발생(echoPin도 HIGH)        
  delayMicroseconds(10);
  digitalWrite(trig3, LOW);
  duration3 = pulseIn(echo3, HIGH);    // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  distance3 = ((340 * duration3) / 1000) / 2;    //거리를 mm로 출력
  
  if(distance3 < 15){      //15mm안에 들어오면
    right();               //우회전
    delay(2000);           //1초 동안
  }
    else {                   // 장애물이 감지안되면
    forward();             // 전진
  }
//블루투스 f전진 l좌측 r우측 b멈춤
if (Serial1.available())
  {
    char cmd = (char)Serial1.read();
    if(cmd == 'F'){
      Serial.println(1);
      forward();             //전진
      delay(1000);
    }
    else if(cmd == 'L'){
      Serial.println(2);  
      left();
      delay(1000);
    }
    else if(cmd == 'R'){
      Serial.println(3); 
      right();
      delay(1000);
    }
    else if(cmd == 'B')
    {                        // 후진
      Serial.println(4);
      backward();
      delay(1000);
    }
    else
    {
      Serial.println(5);
      forward();
    }
  }
}


//모터전,후진
void forward(){
  analogWrite(wheelLeftFront, 150);
  analogWrite(wheelLeftBack, 0);
  analogWrite(wheelRightFront, 150);
  analogWrite(wheelRightBack, 0);
}

void left(){
  analogWrite(wheelLeftFront, 0);
  analogWrite(wheelLeftBack, 150);
  analogWrite(wheelRightFront, 150);
  analogWrite(wheelRightBack, 0);
}

void right(){
  analogWrite(wheelLeftFront, 150);
  analogWrite(wheelLeftBack, 0);
  analogWrite(wheelRightFront, 0);
  analogWrite(wheelRightBack, 150);
}

void backward(){
  analogWrite(wheelLeftFront, 0);
  analogWrite(wheelLeftBack, 150);
  analogWrite(wheelRightFront, 0);
  analogWrite(wheelRightBack, 150);
}

 

코드는 위와같이 짜넣은 상황이고 결선도 다 했는데 블루투스를 추가하기 전에는 초음파센서가 잘 반응하더니 블루투스를 추가하니 초음파센서가 죽어버리는 상황이네요. IR센서는 정상으로 동작하는데 뭐가 잘못됬는지 혹시 알수있을까요?

이전글   |    아두이노에 SD카드를 사용하고 싶은데.. 혹시 이런 기능은 없나요..?... 2021-09-29
다음글   |    아두이노에서 보낼 수 있는 총 문자열의 갯수를 늘릴 수 있는 방법이 알고 싶습니다.... 2021-09-30