정보나눔

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

아두이노 mp3 min 와 초음파 센서 한번만재생
진이 | 2019-01-02

1. 프로젝트 사용한 보드 종류

 오렌지보드 wifi

 

 

2. 사용한 개발 프로그램명

  아두이노 IDE

 

 

3. 사용한 센서 모델명

 일반 초음파 센서

 

 

4. 연결한 회로 설명 (또는 이미지)

 

 

5. 소스코드 (주석 필수)

#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
//초음파 센서 핀설정
int trigPin = 9;
int echoPin = 8;

 void mp3_single_loop (boolean state);
 
void setup () {
    Serial.begin (9600);
    mp3_set_serial (Serial);     // DFPlayer-mini mp3 module 시리얼 세팅
    delay(1);                     // 볼륨을 Setup 하기 위한 delay
    mp3_set_volume (30);          // 볼륨 0~30
 
    //초음파 센서 핀설정
    pinMode(trigPin, OUTPUT);   
    pinMode(echoPin, INPUT);
}
void loop () {
  float duration, distance;
  digitalWrite(trigPin, HIGH);
  delay(10);
  digitalWrite(trigPin, LOW);
 
  // 장애물과의 거리계산
  duration = pulseIn(echoPin, HIGH);
  distance = ((float)(340 * duration) / 10000) / 2;
  delay(1);
   boolean play_state = digitalRead(3);

  if(distance < 50) //장애물이 50cm 이내일때
  {
   
    mp3_play(01); //안녕하세요... mp3 (0099.mp3) 파일 플레이
    delay(7000);
 
  }
}

 

6. 문제점 및 에러 내용

여기서 일정 거리 이하가 되면 mp3 가 동작하도록 하는데

거리가 일정거리 이하가 되있을경우 반복하여 재생이 됩니다.

한번만 재생이 되도록 하려면 어떻게 해야하는지 ㅠㅠ

프로필사진

kocoafab 2019-01-03 08:59:00

안녕하세요. 진이님

 

현재 작성하신 코드는 거리가 50cm 이내일 때 계속 mp3파일을 호출하도록 되어있습니다.

 

그렇기 때문에 거리가 가까우면 계속 같은 음악이 반복이 되는 것인데, 여기에 flag를 하나 추가하여 거리가 50cm이내로 처음 접햇을 때에만 mp3파일을 호출하도록 하면 계속 반복하는 문제가 없으실 거 같습니다.

 

아래 작성한 코드를 보시면 조건문에 flag 를 확인하는 부분이 추가되어서 처음 접햇을 때(flag 가 0 일 때) mp3파일을 재생하고 그 다음 flag를 1로 바꿔 거리가 50cm 미만일 경우에도 계속 같은 파일을 반복하지 않게 됩니다. 그러다가 50cm 이상 벗어나게 되면 다시 flag 를 0으로 바꿔 처음 상태로 돌려주시면 다시 50cm 미만으로 들어갔을 때 mp3파일이 재생되게 됩니다.

 

아래 예제 코드를 참고해보시고 더 궁금하신 내용이 있으시면 댓글로 질문 남겨주세요.

 

감사합니다.

 

#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
//초음파 센서 핀설정
int trigPin = 9;
int echoPin = 8;

 void mp3_single_loop (boolean state);

 boolean mp3Flag = 0;
 
void setup () {
    Serial.begin (9600);
    mp3_set_serial (Serial);     // DFPlayer-mini mp3 module 시리얼 세팅
    delay(1);                     // 볼륨을 Setup 하기 위한 delay
    mp3_set_volume (30);          // 볼륨 0~30
 
    //초음파 센서 핀설정
    pinMode(trigPin, OUTPUT);   
    pinMode(echoPin, INPUT);
}
void loop () {
  float duration, distance;
  digitalWrite(trigPin, HIGH);
  delay(10);
  digitalWrite(trigPin, LOW);
 
  // 장애물과의 거리계산
  duration = pulseIn(echoPin, HIGH);
  distance = ((float)(340 * duration) / 10000) / 2;
  delay(1);
   boolean play_state = digitalRead(3);

  if(distance < 50 && mp3Flag == 0) //장애물이 50cm 이내일때
  {
   
    mp3_play(01); //안녕하세요... mp3 (0099.mp3) 파일 플레이
    mp3Flag = 1;
    delay(7000);
 
  }
  else if(distance >= 50){
    mp3Flag = 0;
  }
}

 

 

프로필사진

진이 2019-01-03 21:31:49

매우 감사합니다.

프로필사진

교수님 2019-05-20 02:23:39

진이님 소스와 하드웨어 연결한 것 알려주세요 계속반복되어서 여기 것 복사해서 올렸는데 아두이노우노보드에 안올라가네요 저항는 100옴 100옴 했는데 1000옴 1000옴 해야 할까요? genren@daum.net 입니다

초음파센서 vcc 선 어디 꼽았는지 궁금합니다

이전글   |    스마트홈 성공하신분 전체코딩자료 공유 부탁드려요... 2018-12-30
다음글   |    오렌지 보드 wifi 보드 뭐선택해야하죠죠 2019-01-03