안녕하세요. 이번 챕터에서는 아날로그 디바이스(Analog Device)에서 제조하고 판매하는 TMP36 온도센서를 사용해 보도록 하겠습니다. 본 챕터에서는 .NET MF 4.2 기반의 넷두이노에서 아날로그 데이터를 읽어오는 과정을 설명하게 됩니다.
⊙ 준비물
- 넷두이노
- TMP36 온도센서
- 전선
⊙ TMP36의 스펙
TMP36은 정밀도가 높진 않지만 일반적으로 무난하게 사용할 수 있는 온도센서 입니다. 우선 스펙을 보시겠습니다.
뭔가 많아서 어지러우신가요?? ㅠㅠ 많네요... 쓸데없는거 다 치우고 필요한것만 보도록 합시다.
동작 환경운 2.7v에서 5.5v 사이, 온도는 -40도에서 +125도까지 측정이 가능하네요 ~
⊙ 전선 작업
넷두이노는 5v의 출력을 지원하지만 본 챕터에서는 3.3v를 사용합니다. ARM기반 마이크로 프로세서는 디지털 또는 아날로그 입력이 3.3v로 동작하기 때문입니다. (넷두이노 <-(3.3v 신호) -> 센서)
⊙ 코딩 하기
먼저 메인문에서 아날로그 0번 핀을 선언해야 합니다.
// .NET Micro Framework 4.2 에서의 아날로그 선언
AnalogInput input = new AnalogInput(AnalogChannels.ANALOG_PIN_A0);
.NET MF 4.1에서는 아날로그핀 선언이 AnalogInput input = new AnalogInput(Pins.GPIO_PIN_A0); 라는 형태였으나 .NET MF 4.2에서는 위의 형태로 변경되었습니다.
제가 쓰고 있는 넷두이노는 .NET MF 4.2로 업그레이드 된 상태이기 때문에 위 소스로 선언하였습니다. 참고하시길 바랍니다 ~~
그리고 값을 읽어들이는 부분과 계산, 출력하는 부분을 작성합니다.
while (true)
{
// TMP36의 아날로그 출력핀 0번으로부터 데이터를 읽어온다.
int read = input.ReadRaw(); // -> .NET MF 4.2
// 읽어온 값을 전압으로 변환한다. (읽어온 값 * 입력 전압 3.3v / 10비트 분해능)
Double voltage = read * 3.3 / 1024;
// 변환된 전압을 섭씨(C)로 변환한다.
Double tempC = (voltage - 0.5) * 100;
// 변환된 전압을 화씨(F)로 변환한다.
Double tempF = (tempC * 9 / 5) + 32;
// 콘솔에 출력한다.
Debug.Print("화씨온도: " + tempF + "F -- 섭씨온도: " + tempC + "C");
// 1초에 한번씩 출력한다.
Thread.Sleep(1000);
}
위와 마찬가지로 .NET MF 4.1 에서는 아날로그 데이터를 읽어들이는 함수가 Read(); 이었으나, .NET MF 4.2에서는 ReadRaw(); 로 변경되었습니다. 참고하세요 ~
⊙ 작동 영상
⊙ 소스 코드
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
namespace Netduino_TMP36
{
public class Program
{
public static void Main()
{
// AnalogInput input = new AnalogInput(Pins.GPIO_PIN_A0); -> .NET Micro Framework 4.1 에서의 아날로그핀 선언
AnalogInput input = new AnalogInput(AnalogChannels.ANALOG_PIN_A0); // -> .NET Micro Framework 4.2 에서의 아날로그핀 선언
while (true)
{
// TMP36의 아날로그 출력핀으로부터 데이터를 읽어온다.
// int read = input.Read(); -> .NET MF 4.1
int read = input.ReadRaw(); // -> .NET MF 4.2
// 읽어온 값을 전압으로 변환한다. (입력 전압 3.3v)
Double voltage = read * 3.3 / 1024;
// 변환된 전압을 섭씨(C)로 변환한다.
Double tempC = (voltage - 0.5) * 100;
// 변환된 전압을 화씨(F)로 변환한다.
Double tempF = (tempC * 9 / 5) + 32;
// 콘솔에 출력한다.
Debug.Print("화씨온도: " + tempF + "F -- 섭씨온도: " + tempC + "C");
// 1초에 한번씩 출력한다.
Thread.Sleep(1000);
}
}
}
}
'★5. 삼런이의 [프로그래밍]' 카테고리의 다른 글
[사용기] ST STM32F469I-DISCO (STM32F469 Discovery) 개발보드 사용기 (0) | 2016.05.14 |
---|---|
[Chapter 00] Cypress CY8C29466 PSoC 개발하기 - CY3210 PSoCEVAL1 개발보드 살펴보기 (0) | 2016.04.30 |
[Chapter 03] 넷두이노(Netduino) 강좌 - Thread(스레드) 기능 (0) | 2014.12.23 |
[Chapter 02] 넷두이노(Netduino) 강좌 - LED 깜빡이기 (Blink LED) (0) | 2014.12.23 |
[Chapter 01] 넷두이노(Netduino) 강좌 - 개발환경 구축 (Visual Studio 2013 기반) (0) | 2014.12.22 |