[kr] Korean translation for lesson 3 sensors-and-actuators of 1-getting-started file (#410)
* Create README.kr.md fisrtcommit * translate kr * Update README.kr.md modify image address * Translation_kr create assignment.kr.md * Create pi-actuator.kr.md [create] pi-actuator.kr.md * Create pi-sensor.kr.md [create] Korean Translation of pi-sensor * Update pi-actuator.kr.md * Update pi-sensor.kr.md * Update README.kr.md fix README.KR.md * Update README.kr.md Review-based modifications * Update assignment.kr.md Review-based modifications * Create single-board-computer-mqtt.kr.md This file is translated to Koreandependabot/npm_and_yarn/quiz-app/minimatch-3.1.2
parent
dcb79fe9ad
commit
a4a10ed283
@ -0,0 +1,222 @@
|
||||
# 센서 및 액추에이터(actuator)를 통한 물리적 환경과의 상호작용
|
||||
|
||||
![A sketchnote overview of this lesson](../../../../sketchnotes/lesson-3.jpg)
|
||||
|
||||
> [Nitya Narasimhan](https://github.com/nitya) 의 스케치노트입니다. 이미지를 클릭하여 크게 보세요.
|
||||
|
||||
이 수업은 [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) 에서 [Hello IoT series](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) 시리즈의 일부로 제공되었습니다. . 수업은 2개의 비디오로 진행되었습니다. 1시간의 수업과 1시간의 추가 공부 시간을 통해 수업의 내용을 더 깊이 파고들어 질문에 답하고자 합니다.
|
||||
|
||||
[![Lesson 3: Interact with the Physical World with Sensors and Actuators](https://img.youtube.com/vi/Lqalu1v6aF4/0.jpg)](https://youtu.be/Lqalu1v6aF4)
|
||||
|
||||
[![Lesson 3: Interact with the Physical World with Sensors and Actuators - Office hours](https://img.youtube.com/vi/qR3ekcMlLWA/0.jpg)](https://youtu.be/qR3ekcMlLWA)
|
||||
|
||||
> 🎥 동영상을 보려면 위의 이미지를 클릭하세요
|
||||
|
||||
## 강의 전 퀴즈
|
||||
|
||||
[강의 전 퀴즈](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/5)
|
||||
|
||||
## 소개
|
||||
|
||||
이 수업은 IoT 장치를 위한 두 가지 중요한 개념인 센서와 액추에이터를 소개한다. 당신은 또한 IoT 프로젝트에 광센서를 추가하고, 조도에 의해 제어되는 LED를 추가하여, 효과적으로 야간 조명을 구축할 수 있습니다.
|
||||
|
||||
이 수업에서는 다음을 다룹니다:
|
||||
|
||||
* [센서란 무엇인가](#센서란-무엇인가)
|
||||
* [센서를 사용해보자](#센서를-사용해보자)
|
||||
* [센서의 종류](#센서의-종류)
|
||||
* [액추에이터란 무엇인가](#액추에이터란-무엇인가)
|
||||
* [액추에이터를 사용해보자](#액추에이터를-사용해보자)
|
||||
* [액추에이터의 종류](#액추에이터의-종류)
|
||||
|
||||
|
||||
## 센서란 무엇인가
|
||||
|
||||
센서는 물리적 세계를 감지하는 하드웨어 장치입니다. 즉, 센서는 주변의 하나 이상의 속성을 측정하고 정보를 IoT 장치로 보냅니다. 센서는 대기 온도와 같은 자연적 특성부터 움직임과 같은 물리적 상호 작용까지, 측정할 수 있는 것이 매우 많아 방대한 범위의 장치를 포괄합니다.
|
||||
|
||||
일반적인 센서에는 다음이 포함됩니다.
|
||||
|
||||
- 온도 센서 - 공기 온도 또는 물에 담그는 곳의 온도를 감지합니다. 애호가들과 개발자들에게, 이것들은 종종 단일 센서에서 기압과 습도와 결합됩니다.
|
||||
- 버튼 - 버튼을 눌렀을 때 신호가 감지됩니다.
|
||||
- 광센서 - 광도를 감지하고 특정 색상, 자외선, 적외선 또는 일반적인 가시광선일 수 있습니다.
|
||||
- 카메라 - 사진을 찍거나 비디오를 스트리밍함으로써 세계의 시각적 표현을 감지합니다.
|
||||
- 가속도계 - 여러 방향으로의 움직임을 감지합니다.
|
||||
- 마이크 - 일반적인 소리 수준 또는 방향성 소리를 감지합니다.
|
||||
|
||||
✅ 생각해봅시다. 여러분의 휴대전화에는 어떤 센서가 있나요?
|
||||
|
||||
모든 센서는 감지하는 모든 것을 IoT 장치로 해석할 수 있는 전기 신호로 변환한다는 한 가지 공통점이 있습니다. 이 전기 신호가 어떻게 해석되는지는 IoT 장치와 통신하는 데 사용되는 통신 프로토콜뿐만 아니라 센서에 따라 다릅니다.
|
||||
|
||||
## 센서를 사용해보자
|
||||
|
||||
아래의 관련 안내에 따라 IoT 장치에 센서를 추가하십시오.
|
||||
|
||||
* [아두이노 - Wio Terminal](wio-terminal-sensor.md)
|
||||
* [싱글보드 컴퓨터 - Raspberry Pi](pi-sensor.md)
|
||||
* [싱글보드 컴퓨터 - 가상기기](virtual-device-sensor.md)
|
||||
|
||||
## 센서의 종류
|
||||
|
||||
센서는 아날로그 센서와 디지털 센서가 있습니다.
|
||||
|
||||
### 아날로그 센서
|
||||
|
||||
가장 기본적인 센서 중 하나는 아날로그 센서입니다. 이러한 센서는 IoT 장치로부터 전압을 공급받고, 센서 컴포넌트가 전압을 조정하며, 센서로부터 반환되는 전압을 측정하여 센서 값을 제공합니다.
|
||||
|
||||
> 🎓전압은 배터리의 +극에서 -극 으로 전기를 이동시키기 위해 한 장소에서 다른 장소로 얼마나 밀리는지를 측정하는 것입니다. 예를 들어, 표준 AA 배터리는 1.5V(V는 볼트 기호)이며, 양극 단자에서 음극 단자로 1.5V의 힘으로 전기를 밀어낼 수 있다. 다른 전기 하드웨어가 작동하려면 다른 전압이 필요합니다. 예를 들어 LED 캔은 2~3V 사이에서 켜지지만 100W 필라멘트 전구는 240V가 필요합니다. 전압에 대한 자세한 내용은 [Wikipedia 에서 Voltage 검색](https://wikipedia.org/wiki/Voltage) 시 확인 가능합니다.
|
||||
|
||||
이것의 한 예는 Potentiometer (포텐셔미터)입니다. 이것은 두 위치 사이에서 회전할 수 있고 센서가 회전을 측정하는 다이얼입니다.
|
||||
|
||||
![중간 지점에 설정된 potentiometer가 5V를 전송하여 3.8V를 반환합니다.]
|
||||
(../../../images/potentiometer.png)
|
||||
|
||||
IoT 장치는 포텐셔미터에 5V와 같은 전압으로 전기 신호를 보냅니다. 포텐셔미터가 조정되면 반대쪽에서 나오는 전압이 바뀝니다. 앰프의 볼륨 조정기와 같이 0에서 [11](https://wikipedia.org/wiki/Up_to_eleven)로 이동하는 다이얼로 표시된 포텐셔미터가 있다고 가정해 봅시다. 포텐셔미터가 완전히 꺼진 위치(0)에 있으면 0V(0V)가 나옵니다. 최대 ON 위치(11)에 있으면 5V(5V)가 나옵니다.
|
||||
|
||||
> 🎓 이것은 지나치게 단순화된 것이며, [Wikipedia에서 potentiometer 검색 시](https://wikipedia.org/wiki/Potentiometer) 포텐셔미터 및 가변 저항기에 대해 더 많은 정보를 얻을 수 있습니다..
|
||||
|
||||
센서에서 나오는 전압은 IoT 장치에 의해 읽혀지고, 그 장치는 그것에 반응할 수 있습니다. 센서에 따라 이 전압은 임의 값이거나 표준 장치에 매핑될 수 있습니다. 예를 들어, [서미스터](https://wikipedia.org/wiki/Thermistor) 에 기반한 아날로그 온도 센서는 온도에 따라 저항이 변화합니다. 출력 전압은 코드 계산을 통해 켈빈 단위로, 그에 따라 °C 또는 °F 단위로 변환될 수 있습니다.
|
||||
|
||||
✅ 센서가 전송된 전압보다 높은 전압을 반환할 경우(예: 외부 전원 공급 장치에서 나오는 전압) 어떻게 된다고 생각하십니까?
|
||||
⛔️ 호기심에 실험 해 보진 마십시오.
|
||||
|
||||
#### 아날로그에서 디지털로의 변환
|
||||
|
||||
IoT는 디지털 장치입니다. 아날로그 값으로는 작동할 수 없고 0과 1에서만 작동합니다. 즉, 아날로그 센서 값을 처리하기 전에 디지털 신호로 변환해야 합니다. 많은 IoT 장치들은 아날로그 입력을 디지털 값 표현으로 변환하는 아날로그-디지털 변환기(ADC)를 가지고 있습니다. 센서는 커넥터 보드를 통해 ADC와 함께 작동할 수도 있습니다. 예를 들어, Raspberry Pi가 있는 seeed Grove ecosystem에서 아날로그 센서는 Pi에 있는 'hat'의 특정 포트에 연결됩니다. 이 포트는 Pi의 GPIO 핀에 연결되어 있습니다. 또한 이 “hat”은 전압을 파이의 GPIO 핀에서 보낼 수 있는 디지털 신호로 변환하기 위한 ADC가 있습니다.
|
||||
|
||||
3.3V를 사용하고 1V의 값을 반환하는 IoT 장치에 연결된 아날로그 광 센서가 있다고 가정 해 봅시다. 이 1V는 디지털 세계에서 아무런 의미가 없기 때문에 변환이 필요합니다. 전압은 장치와 센서에 따라 스케일을 사용하여 아날로그 값으로 변환됩니다. 한 가지 예는 0에서 1,023까지의 값을 출력하는 씨드 그로브 광 센서입니다. 3.3V에서 작동하는 이 센서의 경우 1V 출력은 300입니다. IoT 기기는 300을 아날로그 값으로 처리할 수 없기 때문에 300을 Grove hat로 이진법으로 표현한 `0000000100101100`으로 변환됩니다. 그러면 이것은 IoT 장치에 의해 처리될 것 입니다.
|
||||
|
||||
✅ 2진법을 모르면 숫자가 0과 1로 어떻게 표현되는지 알아보기 위해 약간의 공부를 추천합니다. [BBC Bitesize introduction to binary lesson](https://www.bbc.co.uk/bitesize/guides/zwsbwmn/revision/1)는 이진법을 공부하기 좋은 곳입니다.
|
||||
|
||||
코딩의 관점에서 볼 때, 이 모든 것은 보통 센서와 함께 제공되는 라이브러리에 의해 처리되므로, 당신은 이 변환에 대해 스스로 걱정할 필요가 없습니다. Grove 광센서의 경우 파이썬 라이브러리를 사용하여 `light (빛)` 속성을 호출하거나 아두이노 라이브러리를 사용하여 `analogRead` 를 호출하여 300의 값을 얻을 수 있습니다.
|
||||
|
||||
### 디지털 센서
|
||||
|
||||
아날로그 센서와 같은 디지털 센서는 전압의 변화를 이용하여 주변 세계를 감지합니다. 차이점은 두 개의 상태만 측정하거나 내장된 ADC를 사용하여 디지털 신호를 출력한다는 것입니다. 디지털 센서는 커넥터 보드 또는 IoT 장치 자체에서 ADC를 사용할 필요성을 피하기 위해 점점 더 보편화되고 있습니다.
|
||||
|
||||
가장 간단한 디지털 센서는 버튼 또는 스위치입니다. 이것은 켜지거나 꺼지는 두 가지 상태의 센서입니다.
|
||||
|
||||
![버튼은 5V로 전송됩니다. 이 스위치를 누르지 않으면 0V가 반환되고, 누르면 5V가 반환됩니다](../../../../images/button.png)
|
||||
|
||||
GPIO 핀과 같은 IoT 장치의 핀은 이 신호를 직접 0 또는 1로 측정할 수 있습니다. 전송된 전압이 반환된 전압과 같으면 판독값이 1이고, 그렇지 않으면 판독값이 0입니다. 신호를 변환할 필요가 없습니다. 1 또는 0만 가능합니다.
|
||||
|
||||
> 💁 전압은 절대 정확하지 않습니다. 특히 센서의 구성 요소에는 약간의 저항이 있기 때문에 일반적으로 공차가 있습니다. 예를 들어, 라즈베리 파이 상의 GPIO 핀은 3.3V에서 작동하며 1.8V 이상은 1로, 1.8V는 0으로 읽습니다.
|
||||
|
||||
* 3.3V가 버튼에 들어갑니다. 버튼이 꺼져 있으므로 0V가 나오고 값이 0입니다.
|
||||
* 3.3V가 버튼에 들어갑니다. 버튼은 3번으로 되어 있어요.3V가 나오고 값이 1입니다.
|
||||
|
||||
더 발전된 디지털 센서는 아날로그 값을 판독한 다음, 온보드 ADC를 사용하여 디지털 신호로 변환합니다. 예를 들어, 디지털 온도 센서는 아날로그 센서와 동일한 방식으로 열전대를 사용하며, 현재 온도에서 열전대의 저항으로 인한 전압 변화를 계속 측정합니다. 아날로그 값을 반환하고 장치나 커넥터 보드에 의존해 디지털 신호로 변환하는 대신 센서에 내장된 ADC가 값을 변환해 IoT 장치에 0과 1의 직렬로 전송합니다. 이러한 0과 1은 1이 최대 전압이고 0이 0v인 버튼에 대한 디지털 신호와 동일한 방식으로 전송됩니다.
|
||||
|
||||
![IoT 장치로 전송하기 전에 아날로그 판독값을 0V, 1V를 5V로 하는 이진 데이터로 변환하는 디지털 온도 센서](../../../../images/temperature-as-digital.png)
|
||||
|
||||
디지털 데이터를 전송하면 센서가 더욱 복잡해지고 더 자세한 데이터, 심지어 보안 센서를 위해 암호화된 데이터까지 전송할 수 있습니다. 카메라를 생각해봅시다. 카메라는 이미지를 캡처하여 IoT 장치에서 읽을 수 있도록 보통 JPEG와 같은 압축 형식으로 해당 이미지를 전송합니다. 이미지를 캡처하고 전체 이미지 프레임을 프레임별로 전송하거나 압축된 비디오 스트림을 전송하여 비디오를 스트리밍할 수도 있습니다.
|
||||
|
||||
## 액추에이터란 무엇인가
|
||||
|
||||
액추에이터는 센서의 반대입니다. IoT 장치에서 나오는 전기 신호를 빛이나 소리를 방출하거나 모터를 움직이는 것과 같은 물리적 세계와의 상호 작용으로 변환합니다.
|
||||
|
||||
일반적인 액추에이터에는 다음이 포함됩니다 :
|
||||
|
||||
* LED - 켜지면 빛이 방출됩니다.
|
||||
* 스피커 - 기본 부저에서 음악을 재생할 수 있는 오디오 스피커로 전송된 신호에 따라 소리를 냅니다.
|
||||
* 스테퍼 모터 - 신호를 다이얼 90° 회전과 같이 정의된 회전량으로 변환합니다.
|
||||
* 릴레이 - 전기 신호에 의해 켜지거나 끌 수 있는 스위치입니다. 그것들은 IoT 장치의 작은 전압이 큰 전압을 켜도록 합니다.
|
||||
* 화면 - 보다 복잡한 액추에이터로 멀티 세그먼트 디스플레이에 정보를 표시합니다. 화면은 단순한 LED 디스플레이부터 고해상도 비디오 모니터까지 다양합니다.
|
||||
|
||||
✅ 생각해봅시다. 당신의 휴대전화에는 어떤 액추에이터가 있습니까?
|
||||
|
||||
## 액추에이터를 사용해보자
|
||||
|
||||
아래의 관련 안내에 따라 센서에 의해 제어되는 IoT 장치에 작동기를 추가하여 IoT 야간 조명을 만드십시오. 광센서로부터 광도를 모으고, 검출된 광도가 너무 낮을 때 발광하기 위해 LED 형태의 액추에이터를 사용합니다.
|
||||
|
||||
![조명 값을 읽어오고 확인 후 LED 제어 시작을 보여주는 할당 흐름도](../../../../images/assignment-1-flow.png)
|
||||
|
||||
* [아두이노 - 위오 터미널](wio-terminal-actuator.md)
|
||||
* [싱글 보드 컴퓨터 - 라즈베리 파이](pi-actuator.md)
|
||||
* [싱글 보드 컴퓨터 - 가상 ](virtual-device-actuator.md)
|
||||
|
||||
## 액추에이터의 종류
|
||||
|
||||
센서와 마찬가지로 액추에이터도 아날로그 또는 디지털입니다.
|
||||
|
||||
### 아날로그 액추에이터(actuator)
|
||||
|
||||
아날로그 액추에이터는 아날로그 신호를 받아 일종의 상호 작용으로 변환하며, 상호 작용은 공급되는 전압에 따라 변화합니다.
|
||||
|
||||
한 가지 예는 여러분이 집에 가지고 있을 수 있는 것과 같은 희미한 불빛입니다. 조명에 공급되는 전압의 양에 따라 조명의 밝기가 결정됩니다.
|
||||
|
||||
![낮은 전압에서는 희미해지고 높은 전압에서는 밝아지는 조명](../../../../images/dimmable-light.png)
|
||||
|
||||
센서와 마찬가지로 실제 IoT 장치는 아날로그가 아닌 디지털 신호에서 작동합니다. 즉, 아날로그 신호를 보내려면 IoT 장치가 직접 IoT 장치 또는 커넥터 보드에 디지털-아날로그 변환기(DAC)가 필요합니다. 그러면 IoT 장치의 0과 1이 액추에이터가 사용할 수 있는 아날로그 전압으로 변환됩니다.
|
||||
|
||||
✅ IoT 장치가 액추에이터가 처리할 수 있는 것보다 높은 전압을 전송하면 어떻게 된다고 생각하십니까?
|
||||
⛔️ 실험 해 보진 마십시오.
|
||||
|
||||
### 펄스 폭 변조 (Pulse-Width Modulation)
|
||||
|
||||
IoT 장치에서 아날로그 신호로 디지털 신호를 변환하는 또 다른 옵션은 펄스 폭 변조입니다. 이것은 마치 아날로그 신호인 것처럼 작동하는 많은 짧은 디지털 펄스를 보내는 것을 포함합니다.
|
||||
|
||||
예를 들어 PWM을 사용하여 모터의 속도를 제어할 수 있습니다.
|
||||
|
||||
5V 전원으로 모터를 제어한다고 가정해 보십시오. 모터에 짧은 펄스를 전송하여 전압을 200분의 2초(0.02초) 동안 High(5V)로 전환합니다. 그 시간 동안 당신의 모터는 10분의 1 또는 36° 회전할 수 있습니다. 그런 다음 신호가 200분의 2초(0.02초) 동안 일시 중지되어 낮은 신호(0V)를 전송합니다. 각 ON/OFF 사이클은 0.04초 동안 지속됩니다. 그런 다음 주기가 반복됩니다.
|
||||
|
||||
![150rpm에서 모터의 PULE 폭 변조 회전](../../../../images/pwm-motor-150rpm.png)
|
||||
|
||||
즉, 1초 동안 모터를 회전시키는 0.02초의 255V 펄스가 있고, 그 후 모터를 회전하지 않는 0.02초의 0.02초의 일시 중지 상태가 있음을 의미합니다. 각 펄스는 모터를 회전의 10분의 1로 회전시킵니다. 즉, 모터가 초당 2.5회전을 완료한다는 의미입니다. 디지털 신호를 사용하여 모터를 초당 2.5회전 또는 [분당 150회](https://wikipedia.org/wiki/Revolutions_per_minute) (비표준 회전 속도 측정)으로 회전했습니다.
|
||||
|
||||
```output
|
||||
초당 25펄스 x 펄스당 0.1회전 = 초당 2.5회전
|
||||
초당 2.5회전 x 1분에 60초 = 150rpm
|
||||
```
|
||||
|
||||
> 🎓 PWM 신호가 절반 동안 켜져 있고 절반 동안 꺼져 있는 경우를 [50% duty cycle](https://wikipedia.org/wiki/Duty_cycle) 이라고 합니다. 듀티 사이클은 신호가 꺼진 상태와 비교하여 켜진 상태에 있는 시간의 백분율로 측정됩니다.
|
||||
|
||||
|
||||
![75rpm에서 모터의 PULE 폭 변조 회전](../../../../images/pwm-motor-75rpm.png)
|
||||
|
||||
펄스 크기를 변경하여 모터 속도를 변경할 수 있습니다. 예를 들어, 동일한 모터를 사용하여 0.04초의 동일한 사이클 시간을 유지할 수 있으며, 온 펄스는 0.01초로 절반으로, 오프 펄스는 0.03초로 증가할 수 있습니다. 초당 펄스 수(25)는 동일하지만 각 펄스의 길이는 절반입니다. 1/2 길이의 펄스는 모터를 20분의 1 회전만 돌리게 하며, 25펄스에서는 초당 1.25회전을 완료하거나 75rpm으로 회전합니다. 디지털 신호의 펄스 속도를 변경함으로써 아날로그 모터 속도를 절반으로 줄였습니다.
|
||||
|
||||
```output
|
||||
초당 25펄스 x 펄스당 0.05회전 = 초당 1.25회전
|
||||
초당 1.25회 회전 x 1분 동안 60초 = 75rpm
|
||||
```
|
||||
|
||||
✅ 특히 저속 주행 시 모터 회전을 원활하게 유지하려면 어떻게 해야 합니까? 긴 일시 중지를 사용하는 긴 펄스 수를 사용할 것입니까, 아니면 매우 짧은 일시 중지를 사용하는 짧은 펄스 수를 사용할 것입니까?
|
||||
|
||||
> 💁 일부 센서는 PWM을 사용하여 아날로그 신호를 디지털 신호로 변환하기도 합니다.
|
||||
|
||||
> 🎓 [Wikipedia에서 펄스 폭 변조 검색](https://wikipedia.org/wiki/Pulse-width_modulation) 시 자세한 정보를 얻을 수 있습니다.
|
||||
|
||||
### 디지털 액추에이터(actuator)
|
||||
|
||||
디지털 센서와 같은 디지털 액추에이터는 고전압 또는 저전압에 의해 제어되는 두 가지 상태를 가지고 있거나 디지털 신호를 아날로그 신호로 변환할 수 있도록 DAC가 내장되어 있습니다.
|
||||
|
||||
하나의 간단한 디지털 작동기는 LED입니다. 장치가 1의 디지털 신호를 보내면 LED를 켜는 고전압이 전송됩니다. 0의 디지털 신호가 전송되면 전압이 0V로 떨어지고 LED가 꺼집니다.
|
||||
|
||||
![LED는 0V에서 꺼지고 5V에서 켜집니다.](../../../../images/led.png)
|
||||
|
||||
✅ 다른 간단한 2-state 액추에이터는 무엇입니까? 한 예로 솔레노이드가 있는데, 이는 도어 볼트를 움직이기 위해 작동하거나 도어를 잠금/잠금 해제하는 등의 작업을 수행할 수 있는 전자석입니다.
|
||||
|
||||
화면과 같은 더 발전된 디지털 작동기는 디지털 데이터가 특정 형식으로 전송되어야 합니다. 그들은 보통 그들을 제어하기 위해 정확한 데이터를 더 쉽게 보낼 수 있는 라이브러리와 함께 제공됩니다.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 도전
|
||||
|
||||
이전 두 강의의 과제는 가정, 학교 또는 직장에 있는 가능한 한 많은 IoT 장치를 나열하고 그것들이 마이크로컨트롤러 또는 단일 보드 컴퓨터 또는 심지어 둘의 혼합으로 구축되었는지 결정하는 것이었습니다.
|
||||
|
||||
생각해 낸 모든 장치들은 어떤 센서와 액추에이터에 연결되어 있습니까? 이러한 장치에 연결된 각 센서와 액추에이터의 용도는 무엇입니까?
|
||||
|
||||
|
||||
## 복습 퀴즈
|
||||
|
||||
[복습 퀴즈](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/6)
|
||||
|
||||
## 리뷰 & 추가 개별학습
|
||||
|
||||
* 전기 및 회로에 대한 정보를 읽어보세요 [ThingLearn](http://thinglearn.jenlooper.com/curriculum/).
|
||||
* 다양한 유형의 온도 센서에 대한 자세한 내용은 [Seeed Studios Temperature Sensors guide](https://www.seeedstudio.com/blog/2019/10/14/temperature-sensors-for-arduino-projects/) 를 참조하세요
|
||||
* LED에 관한 내용은 [Wikipedia LED page](https://wikipedia.org/wiki/Light-emitting_diode) 에서 확인하세요
|
||||
|
||||
## 과제
|
||||
|
||||
[센서와 액추에이터에 대하여 알아보자](assignment.md)
|
@ -0,0 +1,17 @@
|
||||
# 센서와 액추에이터에 대하여 알아보자
|
||||
|
||||
## 소개
|
||||
|
||||
이 수업에서는 센서와 액추에이터에 대해 설명했습니다. IoT 개발 키트와 함께 사용할 수 있는 센서 하나와 액추에이터 하나를 알아봅시다. 여기에는 다음이 포함됩니다.
|
||||
|
||||
* 무슨 일을 하나요?
|
||||
* 사용되는 전자 장치/하드웨어는 무엇이 있나요?
|
||||
* 아날로그 장치인가요 디지털장치인가요?
|
||||
* 입력 또는 측정의 단위 및 범위는 무엇입니까?
|
||||
|
||||
## 평가기준(Rubric)
|
||||
|
||||
| 기준 | 모범 답안 | 적절함 | 개선이 필요함 |
|
||||
| -------- | --------- | -------- | ----------------- |
|
||||
| 센서 설명 | 위에 나열된 4개 섹션에 대한 세부 정보를 포함하여 센서에 대해 설명합니다. | 센서에 대해 설명했지만 위의 섹션 중 2-3개만 제공할 수 있었습니다. | 센서에 대해 설명했지만 위의 섹션 중 1개만 제공할 수 있었습니다. |
|
||||
| 액추에이터 설명 | 위에 나열된 4개 섹션에 대한 세부 정보를 포함하여 액추에이터에 대해 설명합니다. | 액추에이터에 대해 설명했지만 위의 섹션 중 2-3개만 제공할 수 있었습니다. | 액추에이터에 대해 설명했지만 위의 섹션 중 1개만 제공할 수 있었습니다. |
|
@ -0,0 +1,116 @@
|
||||
# 야간 조명 만들기 - 라즈베리 파이
|
||||
|
||||
라즈베리 파이에 LED를 추가하여 야간 조명을 만들어봅시다.
|
||||
|
||||
## 하드웨어
|
||||
|
||||
이 야간 조명에는 액추에이터가 필요합니다.
|
||||
|
||||
사용되는 액추에이터는 **LED**로, 전류가 흐를 때 빛을 방출하는 [발광 다이오드](https://wikipedia.org/wiki/Light-emitting_diode) 입니다. LED는 on /off 두 가지 상태를 가진 디지털 액추에이터입니다. 1을 값으로 전송하면 LED가 켜지고 0을 전송하면 꺼집니다. LED는 외부 Grove 액추에이터이며 라즈베리 파이의 Grove Base Hat에 연결해야 합니다
|
||||
|
||||
의사 코드에서 야간 조명의 로직은 다음과 같습니다.:
|
||||
|
||||
```output
|
||||
탐지되는 빛의 정도(level)를 확인합니다
|
||||
빛의 정도가 300 미만일 경우
|
||||
LED를 켭니다
|
||||
그렇지 않을 경우
|
||||
LED를 끕니다
|
||||
```
|
||||
|
||||
### LED 연결하기
|
||||
|
||||
Grove LED는 다양한 LED가 포함된 모듈로 제공되므로 색상을 선택할 수 있습니다.
|
||||
|
||||
#### 할 일 - LED 연결
|
||||
|
||||
LED에 연결 해 봅시다.
|
||||
|
||||
![grove LED](../../../../images/grove-led.png)
|
||||
|
||||
1. 좋아하는 LED를 선택하고 LED 모듈의 두 구멍에 다리를 삽입합니다.
|
||||
|
||||
LED는 발광 다이오드이며, 다이오드는 전류를 한 방향으로만 전달할 수 있는 전자 장치입니다. 즉, LED를 올바른 방향으로 연결해야 합니다. 그렇지 않으면 작동하지 않습니다.
|
||||
|
||||
LED 다리 중 하나는 양극 핀이고 다른 하나는 음극 핀입니다. LED는 완벽하게 둥글지 않고 한쪽이 약간 평평합니다. 약간 평평한 면이 음극 핀입니다. LED를 모듈에 연결할 때 둥근 쪽의 핀이 모듈 외부에 +로 표시된 소켓에 연결되고 평평한 쪽이 모듈 중앙에 더 가까운 소켓에 연결되었는지 확인하십시오.
|
||||
|
||||
1. LED 모듈에는 밝기를 제어할 수 있는 회전 버튼이 있습니다. 작은 십자 드라이버를 사용하여 시계 반대 방향으로 끝까지 돌립니다.
|
||||
|
||||
1. Grove 케이블의 한쪽 끝을 LED 모듈의 소켓에 삽입합니다. 이는 한 방향으로만 돌아갈 것 입니다.
|
||||
|
||||
1. Rasberry Pi 전원을 끈 상태에서 Grove 케이블의 다른 쪽 끝을 Pi에 부착된 Grove Base 모자에 D5로 표시된 디지털 소켓에 연결합니다. 이 소켓은 왼쪽에서 두 번째, GPIO 핀 옆에 있는 소켓 줄입니다.
|
||||
|
||||
![소켓 D5에 연결된 Grove LED](../../../../images/pi-led.png)
|
||||
|
||||
## 야간 조명을 프로그래밍 해봅시다
|
||||
|
||||
Grove 조명 센서와 Grove LED를 사용하여 야간 조명 프로그래밍을 진행할 수 있습니다.
|
||||
|
||||
### 할 일 - 야간 조명 동작에 대한 프로그래밍을 해 봅시다.
|
||||
|
||||
야간 조명에 대한 프로그래밍을 합니다.
|
||||
|
||||
1. 라즈베리 파이 전원을 켜고 부팅될 때 까지 기다립니다.
|
||||
|
||||
1. 이 할당의 이전 부분에서 만든 VS Code에서 야간 조명 프로젝트를 Pi에서 직접 실행하거나 원격 SSH 확장을 사용하여 연결합니다.
|
||||
|
||||
1. 필요한 라이브러리를 가져오려면 아래 코드를 `app.py` 파일에 추가하십시오. 이는 다른`import` 줄 바로 아래 추가되어야 합니다..
|
||||
|
||||
```python
|
||||
from grove.grove_led import GroveLed
|
||||
```
|
||||
|
||||
`from grove.grove_led import GroveLed` 문은 Grove Python 라이브러리에서 `GroveLed` 를 import 한다. 이 라이브러리에는 Grove LED와 상호 작용하는 코드가 있습니다.
|
||||
|
||||
1. `light_sensor` 선언 뒤에 다음 코드를 추가하여 LED를 관리하는 클래스의 인스턴스를 만듭니다.
|
||||
|
||||
```python
|
||||
led = GroveLed(5)
|
||||
```
|
||||
|
||||
`led = GroveLed(5)` 코드는 핀 **D5**(LED가 연결된 디지털 Grove 핀)에 연결하는 `GroveLed` 클래스의 인스턴스를 생성합니다.
|
||||
|
||||
> 💁 모든 소켓에 고유한 핀 번호가 있습니다. 핀 0, 2, 4, 6은 아날로그 핀이고 핀 5, 16, 18, 22, 24 및 26은 디지털 핀입니다.
|
||||
|
||||
1. `while` 루프 내부에 확인용 변수를 추가합니다, `time.sleep` 전에 조명 레벨을 확인하고 LED를 켜거나 끌 수 있습니다.
|
||||
|
||||
```python
|
||||
if light < 300:
|
||||
led.on()
|
||||
else:
|
||||
led.off()
|
||||
```
|
||||
|
||||
이 코드는 감지되는 `빛` 의값을 확인합니다. 이 값이 300 미만인 경우 `GroveLed` 클래스의 `on` 메서드를 호출하여 LED에 디지털 값 1을 전송하고 LED를 켭니다. 조명 값이 300보다 크거나 같으면 꺼짐 방법을 호출하여 디지털 값 0을 LED로 전송하고 LED를 끕니다.
|
||||
|
||||
> 💁 이 코드는 `print('Light level:', light)` 라인과 동일한 레벨로 들여써야 하며, while 루프 안에 있어야 합니다!
|
||||
|
||||
> 💁 액추에이터로 디지털 값을 전송할 때 0 값은 0V, 1 값은 장치의 최대 전압입니다. Grove 센서 및 액추에이터가 장착된 라즈베리 파이의 경우 1 전압은 3.3V입니다.
|
||||
|
||||
1. VS Code Terminal에서 다음을 실행하여 Python 앱을 실행합니다.:
|
||||
|
||||
```sh
|
||||
python3 app.py
|
||||
```
|
||||
|
||||
조명 값이 콘솔에 출력됩니다.
|
||||
|
||||
```output
|
||||
pi@raspberrypi:~/nightlight $ python3 app.py
|
||||
Light level: 634
|
||||
Light level: 634
|
||||
Light level: 634
|
||||
Light level: 230
|
||||
Light level: 104
|
||||
Light level: 290
|
||||
```
|
||||
|
||||
1. 조명 센서를 가려도 봅시다. 조명 레벨이 300 이하인 경우 LED가 어떻게 켜지고, 조명 레벨이 300 이상인 경우 LED가 꺼지는지 확인합니다.
|
||||
|
||||
> 💁 LED가 동작하지 않는다면 제대로 연결 되어있는지 확인하고 스핀 버튼이 완전히 켜져 있는지 확인 해 보세요
|
||||
|
||||
![Light Level 변화에 따라 Pi에 연결된 LED가 켜지고 꺼집니다.](../../../../images/pi-running-assignment-1-1.gif)
|
||||
|
||||
> 💁 [code-actuator/pi](code-actuator/pi) 폴더 안에서 이 코드를 찾을 수 있습니다..
|
||||
|
||||
😀 여러분이 만든 야간 조명 프로젝트는 성공적으로 동작합니다!
|
@ -0,0 +1,97 @@
|
||||
# 야간 조명 만들기 - 라즈베리 파이
|
||||
|
||||
이 강의에서 여러분의 라즈베리 파이에 광센서를 적용해봅시다
|
||||
|
||||
## 하드웨어
|
||||
|
||||
본 강의용 센서는 [광다이오드](https://wikipedia.org/wiki/Photodiode)를 사용하여 빛을 전기신호로 변환하는 **광센서** 입니다. 이는 [lux](https://wikipedia.org/wiki/Lux) 와 같은 표준 측정단위에 매핑되지 않는 0부터 1000까지의 빛의 상대적인 양을 나타내는 정수값을 보내는 아날로그 센서입니다.
|
||||
|
||||
광센서는 eternal Grove 센서이며 라즈베리 파이의 Grove base hat에 연결해야 합니다.
|
||||
|
||||
### 광센서와 연결해봅시다
|
||||
|
||||
광도를 감지하는데 사용되는 Grove 광센서는 라즈베리 파이에 연결해야 합니다.
|
||||
|
||||
#### 할 일 - 광센서와 연결 해 봅시다.
|
||||
|
||||
광센서와 연결해봅시다.
|
||||
|
||||
![Grove 광센서](../../../../images/grove-light-sensor.png)
|
||||
|
||||
1. Grove 케이블의 한쪽 끝을 광센서 모듈의 소켓에 삽입합니다. 그것은 한 방향으로만 돌아갈 것입니다.
|
||||
|
||||
1. Rasberry Pi 전원을 끈 상태에서 Grove 케이블의 다른 쪽 끝을 Pi에 부착된 Grove Base Hat의 **A0** 라고 표시된 아날로그 소켓에 연결합니다. 이 소켓은 오른쪽에서 두 번째, GPIO 핀 옆에 있는 소켓 열입니다.
|
||||
|
||||
![소켓 A0에 연결된 그로브 라이트 센서](../../../../images/pi-light-sensor.png)
|
||||
|
||||
## 광센서를 프로그래밍 해 봅시다.
|
||||
|
||||
이제 Grove light 센서를 사용하여 장치를 프로그래밍할 수 있습니다.
|
||||
|
||||
### 할 일 - 광센서를 프로그래밍한다.
|
||||
|
||||
구현 해 봅시다.
|
||||
|
||||
1. 라즈베리 파이의 전원은 켜고 부팅 될 때까지 기다립니다.
|
||||
|
||||
1. 이 과제의 이전 부분에서 생성한 VS Code에서 야간 조명 프로젝트를 Pi에서 직접 실행하거나 원격 SSH 확장을 사용하여 연결합니다.
|
||||
|
||||
1. `app.py` 파일을 열고 이 파일의 모든 코드를 지웁니다.
|
||||
|
||||
1. 몇가지 라이브러리 파일을 요청하기 위해 `app.py` 파일에 아래 있는 코드를 추가합니다:
|
||||
|
||||
```python
|
||||
import time
|
||||
from grove.grove_light_sensor_v1_2 import GroveLightSensor
|
||||
```
|
||||
|
||||
`import time` 은 이 과제 이후에 사용될 `time` 모듈을 import 합니다.
|
||||
|
||||
`from grove.grove_light_sensor_v1_2 import GroveLightSensor` 는 Grove Python 라이브러리로부터 `GroveLightSensor` 를 import 합니다. 이 라이브러리는 Grove 광센서와 상호작용 할 수 있는 코드를 가지고 있으며 라즈베리 파이 설정 중에 전역으로 설치되었습니다.
|
||||
|
||||
1. 아래 코드를 위에서 작성한 코드 뒤에 추가하여 광센서를 관리하는 클래스의 인스턴스를 만듭니다.
|
||||
|
||||
```python
|
||||
light_sensor = GroveLightSensor(0)
|
||||
```
|
||||
|
||||
`light_sensor = GroveLightSensor(0)`는 핀 **A0**(광센서와 연결되어있는 아날로그 Grove 핀)와 연결되어있는 `GroveLightSensor` class의 인스턴스를 생성합니다.
|
||||
|
||||
|
||||
1. 위에서 작성한 코드 뒤에 무한 루프를 추가하여 광 센서 값을 측정하고 콘솔에 출력합니다 :
|
||||
|
||||
```python
|
||||
while True:
|
||||
light = light_sensor.light
|
||||
print('Light level:', light)
|
||||
```
|
||||
|
||||
이는 `GroveLightSensor` 클래스의 `light` 속성을 사용하여 0-1,023의 척도로 현재 빛의 밝기를 판독합니다. 이 속성은 핀에서 아날로그 값을 읽습니다. 이후 이 값이 콘솔에 출력됩니다.
|
||||
|
||||
1. 계속 밝기를 확인할 필요가 없으므로 `루프` 끝에 1초의 짧은 절전 시간을 추가한다. 절전 모드는 장치의 전력 소비를 줄여줍니다.
|
||||
|
||||
```python
|
||||
time.sleep(1)
|
||||
```
|
||||
|
||||
1. VS Code의 터미널에서 아래 코드로 Python 앱을 실행 해 봅시다..
|
||||
|
||||
```sh
|
||||
python3 app.py
|
||||
```
|
||||
|
||||
밝기 값이 콘솔에 출력될 것이다. 광센서를 손으로 가려도 보면서 값이 어떻게 변하는지 확인 해 봅시다 :
|
||||
|
||||
```output
|
||||
pi@raspberrypi:~/nightlight $ python3 app.py
|
||||
Light level: 634
|
||||
Light level: 634
|
||||
Light level: 634
|
||||
Light level: 230
|
||||
Light level: 104
|
||||
Light level: 290
|
||||
```
|
||||
|
||||
> 💁 [code-sensor/pi](code-sensor/pi) 폴더에서 이 코드를 찾을 수 있습니다.
|
||||
|
||||
😀 여러분의 야간 조명 프로그렘에 성공적으로 센서를 적용했습니다!
|
@ -0,0 +1,79 @@
|
||||
# 인터넷을 통해 야간 조명을 제어 해봅시다. - 가상 IoT와 Raspberry Pi
|
||||
|
||||
IoT 장치는 MQTT를 사용하여 *test.mosquitto.org*와 통신하도록 코딩됩니다. 이는 광센서 판독값과 함께 원격 측정값을 전송하고 LED를 제어하는 명령을 수신하기 위함입니다.
|
||||
|
||||
이 강의에서는 여러분의 Raspberry Pi나 가상 IoT 장치에 MQTT broker를 연결하고자 합니다.
|
||||
|
||||
## MQTT 사용자 패키지를 설치합니다.
|
||||
|
||||
MQTT broker와 통신하기 위해서, 여러분은 MQTT 라이브러리 pip 패키지를 Pi 혹은 사용하시는 가상환경에 설치합니다.
|
||||
|
||||
### 작업
|
||||
|
||||
pip 패키지를 설치합니다.
|
||||
|
||||
1. 야간조명 프로젝트를 VS code에서 열어줍니다.
|
||||
|
||||
1. 만약 여러분이 가상 IoT device를 사용하고 있다면 가상환경 터미널이 실행중인지 확인해주세요. 여러분이 Raspberry Pi를 사용하고 있다면 가상환경은 사용하지 않습니다.
|
||||
|
||||
1. 아래 코드를 실행하여 MQTT pip 패키지를 설치 해 주세요:
|
||||
|
||||
```sh
|
||||
pip3 install paho-mqtt
|
||||
```
|
||||
|
||||
## 코딩을 진행합니다.
|
||||
|
||||
이제 코딩을 진행할 준비가 되었습니다.
|
||||
|
||||
### 작업
|
||||
|
||||
코드를 작성 해 주세요
|
||||
|
||||
1. 아래 코드를 `app.py` 맨 위에 import합니다:
|
||||
|
||||
```python
|
||||
import paho.mqtt.client as mqtt
|
||||
```
|
||||
|
||||
`paho.mqtt.client` 라이브를 사용하여 MQTT와 통신할 수 있습니다.
|
||||
|
||||
1. 광센서 및 LED 정의 뒤에 아래 코드를 추가합니다.
|
||||
|
||||
```python
|
||||
id = '<ID>'
|
||||
|
||||
client_name = id + 'nightlight_client'
|
||||
```
|
||||
|
||||
`<ID>`를 고유 ID로 교체합니다. 이는 장치 사용자의 이름으로 사용 될 것이며 이후에 이 장치가 publish하고 subscribe하는 항목에 사용됩니다. *test.mosquitto.org*는 public 이며 이 과제를 수행하는 다른 학생들을 포함한 많은 사람들에게 사용됨니다. 고유한 MQTT 사용자 이름과 주제를 사용하면 다른 사용자와 충돌하지 않습니다. 이 ID는 이번 과제 이후에 서버 코드를 생성할 때 또한 필요합니다.
|
||||
|
||||
> 💁 고유한ID를 생성하기 위해 [GUIDGen](https://www.guidgen.com) 사이트를 이용할 수 있습니다..
|
||||
|
||||
`client_name` 는 broker에서의 MQTT 사용자의 고유한 이름입니다.
|
||||
|
||||
1. 아래 코드를 이 새로운 코드 아래에 추가하여 MQTT 사용자 객체를 생성하고 MQTT broker에 연결합니다.:
|
||||
|
||||
```python
|
||||
mqtt_client = mqtt.Client(client_name)
|
||||
mqtt_client.connect('test.mosquitto.org')
|
||||
|
||||
mqtt_client.loop_start()
|
||||
|
||||
print("MQTT connected!")
|
||||
```
|
||||
|
||||
이 코드는 사용자 객체를 생성하고, public MQTT broker에 연결하며, subscribe된 topic에 대한 메세지를 수신하는 백그라운드 스레드에서 처리 루프를 실행합니다.
|
||||
|
||||
1. 이전 과제에서 실행한 것 과 동일한 방법으로 코드를 실행합니다. 가상 IoT 장치를 사용하는 경우 CouterFit 앱이 실행중인지, 관센서와 LED가 올바른 핀에 생성되었는지 확인해주세요.
|
||||
|
||||
```output
|
||||
(.venv) ➜ nightlight python app.py
|
||||
MQTT connected!
|
||||
Light level: 0
|
||||
Light level: 0
|
||||
```
|
||||
|
||||
> 💁 [code-mqtt/virtual-device](code-mqtt/virtual-device) 폴더나 [code-mqtt/pi](code-mqtt/pi) 폴더에서 코드를 찾을 수 있습니다.
|
||||
|
||||
😀 여러분은 여러분의 장치와 MQTT broker를 성공적으로 연결하였습니다.
|
Loading…
Reference in new issue