Raspberry Piにつないでドップラーセンサーをテスト

LinuxMintにつないで(たぶんFT234Xのせいで)うまくいかなかった秋月のドップラーセンサーキット。こんどはRaspberry Piにつないでテストしてみました。

Raspberry Piにつないで電源投入後、SSHで接続。dialoutグループにユーザー pi がいるのを確認して、screenをインストール。おもむろに、

としてみた。
センサーに手を近づけると反応するので、何か送ってきているのだけど、附属のマニュアルとは異なり、文字化けしているように見える。うーむ。

・・・・まじめにシリアルの波形見るか・・・。

秋月ドップラーセンサーキットをテストしました

3Dプリンタでケースを作った秋月ドップラーキットですが、テストしてみました。

環境はLinuxMint19です。

1.準備

  • システム管理の「ユーザーとグループ」でdialoutグループに自分のユーザーを追加
  • synapticでmoserialをインストール
  • 一旦再起動(実際にはログアウト/再ログインでいいはず)

2.通信ソフトのセットアップ

  • アクセサリの下のmoserialを起動
  • 「ポートの設定」で、デバイスを/dev/ttyUSB0(環境による)、ボーレートを9600、データのビットを8、ストップビットを1、パリティをodd、ハンドシェイクは両方共チェックなし、アクセスモードはRead and Write、ローカルエコーはチェックありに設定

3.接続

で、「接続」を押して接続・・・・すると、そこは USB-UARTチップがFT234Xなので、見事にデスクトップがハングアップしました。正確には、moserialは動いていて、@ERと@EOが繰り返し送られてきて表示されるのですが、何も操作できません。で、一旦、USBケーブルを抜いて、再度刺したらデスクトップが復活しました。

うーむ、相変わらずですね、FT234X。どうにかならないんですかねー??
でも、ぐぐっても、FT234XとLinuxの組み合わせでダメという情報は少ない。うまくいったという情報も少ないのだけど。(もっと正確に書くと、うまくいったという情報はポツポツあるのだけど、本当にFT234Xのままでうまく行っているのか、他のFT232R系のものに変えてうまく行っているのか曖昧なものが多いような気がする)

うまく行かないのは自分だけなんだろうか??

秋月ドップラセンサキット用ケースを作成

ずっと前に秋月で購入したNJR4265J1を使用したドップラーセンサキットがあったのですが、基板を裸で動かすのもイマイチかと思い、放置してありました。
で、部屋を整理していたら出てきたので、Fusion360の練習を兼ねて3Dプリンタでケースを作ってみました。

できるだけネジなどを使わずに作れないかということで、基板の固定は取り付け穴に嵌まる凸の形状を作り、そこに嵌めた基板を反対側からも棒で抑える形状としました。分割したケース同士はスナップフィットを使って結合することにしました。

出力はPLAを使って、Infillは100%としました。スナップフィットの柱が薄かったせいか、Infill率が低いと柱が折れてしまいます。

で、最終的な形態がこちら。USB端子しかないのでシンプルです。発熱がよくわかりませんが、とりあえず放熱用の穴は付けていません。(ソフトウェアでの制御はまだしていませんが、熱くなる気配はなさそうなので)
基板上についているLEDがかなり明るく、出力に使用したグレーのPLAだと中のLEDが光っているのが透けて見える状況です。状況によっては黒のPLAで出力し直したいと思いますが、とりあえず思った以上にうまくいきました。

Broadcom WICED Sense Bluetooth Smart Sensor 開発キット

MOUSERを見ていたら、Broadcomの開発キットが目に止まりました。

ST MicroelectoronicsのMEMSセンサを5つ載せたBluetoothセンサータグの開発キットで、IoTをターゲットにしているようです。
搭載しているセンサは

  • ジャイロスコープ
  • 加速度センサ
  • 電子コンパス
  • 大気圧センサ
  • 温湿度センサ

のようです。iPhone用のサンプルアプリケーションとSDKがついてくるようです。価格はMOUSERで2643円と安価ですが、iOS系のデバイスは何も持ってないので見送ることにしました。

今ひとつ用途が思いつかないところではありますが、アウトドアスポーツやモータースポーツの道具に取り付けたりすると何か面白いことができるかもしれないですね。

Bluetoothではなくもっと距離の伸びる920MHz帯とかになれば、いろんな用途がありそうな気がします。

それにしても海外の半導体ベンダはこういうキット(SDK)を出すのが上手いです。『ハードウェア・ファームウェア設計の雛形まで用意するから、お客さん(システムベンダ、etc)はエンドユーザーに何を提供するかに注力してくださいね。モノ作りは雛形をちょっと手直しして中国に丸投げすればいいっしょ。』というメッセージが伝わってきます。言い換えると、『お客さんは自分の顧客価値の向上に注力してください。下回りは任せてください。』というスタンスです。そりゃあ、かつての日本の半導体ベンダの「デバイスは作ったから後は勝手にどうぞ」というのと比較するとどっちが選ばれるかは明白ですね。

