본문 바로가기

AVR/AVR 작품, Project

AVR PCM 데이터 재생, 적외선 응용 물체인식 방문 환영장치 만들기 (AVR PCM Data Player)

 

 

한달만에 찾아오는 새로운 NEW입니다.^

그동안 너무 포스팅이 없었나봐요.. 방문자도 약간 감소한것이.. 그건 그렇고 다시 본론으로 ㅎ

이번에는 WAV파일을 바이너리 편집기로 분해해서 물체나 사람이 지나갈시에 "울산 공업고등학교에 오신 것을 환영합니다." 라고 재생하도록 만들어봤는데요.

이 것저것 바쁘다 보니 여태 만들었던 다른 작품에 비해 완성도가 크게 떨어지네요. ㄷ

그럼 바로 작품 자랑 & 소개 시작할까요? :-)

 

 

회로도 및 PCB 제작


 

제 첫 의도는 인체감지센서를 이용해서 원거리를 인식해 문앞, 입구에 설치해서 사람이 지나갈 때 마다 멘트가 재생되는 것이 의도였습니다.

그래서 인체감지 센서를 구매하려고 사이트를 들어갔는데... 인체감지센서가 비싸서 포기!...

그래서 생각한 방법 두번째 레이저와 CDS를 이용해서 빛이 끊기면 센서가 인식되도록 구성하자..!!

생각은 좋았으나, 또 레이저를 구하지 못해 결국 가장 흔한 ST-7L과 EL-7L로 적외선 인식 구동했습니다. 인식거리는 한 20~30cm정도 되나요....○_○

정말 응용해서 사용하실 분은 인체감지센서나 레이저&CDS를 구하시기 바랍니다.ㅎ

 

IR 센서 송신부 회로도

NE555로 구성되어서, 38Khz를 출력하도록 구성된 회로이나, 콘덴서와 저항 오차가 큰지 25Khz정도 출력됩니다. 계산값에 좀 많이 빗나갔습니다만, 구동에 문제가 없어서 그대로 사용합니다.

 

 

 

 적외선 수신 PCM 데이터 재생 회로

이 회로가 가장 중심이죠.ㅎ Atmega328 AVR 컨트롤러에 PCM 데이터를 넣어두고, PC0 포트에 입력이 들어올 때 마다 PB1핀의 기능인 PWM출력기능을 사용해서 PCM데이터를 출력합니다. 출력된 PCM데이터는 트랜지스터에 의해 증폭되어 스피커에 소리로 나오게 된답니다.^

그리고 감도를 조정하는 부분은 R2인데 가변저항으로 만들지않고 고정저항으로 설계해 감도 조정이 불가능합니다. 감도를 조정할 부분이 필요하시다면 가변저항으로 수정이 필요하답니다.^

 

 

 항상 하던 PCB 자체제작

 

 

 

소프트하고 고급스러운 느낌으로 사진 찍어 보았습니다. ㅎㅎ

요것을 납땜 까지 끝내면.....

 

 

여기서 뭔가 또 옥에 티가 있지 않나요.ㅎㅎ 

회로도는 ST-7L을 사용했는데 기판에 센서 부분이 KSM603이네요..ㅎ 수신 기판은 프로토 타입인데..KSM603으로 해도 인식될줄 알고 만들었다가 실패하는 바람에... 그리고 여태까지 만들고 남은 자투리 기판을 이용했더니 남는 기판이 없어서 새로 만들 수 없었습니다.

그래서 그냥 사용하다 보니 저렇게 되어버렸네요.....

 

 

만드는데 필요한 정보를 팍팍 공개합니다.


 

소스코드부터 PCB아트윅된 파일 까지 팍팍 공개해 드립니다. ㅎㅎ

Wave 파일을 010에디터로 분해한 다음 PCM데이터 부분만 추출하여 재생하는 소스입니다.^

다운로드 받으시면서 댓글하나라도 남겨주시면 감사하겠습니다.^

 

 

 

 AVR Studio용 소스코드 - 구글 드라이브로 연결됩니다.

 

 


 

 PCM Data Player PCB아트윅 - 구글드라이브로 연결됩니다.

 

 


 

 PCM Data Making Tools Kit - 구글드라이브로 연결됩니다.

 


 

 글 읽어주는 사이트 링크 - 새창으로 이동합니다.

 

 

 

 

 

말하는 음원파일 PCM데이터 만들기.


 

요청이 많으셔서 목소리 음성파일을 녹음하고, 010 에디터로 PCM 데이터를 만들어 내는 과정까지 내용 추가합니다.

 

 곰녹음기로 음성파일 녹음 및 WAV로 저장하기

 

1. 곰녹음기를 실행합니다.

 

 


 

 

 

2. 글 읽어주는 사이트에 접속해서 설정합니다.

