温度計 PIC16F88、PIC16F84A、PIC12F683を使用します。 さまざまな表示方法、感温方法で製作しています。
作品1:デジタル温度計 【PIC16F88】 PIC16F88で温度計を製作しました。 −19〜50℃をデジタル2桁で表示させます。 北海道から沖縄まで気温が一年中計測できるはずです。 <<<動画です。QuickTimeで見ることができます。>>> 数値入力済みasmとhex(88ondo1)と数値未入力asmとhex(88ondo2)と回路図の詰め合わせ ダウンロードZIPファイルになっていますので解凍して使ってください。 サーミスターは名古屋の第2アメ横ビル内のタケイムセン様で10kサーミスター特価品詳細不明100円 ってのを買ってきました。どうせ温度は実測してデータを入力するわけだから安くてもOKかなと思いまして100円です。 測定はオムロン製のE5CN-R2Tと言う温度調節機を使用しました。 88ONDO1は数値が入力済みのファイルです。88ONDO2は未入力で00〜F9までで表示します。 TABLE1は1の位 TABLE10は10の位です。 実は問題が発生しております。 TABLEの表示が1段ごとに進んでしまうのです。シュミレーターでは正確に進みます。 不思議です。しかしそのまま続行です。 もうひとつの問題はレギュレタICの発する熱と周囲温度による部品の定格値の変化です。 サーミスターだけを温度上昇させて基盤部分は常温にした時と完成品その物を温度上昇させた時では 25度のときに1度、31度のときに2度、38度のときに3度、41度のときに4度と 完成品その物を加熱すると温度がだんだん狂ってきます。 基盤部分、特にサーミスターに接続した抵抗(2KΩと4.7KΩ)の温度変化に注意です。 抵抗は1%の誤差のものを使用しましたが。2KΩの1%は20Ωです。 その10分の1の2Ωだって大問題です。 88ONDO1は温度変化を加味していないデータです。 しかし温度計ですから10度なら10度の環境、30度なら30度の環境に置かれるわけですから その辺りも考えたデータにしたほうが良いかもしれませんね。 まあ所詮、おもちゃ感覚ですから、またA/D変換のお勉強と言うことでは目標達成です。 最後にasmファイルの一部、製作図面をどこかのHPから拝借して自分なりのデータに作り変えしまったことをお詫びします。 asmファイルは書体が違うのでどこなのかバレてしまいますね。 わからないことがあれば掲示板に書いてください。わかることならお答えできます。 新しいバージョンを追加しました。「NEW」が付くファイルがそれです。 温度が上昇するに連れてサイコロの変化が高速になります。 作品2:表示のない温度計 【PIC12F683】 PIC12F683で表示のない温度計を作ってみました。 PICの足が足らない為7セグでの数値表示ができません。 そのかわり点灯速度で温度を感覚的に表しました。温度が上がれば早く動きます。 l_ _l ..l と l の表示を交互に表示して人の走っている(歩いている)手の振りを表現しています。 速度は200KΩの半固定抵抗で加減してください。電源投入時は中央にセットしておき よい位置を見つけてください。極端に回し過ぎると表示の変化が止まってしまってプログラムが脱線してしまうので もう一度最初から調整をしてください。 表示のない温度計のasmとhexと回路図の詰め合わせ ダウンロード ZIPファイルになっていますので解凍して使ってください。 PIC12F675でもこのasmとhexで動きます。回路もこのままでOKです。 <<<動画です。QuickTimeで見ることができます。>>> 作品3:サイコロ表示のカウンター&温度計 【PIC12F683】 2年ほど前、私がまだアセンブラ命令語を知らなかった頃あるHPで8ピンのPICの足4本 をつかって10個ほどのLEDを個別に点灯させる記事を見ました。 そのときは別に興味もなくそのHPを通り過ぎてしまいましたが最近そのことを思い出し そのHPを探しましたがみつかりませんでした。 他のHPにもそのような記事がないか調べましたがわかりませんでした。 こうなれば自力でやるしかありません。鉛筆を持って4つの足からLEDをどう配置するか考えました。 12通りの配置ができました。つぎは個別に点灯させるプログラムを考えます。 意外と簡単にひらめきました。で、さっそく実験です。 プログラムには普段は初期設定でしか使わない「TRISIO」という命令語を多用しました。 「TRISIO」という命令語はどの足を入力用にしどの足を出力用にするか決定付ける命令語です。 まず点灯させたいLEDの足のつながっているPICの足2本を出力とし残りをすべて入力とします。 例えばそのLEDの足がGP0とGP1につながっていればMOVLW B"11111100"MOVWF TRISIO です。次にLEDのアノード(+)側の足をオンさせます。GP0側がアノード(+)ならば MOVLW B"00000001"MOVWF GPIO です。なんとこれだけで希望の箇所のLEDが点灯できました。これだけわかればもうOKです。 さっそくなにか作ろうと思いましてLEDが12個(12パターン)でなにができるか 考えました。4パターンあればサイコロの目ができます。12パターンあればサイコロが3つです。 サイコロで0〜59までカウントするカウンターを作ることにしました。 半田付けもプログラムも終わりさあテストです。さっそく変です。 サイコロの「2」が点灯するとき、つまり「C」が点灯するとき「A」と「I」もわずかに点灯してしまいます。 回路図を再度見直して納得しました。解凍した回路図を見て頂ければわかりますがGP5からGP0へ電気を流すと 「C」だけではなく「I」→「A」と言うラインも「C」と同負荷で電気が流れます。盲点でした。 そこで「A」にもうひとつLEDを増やしました。回路図の「AA」です。これで直りました。 しかしまだ変です。割り込みタイマーの発生がランダムすぎます。やはり初期設定用の命令語を多用したせいでしょうか。 これでは割り込みは使えません。割り込みはあきらめてプログラムで時間を作ることにしました。これも変です。 T0、T1、T2などの定数の変更によってサイコロの進み方が変になります。39の次が20に戻ったりします。 プログラムの配置を変えてみました。初期設定らしく「TRISIO」はプログラムのはじめのほうに集めました。 これでT0、T1、T2は安定しました。しかしもう一度割り込みを試しましたがやはり狂います。 100回発生するはずのところが98回とか99回です。1,2回空振りをします。 しかし何とかカウンターらしくなりました。 当初プログラムは増大すると思い12F629や675ではなく683を使用しましたが 容量が余っているので急きょ温度計機能も増やしました。「L」のLEDを使っていないことに うすうす気づいていましたのでこの「L」と「I」で「−」として使用できると思っていました。 サーミスターは名古屋のタケイムセンさんで特価100円の物を買いました。 LEDも以前にこのお店で特価で買った100個800円の高輝度LED赤と黄色を使用しました。 LEDの点灯箇所が増えるとデューティー比が下がり暗くなると思い高輝度の物を使いました。 ダミーで付けた「AA」のLEDを見ていると暗くなっていくのがわかります。 しかし点灯する箇所が増えるので全体的には暗くなったと言う印象はあまりありません。 2008年11月23日から動かしていますが今のところ問題なく動いています。 とにかくこんな配線をしてもいいのか、こんなプログラムでいいのか全くわかりません。 自分の勝手な思いつきで作ったものですからひょっとしたらPICに対して無理なことをさせているのかも知れません。 もし今後問題が発生したときにはここに追記します。またこの記事の掲載が消えていたときは 大きな問題が発生したと思ってください。 一応下にASM、HEX、回路図を用意します。圧縮してありますので解凍してお使いください。 ただし製作、完成品の管理等自己責任でお願いいたします。 「PIC12F683でサイコロ表示のカウンター&温度計」のasmとhexと回路図の詰め合わせ ダウンロード 作品4:温度センサーを使わないデジタル温度計 【PIC16F84A】 温度センサーの代わりに電解コンデンサーを使って温度を計測します。 ASMファイルにて調整が必要なためMPLAB IDEにてHEX生成が可能な人向けの内容です。 動作原理や調整方法は説明書をご覧ください。 ASM、HEX、回路図、説明書の詰め合わせです。解凍してご覧ください。 ダウンロード 【電解コンデンサ100μF25V85℃はルビコン(Ruby−con)社製をご使用ください。】 作品5:温湿度センサーDHT11を使用した温湿度計 【PIC16F84A】 電子部品の販売サイトを見ていると良く出てくる電子部品でDHT11という温湿度センサーです。 Arduinoと呼ばれている電子工作のアイテムで使われているようです。 それ様のプログラムも用意されているようですが今回はこれをPICで動かして7セグLEDで表示させます。 このセンサーはサーミスターのように電圧の変化をAD変換で取り込んで温度変化を表示するのではなく このセンサーからデータが送られて来てそのデータを表示し使用します。 赤線の部分はPIC側から送信します。RA4を出力に設定し約18m秒間0にします。 命令としては 「BCF PORTA,4」となります。その後、1(BSF PORTA,4)にしてRA4は入力設定にします。 あとはセンサーからデータが送られて来るのでそれを受信し数値化していきます。 下記がデータシートに書かれている物の抜粋です。 センサーからは80μ秒0しその後1してからデータを送って来ます。 50μ秒の0の後の立ち上がりをPIC側では40μ秒待ったあと信号がOFFだった場合は「0」、 ONだった場合は「1」としています。 表示は7セグLEDで湿度、温度共に2桁で、ダイナミック点灯方式です。 2秒ごとに計測していますが計測時はダイナミック点灯が出来ないので計測時0.1秒程度ですが消灯します。 上の写真は湿度85%、温度17度です。センサーは延長ケーブルで接続されているため写っていません。 センサーに接続されているプルアップ抵抗はデータシートとおり5.1kΩになっていますが10kΩでもOKでした。 センサーの購入は秋月以外でもできます。1個175円送料160円のお店で購入しました。そのお店は1000円以上は送料無料でした。 送料共で220円というお店もあるようです。 ASM、HEX、回路図の詰め合わせです。解凍してご覧ください。 ダウンロード ご意見ご感想質問何でもどうぞの掲示板はこちら <<<クリック>>>内緒でお話がしたい人はこちらまで picdetukuttemimasita@yahoo.co.jp トップページへ戻る