#108 Temperature Brick

Overview

温度を計測するBrickです。

アナログ値(0〜1023)を取得でき、変換することで−30度から100度までの温度を計測することができます。

Connecting

Arduino

アナログコネクタ(A0〜A5)のいずれかに接続します。

Raspberry PI

アナログコネクタ(A0〜A7)のいずれかに接続します。

IchigoJam

アナログ用コネクタ(IN2またはANA()で設定したコネクタ)のどれかに接続します。

Support

ArduinoRaspberryPIIchigoJam

LM61CIZ Datasheet

Document
LM61CIZ Datasheet

Schematic

Sample Code

for Arduino

A0コネクタにTemprature Brickを接続して、取得した温度をシリアルモニタへ出力します。

//
// FaBo Brick Sample
//
// #108 Temperature Brick
//

#define tempPin A0 // 温度センサーピン

int tempValue = 0; // 温度取得用

void setup() {
  // 温度センサーピンを入力用に設定
  pinMode(tempPin, INPUT);

  // シリアル開始 転送レート:9600bps
  Serial.begin(9600);
}

void loop() {
  // センサーより値を取得(0〜1023)
  tempValue = analogRead(tempPin);

  // 取得した値を電圧に変換 (0〜5000mV)
  tempValue = map(tempValue, 0, 1023, 0, 5000);

  // 変換した電圧を300〜1600の値に変換後、温度に変換 (−30〜100度)
  tempValue = map(tempValue, 300, 1600, -30, 100);

  // 算出した温度を出力
  Serial.println(tempValue);

  delay(100);
}

出力データの確認方法

Serial.printlnなどで出力した内容はシリアルモニタを使用して確認します。

シリアルモニタはArduinoIDEのメニューより[ツール]->[シリアルモニタ]を選択することで起動できます。

Arduinoのコードを書く画面の右上にある虫メガネマークをクリックしても起動することができます。

起動後、画面右下に転送レートを選択する箇所があるので、その箇所をコードに合わせて変更してください。

サンプルコードの転送レートを設定している箇所

Serial.begin(9600);

for Raspberry Pi

A0コネクタに接続したTemperature Brickにより温度を計測します。

#!/usr/bin/env python
# coding: utf-8

#
# FaBo Brick Sample
#
# #108 Temperature Brick
#

import spidev
import time
import sys

# A0コネクタにTemperatureを接続
TEMPPIN = 0

# 初期化
spi = spidev.SpiDev()
spi.open(0,0)

def readadc(channel):
    adc = spi.xfer2([1,(8+channel)<<4,0])
    data = ((adc[1]&3) << 8) + adc[2]
    return data

def arduino_map(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min

if __name__ == '__main__':
    try:
        while True:
            data = readadc(TEMPPIN)
            volt = arduino_map(data, 0, 1023, 0, 5000)
            temp = arduino_map(volt, 300, 1600, -30, 100)
            print("temp : {:8} ".format(temp))
            time.sleep( 0.5 )
    except KeyboardInterrupt:
        spi.close()
        sys.exit(0)

for IchigoJam

注意
アナログはIN2のみで数値取得可能です。

デジタルの場合はIN(2)、アナログの場合がANA(2)とします。

  • デジタル
    温度の変化によって0か1を返します。
  • アナログ
    温度の変化によって0から1023を返します。
100 'TEMP_sample_program
110 CLS
120 LOCATE 10,8:PRINT "Digital =";IN(2)
130 LOCATE 10,9:PRINT "Analog  =";ANA(2);"  "
140 GOTO 120

画面に数字が2つ表示されます。
それぞれリアルタイムで温度の変化で数値が変化します。 デジタル数値は寒いと0、暖かいと1に変化し、アナログ数値は寒いと小さい値(0に近づく)に、暖かいと大きい値(1023に近づく)に変化します。

for Edison

A0コネクタにTemprature Brickを接続し、取得した温度をコンソールへ出力します。

//
// FaBo Brick Sample
//
// #108 Temperature Brick
//

//library
var m = require('mraa');

//pin setup
var temp_pin = new m.Aio(0); //temp sensor pin A0

//call loop function
loop();

function loop()
{

  var value = temp_pin.read()
  value = value * 5000 / 1023;
  value = (value - 300) * (100-(-30)) / (1600 - 300) + (-30);
  var temp_value = Math.round(value*10)/10;

  console.log('temp: ' + temp_value);

  //100 milliseconds
  setTimeout(loop,100);
}

Parts

  • IC温度センサ LM61CIZ

GitHub