デジタルコンパス 温度計
トンネルタイマー |
|
1,PICについて
2,実験の目的
3,部品調達
4,実験準備
5,実験結果
|
1.PICって何? |
PICはPICマイコンと呼ばれ自分で開発したソフトをPICマイコンに書き込んでいろんな物を作動させます
PIC-BASIC は、 PIC16F877 を BASIC言語でマイコンを作動させます
。
BASIC言語(このマイコン専用) ならではの習得のしやすさ
簡単にプログラミングすることが可能です。
専用の書き込みハードウェアを必要とせず、デバッグにはICEやICDを必要としません。最小限のコストで最大限の効果を得ることができるのです。 |
こんな部品 |
作ったプログラムはフラッシュROMに記録されます、プログラムの書き換えは1000回程度可能です。
原寸は40mm×26mmと小さく、マイコンの入門や試作に最適です。 |
PIC-BASICでの開発
PIC-BASICモジュールには予め、BASICインタプリタ本体が書き込まれています。
最初自分のプログラム領域には何も書かれておらず、専用ソフトを使って、自分のプログラムを書き込みます。
BASICインタプリタ部分は購入時に既に書き込まれていて、自分が新たに書き込んだり、アップデートは出来ません。
PIC-BASICのプログラムはWIN98PC上から行います。開発環境で作成したプログラムは画面からBASICモジュールに転送することができます
PIC-BASICモジュールでは動作電圧の5Vがあれば、書き込み・デバッグなどの一連の作業をRS232C接続で行うことができます。そして、書き込んだBASICモジュールはPCから外して、単独で動作できるようになります。
PIC-BASICモジュールには5Vの3端子レギュレータが内蔵ですので、実際は約8V程度からの動作となります。 |
2.実験の目的 |
市販でありそうでない物を作る。
デジタルコンパス(方位磁石) -デジタルの方位磁石を作る -温度計 -デジタルの温度計 -トンネルタイマー -トンネルで消し忘れ防止タイマー |
3.部品の調達 |
■事前調査
パソコンでプログラムを作りケーブルでPICボードにソフトを送り、そこからPICに書き込み,書き込んだPICを動かしたい装置に取り付ける |
|
パソコンWIN98搭載パソコン
|
PICボードPIC-BASICはPIC16F877で動作するBASICインタプリタです
このボードはLCDやLED、レギュレーター、セラロック、スイッチがすべて搭載しております、ですからここで簡単な試作機が手軽に短時間でできます。
|
5Vレギュレーターレギュレーター
型番78M05A
車に搭載する予定なので12V位の電圧を常に5Vに作りかえる部品です
今回PICのレギュレータがありますが4.6Vに制御されているせいかデジタルコンパスを作動させても正確な方位が出てこないので、デジタルコンパスとリレー回路に別電源を供給させています |
デジタルコンパスデジタルコンパスモジュール
型番RDCM-802
入力電圧5V
モジュールは8つの方角(北、北東、東、南東、南、南西、西、北西)
を表示できます
ボードからは3ビットパラレル出力されます |
温度計温度センサー
型番LM35
測定温度範囲:0〜100℃
精度:±1℃
温度係数:10.0mV/℃
電源電圧:DC4V〜20V 低消費電流:60?A
低出力インピーダンス:0.1?
オペアンプ
LM358
|
タイマー5Vリレー
メーカーオムロン
型番G4F-11123T
電源電圧5VDV入力
たぶん20A対応
そこらへんに転がっていた部品なので詳細が分かりません |
4.実験準備 |
実験回路を作成 |
コネクターA |
端子名 |
機能 |
|
コネクターB |
端子名 |
機能 |
|
コネクターC |
端子名 |
機能 |
CNA-01 |
RE0 |
タイマー |
|
CNB-01 |
RA0 |
温度 |
|
CNC-01 |
RB7 |
LCD |
CNA-02 |
RE1 |
リレー |
|
CNB-07 |
RC0 |
SW2 |
|
CNC-02 |
RB6 |
LCD |
CNA-07 |
RD0 |
コンパス |
|
CNB-08 |
RC1 |
SW3 |
|
CNC-03 |
RB5 |
LCD |
CNA-08 |
RD1 |
コンパス |
|
|
|
|
|
CNC-04 |
RB4 |
LCD |
CNA-09 |
RD2 |
コンパス |
|
|
|
|
|
CNC-05 |
RB3 |
LCD |
|
|
|
|
|
|
|
|
CNC-06 |
RB2 |
LCD |
|
|
|
|
|
|
|
|
CNC-08 |
RB0 |
SW1 |
|
|
|
|
|
|
|
|
CNC-09 |
Vcc |
起電力4.6V |
|
|
|
|
|
|
|
|
CNC-10 |
GND |
グランド0V |
|
|
|
|
|
|
|
|
CNC-11 |
リセットSW |
SW |
|
|
|
|
|
|
|
|
CNC-14 |
POWER |
電源7〜12V入力 |
Dim cnt As Word
Dim temp As Word
Dim vcc As Word
Dim v As Word
Dim mlt As Word
vcc = 460
mlt = 101
Initlcd
Setpos 0,0
Putlcd "SW1 オンド SW2 GPS"
Setpos 0,1
Putlcd "SW3 タイマー SW1スタート"
btn_serch:
If rb.Bit0 = 0 Then
Goto ondo_job
Endif
If rc.Bit0 = 0 Then
Goto gps_job
Endif
If rc.Bit1 = 0 Then
Goto timerr_job
Endif
Goto btn_serch
ondo_job:
While 1
Initlcd
Setpos 0,0
Adc 0,0,cnt
Putlcd cnt, "cnt."
Setpos 8,0
v = (cnt * vcc)/1023
Putlcd (v / 100),"."
Putlcd (v Mod 100)," V"
temp = (v * 100) / mlt
Setpos 0,1
Putlcd "ondo=" ,(temp / 10)
Putlcd "."
Putlcd (temp Mod 10),"C", chr$(&hDF)
Sleep 1000
Wend
gps_job:
Dim news As Byte
Dim drct1 As Byte, drct2 As Byte
Dim i As Byte
Dim code As Byte, pcg(8) As Byte
Dim db As Byte, tmp As Byte
Initlcd
Gosub pcgset
Clearlcd
Input rd.Bit0
Input rd.Bit1
Input rd.Bit2
While(1)
Gosub GetDirection
'0:S 1:SW 2:NE 3:N 4:SE 5:W 6:E 7:NW
Lookup news, drct1, &h02,&h02,&h03,&h03,&h02,&h01,&h00,&h03
Lookup news, drct2, &h20,&h01,&h00,&h20,&h00,&h20,&h20,&h01
Setpos 2,0 : Putlcd chr$(drct1)
Setpos 3,0 : Putlcd chr$(drct2)
Setpos 5,0 : Putlcd "VALUE:",news
Sleep 500
Wend
GetDirection:
news = 0
If rd.Bit0 = 1 Then news = news + 1
If rd.Bit1 = 1 Then news = news + 2
If rd.Bit2 = 1 Then news = news + 4
Return
pcgset:
code = 0
pcg(0) = &B00100
pcg(1) = &B11111
pcg(2) = &B00100
pcg(3) = &B11111
pcg(4) = &B11111
pcg(5) = &B01110
pcg(6) = &B10101
pcg(7) = &B10101
Gosub cgramset
code = 1
pcg(0) = &B00000
pcg(1) = &B11111
pcg(2) = &B01010
pcg(3) = &B01010
pcg(4) = &B11111
pcg(5) = &B11011
pcg(6) = &B10001
pcg(7) = &B11111
Gosub cgramset
code = 2
pcg(0) = &B00100
pcg(1) = &B11111
pcg(2) = &B00100
pcg(3) = &B11111
pcg(4) = &B11011
pcg(5) = &B11111
pcg(6) = &B10101
pcg(7) = &B10101
Gosub cgramset
code = 3
pcg(0) = &B00000
pcg(1) = &B01010
pcg(2) = &B01010
pcg(3) = &B11011
pcg(4) = &B01010
pcg(5) = &B01010
pcg(6) = &B01010
pcg(7) = &B11011
Gosub cgramset
Return
cgramset:
Low rb.Bit2
db = &B01000000 | ( code << 3 )
Gosub lcddir
'CGRAM CODE
High rb.Bit2
For i = 0 To 7
db = pcg(i)
Gosub lcddir 'CGRAM DATA
Next i
Low rb.Bit2
Return
lcddir:
tmp = rb
tmp = tmp & &B00001111
tmp = tmp | ( db & &B11110000)
rb = tmp
High rb.Bit3
Sleep 1
Low rb.Bit3
Sleep 1
tmp = rb
tmp = tmp & &B00001111
tmp = tmp | ((db << 4 ) & &B11110000)
rb = tmp
High rb.Bit3
Sleep 1
Low rb.Bit3
Sleep 1
Return
timerr_job:
Dim j,ad,min,sec
Initlcd
loop_data_input:
Clearlcd
Homelcd
Adc 5,0,ad
ad = ad / 4
min = ad / 60
sec = ad - ( 60 * min )
If min >= 10 Then
Putlcd min, " min / "
Else
Putlcd " ", min, " min / "
Endif
If sec >= 10 Then
Putlcd sec, " sec / "
Else
Putlcd " ", sec, " sec / "
Endif
For j = 0 To 20
Sleep 10
If rb.Bit0 = 0 Then timer_job
Next j
Goto loop_data_input
timer_job:
If rb.Bit0 = 0 Then High re.Bit1
For j = ad To 1 Step -1
Homelcd
'
Clearlcd
Putlcd "Time= ", j
Sleep 1000
Next j
Toggle re.Bit1
Goto loop_data_input |
プログラムリストです、温度計のみタイマーのみコンパスのみで使えるように、変数をそれぞれの場所に配置してあります適当に3分割すれば、単品で使えます。 |
5.実験結果 |
メニュー画面 |
電源を入れるとメニュー表示が表れる |
温度計 |
スイッチ1を押すと温度計が表示、左上 からカウント、右上 センサー電圧、下側 現在温度計が表示される |
デジタルコンパス(方位) |
スイッチ2を押すと 左側 現在方位が表示され、右側 デジタルコンパスの3ビット入力情報が表示される |
タイマー |
スイッチ3を押すとタイマーが現れボリュームで0分から5分まで任意にタイマーを調節できる、調節が終わったらスイッチ1を押す、するとタイマーのカウントダウンが始まり、リレーがタイマー時間分オンになり最後切れる、トンネルに入ったときライトを付けるがよく消し忘れてバッテリー上がりで困った事があり作りました |
車に搭載 |
フロントガラス部分に設置 |
左側写真 左から液晶モジュール、真中縦4つが制御スイッチ、右側 黒く丸いのがタイマー用ボリューム、タイマーは固定しておけば、毎回同じ分数うで作動するので便利
右側写真 右上PICマイコン、ここから制御信号がI/Oされます、右上基盤がコンパスモジュールここで東西南北を出力してPICに送る、左下5Vレギュレーター、車のバッテリーは12V、そのままマイコンに接続すると焼けて故障します、ここで12Vから5Vまでに降下させます、右下四角いのは2回路入りオペアンプ、その更に右側が温度センサー、温度センサーは精度が悪いので温度数値をオペアンプで増幅して正確な温度を割り出しています |
ホームに戻る |
|