温度計作ってみた

今回は熱電対を使って温度計を作ってみます。

異なる2種類の金属線をつないで、二つの接した部分に温度差を与えると電圧が発生します。この現象をゼーベック効果といいます。熱電対とはこの現象を利用したセンサで、一端の温度が分かれば発生する電圧と既知の金属の特性からもう一方の接点の温度を求めることができます。

絶対的な温度を計る場合は熱電対の測定に使う接点を温接点、端子側を基準接点とし、その温度(基準接点温度)を測り測定点の温度を求める必要があります。基準接点温度を測定するときはサーミスタや測温抵抗体などを使います。

試作には秋月電子で購入したK型熱電対ステンレス管タイプを使いました。この熱電対は-200℃~+600℃の広範囲の温度を測定することができます。温度差1℃当たり約40.7μVの起電力が発生します。

RaspberryHabuのアナログポートに入力するには電圧変化が小さすぎるのでオペアンプで増幅します。一般的に信号を増幅するためによく使われるLM358では誤差が大きすぎるので今回は精度の高いオペアンプNJM2119Dの1回路分を使い、1kΩと100kΩの抵抗で100倍に増幅し、RaspberryHabuのアナログ1番ピンに入力しました。NJM2119Dは秋月電子で手に入ります。

2V2A6612

熱電対の端子は商品では樹脂の端子がついていますが、ブレッドボードに指すために分解してあります。ケーブルは単芯なので被膜を取るだけでブレッドボードにさせます。
写真は2か所の温度を計るため熱電対を2つ使い、2チャンネル分の回路を作っています。

熱電対の出力はアナログなのでRaspberryHabuBasicのアナログ入力ピンからMCP3008を通してSPIでRaspberryPiに入力します。
以下のコードはサーミスタも使い室温を出したうえで熱電対で測定した結果の温度差を足して計測対象の温度を出しています。

 // thermocouple.c sample program for RaspberryHABU
 // Licence CC 0 ( Public Domain )
 
 
 #include "stdio.h"
 #include "stdlib.h"
 #include "wiringPi.h"
 #include "unistd.h"
 #define SPIBUFFSIZE 256
 #define THERMISTORCHANNEL 7
 #define THERMISTOR 10000 // 10k ohm
 #define B 3380 // 
 #define DIVR 10000 // 10k ohm
 
 unsigned char spidata[SPIBUFFSIZE];
 int MCP3008Read( int channel ){
   int spireturn,data;
   spidata[0]= 1; 
   spidata[1]= ( 0x80 | channel << 4 )  ;
   spidata[2]= 0;
   spireturn = wiringPiSPIDataRW( 0, spidata , SPIBUFFSIZE );
   data = ((spidata[1]&3) << 8) + spidata[2];
 return(data);
 }
 
 int main()
 {
   int spiresult,spiresult7;
   double thermistor_r,baseTemp,TCTemp,t1;
   if ( -1 ==  wiringPiSPISetup(0,1000000) )
   {
     printf("SPI setup error!");
     exit(1);
   }
   while (1){
     spiresult7=MCP3008Read(THERMISTORCHANNEL);
     thermistor_r = ( DIVR * spiresult7 )/ (1024 -spiresult7 );  // thermistor is lower
     t1 =   log( thermistor_r / THERMISTOR ) ;
     baseTemp = ((298*B) / ( B + ( 298 * t1 ))) - 273;
   
     spiresult=MCP3008Read(0);
     TCTemp = (3.3/1024.0*(double)spiresult*1.010)/0.00407;
 
     printf("temp: %3.f c  (room temp: %3.f c : A0 value0 %d)\n",TCTemp+baseTemp,baseTemp,spiresult);
     sleep(10);
   }
 
 }

入力した値はAD変換され10bitのデータとしてRaspberryPiに入力されます。その値は3.3Vを10bit(1024)分割された値なので1Vあたりの数値を出し、それを40.7μVで割ることで温度差を出しています。NJM2119Dは5V電源を試用していますが、出力は4V程度までしか出ないため、1.01をかけて補正してあります。

上記のプログラムとは出力が違いますが、別の実験で熱電対と基準接点温度を測定するためにサーミスタを使ったときの出力結果は以下のようになりました。この実験ではコップのお湯の温度を測ってみました。

IMG_20140326_141717

今回使ったK型熱電対は対温度性が1250℃(樹脂の端子カバーを残して使う場合は600℃)と高いのでオーブン作ったりリフロー機作ったりできそうですね。

ジャイロセンサを使ってみた

今回は村田製作所のジャイロセンサを使います。
秋月電子で販売されているアンプ内蔵のモジュールを使います。

このモジュールは電源、接地、アナログ出力2本の計4本の線をつなぎます。アナログ信号はRaspberryHabu上のアナログ入力3,4につなぎました。

基本はSPIからMC2008を通して入力します。以下のようなコードを書きました。

無題

実行するとブザーが鳴ります。このブザーはジャイロの数値によって音が変わるようにプログラムしました。下の出力例の一番右の数字がブザーの出力値です。

出力例

これで傾きの動きを検知しながらその情報をもとに音を出す装置ができます。オリジナル楽器などが作れそうですね。

表面実装!リフロー機を使ってみた

1リフロー機

某所のリフロー機(INFRARED IC HEATER T-962A)を使ってみました。中華製で設定がややめんどくさい(時間の表示は信じてはいけない)とかボタンの認識が悪いとかいろいろありますが、ちゃんと使えたよという報告。

2かめお3かめお2

カッティングプロッター(silhouette CAMEO)ではんだペーストを基板にのせるためのステンシルを作ります。

4ステンシル

ちょっとはんだペーストついてるけど、透明なシートでステンシルを作ってみました。片面がちょっと粘着します。

