상세 컨텐츠

본문 제목

라즈베리파이 실습 2탄 ! [Sound Sensor 및 응용]

라즈베리파이 실습 및 미니 프로젝트 !

by 전자과_공대생 2021. 1. 21. 13:01

본문

728x90
반응형

날짜 : 2020.12.29 화요일 / 제목 : 목 나가게 하는 sound 센서 / 날씨 : ☂→❄

 

안녕하세요 ~ 전자과_공대생입니다 ! (⌐■_■)

오늘도 열심히 라즈베리파이를 만져보았습니다 !

그럼 오늘의 하루 시작하도록 하겠습니다 😄

아직 세팅이 되지 않아 오늘도 폰으로 사진과 영상을 찍었습니다 (┬┬﹏┬┬)

빠른 시일 내에 세팅을 마무리하도록 하겠습니다 !

그럼 오늘 할 실습부터 알려드리겠습니다 !

 

 

{ 오늘 할 실습 }

👉sound sensor 작동

👉sound sensor 응용 1

👉sound sensor 응용 2

 

 

우선, 실습에 앞서 사운드 센서에 대해서 설명드리겠습니다.

이번에도 역시 구글링을 통하여 찾은 데이터 시트를 기반으로 설명드리겠습니다.

사운드 센서란 간단하게 말하면 소리 감지 센서입니다.

좀 더 정확하게 설명하자면 마이크로 음파 진동을 전기신호로 받아 아날로그 신호로 보드에 전달해주는 모듈입니다.

음파 진동이란 쉽게 설명하면 공기의 진동을 뜻합니다.

아날로그로 신호를 받기 때문에 결과 값은 0과 1로만 받을 수 있습니다.

sound sensor의 핀은 크게 4가지로 나눌 수 있습니다.

첫 번째 핀은 A0라 적혀있는 핀입니다.

이 핀은 센서가 인식한 소리의 세기를 아날로그 신호로 바꿔서 나오는 곳입니다.

따라서 대부분 A0핀은 원하는 GPIO에 연결합니다.

두 번째 핀은 G라고 적혀있는 핀입니다.

G는 GND의 앞 자입니다.

세 번째 핀은 +라고 적혀있는 핀입니다.

VCC 즉, 전원 공급을 받는 핀입니다.

마지막 네 번째 핀은 D0라고 적혀있는 핀입니다.

소리의 세기가 '특정 값' 이상인지 이하인지에 따라 HIGH(5V)나 LOW(0V) 전압을 출력합니다.

'특정 값'은 파란 직육면체 소자(가변저항)에 달린 나사를 돌려 조절할 수 있습니다.

나사를 반시계 방향으로 돌리면 민감해지며 시계방향으로 돌리면 둔감해집니다.

D0핀은 굳이 사용하지 않아도 무방한 핀이며 가변저항도 D0핀을 굳이 사용 안 해도 조절이 가능합니다.

 

 

이제 sound sensor 작동 실습에 대해서 설명드리겠습니다 !

{필요한 재료}

👉라즈베리파이

👉점퍼 케이블

👉sound sensor

 

아래 사진은 재료들을 가지고 구성한 회로입니다 !

sound sensor 회로 연결

좀 더 깔끔하게 정리해서 보여드리겠습니다 !

정리된 sound sensor 회로 연결

위에서 설명드린 것과 같이 A0에는 GPIO 21, G는 GND, +는 5V에 연결했습니다.

또한 사용하지 않아도 무방한 D0는 사용하지 않았습니다.

이제 작성한 코드와 결과를 한 번에 보여드리겠습니다 !

코딩 및 결과 / 코딩 출처 - https://blog.naver.com/PostView.nhn?blogId=icbanq&logNo=221803403600&categoryNo=0&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postView

1, 2번째 줄에서 GPIO를 이용하기 위해 불러오고 delay를 위하여 time도 불러옵니다.

4, 5번째 줄에서는 setmode를 BCM으로 설정하고 setup을 이용하여 GPIO 21을 입력으로 사용한다고 설정합니다.

7번째 줄에서 while 반복문을 실행시키고 8번째 줄에서는 GPIO 21 입력을 soundlevel이라는 변수에 저장합니다.

9번째 줄은 soundlevel을 그대로 출력하고 변수 soundlevel에 저장된 값을 불러옵니다.

참고로 soundlevel이라는 변수에는 아날로그 값인 0과 1밖에 저장되지 않습니다 !

10번째 줄은 delay을 0.2초로 주었습니다.

따라서 결과 값은 0.2초 주기로 나타납니다.

결과 값을 보시면 알 수 있듯이 sound sensor의 마이크에 '특정 값'을 뛰어넘는 소리가 측정되면 soundlevel 변수에 1이라는 값이 저장됩니다.

'특정 값'은 제가 가변저항을 이용하여 조절하였습니다.

제가 조절한 값은 남자가 얇은 목소리로 소리 지르면 측정되는 정도로 하였습니다.

영상을 따로 찍지 않았지만 나중에 응용 편 영상에서 보여드리도록 하겠습니다 !

 

 

이제 응용 편으로 sound sensor에 부저를 추가해보겠습니다 !

{필요한 재료}

👉라즈베리파이

👉점퍼 케이블

👉sound sensor

👉부저

 