また気圧計の電池がなくなりました

前回10月30日に電池交換した気圧計ですが、今日電池がなくなって止まってました。
今日の昼間は稼働していたので、ほぼ25日間の動作ということになります。単三で作れば2ヶ月くらい駆動できるかな?
自作の電池駆動機器で簡単にこれだけの期間連続動作させられるようになるなんてしばらく前には予想できませんでしたね。

DIP版18F14K50ボードを作ってみました

余っていたDIP版のPIC18F14K50とユニバーサル基板でテスト用のボードを作ってみました。

OLYMPUS DIGITAL CAMERA

このボードを作ってみたのは、部品が余っていたから・・・というのもありますが、秋月の800円PIC18F14K50ボードとブレッドボードの組み合わせでは不便な点があったからです。それは、

  • 秋月の800円PIC18F14K50ボードではRA3はPICkit3へ接続するようになっている。
    よって、ブレッドボードではこの端子は扱えない。
  • USBでいろいろなソフトウェアを作って試すには、ブレッドボードでは持ち運びには不便。

というところからです。双方向でのデータのやりとりを試してみたいので、余っていた気圧センサとI2Cのキャラクタ液晶も載せてあります。気圧センサは液晶の下に置いてあります。(最初の写真は気圧センサから読み取った値を液晶に表示しています)

OLYMPUS DIGITAL CAMERA