5はんだペースト

はんだペーストはdigikeyで買いました。

6はんだペースト載せた1

ステンシル使ってはんだペーストを載せました。位置合わせが大変!

7ちっこい抵抗

そして、ちっさい部品を

8置いてる

載せていく……

9置いた

載りました。(基板かわってるけど。)

10リフロー機開けた

リフロー機を開けます。

11焼く前

まんなかへんに置いて焼きます。

12焼いた後

きれいに焼けました!

ちょろちょろ部品が傾いたりずれたりはんだペーストの量がまちまちですが、なんとか使えそうです。課題はいっぱいだけど……

BreadBoardAdapter4RaspberryPi + BOX

以前紹介したRaspberryPiにBreadBoardをつなげるアダプタ(以下BBA)ですが専用のケースを作ってみました。
アクリルをレーザーカッターで加工して組み立てています。

BBA4RPBOX1

BBA4RPBOX2

ケースの中にすべてが入ります。試作なのでまだ固定しきれていません…

1段目にRapberryPi本体、2段目にBreadBoardが入っていてBBAでつながっています。BBA基板上のポートにUSBシリアルアダプタを刺し、PCとつなぐことでRaspberryPi本体への給電もできます。ブレッドボードにいろいろさしたままケースのふたが閉まるのでどこでもそのまま持ち歩けます!便利!使うときは蓋を下面にしまえるので失くさない!かも。

各種穴の位置合わせとできる限りの小型化が今後の課題です…

IR測距モジュールをRaspberryPiで使おう

今回は赤外線測距モジュールでは有名なSHARP製GP2Y0A21YKをRaspberryPiにつないでみます。

GP2Y0A21YK-front

GP2Y0A21YK-front

GP2Y0A21YK-back

GP2Y0A21YK-back

赤い線が4.5V-5.5Vの電源(vcc)、黒い線がアース(Ground)、黄色い線がアナログ出力(Vo)です。
RaspberryHabuにつなぐときは黄色い線をアナログ入力に繋ぎます。今回はアナログ入力7番ピンを使いました。

GP2Y0A21YK+Habu

GP2Y0A21YK+Habu

そしてデータシートのグラフを見ながら適当にコードを書きます。今回は距離に応じて0から7まで数字を出します。単位は特にないです。

IR

試しに実行してみます。
IR-test1

IR-test2

画面にAD変換された数値(spiresult)と適当に変換した結果(distance)が出ています。障害物の距離に応じて数値(0から7)が出ています。

これでデジタル測距器の完成です。出てくる数値は適当ですが。(ほんとに使う場合はif文の部分をもっと細かく正しい数値で作りましょう)

RaspberryHabu + PIRセンサモジュール(その2)

前回の続きでPIRセンサをいじっていきます。

まずはWiringPiをRaspberryPiに入れましょう。RaspberryHabuの組み立てTogetterにて動作確認のために入れていれば問題ないです。
そして簡単なデジタルINのプログラムを書いてみます。ピンは1番です。

pirtest-c

特に目立ったことはしてないです。digitalRead(pin番号)という関数がWiringPiでデジタル入力信号を取ってくる関数ですね。1秒ごとにHighで1、LOWで0が返ってきます。

cc -o プログラム名 ファイル名 -lwiringPi
でコンパイルして実行すると

pirtest-offpirtest-on

こうなります。人が止まっているときやいないときはセンサからLOWが返ってくるのでOFFと表示されます。動いたらセンサからHIGHが返ってきてONと表示されています。写真ではわかりにくいですが、僕はOFFになるまでじっと待っていました。センサの調整ねじを回せば同じ信号を出し続ける時間が長くなります。

このプログラムはHIGHやLOWだけを出すようなほかのセンサでも応用できるので便利です。
スイッチにも使えますね。すでに実装されてますが。

BreadBoardAdapter4RaspberryPi

Raspberry Piで電子工作しようとすると、大体はブレッドボードを使うことになりますがそのままでは使いづらいですよね。これを簡単にしようとすると、AdafruitのT型基板 http://www.adafruit.com/products/1105 が有名ですね。

でももうちょっと工夫できないかなと思い、こういうのを作ってみました。

IMG_20140424_002858_1

実は

IMG_20140424_003051

 

これは

IMG_20140424_003110

 

はんだづけしてません

IMG_20140424_003406

 

仮組ではなくて、本当にはんだづけせずに、差し込むだけで使えないかと新しい試みをしています。

IMG_20140424_003641

 

とはいうものの、表面実装パーツを載せる気満々ですが(爆)

ここらへん実装すると、電源モニターLED、バスモニターLED、FTDIアダプタインターフェースが乗ります。

ピンとコンデンサをくっつけるだけだと、単なるブレッドボードアダプタになります。

 

 

RaspberryHabu + PIRセンサモジュール(その1)

皆様、はじめまして。ヤマモトと申します。これからFabLibの製品であるRaspberryHabuの作例を紹介して行きたいと思います。

今回の作例はPIRセンサをRaspberryPiで使ってみよう!です。

PIRセンサのはaitendoさんのA500Pです。4.5V-20Vで駆動し、人体が近づくとON信号(Highレベル電圧)が出力されるセンサーモジュールです。今回は5VをRaspberryHabuから給電しました。

A500P-frontA500P-back

デジタル入力を使うので使用したHabuはBasicです。

A500P+Pi

写真のようにつなぐと、人体を感知したときにセンサがON信号を流してチェック用のLEDが光ります。

ON信号が流れる時間はPIRセンサモジュールの可変抵抗をいじると変更できるようです。

A500P+Pi-up

下準備だけですが、今回はここまで。次回はRaspberryPi上でいろいろいじりたいと思います。

writer: ヤマモト