Raspberry piの電子工作やPythonとかjavascriptとかかじってます

第2種電気工事士のススメ

最近何人か知り合いが電気工事士を受けると聞いたので、受けた記録をまとめてみました。

買ったもの

筆記試験

ぜんぶ絵で見て覚える第2種電気工事士筆記試験すいーっと合格2017年版

ぜんぶ絵で見て覚える第2種電気工事士筆記試験すいーっと合格2017年版

が最強
テストは四択だから全て覚えるより、見れば思い出せることが大事。
まずはパーっと教本を一回読んでなんとなく覚えたら
そのあとアプリで問題を解きまくれば
過去問の類題が400問あるから、一通り解いて覚えてない範囲だけ教科書を見るってのが早い。
問題数もさることながら、解説もしっかりしてるので
試験も「これ〇〇ゼミで見たことあるやつだ!」状態になりやすい。

実技試験

実技の材料セット(メルカリ)
HOZANの工具セット(アマゾン)

HOZANの合格ツールこの材料がまた高い。前の試験が終わった直後などは、中古を安く帰るチャンスなのでおすすめ。
(練習量を減らすには便利な工具を買ったほうが良い。と個人的には思ってます)

やったこと

筆記試験

受験を決める前
以前、学校の授業で分流の法則やオームの法則あたりは理解していたので計算問題は初見でも解けるor解き方見たら思い出すレベルだった

2月前くらい前
本を買っってちょくちょく眺めてた

3日前くらいから
本を一周読んでよく出る問題を少し解いた。

前日
アプリで過去問を400問分解いて
覚えにくい遮断機からの長さの問題や電線の太さと許容電流の表を紙にまとめて覚え直した。

当日
試験は2時間となっているが50問のマークシートなので時間がすごく余る。1時間経ったところで列ごとに提出して退出をしていいとのことで見直しをして早めに退出した。

オーム社の解答速報が当日18時には出ていたので確認した。Twitterで “電気工事士 解答”
とかで調べたらリンクが出てきた。
多少のケアレスミスがあったものの余裕で受かっていたので安心した。




実技試験

筆記試験合格発表後
材料が届く前からできることとして、
まずは不合格になってしまう欠陥の条件を覚えること(ここで1敗)
材料が揃ったら練習あるのみ。

材料はメルカリで1周分の材料を7500円で
工具はホーザンのベーシックなものをアマゾンで買った。
基本はホーザンの”電気工事士の虎“を参考にした。道具も基本は同じものなどで参考にしやすい。
www.hozan.co.jp

ひと通りの伏線図の書き方と各素子の使い方を動画で確認して、候補問題を一つずつ
ノーカット版を見ながら同時に作っていった。
途中の問題からは作業スピードも上がっていったのでノーカット版を1.25倍速で流しながら作った。

基本は動画どおりの作業合格を心がけたが、クリップを使わず時間を省略した。
線の圧着も本数の少ないものから確認していけば使わずとも問題ない。
単位作業はランプレセクタプルとコンセントが3分でできるようにのの字曲げやネジの取り付けを繰り返し練習した。
ワイヤストリップは各素子に取り付けられる最小と最大のストリップ幅を試して多くの素子で使える1mm〜1.2mmを何も見ず感覚だけで精度よく切れるようになった。

動画の作業通りでは速く作れなくても、
まずは単位作業をしっかりこなし、

  • 器具ごとの取り付け手順
  • 次に欠陥にならない上限と下限の誤差

を把握する。

単位作業で練習するときはあえて欠陥ギリギリの誤差で作ってみるなど、欠陥にならない程度の誤差かを目視で判断できる力をつけるように心がけた。
これだけでもガイドに合わせずに作っていけるようになるため、意外と速く作れるようになった。
ビニール袋を小さなダンボールなどに入れて、ゴミを捨てながら作るというのも掃除も楽だし本番の練習にもなるためで良い。


当日は落ち着いていくこと。
材料の確認の段階で、材料一覧から端子台や、露出型コンセントなど、特徴のある材料から、候補問題のうちどれが出るかはある程度内容は絞れるし、どこの接続が圧着スリーブか差し込み式かも材料の個数から判断できる。どうせ長時間待たされるので、頭の中で複線図をシミュレーションしておくと吉。どこから作るかは人次第だが、心の中で順番を決めておくとなお良い。

あとは合格を待てば良い。忘れた頃にハガキが来るので一喜一憂しておきましょう。

