목표
초음파 센서의 측정 거리에 따라 일정 간격의 부저음을 발생하는 예제입니다.
- 부저음 사이의 간격은 거리에 비례하여 늘어난다. (10cm ~ 100cm 일 때 100~1000밀리초)
- 거리가 10cm 미만이 되면 간격없이 연속적인 부저음을 발생한다.
- 거리가 100cm 이상이 되면 부저음을 발생시키지 않는다.
- 대시보드 위젯에 측정된 거리를 텍스트로 표시한다.
하드웨어
부품
부품 | 갯수 |
---|---|
HC-SR04 초음파센서 | 1 |
1kΩ 저항 | 1 |
2kΩ 저항 | 1 |
수동부저 | 1 |
연결
아래의 핀을 가로 방향으로 서로 연결해줍니다.
수동부저 | HC-SR04 | 부품 | GPIO | 부품 | GPIO |
---|---|---|---|---|---|
| VCC | | 5V | | |
| Trig ¹ | | 23 | | |
| Echo ¹ | 1k Ω 저항 ² | 24 | 2k Ω 저항 ² | GND |
| GND | | GND | | |
+ ¹ | | | 21 | | |
– | | | GND | | |
I/O장치
초음파센서와 수동부저를 I/O장치에 추가합니다.
변수
초음파센서의 측정거리 및 부저음의 간격을 저장할 변수를 추가합니다.
- “측정 거리” (숫자)
- “부저음 간격” (숫자)
로직
항상 초음파 센서로 부터 거리를 읽어옵니다. 거리가 10cm 이상, 100cm 미만일 때는 거리에 비례하여 부저음의 간격을 100~1000밀리초로 비례하여 변환합니다. 또한, 10cm 미만일 경우에는 연속적인 부저음을 발생시키고 100cm 이상일 경우에는 부저음을 발생시키지 않습니다.
이를 알고리즘 블록으로 나타내면 아래와 같습니다.
[로직]
로직을 추가합니다. 실행주기는 기본값을 사용합니다.
[제어] 항상 초음파센서의 거리를 읽어온다.
제어를 추가합니다.
[조건] 항상
항상 만족하는 조건을 추가합니다.
타입: 항상 유효
[동작] 초음파센서에서 거리를 읽어온다.
초음파센서로 부터 거리를 읽어 “측정 거리” 변수에 저장하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: 초음파센서
- 명령: READ_DIST
- 값 : “측정 거리” 선택
[제어] 거리가 10~100일때 부저음 간격을 계산하여 부저음을 발생시킨다
조건 연산자가 AND (그리고)인 제어를 추가합니다.
[조건] 거리가 10 이상이면
앞에서, 초음파센서의 측정거리를 “측정 거리”에 저장했으므로 해당 변수의 값을 비교하는 조건을 추가합니다.
- 타입: 비교
- 변수: “측정 거리” 선택
- 연산자: >= (크거나 같다)
- 값: 10
[조건] 거리가 100 미만이면
“측정 거리”를 비교하는 조건을 추가합니다.
- 타입: 비교
- 변수: “측정 거리” 선택
- 연산자: < (작다)
- 값: 100
[동작] 거리가 10~100cm 일때 부저음 간격을 100~1000밀리초로 선형변환한다
거리가 10~100 일때 비례하여 “부저음 간격”이라는 변수의 값이 100~1000밀리초가 되도록 선형변환 (스케일) 합니다.
- 타입: 쓰기
- 변수: “부저음 간격” 선택
- 값
- 블록모드로 전환
- 스케일 블록 작성
[동작] 부저음을 발생시킨다.
중간 음높이 (7) 로 부저음을 발생시키는 동작을 추가합니다.
- 타입: I/O장치
- 장치: 수동부저
- 명령: BUZZ
- 값: 7
[동작] 50밀리초 를 지연한다.
시간을 지연하는 동작을 추가합니다.
- 타입: 시간지연
- 값: 0시간 0분 0초 50밀리초
[동작] 부저음을 중지한다.
부저음을 중지하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: 수동부저
- 명령: STOP
[동작] 계산된 부저음의 간격만큼 지연한다.
앞에서 선형 변환한 결과인 “부저음 간격” 변수의 값만큼 시간을 지연하는 동작을 추가합니다.
- 타입: 시간지연
- 값
- 블록모드로 전환
- 아래와 같이 블록 작성
[제어] 거리가 10cm 미만이면 연속적인 부저음을 발생시킨다.
제어를 추가합니다.
[조건] 거리가 10cm 미만이면
“측정 거리”를 비교하는 조건을 추가합니다.
- 타입: 비교
- 변수: “측정 거리”
- 연산자: < (작다)
- 값: 10
[동작] 부저음을 발생시킨다.
부저음은 한번 발생되면 정지할 때까지 연속적으로 소리를 발생시킵니다. 그러므로 중간 음높이 (7)로 부저음을 발생시키는 동작을 추가합니다.
- 타입: I/O장치
- 장치: 수동부저
- 명령: BUZZ
- 값
- 음높이 : 7
[제어] 거리가 100cm 이상이 부저음을 중지한다.
제어를 추가합니다.
[조건] 거리가 100cm 이상이면
“측정 거리”를 비교하는 조건을 추가합니다.
- 타입: 비교
- 변수: “측정 거리”
- 연산자: >= (크거나 같다)
- 값: 100
[동작] 부저음을 중지한다.
부저음을 중지하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: 수동부저
- 명령: STOP
대시보드
대시보드를 추가합니다.
측정된 거리를 표시하기 위한 읽기 위젯을 추가합니다.
- 구분: 읽기
- 변수: “측정 거리”
- 타입: 텍스트
- 단위: cm
실행
버튼을 눌러서 RUN모드로 진입합니다.