8ピンPICを使った気圧計・プログラムの改造と電源回路

※記事内に商品プロモーションを含む場合があります

前回作った、SCP100を使った気圧計。
【関連】8ピンPICマイコンPIC12F683とSCP1000で気圧計を作った

この本

のダウンロードサイトからソース一式がダウンロード出ます。
HEXファイルをそのままPICkit2で書き込んだら、液晶は何か映りましたが、
コントラストが濃すぎて分からないのでプログラムを改造しました。

本ではストロベリーリナックスのI2C液晶、SB1602Bですが、
PICやセンサーと一緒に秋月で売っているAQM0802A-RN-GBWを使いました。

AQM0802A-RN-GBWに合わせたプログラムの改造

AQM0802A-RN-GBWを使った気圧計。プログラム改造前なのでコントラストが合ってない

まずはコントラスト
ソース内のlcd_i2c_lib.hにある
#define CONTRAST  0x30// for 3.3V
0x30を
#define CONTRAST  0x25// for 3.3V
0x25に変更しました。

これでコントラストは直りました。

次に文字の表示
AQM0802A-RN-GBWには1行に8文字しか表示出来ないので
8文字以降は無視されます。

なので、最初に定義されているTempなどを無くしました。

元は
unsigned char PasMsg[] = “Pres:xxxx.xx hPa“;
unsigned char TmpMsg[] = “Temp: +xx.x DegC“;

でしたが、
unsigned char PasMsg[] = “xxxx.xx “;
unsigned char TmpMsg[] = “        ”;
に変更しました。

このままだと気圧や気温の数値はそのままので
気圧の部分は
ltostring(6, Pascal, PasMsg);
PasMsg[6] = PasMsg[5];
PasMsg[6] = PasMsg[4];
PasMsg[4] = ‘.’;

温度の部分は
プラス・マイナスの部分TmpMsg[6]はTmpMsg[0]に変更。
後は
ltostring(3, Temp, TmpMsg+1);
TmpMsg[4] = TmpMsg[3];
TmpMsg[3] = ‘.’;

この様に変更しました。

これてちゃんと表示される様になりました。

ちなみに、xc8だとうまく行かなかったので昔ダウンロードしてあった
コンパイラHi-Tech C 9.7でコンパイルしました。

ソースには色々入っていますが、.c .h 以外は消した方が良いかもしれません。
ソースの置き場を変えたらコンパイルが
is defined more than once in~
とエラーが出て何をやってもダメだったのでソースとヘッダ以外を消して
プロジェクトを作りなおしたらうまく行きました。

電源回路の作成

出来れば持ち運びたいので、乾電池で動く様にします。

方法としては本通り、乾電池3本をから3.3Vに落とすか、
乾電池1本を昇圧して3.3Vを作り出すか。

昇圧の方はスイッチングになるのでノイズやリップルが心配なので
ブレッドボードでテストしてみました。

使用した部品は

  1. I-02799 PFMステップアップDC/DCコンバータ HT7733A(@200)
  2. P-03966 マイクロインダクター100μH(@100)
  3. 1Aショッキーバリアダイオード
  4. 100μF25Vの電解コンデンサ✕2

の4種類です。

SCP1000で作った気圧計のHT7733を使った電源回路のテスト中

 

結果うまく言ったので、部品5点にしました。

どこかのサイトで出力側コンデンサにおまじないコンデンサ(0.1μF)
と書いてあったのでテストしたら、無い方が若干出力が良かったので外しました。
【参考】DC/DCコンバータIC HT7750で遊ぶ

インダクタはマイクロインダクタなので気にはしていましたが、
電池電流は最大10mAで2つ並列よりも1つの方が良かったので
これのはずしました。

しばらく動作させていても問題無かったので基板に実装しました。

問題は電池の持ち。
常時ONでも1週間は持ちそうですが、場合によっては電源スイッチを
付けるかもしれません。

まとめ

とりあえず、気圧計としては完成しました。

やっぱり湿度もチェックしたい、特に梅雨時期!
のでAM2321を付けてAm2321のデータ取得をしたいと思います。

ちなみにソースの中にはI2C受信用の関数もありました。
実際は、もう完成していますが、問題なのは気温がマイナスになると
数値はおかしくなる点。

気温がマイナスになると、上位バイトの15bitにビットが立って
しまうのでこのあたりの処理がまだ出来てません。

なので現在は気圧センサーの温度を表示しています。

SCP1000を使った気圧計は、ピンを使い果たしているので
拡張が出来ません。

なのでAM2321のデータの取得がうまく言ったら、
I2C通信の気圧センサーLPS331を使って開いたポートに
ボタンを付けて、高度や○○指数などを切り替えたり、
シリアル通信で気圧・気温・湿度のデータを送信して
パソコンでロギングしたりしたいと思っています。