ここまできたら、各都道府県に申請するのですがここでもお金がかかります。

申し込みからかかったお金は
試験代1万弱
工具、材料テキストなど2万弱
合格後のの申請5千円くらいということで、toeicが安く感じる魔法にかかりました。
もし興味とお金と時間のある人は受けてみてはいかがでしょう?

TensorFlowで高専生の学科判別機作ってみた

動機

高専生活5年間のなかで「お前J科ぽい顔してるな」と何度言われたかわからない。 自分でも説明はできないけど確かにその学科っぽい顔ってあるよなと感じたので 手元には卒業アルバムとパソコンで学科判別機を作っていく。

使ったもの

PC: MacBook Air (2017) - 0S: HighSierra 10.13.6

  • メモリ: 8GB 卒業アルバム、その他顔の映った画像データ

手順

1. 画像収集とデータ整理

学習させるための画像を集めます。物は試しで、とりあえず1学年40人程度の写真を使っています。手っ取り早く手に入れるため卒アルの集合写真を使います。

データが少ないときは歪みや反転を使ってデータの水増しをすることが多いようですが、めんどくさかったので卒アルをいくつかの角度から写真をとって水増ししました。

opencvを使って顔認識で認識できた顔写真のみをデータとします。 1人当たり2~3回写真に映るくらいの写真を撮って、顔認識させたところ、学科ごとに顔写真80枚程度とネクタイなどを誤認識した画像40枚程度が集まりました。 これらの画像を学科ごとの顔写真フォルダ5つと誤認識した画像を集めたフォルダ1つの6個のフォルダに、整理していきます。

一つの画像から複数の顔データを取得し、64px*64pxにリサイズして出力するのに使ったプログラムがこちらになります。

# -*- coding: utf-8 -*-
import cv2

#HAAR分類器の顔検出用の特徴量
cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml"
image_path = "narisawa.jpg"

#ファイル読み込み
image = cv2.imread(image_path)
#グレースケール変換
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

#カスケード分類器の特徴量を取得する
cascade = cv2.CascadeClassifier(cascade_path)

#物体認識(顔認識)の実行
#image – CV_8U 型の行列.ここに格納されている画像中から物体が検出されます
#objects – 矩形を要素とするベクトル.それぞれの矩形は,検出した物体を含みます
#scaleFactor – 各画像スケールにおける縮小量を表します
#minNeighbors – 物体候補となる矩形は,最低でもこの数だけの近傍矩形を含む必要があります
#flags – このパラメータは,新しいカスケードでは利用されません.古いカスケードに対しては,cvHaarDetectObjects 関数の場合と同じ意味を持ちます
#minSize – 物体が取り得る最小サイズ.これよりも小さい物体は無視されます
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
#facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=3, minSize=(10, 10), flags = cv2.cv.CV_HAAR_SCALE_IMAGE)

print "face rectangle"
print facerect
i=0
if len(facerect) > 0:
    #検出した顔をリザイズして保存していく
    for rect in facerect:
        image2 = image[rect[1]:rect[1]+rect[3],rect[0]:rect[0]+rect[2]]
        if image.shape[0]<64:#小さすぎる顔データは捨てる
            continue
        image2 = cv2.resize(image2,(64,64))
        cv2.imwrite(image_path+str(i)+".jpg", image2)
        i+=1

あまり元画像の数が多くなかったので、 このプログラムと顔のデータを取得したい画像を同じフォルダに入れてimage_pathを変更しながら実行して行きます 画像の名前はダブらなければ後の作業に関係なかったです

1学科ごとに画像をフォルダにまとめ、このフォルダから手作業で顔と顔以外に分類したら顔以外の画像はは5学科共通の誤認識フォルダのなかに移していけばおしまいです。

学習データとして使うために分類したフォルダをさらに一つのフォルダに入れておきましょう。次のようなディレクトリー構造になってました。

face --- mFace --- face1.jpg
      |         |-  〜〜〜〜〜
      |         -- 顔写真
      |- eFace --- 顔写真80枚くらい
      |- dFace --- 顔写真80枚くらい
      |- jFace --- 顔写真80枚くらい    
      |- cFace --- 顔写真80枚くらい
      -- other --- 誤認識した画像たくさん

最後に自分の顔写真でどの学科か判断させるために所属学科から自分の顔写真は取り除いておきます。

2. TensorFlowのインストール、再学習

今回やりたいことはTensorflowのImage Retrainingというチュートリアルを参考にしていけばいい。