裏面はこんな感じです。(自分用です。回路図を作っていないのでその代用(^^;。クリックすると特大画像が開きます。)

OLYMPUS DIGITAL CAMERA

各部分の説明(自分用です)

  • 基板裏面から見て右上の部分
    USBのBコネクタで、緑色の部品は100mAの保護用ポリスイッチです。
  • 基板裏面から見て真ん中やや上
    PIC18F14K50です。GND周りに付いている2個の小さな1608のコンデンサは1uFのチップコンです。VUSBのコンデンサは0.22~0.47uFが推奨だったと思いますが、半端な容量のコンデンサが手持ちになかったので1uFとしています。茶色の2012の大きなコンデンサ2個はクリスタル周りの22pFで、その左の4.7kΩはRA3のプルアップ抵抗、その左の1.2kΩ×2個はLEDの電流制限抵抗、その左の24kΩはタクトスイッチのプルアップ抵抗です。ポートCは内蔵プルアップがないので外付けせざるを得ませんでした。
  • 基板裏面から見て左の部分
    アナログジョイスティックと3.3VのCMOSレギュレータです。CMOSレギュレータIN/OUTには1uF16Vのチップコンがそれぞれついています。
  • 基板裏面から見て左下の部分
    2個のタクトスイッチです
  • 基板裏面から見て右下の部分
    LCDモジュールへのコネクタと気圧センサです。4.7kΩ×2個はI2Cバスのプルアップ抵抗です。

ポートアサインは以下の通りとしています。

  • RA3 – ブートローダスイッチ(L:ブートローダ起動)
  • RB4 – I2CバスSDA
  • RB5 – not use
  • RB6 – I2CバスSCL
  • RB7 – not use
  • RC0 – 3.3Vリファレンス電圧入力
  • RC1 – アナログジョイスティックY軸入力
  • RC2 – アナログジョイスティックX軸入力
  • RC3 – LED GREEN(H:点灯)
  • RC4 – LED RED(H:点灯)
  • RC5 – not use
  • RC6 – スイッチ入力左(L:ON)
  • RC7 – スイッチ入力右(L:ON)

I2Cバスのアドレスアサインは以下の通りです。

ソフトウェアはとりあえず以下の通りです。

  • PIC18F14K50側ブートローダ
    タクトスイッチとLEDのポートアサインを修正
  • PIC18F14K50側アプリケーション
    カスタムHIDデバイスのデモプログラムをベースにして、先に作った気圧センサ用のPIC16F1823用のI2C/LPS331/LCDドライバを移植。
    さらにTimer0割り込みを使って時間管理(似非マルチタスク処理)ができるように割り込み処理を追加。
  • Linuxホスト側ブートローダ
    Microchipのサンプルプログラムのまま
  • Linuxホスト側アプリケーション
    昔作ったHIDRAWでデータをやりとりするプログラムを改造し、双方向で希望するデータのやりとりができることを確認

これでLinux環境下でデータのやりとりをUSB経由で好きなようにできそうです。

気圧計の電池がなくなりました

先に作った気圧計ですが、連続稼働していたら電池がなくなってました。稼働し始めて約9~10日というところですが、もともと何かの電池として使っていたものを持ってきたので、寿命としては怪しいです。
なので、改めて新しい電池(といっても、ダイソーアルカリ乾電池ですが・・・)を入れてみました。

さて、どのくらいの寿命となるでしょうか。

LPS331による気圧計の製作

しばらく前に秋月で安価な高精度気圧センサLPS331のモジュールが出ていたので購入してあったのですが、これを電池駆動の気圧センサとして仕立ててみました。

OLYMPUS DIGITAL CAMERA

おもなキーパーツは、

  • 気圧センサ:LPS331AP
  • 液晶モジュール:AQM0802A
  • マイコン:PIC16F1823
    何でもよかったのですが、手頃なサイズでI2Cをもっているので採用しました。
  • スイッチングレギュレータ:HT7750A
    47uHのインダクタを使って一旦5Vを生成します。
  • CMOS三端子レギュレータ:S-812C33AY-B-G
    5VからPICマイコンおよびLCDモジュール用の3.3V生成に1個、センサの電源用に1個使っています。消費電流を抑えるため、CMOSのレギュレータとしています。

といったところです。

小型軽量かつ長時間駆動を目指すため、単4電池1本からスイッチングレギュレータを使って電源を生成しています。
当初はHT7733Aを使用し、LCフィルタでノイズを低減して使用していたのですが、どうも動作が安定しないのでノイズが原因かと疑って、一旦5Vにしてから3.3VのCMOSリニアレギュレータで電源を生成しています。(根本原因は他にあったので、結局これがどのくらい影響しているかはわかりません)

OLYMPUS DIGITAL CAMERA

センサにはLEDが搭載されていますが、電池での動作時間を伸ばすため、その右上の電流制限抵抗を除去することでLEDへの電流をカットしています。

OLYMPUS DIGITAL CAMERA

背面は試行錯誤の繰り返しで汚くなってしまいました。

ソフトウェアはMPLAB-X+XC8で作成していますが、このLPS331というデバイスは結構くせがあり苦労しました。(XC8にもいろいろ癖があって苦労しました)
当初は自動モードで勝手に連続変換させて、変換終了時に割り込みにてPICに通知、値を読み取って表示させようとしていました。しかしこちらの記事にあるように連続モードで変換すると、変換の処理自体?が抜けていることがあるのです。そこで、約1秒周期でワンショットの変換コマンドを発行することにしたのですが、それでも表示の変動が起こります。「レジスタは初期値に関わらず全部書き込まないとダメ」など、いろいろWebで見かけた情報を取り込みながら、最終的には約2秒周期での変換とすると変換値の暴れが収まるようですので、約2秒周期での変換&表示としています。それでも時折温度については±1℃程度の範囲で暴れることがあるようですが、妥協しました。

OLYMPUS DIGITAL CAMERA

以前作ったArduinoベースの温度・湿度・気圧計との比較です。

気圧についてはLPS331APの方がごくわずか・・・0.2hPa程度ですが、低めに出る傾向があるようです。
温度の方はLPS331APの方が0.7℃程度ですが低めに出ています。
値の安定性については気圧・温度ともにSCP1000の方が明らかに安定しています。

LPS331のほうはドキュメントもよく読むとおかしな所が結構あって(ドキュメントの)出来がよくありません。ドキュメントの出来が悪いデバイスは概してデバイス自体にもいろいろ問題を抱えている場合が多いように経験しています。

#原因切り分け用に買い足したLPS331APがあるのだけど、どうしようかな・・・(^^;

それと消費電流ですが、電池のところで測定すると、センサが動作していないタイミングでは1.8mAくらいで、センサが動作すると4mA程度に上がります。ただ、デジタルテスタで測定しているので、どのくらいが本当のピークなのかはわかりません。センサの動作時間自体は100msにも満たないようなので、平均でも2mA以下くらいなのでしょうか。2mAとすると、単4アルカリ乾電池の容量は700~800mAh程度のようですので、電池1本で350~400時間程度(電圧が下がってくるので、もうちょっと短いか)=約2週間程度の動作時間というところでしょうか。

現状では消費電流を下げて駆動時間を伸ばすためにPICの動作周波数は内蔵オシレータ使用で125kHzとしてあります。さらに消費電流を下げるために表示更新の待ち時間でのPIC自体のスリープも考えたのですが、内部の31kHzのLFINTOSCでスリープ動作させる方法が見つかりませんでした。どうやら外付けの32kHzのクリスタルで動作させないといけないようで、そこまで部品追加するのは面倒なので止めました。

ソースも置いておこうかな・・・と思ったのですが、コメントが古い(試行錯誤する前)ので、とりあえずやめておきます。(コメントを整理したら置くかも・・)

環境情報をRaspberry PiでTweetしてみる

いろいろネタが揃ってきたので、 Raspberry Piで環境情報をつぶやかせてみることにしました。

まず、環境を取得するハードウェアは、以前作った気圧計・温湿度計を使います。LCDの表示がついていますが、とりあえずはそのままにしておきます。Arduinoベースのこの気圧計・温湿度計は、5秒ごとに気圧、温度、湿度を測定し、9600bpsでUSBシリアルに送信してきます。

“環境情報をRaspberry PiでTweetしてみる” の続きを読む