米粒AVRで温度計(STTS751使用)

公開日: 電子工作 | , ,

米粒AVRで温度計

前回までに紹介したI2CライブラリとLCDライブラリを使って作る、温度計のサンプルです。
温度センサーには、秋月で販売されているSTTS751と言うI2C接続の温度センサーを使っています。

 

STTS751

STTS751は、I2C接続の温度センサーです。
主な仕様は、

  • 動作電圧:2.25V~3.6V
  • 動作温度:-40℃~+125℃
  • 分解能:9bit (0.5℃)、10bit (0.25℃)、11bit (0.125℃)、12bit (0.0625℃)
  • 精度:±1℃ (0~+85℃)、±2℃ (-40~+125℃)

アドレス

STTS751のアドレスは、外付けのプルアップ抵抗によって4つの中から選択できる。
オープン状態では使えないっぽいので、以下のいずれかの抵抗を用意しておく。

また、GNDに接続しても良いようです。
(コメントで教えて頂いきました。ありがとうございました。)

STTS751-0WB3F SMBus address
抵抗値 アドレス
 7.5k ±5% 1001000b (48h)
 12k ±5% 1001001b (49h)
 20k ±5% 0111000b (38h)
 33k ±5% 0111001b (39h)
 GND 0111001b (39h)

 

STTS751は、1つ100円で秋月で販売されています。
ICのパッケージは米粒AVRと同じSOT23-6L。なので米粒AVR用に買ったSOT-23変換基板が使える。

   

プログラム

#define F_CPU 1000000UL<br />
<br />
#include <stdlib.h><br />
#include <avr/io.h><br />
#include <util/delay.h><br />
<br />
#include "tiny10softI2C.h"<br />
#include "tiny10softI2C_LCD.h"<br />
<br />
#define STTS751_ADDR    0b1001001<br />
<br />
int main(void)<br />
{<br />
    CCP = 0xD8;<br />
    CLKMSR = 0x00;<br />
    CCP = 0xD8;<br />
    CLKPSR = 0b00000011;<br />
    <br />
    LCD_init();<br />
    LCD_write('T');<br />
    LCD_write('e');<br />
    LCD_write('m');<br />
    LCD_write('p');<br />
<br />
    // Configuration register 設定<br />
    I2C_start();<br />
    I2C_write(STTS751_ADDR<<1);<br />
    I2C_write(0x03);<br />
    I2C_write(0b10001100);    // EVENT停止、12bit解像度指定<br />
    I2C_stop();<br />
    <br />
    // conversion rate 設定<br />
    I2C_start();<br />
    I2C_write(STTS751_ADDR<<1);<br />
    I2C_write(0x04);<br />
    I2C_write(5);            // 1秒間に2回のconversion指定<br />
    I2C_stop();<br />
<br />
    uint8_t value_h;<br />
    uint8_t value_l;<br />
    uint8_t temp;<br />
    int16_t temp16;<br />
    <br />
    while(1)<br />
    {        <br />
        // 整数部読み込み<br />
        I2C_start();<br />
        I2C_write(STTS751_ADDR<<1);<br />
        I2C_write(0);<br />
        I2C_start();<br />
        I2C_write(STTS751_ADDR<<1|1);<br />
        value_h = I2C_read(0);<br />
        I2C_stop();<br />
<br />
        // 小数部読み込み<br />
        I2C_start();<br />
        I2C_write(STTS751_ADDR<<1);<br />
        I2C_write(2);<br />
        I2C_start();<br />
        I2C_write(STTS751_ADDR<<1|1);<br />
        value_l = I2C_read(0);<br />
        I2C_stop();<br />
<br />
        LCD_command(LCD_CURSOR_CMD(0,1));<br />
        <br />
        LCD_write((value_h&0x80)?'-':'+');<br />
<br />
        temp16=abs(value_h<<8|value_l);<br />
        value_h=(temp16>>8)&0xFF;<br />
        value_l=temp16&0xFF;<br />
        <br />
        if(value_h>=100)<br />
        {<br />
            temp='0';<br />
            temp+=(value_h/100);<br />
            value_h%=100;<br />
            LCD_write(temp);<br />
        }<br />
        <br />
        temp='0';<br />
        temp+=(value_h/10);<br />
        value_h%=10;<br />
        LCD_write(temp);<br />
        <br />
        LCD_write('0'+(value_h));<br />
        LCD_write('.');<br />
        <br />
        temp16=value_l>>4;<br />
        temp16*=625;<br />
        value_l=temp16/100;<br />
<br />
        temp='0';<br />
        temp+=(value_l/10);<br />
        LCD_write(temp);<br />
<br />
        LCD_write('゚');<br />
        LCD_write('C');<br />
        LCD_write(' ');<br />
<br />
        _delay_ms(500);<br />
    }<br />
}<br />