インストールするものについては、基本がわかっていなかったのと古い情報に惑わされたりしましたが、 どうやらTensorFlowのインストールとTensorFlow Hub のインストールをしなければいけないようだ。

インストールにもチュートリアルが用意されているので、TensorFlowTnesorFlow Hubチュートリアルに従ってインストールしていく。

この後はImage Retrainingチュートリアル

curl -LO https://github.com/tensorflow/hub/raw/r0.1/examples/image_retraining/retrain.py

までやっておきましょう。

次の再学習のコマンドではお花の判別機を作ってしまうので、先ほどの学習データをまとめたフォルダを retrain.pyと同じディレクトリにコピーし、image_dirに学習データの大元のディレクトリ名にして実行

python retrain.py \
  --bottleneck_dir=bottlenecks \
  --how_many_training_steps=100 \
  --model_dir=inception \
  --summaries_dir=training_summaries/basic \
  --output_graph=retrained_graph.pb \
  --output_labels=retrained_labels.txt \
  --image_dir=学習させたいフォルダ名(今回はface)

として実行(10分くらい待ちましょう) これで再学習は終わりです

3. 実行

実行の手順もの上のチュートリアルの通りに行えばできる graphとlabelはチュートリアルと名前を変えてしまったので注意してください

curl -LO https://github.com/tensorflow/tensorflow/raw/master/tensorflow/examples/label_image/label_image.py
python label_image.py \
--graph=retrained_graph.pb --labels=retrained_labels.txt \
--input_layer=Placeholder \
--output_layer=final_result \
--image=調べたい顔写真

4. 結果

一応自分の顔がどの学科に見えるかについて調べてみました。本来はもっとくっきりしたデータで判別してますが、顔にはぼかしを入れています。

f:id:naritaku:20180919040150p:plain
結果

画像の名前を第一候補となった学科とその確率にしてあります。 人間相手でも8割はJ科と間違えられるので大健闘です。

5. 今後の展望

人間と同じような感じで答えてくれた?ので満足です。

顔だけでもこの結果だったので体格、行動、その他諸々を踏まえると人間が間違えるのも致し方ないのかもしれません。 こんなことして遊んでるからJ科に間違えられるのでしょう。

せっかく動くようにしたので文化祭とかで使えたら面白いかなと考えています。 どこかで日の目を目せて上げたいです。あとは精度を上げるために画像データも募集してます。

ScratchDayでScratchXのデモをしてきました

ScratchDay Tokyo 2016でScratchXのデモをしてきました。
ScratchXとは、Scrtach2.0の機能のほかに、外部のJavascriptファイルでScratchにブロックを追加できる機能を追加したバージョンのScratchです。
現在ベータ版となっていますが、APIなどと組み合わせて、Scratchのブロックにはない機能を追加できます。
今回はその機能の一つのを使ってAndroidスマートフォンBluetooth通信をするものを作り、デモしました。
スマホ側のアプリとScratchx用の外部Javascriptファイルを作り、公開したので、誰でも使えます。
youtu.be

続きを読む

自己紹介

アカウント

(ブログ始める前に作ったものがいろいろのってます)

GitHub
naritaku · GitHub

Youtube
naritaku - YouTube

好きなもの

LEGO、電子工作、工作とか

今までの活動

- Scratch を使ってプログラミングに興味を持つ。

小学生のころブロックを組み合わせてプログラムを作っていく、Scratchというものにはまりました。
Scratch - Imagine, Program, Share
いろいろな作品がありますが、パズドラみたいなのものを作りました。Puzzle-ver3 on Scratch
今思えば、Scratchがなければ他のプログラミングにも興味を持たなかったのではと思います。
現在はSILという団体でScratchのワークショップを行ったり、Corder Dojo柏 や ラーニングセンター新浦安 さん など他団体のScratchのワークショップのお手伝いなどをしています。
Scratch DayというScratchの年に1回のお祭りがあり、世界中で開催されています。私自身もSILとして3年前よりScratch Day Tokyo での展示も毎年しています。

- HTMLやCSSで初めて文字を打つプログラミングをする。

学校の授業でC言語もやりました。

- RaspberryPiと出会い、電子工作とかにも挑戦していく。

PEGのフォーラムにいくつかレポートをアップしました。
Scratchで作ったゲームで使えるリモコンをつくる
youtu.be

Topic: GPIOでスライドセンサー | PEG | programming education gathering

