Skip to content

Commit

Permalink
GitBook: [master] 2 pages modified
Browse files Browse the repository at this point in the history
  • Loading branch information
JeongJun-Lee authored and gitbook-bot committed Jun 9, 2021
1 parent 0db0588 commit f84ab6c
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 6 deletions.
6 changes: 2 additions & 4 deletions block_coding/analog_input.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,13 @@

먼저 전자 회로 구성을 살펴보겠습니다. 본 회로는 [5.2 장의 디지털 입력 코딩](digital_input.md) 때와 마찬가지로 독립된 2개의 회로로 구성된 것으로 간주할 수 있습니다. 첫번 째로 LED를 디지털 출력으로 LED를 제어하는 회로인데 이제 이것은 너무나 익숙하실 것 같습니다. 두번 째는 **조도 센서로부터 아날로그 출력값\(아두이노 보드 입장에서는 보드로 들어오는 입력값\)을 읽어 내기 위한 회로로** [**4.2장**](../board_basic/input_output.md#analog-input)**에서 살펴보았듯이 아두이노 우노 보드 상에는 아날로그 입력핀들\(A0~A5핀, 6개\)은 공용이 아닌 별도로 존재하고 이들 중 하나인 A0 핀과 연결**해 회로를 꾸몄습니다.

회로를 이해하시기 위해서는 조도 센서 기본적인 특성을 이해하셔야 되는데 **조도 센서는 주변 빛의 밝기에 따라 변화하는 일종의 가변 저항\(저항값이 고정된 것이 아니라 변동적인\)이라는 것이고, 빛이 밝으면\(빛의 세기가 강해지면\) 저항값이 작아지고, 반대로 빛이 어두우면\(빛의 세기가 약해지면\) 저항값은 커집니다. 회로를 보시면 조도 센서 앞단에 저항이 하나 연결된 것을 보실 수 있습니다. 조도 센서 자체도 \(가변\)저항이니 결국 이 회로는 저항 2개가 직렬로 연결된 회로라고 이해**하시면 됩니다.
회로를 이해하시기 위해서는 조도 센서 기본적인 특성을 이해하셔야 되는데 **조도 센서는 주변 빛의 밝기에 따라 변화하는 일종의 가변 저항\(저항값이 고정된 것이 아니라 변동적인\)이라는 것이고, 빛이 밝으면\(빛의 세기가 강해지면\) 저항값이 작아지고, 반대로 빛이 어두우면\(빛의 세기가 약해지면\) 저항값은 커집니다. 회로를 보시면 조도 센서 앞단에 저항이 하나 연결된 것을 보실 수 있습니다. 조도 센서 자체도 \(가변\)저항이니 결국 이 회로는 저항 2개가 직렬로 연결된 회로라고 이해**하시면 됩니다. **따라서, 회로상 아두이노 보드 입장에서 아날로그 입력으로 받아드리고 있는 값의 실체는 결국 전압분배법칙\(**법칙을 잘 모르시는 분들은 [참조 링크](https://www.youtube.com/watch?v=4GtcaMhOOv0)의 7:08부분 참조\)**에 의해 결정된 조도 센서의 전압값**입니다.

![](../.gitbook/assets/image%20%2833%29.png)

그렇다면 **조도센서가 자체가 저항인데 왜 추가로 저항을 달아야 하나가 궁금하실 수 있는데, 조도 센서 자체를 보호하기 위해 저항을 단 것이 아니라**, 조도 센서가 빛의 밝으면 밝을 수록 저항값이 점점 더 작아진다고 했는데, 조도 센서의 종류에 따라서는 저항값이 너무 작아져, 그 얘기는 반대로 **지나치게 큰 전류가 흐르게 되어 아두이노에 손상을 입히지 않도록 제한을 두기 위한 목적도 있고, 조도 센서 자체 특성으로 표현되는 가변저항의 최소/최대값 범위에 맞춰 저항의 직렬 연결에 따른 회로의 전압 분배법칙\(잘 모르시는 분들은** [**참조 링크**](https://www.youtube.com/watch?v=4GtcaMhOOv0)**의 7:08부분 참조\)으로 의한 적당한 범위의 아날로그 출력값을 외부로 내보내고자 하는 목적의 저항**으로 이해하시면 됩니다. 조도 센서의 종류에 따라 달라질 수 있는데 미니 사이즈 조도 센서에는 보통 10K$$\Omega$$정도를 달게 됩니다. 자세한 조도 센서의 특성과 저항값의 결정, 그리고 그 저항값에 따른 조도 센서의 특성 변화 등 자세히 알고 싶은 분을 위해 별도의 [참고 링크](https://makeabilitylab.github.io/physcomp/sensors/photoresistors.html)를 남기니 이를 참고하시면 좋겠습니다.

**전자회로상 아두이노 보드 입장에서 아날로그 입력으로 받아드리고 있는 값의 실체는 결국 전압분배법칙\(저항 2개가 직렬연결된 상태이므로\)에 의해 결정된 조도 센서의 전압값**이며, 빛이 어두워지면 조도 센서의 저항이 증가하고, 전압분배법칙\(잘 모르시는 분들은 [참조 링크](https://www.youtube.com/watch?v=4GtcaMhOOv0)의 7:08부분 참조\)에 의해 조도 센서에 발생하는 전압강하도 커지게 됩니다.

다음으로 블록코딩 내역을 살펴보겠습니다. 이번 아날로그 입력 코딩에서 새롭게 추가된 블록을 발견하셨나요? 그것은 바로 **아두이노의 아날로그 핀에서 값을 읽는 아날로그값 읽기 전용 블록**입니다.
다음으로 블록코딩 내역을 살펴보겠습니다. 이번 아날로그 입력 코딩에서 새롭게 추가된 블록을 발견하셨나요? 그것은 바로 **아두이노의 아날로그 핀에서 값을 읽는 아날로그 핀 읽기 전용 블록**입니다.

![](../.gitbook/assets/image%20%2829%29.png)

Expand Down
4 changes: 2 additions & 2 deletions block_coding/analog_output.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# 5.3 아날로그 출력 코딩

아날로그 출력 코딩에서 사용할 예제는 기본적으로 [5.2장 디지털 출력 코딩](digital_input.md)에서 사용한 전자회로 구성방식을 그대로 사용합니다. 다만, 전자회로에서 서로 차이가 있는 것은 출력에 사용하는 핀이 다른데 **아날로그 출력이기 때문에 아두이노 우노의 아날로그 전용 출력핀\(PWM 핀: ~3, ~5, ~6, ~9, ~10, ~11\)을 사용해야 하고, 코딩할 때도 이를 염두해 코딩**하시면 됩니다. 디지털 출력에서는 디지털 방식의 제어인 LED의 단순 순간적인 점멸이었다면, 아날로그 출력에서는 이제 이를 아날로그적으로 제어해 크리스마스 트리에서 볼 수 있는 LED처럼 서서히 밝아졌다가 다시 서서히 희미해졌다를 반복하는 것을 구현해 보는 것입니다.
아날로그 출력 코딩에서 사용할 예제는 기본적으로 [5.2장 디지털 출력 코딩](digital_input.md)에서 사용한 전자회로 구성과 동일하고, 다만, **아날로그이기 때문에 아두이노 우노의 아날로그 전용 출력핀\(PWM 핀: ~3, ~5, ~6, ~9, ~10, ~11\)을 사용해야 하고, 코딩할 때도 이를 염두해 코딩**하시면 됩니다. 이렇게 코딩하면 [5.2장](digital_input.md)에서 보았던 디지털 방식의 제어인 LED의 단순 점멸이 아니고, 이제 아날로그적으로 제어해 이제 크리스마스 트리에서 볼 수 있는 LED처럼 서서히 밝아졌다가 다시 서서히 희미해졌다를 반복하는 것을 구현해 봅시다.

![](../.gitbook/assets/image%20%2827%29.png)

자 그럼 이제 코딩 부분을 살펴봅시다. PWM에 대한 이해는 [3.3장](../coding_start/4.1.md#analog-output)에서 알려드린 [유투브 동영상](https://www.youtube.com/watch?v=yhpk4V9w-ZM)을 통해 충분히 이해했다는 전제하에 PWM의 추가적인 설명없이 진행하겠습니다. **아두이노 블록코딩에서는** [**3.3장**](../coding_start/4.1.md#analog-output)**의 그림에서 언급한 것처 PWM 핀 전용 블록이 따로 있고, 0v~5v까지의 출력전압값을 아날로그적으로 표현하기 위해 0~255까지 값으로 설정**할 수 있습니다. 우리 코드에서는 천천히 LED를 밝히고 다시 어둡게 하기 위해 변수를 이용하고 있으며, 변수값을 10ms 시간 간격으로 255단계까지 높혔다가 줄였다를 반복하고 있습니다. C++코드로도 한번 더 살펴보면 이전과 다른 점은 아날로그 출력이기 때문에 출력을 위해 analogWrite 함수를 사용한다는 점입니다.
PWM에 대한 이해는 [3.3장](../coding_start/4.1.md#analog-output)에서 알려드린 [유투브 동영상](https://www.youtube.com/watch?v=yhpk4V9w-ZM)을 통해 충분히 이해했다는 전제하에 PWM의 추가적인 설명없이 진행하겠습니다. **아두이노 블록코딩에서는** [**3.3장**](../coding_start/4.1.md#analog-output)**의 그림에서 언급한 것처 PWM 핀 전용 블록이 있고, 0v~5v까지의 출력전압값을 아날로그적으로 표현하기 위해 0~255까지 값으로 설정**할 수 있습니다. 천천히 LED를 밝히고 다시 어둡게 하기 위해 이번에는 변수값을 사용해 10ms 시간 간격으로 255단계로 값을 높혔다가 줄였다를 반복하고 있습니다. 해당 내용을 블록코딩한 내용과[ 엔트리 커스텀 버전](https://github.com/JeongJun-Lee/entry-offline)에서 블록코드를 아두이노 C++로 변환한 내용은 다음과 같습니다. C++코드에서 전과 다른 점은 아날로그 출력이기 때문에 analogWrite 함수를 사용한다는 점입니다.

![](../.gitbook/assets/image%20%2837%29.png)

0 comments on commit f84ab6c

Please sign in to comment.