아래 사진은 기존 회로에서 부저를 추가한 회로입니다.

sound sensor만 있던 기존 회로에서 부저를 추가한 회로 연결

좀 더 깔끔하게 정리한 회로를 보여드리겠습니다 !

정리된 기존 회로에서 부저를 추가한 회로 연결

sound sensor에 연결된 점퍼 케이블은 기존 회로와 같습니다.

부저의 +부분은 +3.3V와 연결하고 -부분은 GPIO 19에 연결합니다.

그렇다면 이제 코드를 보여드리겠습니다 !

코딩 출처 -  https://m.blog.naver.com/PostView.nhn?blogId=flextime&logNo=220623096665&proxyReferer=https:%2F%2Fwww.google.com%2F

기존의 코드에서 부저의 코드와 조건문만 추가되었습니다.

부저의 코드로는 8번째 줄에서 나중에 쓰일 check _point 변수에 0 값을 저장합니다.

9번째 줄에서는 GPIO.setup을 이용하여 GPIO 19을 출력으로 사용한다고 설정했습니다.

또한 11번째 줄에 GPIO.PWM은 GPIO 19을 1000번 시행한다는 뜻입니다.

GPIO.PWM은 (핀 번호 / 횟수)로 사용을 합니다.

RPi는 기본적으로 2개의 hardware PWM 채널을 가지고 있지만 사용할 방법이 없습니다.

하지만 software PWM은 어느 핀에서든지 사용할 수 있으며 동시에 여러 개도 사용 가능합니다.

따라서 11번째 줄의 값을 p라는 변수에 저장해둡니다.

18번째 줄에서 이제 if (조건문)을 실행시킵니다.

조건은 soundlevel 변수와 check_point 변수의 값이 다를 경우 실행됩니다.

check_point 변수의 값은 초기 값으로 0을 설정해준 상태입니다.

따라서 '특정 값'을 넘었을 경우에만 실행됩니다.

조건이 맞을 경우 아래 19, 20, 21번째 줄이 동작됩니다.

우선 19번째 줄은 p.start(0~100 사이의 값)을 이용합니다.

p.start는 dutycycle입니다.

저는 dutycycle을 50으로 설정하였습니다.

20번째 줄은 GPIO 19을 HIGH로 출력합니다.

즉, 부저를 작동시킨다는 뜻입니다.

마지막 21번째 줄은 delay를 0.5초로 준다는 뜻입니다.

22번째 줄은 조건이 충족하지 않았을 경우 즉, '특정 값'을 넘지 않았을 경우에 실행됩니다.

23번째 줄에서는 GPIO 19을 LOW로 출력합니다.

즉, 부저를 작동시키지 않겠다는 뜻입니다.

마지막 24번째 줄은 p.stop을 사용하여 dutycycle을 멈춥니다.

즉, 아까 19번째 줄에서 p.start 한 것을 멈춘다는 뜻입니다.

아래 영상은 soundlevel이 1일 때만 부저가 울리는 장면을 영상입니다 !

또한 주기적으로 측정하여 0과 1을 print 하고 있는 것도 확인할 수 있습니다.

 

기존 회로에서 부저를 추가한 회로 실행 결과 영상

 

 

마지막으로 방금 회로에서 LED을 더 추가해보겠습니다 !

{필요한 재료}

👉라즈베리파이

👉점퍼 케이블

👉sound sensor

👉부저

👉색상 LED 1개

 

아래 사진은 기존 회로에서 LED를 추가한 회로입니다.

기존 회로에서 LED만 추가한 회로 연결

이것도 좀 더 깔끔하게 보여드리겠습니다 !

정리된 기존 회로에서 LED만 추가한 회로 연결

sound sensor와 부저는 연결이 같으므로 설명을 따로 하지는 않겠습니다.

또한 LED 연결 방법은 전 글에서 진행하였기에 자세히 설명하지 않겠습니다.

짧은 다리를 GND, 긴 다리를 GPIO 13에 연결했습니다.

이제 코드를 보여드리겠습니다 !

회로 코딩

기존의 코딩 자료에서 LED 코딩만 추가하였습니다.

따라서 LED 코딩만 설명드리겠습니다.

먼저 12번째 줄은 GPIO.setup을 이용하여 GPIO 13을 출력으로 사용한다고 설정하였습니다.

또한 기존의 있던 조건문을 이용하여 LED의 on/off를 설정하였습니다.

22번째 줄에서 '특정 값'을 넘어 soundlevel이 1일 될 때, 부저도 울리고 LED도 같이 켜지도록 설정하였습니다.

또한, 25번째 줄에서는 '특정 값'을 넘지 못하였을 때 LED는 꺼지도록 설정하였습니다.

아래 영상은 방금 전 보여드린 영상에서 soundlevel이 1이고 부저가 울릴 때,

LED도 켜지는 것을 확인할 수 있는 영상입니다 !

 

LED도 같이 켜지는 것을 확인할 수 있는 영상

 

 

오늘 할 실습을 모두 마쳤습니다 !

다음 라즈베리파이 글에서도 알찬 내용을 알려드리도록 노력하겠습니다 !

이상 전자과_공대생이였습니다 ~ ! (⌐■_■)

감사합니다 ~~

728x90
반응형

관련글 더보기