フォトトランジスタでスライドセンサ
youtu.be

Topic: GPIOで回転角を調べるセンサ | PEG | programming education gathering

Scratchで書いた絵をMinecraftPI上で立体的にする
Topic: Scratch2mcpi | PEG | programming education gathering


- Scratchの拡張機能を使いたくてC#Pythonを始める

WiiリモコンとScratchの接続

- javascriptも使い始める。

英語の勉強もかねて作った英単語テスト
Word Test

参加したイベント

innovators sommer
イノヴェイションはティーンから生まれる-中高生ハッカソン"Innovators' Summer"- — Japanese Official — Medium

Intel Edison を使ってアクアポニックス(植物工場+魚の養殖)の自動化をしようみたいなことをやるチームに所属。
電気回路とかnode.jsを使って、センサの読み取りの関数などの担当


みんなのラズパイコンテスト2015
日経Linux、日経ソフトウエア 主催 | みんなのラズパイコンテスト2015
WiiリモコンをScratchで使えるようにしたソフト の作成
(GitHubにアップロードしてあります)
GitHub - naritaku/raspi_wii_scratch


ぼくらのtwitterプロジェクト
第1回ワークショップ 開催レポート | ぼくらのTwitter プロジェクト
「ツイートの重さ」を視覚化しようみたいなテーマでWEBアプリ+PVをチームで作成
javascriptでアニメーションの担当をしました
TweetWeight

Arduinoで体温計をつくる その2

その1で温度の測定まではできた。
ここから温度の予測を行ってみようと思う。

Arduinoで体温測定 - YouTube
youtu.be


結論から言うとだいぶ微妙な感じになってしまった。

理論式から予測温度を導出する。

理論式をいろいろ調べてみるとニュートンの冷却の法則が近いようだ。