プログラム中で読み込んでいる tiny10softI2C.htiny10softI2C_LCD.h は、それぞれ前の記事で紹介したものを利用しています。

STTS751のアドレス指定は、10行目の#defineで指定しています。
今回は、12kの抵抗を繋いでいるので、0b1001001です。

あまりスピードは必要無いので、今回はTiny10を1MHzで動作させています。
表示の更新間隔は約500m秒毎に行うようになっています。
温度表示はできるだけ細かくしたいのですが、センサー数値の揺れを考慮して、センサーの最大分解能の12bitで読み込んで、0.1℃単位での表示にしています。

 

回路図

米粒AVRで温度計(STTS751使用)の回路

 

精度

このセンサーの精度は常温で ±1℃とのこと。
で、ちょっと気になったので、まったく同じものを2つ作って並べてみた。

tiny10-i2c-temp2

センサーの個体差によって得られる値はだいぶと違うようで・・・
絶対的な温度を表示できるものを持ってないので校正はできないし、
さてどうしたものか(´・ω・`)

 

関連記事

no image

AndroidでSoftModemを試してみた

今回、ここで言うSoftModemとは、携帯電話のオーディオ端子(イヤホン・マイク端子)を利用し

記事を読む

Arduino + STTS751

パソコンで温度計

ありきたりのPC温度計ですが、なんとなく作りたくなったので作ってみる。 コントローラーは手軽な

記事を読む

no image

Android + Bluetoothドングル + PIC24F

@hrdakinori さんと言う方が、PIC24FとBluetoothドングルを使って、Andro

記事を読む

Arduinoで温湿度データロガー

Arduinoで温湿度計 #2

今回は、前回作った温湿度計にRTCモジュールとSDカードアダプタを取り付けて温湿度データロガーを

記事を読む

米粒AVT(tiny10) リモコンレシーバー

米粒AVRでリモコン受信処理

  米粒AVR(Tiny10)で赤外線リモコンを受信して処理をするサンプルを作ってみまし

記事を読む

no image

赤外線リモコン受信機(イヤホンジャック接続)を作ってみた

最近、このブログ何も書いて無かったので、作成中の物の紹介・・・  これは、Andro

記事を読む

no image

Androidで一眼レフカメラのシャッターを制御する

またSoftModemネタです。 調子に乗って arms22さんの記事 iPhoneで一眼レフカメ

記事を読む

thermometer

パソコンで温度計 #2

今回は温度表示とログ取りアプリを作ったので公開。 前回にArduino+STTS751で作った

記事を読む

no image

Android+Arduinoでリモコン3 その1(AndroidAccessory接続)

何度か、Android+リモコンのネタを書いたことがあるのですが、今回はAndroid Access

記事を読む

raspi-pin-header

そうだ、Raspberry Pi用にピンヘッダーのオス・メス変換アダプタを作ろう

  Raspberry PiのI/O端子は、ピンヘッダーとなっていて、電極が出っ張ってる

記事を読む

Comment (2件)

  1. いかづちSqueak

    アドレスピンはオープンでは使えませんがGNDに落としても良いようですね。
    (7ページ Table 3. Pin descriptions)

    1. Futaba

      完全に見落としてました・・・確かにそう書かれてますね。
      抵抗1つ減らせるので、とても良い情報!
      教えて頂きまして、ありがとうございました!

Arduinoで温湿度データロガー
Arduinoで温湿度計 #2

今回は、前回作った温湿度計にRTCモジュールとSDカードアダプタを

Arduinoで温湿度計
Arduinoで温湿度計

秋月電子の温湿度モジュールを使って、温湿度計を作ってみました。 以前

SDカード・マイクロSDカード
ArduinoでSDカード

電子工作で大量のデータを保存する方法を調べていると、 Arduin

秋月電子 リアルタイムクロック(RTC)モジュール
秋月のリアルタイムクロック(RTC)モジュール

今回は秋月電子のI2C接続のリアルタイムクロック(RTC)モジュールを

秋月電子 キャラクタLCD
秋月の小型キャラクタLCD

今回秋月電子で売られている小型のキャラクター液晶2種を買ったので、

PAGE TOP ↑