Enter Text에 읽고자 하는 멘트를 Language는 Korean으로 Voice에서 원하는 목소리를 설정하고 Say It을 눌러 정상적으로 읽어지는지 확인합니다.

 

 

 


 

 

 

3. 곰녹음기로 녹음을 시작합니다.

곰 녹음기에서 녹음 버튼 혹은 F12를 누르고 녹음 파일을 저장할 위치를 지정해 줍니다.

기본값은 \내문서\곰녹음기 입니다.

 

 

 

 


 

 

4. 곰녹음기로 녹음을 완료하고 자르개를 실행합니다.

 

 

 

 


 

 

5. 자르개에서 음성이 녹음된 부분을 지정해서 자르기를 눌러 저장합니다.

역시 기본값 \내문서\곰녹음기에 잘라낸 파일로 저장됩니다.

 

 

 

 


 

 

6. 마지막 잘라낸 파일 열기는 아니요를 눌러줍니다.

이제 음성이 녹음된 MP3 파일 만들기가 끝났습니다.

 

 

 

 


 

 

 

 녹음된 MP3파일 Wav 파일로 변환하기

여기서는 MP3파일을 Wav파일로 변환하게 되는데요, 기타 MP3 to WAV 프로그램을 이용하셔서 변환하셔도 됩니다, 하지만 반드시 변환 설정은 샘플링주파수 8000~16000Hz, 채널 Mono, 비트 8Bit 설정이여야 합니다.

 

1. Mp3 to Wma 컨버터를 실행합니다.

 

 

 


 

 

2. 이전 작업에 녹음해둔 파일을 추가해 줍니다.

아까 저장해 두었던 기본값 경로는 \내문서\곰녹음기 이고, 잘라낸파일_곰녹음기_1 파일을 불러옵니다.

 

 

 

 


 

 

3. 출력 포맷을 Wav로 변경해줍니다.

 

 

 


 

 

4. 출력옵션 상세설정에서 출력옵션을 설정합니다.

채널은 Mono, 비트는 8Bit, 샘플링 주파수는 원하는 품질에 따라 8000Hz~16000Hz 정도 설정합니다.

 

 

 

 


 

 

5. 모든설정을 마친 후 변환을 눌러줍니다.

변환할 파일 목록의 상태바가 모두 차면 역시 파일추가했던 장소에 변환할 파일과 같은 이름으로 웨이브 파일이 새로 생성됩니다.

 

 

 


 

 

 010 에디터로 PCM 배열 데이터로 변환하기

이제 PCM데이터를 만드는 마무리 작업단계로 010 에디터로 헤더부분을 떼어내고 데이터만 추출해 냅니다.

 

1. 010 에디터를 실행합니다.

 

 

 


 

 

2. 010 에디터에 변환한 Wav파일을 열기 합니다.

 

 

 

 


 

 

3. 010 에디터에서 열기한 파일의 Data부분을 선택합니다.

struct DATACHUNK data의 uchar samples[배열길이]가 재생을 원하는 PCM데이터 부분입니다.

uchar samples[배열길이] 클릭해줍니다.

 

 

 


 

 

4. 선택한 데이터 부분을 복사합니다.

 

 

 


 

 

5. File > New > New Hex File을 눌러 새로운 빈 Hex파일을 생성하고 붙여넣습니다.

 

 

 

 


 

 

6. File > Export Hex를 눌러 C언어 배열값으로 변환합니다.

 

 

 


 

 

7. 변환 파일 종류를 C Code (*.cpp *.c)로 설정합니다.

설정한 후 Export를 눌러주면 지정한 폴더나 열기 했던 파일의 경로에 변환되어 저장됩니다.

 

 

 

 


 

 

8. PCM 데이터 추출이 완료되었습니다.

이제 이 파일을 pcm_sample.h 파일로 사용하시면 됩니다.

그전에 unsigned char hexData[17764] = { 라고 되어있는 부분을 const long pcm_length = 배열길이 const unsigned char pcm_samples[] PROGMEM ={ PCM 데이터 내용 .....};으로 변경하셔서 파일이름을 pcm_sample.h 로 변경하시면 됩니다.

 

 

사진이 너무 많아서 작성하기 힘들었네요, 변환하는 방법이 도움이 되시기 바랍니다.

 

 

동작 영상


 

 

 

울산 공업 고등학교에 오신 것을 환영합니다. ~~

갤럭시 S2로 촬영했는데도 화질이 좋지 못하네요...ㄷ 

왜 휴대폰 카메라는 아무리 좋아져도 동영상 화질이 저런지 모르겠습니다.

그건 그렇고 또 하나 만들었네요 ㅎㅎ, 다음은 무엇에 도전할까요?

 

댓글을 달아주시는 그대는 천사~!!