[http://topicmaps.u-gakugei.ac.jp/phys/matsuura/lecture/heat/contents/heatcdt.htm熱伝導による冷却

この式と微分の関係式から体温の予測をしようと思う

温度:y[℃] と時間t[秒]の関係式が  y=(T0-A)*exp(B*t)+A
(t=0の時の温度をT0[℃]、Aは∞秒後の温度(予測温度)、Bは表面積や比熱によって定まる定数であると仮定する)
だとすると、

y=(T0-A)*exp(B*t)+A
{\frac{dy}{dt}}=(T0-A)*B*exp(B*t)    …①
{\frac{d^2y}{dt^2}}=(T0-A)*B^2*exp(B*t) …②

②式に①式を代入して
{\frac{d^2y}{dt^2}}={\frac{dy}{dt}}*B…③
と表せる。

時間を横軸、温度を縦軸にとると、
{\frac{dy}{dt}}は時間と温度の傾きから求められるので、
{\frac{dy}{dt}}={\frac{温度の増加量}{時間の増加量}} …④
同様に2階微分は1階微分の傾きから得られるので
{\frac{d^2y}{dt^2}}={\frac{温度の傾きの増加量}{時間の増加量}} …⑤

③④⑤から定数Bを求めることができ、
Bの値と、1組の温度と時間のデータをもとの式に代入することでA(予測温度)を取得できる。


ソースコード

本来は実測温度がほぼ一定になる前に予測値を出せるはずでしたが、誤差が大きいようで精度が悪いです。温度の上昇が少なくなればそこそこな値が出ますが、そのころには測定温度がほぼ体温の値になっているので、意味がない。いろいろ考えて式の導出をやったので今の私の限界・・・

#include <math.h>

int analog = 0;          //アナログpin 生値
int V_0 = 3276;          //回路電源[mV]
double V_R0 =1;          //部分電圧[mV]
int circuit_R0 =10000;  //回路内抵抗[Ω]

int thermo_B = 3380;      //サーミスタB定数
int thermo_R0 = 10000;   //サーミスタ基準抵抗値[Ω]
int thermo_T0 = 298;     //サーミスタ基準温度[K]
double thermo_R = 1;     //サーミスタ測定抵抗値[Ω]
double temp = 25.00;     //測定温度[℃]

double temp_0=1.0;     //温度初期値
int time_0=0;          //時間初期値

int i=0;               //測定回数
double temp_data[3];  //測定温度
double time_data[3];  //経過時間

double dy_1=0.0;      //二階微分導出用一階微分の値1
double dy_2=0.0;      //二階微分導出用一階微分の値2
double dy=0.0;        //dy/dt
double d2y=0.0;       //(d/dt)*(dy/dt)二階微分の値
double C2=0.0;

double temp_forecast; //予測温度
int data=0;
double new_forecast;

void setup () {
  Serial.begin(9600);          /* 9600 bpsで接続 */
  Serial.println("READ START!");   //温度の表示
  analog=analogRead(0); 
  time_0 = micros(); 
  V_R0 = analog*3.3/ 1.024;                    //回路内抵抗の消費電圧を算出
  thermo_R=V_0/V_R0* circuit_R0 - circuit_R0;  //サーミスタの抵抗値を算出
  temp_0=(1000/(1/(0.001*thermo_T0)+log(thermo_R/thermo_R0)*1000/thermo_B)-273);  //温度の計算
}

void loop () { 
  if(i<30){
    analog=analogRead(0);                        //3回測定した電圧の平均値から温度を求める
   // analog+=analogRead(0);
    time_data[i%3] = (micros()-time_0);     
   // analog+=analogRead(0);
   // analog/=3;  
    V_R0 = analog*3.3/ 1.024;                    
    thermo_R=V_0/V_R0* circuit_R0 - circuit_R0; 
    temp_data[i%3]=(1000/(1/(0.001*thermo_T0)+log(thermo_R/thermo_R0)*1000/thermo_B)-273); 
    Serial.print("now_temperature:\t");
    
    if(i%3==2){                                  //3回温度を求めたらそのデータから予測温度を求める
      dy_1=(temp_data[1]-temp_data[0]+1.0e-80)*1000000/(time_data[1]-time_data[0]);
      dy_2=(temp_data[2]-temp_data[1]+1.0e-80)*1000000/(time_data[2]-time_data[1]);
      dy=(temp_data[2]-temp_data[0]+1.0e-80)*1000000/(time_data[2]-time_data[0]);
      d2y=2*(dy_2-dy_1)*1000000/(time_data[2]-time_data[0]);
      C2=d2y/dy;
      temp_forecast=(temp_data[1]-temp_0*exp(C2*time_data[1]))/(1-exp(C2*time_data[1]));
      if(temp_forecast>30){        //直近の算出できた予測温度を取りためる
        Serial.print(temp_data[i%3],1);   //測定温度の表示 
        Serial.print("\tforecast:\t");
        Serial.println(temp_forecast,1); 
        new_forecast=temp_forecast;
        data++;  
      }else{
        Serial.println(temp_data[i%3],1);   
     }
      delay(400);
    }else{
        Serial.println(temp_data[i%3],1);
     }
    i++;
  delay(500);
  }else{
   Serial.println("RESULT");   //最終的な予測温度の表示  
   Serial.print("forecast:\t");
   Serial.println(new_forecast,1);  
   Serial.print("now temperature:\t");
   analog=analogRead(0); 
   V_R0 = analog*3.3/ 1.024;                    
   thermo_R=V_0/V_R0* circuit_R0 - circuit_R0; 
   temp_data[2]=(1000/(1/(0.001*thermo_T0)+log(thermo_R/thermo_R0)*1000/thermo_B)-273); 
   Serial.println(temp_data[2],1);
   delay(10000);
 }
}

問題点

色々なところで誤差が出ていて、精度がよろしくない。考えられる原因をどんどん挙げてく

温度を求めるまでの誤差

明らかに測定値にばらつきがあり、誤差はあるがそこまで大きな誤差ではないようだ。
サーミスタは温度によって抵抗値が変わる。これを電圧の値から逆算して温度を求めている。
温度の値を求める段階までで起こる誤差として、電圧自体の測定誤差と、電圧から温度を求めるときのまるめ誤差などの計算による伝搬こり徐々に大きな誤差になっていることが考えられる。
他にも電流を流すことでサーミスタ自身の発熱も起こってしまうので厳密にはここでも誤差がでているだろう

予測値の導出までの誤差

求めた温度が絶対に正しいとして導出しているので、ここでも誤差の伝搬によってさらに値がずれてくる。
また理論値では、温度は単調に増加(又は減少)するが、微小時間が経過しても温度の測定値は同じ値になってしまうことなどから計算途中に0で割ることなどが起こってしまう
それを回避するために理論式に数値を加えてしまっているので、そもそもの温度が正しく計測できていても誤差が出てしまう。
さらに温度の測定と時間の計測が微妙にずれている、おそらく一番の原因である、傾きの大きさを増加量から導出するとずれが生じる、などが積もりに積もってうまく値が出ないのだと考えられる

理論値そのものの誤差

定数Bは、測温部と接触している表面積の時間変化などには対応していない。短い時間ごとにBの値を求め直しているが、それでもこの部分にも誤差が出ている。

最小二乗法とかを使ってみようとしたがなかなかうまいこといかなかったので、ひとまずこれでおわりにして、またしばらくたったら挑戦してみようと思う

Arduinoで体温計をつくる

作り始めた経緯

 

だいぶ前に病院で体温を測った時に1分かからないくらいで測定された。

今どきの体温計はかなり早く測定できるんだななんて思っていたら、

調べてみる15秒で調べられるものまであるらしい。

 

www.healthcare.omron.co.jp

 

速く測定するために予測式なんて方式をとっているようだが、詳しい考え方は

多くの人の体温上昇データを統計的に処理・・・とかうまくお茶を濁された感じだったので自分なりに速く、そして精度よく予測し測定する方法を考えていこうと思う。

 

www.terumo-taion.jp

 

 学校の勉強の復習も兼ねて今ある知識で何かを作りたいと考え、偏った知識で作っているのでいるので間違っているかもしれないが、とりあえずやってみる。

 

材料

arduino(家にあったstudino)

サーミスタ[NXFT15XH103FA2B]

10KΩ抵抗

 

作りたいのはわきに挟むようなタイプの体温計だ。体温をどんなセンサで測温するかを考えた。

もちろん精度のいいセンサがいいが、わきと体温計の間で熱が移動するとき、測温部が大きいと体温計によってわきが冷やされてしまい、本来のわきの温度に戻るまでに時間がかかり予測が難しくなるだろうと考え、測温部を極力小さくするためにサーミスタを選んだ。

NTCサーミスタ(温度検知・温度補償用)10kΩ(5個入): センサ一般 秋月電子通商 電子部品 ネット通販

 

回路設計と温度の測定

回路は次のように接続した。

 

f:id:naritaku:20160405221433p:plain

 

図の黒いやつが温度によって抵抗値が変わるサーミスタと呼ばれるセンサだ。

抵抗値をanalog inのピンの値と分圧の法則から求め、抵抗値から温度を求めていく。

ソースコード

#include <math.h>

int analog = 0;          //アナログpin 生値
int V_0 = 3276;          //回路電源[mV]
double V_R0 =1;          //部分電圧[mV]
int circuit_R0 =10000;   //回路内抵抗[Ω]

int thermo_B = 3380;     //サーミスタB定数
int thermo_R0 = 10000;   //サーミスタ基準抵抗値[Ω]
int thermo_T0 = 298;     //サーミスタ基準温度[K]

double thermo_R = 1;     //サーミスタ抵抗値[Ω]
double temp = 25.00;     //測定温度[℃]

void setup () {
  
  Serial.begin(9600);          /* 9600 bpsで接続 */
  Serial.println("READ_START");    /* 最初に1度だけ Start を表示 */

}

void loop () {
  
  analog=analogRead(0);  
  V_R0 = analog*3.3/ 1.024;                    //回路内抵抗の消費電圧を算出
  thermo_R=V_0/V_R0* circuit_R0 - circuit_R0;  //サーミスタの抵抗値を算出
  //Serial.println( thermo_R);                 //サーミスタの抵抗値を表示
  
  temp=(1000/(1/(0.001*thermo_T0)+log(thermo_R/thermo_R0)*1000/thermo_B)-273);  //温度の計算
  Serial.println(temp,1);                                                      //温度の表示

  delay(100);                      // 0.1s 待つ
}

 f:id:naritaku:20160417180106j:plain

より精度を上げるため抵抗値や供給電圧はテスターでの測定値を利用した。

電源供給はPCからUSBで行っている。テスターで測った結果と照らし合わせると、ANALOG INは5Vではなく3.3Vを1024分割していた。

計算順序を変え、計算途中で大きすぎたり、小さすぎる数字が出てくるとうまく値が出なくなってしまうので注意が必要だった。

 

このままだとただの温度計ではあるが、これだけでも一応一分ぐらいで平熱をはかれた。

これからは最終的な温度の予測に挑戦したい。

pygameで遊んでみる  その2

  • 参考にさせていただいたサイト

すごくよくまとまっています。もうこれ見てほぼできると思う。

ただ自分がどうなってんのか理解できずいろいろ調べたこととかを下に書いときます。

aidiary.hatenablog.com

続きを読む