지난번 글 (http://deneb21.tistory.com/453) 에서 S4A (Scratch for Arduino) 프로그램을 설치해보고 간단하게 Blink 예제를 만들어서 실행해 보았다. 디지털 출력은 해 보았으니 이번에는 센서의 값을 어떻게 입력받고 이것의 처리는 어떻게 하는지 알아보도록 하겠다. 준비물은 아두이노 우노, LM35 온도센서, 브레드보드, 케이블, LED 한 개 정도 되겠다. 목표는 온도센서로 온도를 측정해서 표시하고 온도가 일정 값 이상 올라간다면 LED 를 켜주고 아니라면 끄는 동작을 S4A 를 이용해서 만들어 볼 생각이다.
LM35 온도센서는 위와 같이 생겼다. 일반적인 트랜지스터의 크기와 모양과 같다. 5V를 사용하며 가운데 단자가 아날로그 출력으로 온도를 알려준다. 다만 온도는 다음의 공식에 의해서 계산되어 나올 수 있다. 그러므로 S4A로 프로그래밍 시 고려되어야 한다.
■ LM35 온도 구하는 공식
온도 = 센서값 x 500 / 1024
또는
온도 = 센서값 x 0.48828125
■ 연결
아두이노와 온도센서(LM35)의 연결
아두이노 우노 |
LM35 |
5V |
5V |
Analog 0 (A0) |
Signal (Output) |
GND |
GND |
아두이노와 LED 연결 (원래 LED 의 보호를 위해 220옴 정도의 저항을 연결하는 것이 권장사항 이지만 여기서는 생략함)
아두이노 우노 |
LED |
Digital 13 (D13) |
긴 다리 (+) |
GND |
짧은 다리 (-) |
연결 사진
연결을 마쳤으면 아두이노를 PC 에 연결하고 S4A 프로그램을 실행한다.
그리고 아래와 같이 프로그램 블럭을 만들어 주었다.
1. 일단 온도센서의 값을 변수에 담아주기 위해서 '변수' 에 들어가서 temp 라는 이름으로 변수를 만들어 주었다.
2. '동작' 에 들어가서 아날로그 센서의 값을 불러오는 블럭을 가져와서 '연산' 에 있는 사칙연산 블럭을 이용해 LM35의 온도 구하는 공식을 적용하였다. 이렇게 하면 A0 단자에 연결된 온도센서의 값을 불러와서 온도를 temp 라는 변수에 저장한다. 위의 그림에 보면 연산 블럭이 2개가 겹쳐서 사용이 되었는데 맨 위에 있는 것이 먼저 실행되고 그 아래에 있는 것이 나중에 실행된다.
3. LED 가 켜질 것인지 꺼질 것인지의 판단을 위해 '제어' 에 들어가서 '만약 ~ 라면 ~아니면' 블럭을 가져와서 temp 변수의 값과 비교해서 디지털 13번 핀에 연결된 LED 를 켤 것인지 끌 것인지 판단한다. 위의 프로그램에서는 LED가 켜지는 조건을 23도 보다 높을 때로 했는데 이것은 원하는 대로 수정하면 된다.
4. '형태' 의 '~말하기' 블럭을 가져와서 temp 변수를 출력해 준다. (말하기 이지만 실제로 소리가 나오지는 않는다. S4A 화면에 온도가 표시된다.
5. '제어' 블럭에서 'x 초 기다리기' 블럭을 가져와서 1초 마다 온도를 측정하도록 한다. (꼭 하지 않아도 됨)
6. 위의 과정을 무한반복 하게 하기 위해서 '제어' 의 '무한반복' 블럭을 가져와서 위의 과정을 하는 블록을 모두 안에 넣어준다.
7. 프로그램을 시작하기 위해서 '제어' 의 '(깃발이)클릭되었을때' 블럭을 맨 위에 놓아 준다.
위의 프로그램을 실행한 결과 동영상이다. 처음에 꺼져 있던 LED 가 온도센서에 손가락을 대자 온도가 올라가고 LED 가 켜지는 것을 볼 수 있다. 반대로 손가락을 떼니 곧 온도가 내려가고 LED 가 꺼진다.
일단 S4A를 이용해서 입력과 출력을 모두 해 보았다. 이 외에도 수 많은 센서를 사용이 가능하며 구글링 해 보면 S4A를 가지고도 엄청난 작품(?)을 만든 사례들이 많이 있다. 이런 여러가지 사례들을 연구해보고 교육용으로서 S4A를 활용한다면 컴퓨터 화면만 들여다 보면서 하는 소프트웨어 교육 보다는 덜 따분하고 재미있는 교육이 되지 않을까 생각해 본다.
'아두이노' 카테고리의 다른 글
[아두이노] DC 모터, 아두이노 PWM으로 속도 제어 (4) | 2016.12.01 |
---|---|
[아두이노] ATtiny85 MCU 칩의 개발환경 설정, 아두이노 우노 이용 (0) | 2016.11.30 |
[아두이노] S4A(Scratch for Arduino) 를 설치해보자 (3) | 2016.11.25 |
[아두이노] LED 밝기 조절 및 색의 혼합 (0) | 2016.10.24 |
[아두이노] DHT11과 OLED 디스플레이를 이용한 온습도계 개선편 (0) | 2016.08.04 |