목표
DC모터와 온도센서를 이용하여, 온도에 따라 팬의 속도를 연속적으로 조절하는 자동 선풍기를 구현합니다. 온도가 25 ~ 35도 범위일 때 DC모터의 속도는 0 ~ 100%의 범위로 연속적으로 변경됩니다.
측정된 온도와 DC모터의 속도는 대시보드의 위젯에 게이지로 표시합니다.
하드웨어
부품
부품 | 갯수 |
---|---|
5V 소형 DC모터 (팬모터) | 1 |
모터 드라이버 (L298N) | 1 |
온습도 센서 (DHT11) | 1 |
연결
아래의 핀을 가로 방향으로 서로 연결해줍니다.
DC모터 | L298N | DC 5V 파워 | DHT11 | GPIO |
---|---|---|---|---|
+ | OUT1 | | | |
– | OUT2 | | | |
| ENA ¹ | | | 16 |
| IN1 ¹ | | | 20 |
| IN2 ¹ | | | 21 |
| 5V | + | | |
| GND | – | | GND |
| | | VCC ² | 3.3V |
| | | Data ¹ | 15 |
| | | GND | GND |
¹ 임의의 GPIO핀에 연결할 수 있습니다.
² 반드시 3.3V에 연결해야 합니다. 5V에 연결시 라즈베리파이가 손상될 수 있습니다.
I/O장치
DC모터와 온습도 센서를 I/O장치에 추가합니다.
변수
센서로 부터 읽어온 온도 및 계산된 DC모터 속도를 저장할 변수를 추가합니다.
- “온도” (숫자)
- “모터 속도” (숫자)
로직
항상 DHT11 센서로 부터 온도를 읽어옵니다. 온도가 25~35도 범위일 때 DC모터의 속도를 0~100%의 범위로 계산하고 해당 속도로 DC모터를 회전합니다. DHT11은 저성능 센서로 다시 측정하는데 최소 1초의 간격이 필요하므로 1초를 대기합니다.
이를 알고리즘 블록으로 나타내면 아래와 같습니다.
[로직]
로직을 추가합니다. 실행주기는 기본값으로 설정합니다.
[제어]
제어를 추가합니다. 모든 설정은 기본값을 사용합니다.
[조건] 항상
항상 만족하는 조건을 추가합니다.
- 타입: 항상유효
[동작] 온습도센서에서 온도를 읽어온다
센서에서 온도를 읽어서 “온도” 변수에 저장하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: 온습도센서
- 명령: READ_DATA
- 값
- 온도: “온도” 변수 선택
[동작] 온도가 25~35도 범위일 때 DC모터의 속도를 0~100%의 범위로 계산
스케일 (선형변환) 블록을 이용하여 온도에 따라 DC모터의 속도를 계산하여 “모터 속도” 변수에 저장합니다.
- 타입: 사용자 입력
- 값: 그림 참고
[동작] 계산된 속도로 DC모터 회전
계산된 속도로 DC모터를 회전하는 동작을 추가합니다.
- 타입: I/O장치
- 장치선택: DC모터
- 명령: RUN
- 값
- 회전방향: true
- 회전속도: “모터 속도”의 값 (블록)
[동작] 1초를 기다린다
동작을 추가합니다.
- 타입: 시간지연
- 값: 0시간 0분 1초 0밀리초
대시보드
대시보드를 추가합니다.
읽기 위젯을 추가합니다.
- 변수: “온도”
- 타입: 게이지
- 단위: ℃
- 변수: “모터 속도”
- 타입: 게이지
- 단위: %
실행
버튼을 눌러서 RUN모드로 진입합니다.