trykmkmの備忘録

自称組み込みエンジニアのブログ

超音波・レーザ測距センササンプルプログラム(3)

 今回は、前回作成したハード上で、超音波測距センサのみを動作させるサンプルプログラムを作成します。

 

 プログラムは、一定間隔で超音波測距センサからi2cでデータを取得し、usbポートから測定データを出力します。

 

 まずは、コーディングの前に、mbed USBシリアルドライバをインストールする必要があります。

 下記URLより、インストーラをダウンロードし、実行し、インストールします。

 https://os.mbed.com/media/downloads/drivers/mbedWinSerial_16466.exe

 

 次に、コーディングをしていきます。

 ここでは、超音波測距センサ(SRF02)のAPIを公開している方がいらっしゃるので、有り難く利用させていただくことにします。

 手順を下記に記します。

 

 ①APIをmbedの開発環境にインポートするため、まずはブラウザでmbedにログインします。

 

 ②ブラウザで下記のAPIのページ(Robinson Lopez Monzonさん)に移動します。

 SRF02 | Mbed

 

 ③APIをインポートします。画面のImpor into Compilerをクリックします。(下記キャプチャ参照)

f:id:trykmkm:20170918012042p:plain

 

 ④開発環境のインポート方法を指定します。

  今回は、Import Asをprogram、Import NameをSRF02TESTとします。(下記キャプチャ参照)

f:id:trykmkm:20170922201351p:plain

 

 ⑤開発環境のマイプログラム内にSRF02TESTが追加されます。

f:id:trykmkm:20170922202801p:plain

 

 ⑥続いてmbedライブラリをインポートします。

  ブラウザで下記URLにアクセスし、画面のImpor into Compilerをクリックします。

  mbed - a mercurial repository | Mbed

 

 ⑦Import AsをLibraryにし、Target PathにSRF02TESTを指定し、ボタンImportをクリックします。

f:id:trykmkm:20170922211339p:plain

 

 ⑧フォルダSRF02TESTを選択して、右クリックし、新しいファイルをクリック。

f:id:trykmkm:20170922212719p:plain

 

 ⑨ファイル名をmain.cppとしOKボタンクリック。

f:id:trykmkm:20170922212936p:plain

 

⑩main.cppに下記コードを記述(SRF02 i2cモード詳細)

#include "mbed.h"
#include "SRF02.h"

SRF02 sensor(p28,p27,0xE0); //SRF02インスタンス(SDAピン, SCLピン, i2cデバイスアドレス指定)
Serial pc(USBTX, USBRX); //シリアルポートインスタンス(usb指定)

int main() {

    while(1) {


        //距離取得
        int distance = sensor.readcm();

        //USBシリアルポートに距離出力
        pc.printf("ULTRASONIC(SRF02) : %4d [cm]\n",distance);

        //0.5秒待機
        wait(0.5);
    }
}

 

⑪保存ボタンクリック後、コンパイルボタンをクリックして実行ファイル(SRF02TEST_LPC1768.bin)生成。

 

⑫mbedをPCに接続し、mbedにSRF02TEST_LPC1768.binを保存。

 

teratermでmbed Serial portを指定し、ボーレート9600bpsに指定すれば、超音波センサの測定データが0.5秒毎に出力します。下記にキャプチャを示します。

f:id:trykmkm:20170924002510p:plain

 

次回は、レーザ測距センサのみのサンプルプログラムを作成します。

 

 

超音波・レーザ測距センササンプルプログラム(2)

 今回は、超音波・レーザ測距センササンプルプログラムを実行させるハードについて検討していきます。

 

 mbedの電源はUSBから供給し、各センサはmbed経由でUSBから電源を受電します。

 

 超音波測距センサとレーザ測距センサは、それぞれインターフェースにi2cがあるので、i2cバス接続をします。なお、各センサは内部プルアップ抵抗があるので、プルアップ抵抗を実装しません。

 

 レーザ測距センサは、リセット(SHDN)ピンがあるので、mbedの任意のピンをDigital outとして使用し、センサのON/OFF制御を実施します。

 ただし、レーザ測距センサのリセットピンは、2.8Vでプルアップされているため、mbedの信号レベル5Vと異なります。mbedのピンをハイインピーダンス出力できれば問題ないのですが、できるかわからないため、N-ch MOS FETをかませます。

 なお、このセンサは、I2Cは5Vに対応しているので、I2Cのレベルシフタ回路は実装しません。

 

 超音波センサは、インターフェースにI2CとUARTを選択できるMODEピンがあります。ノンコネでI2C、GND接続でUARTになります。今回はI2Cを使用するので、ノンコネになります。

 

 以上より、検討した回路図は下記の通りになります。

f:id:trykmkm:20170923013656p:plain

図 超音波・レーザ測距センササンプルプログラム用回路図

 

 基板配線はブレッドボードを使用しました。実物は下記になります。

f:id:trykmkm:20170924001950j:plain  f:id:trykmkm:20170924002105j:plain

図 超音波・レーザ測距センサ用基板(左:部品あり 右:配線のみ )

 

 次回は、各センサを個別に動かしていきたいと思います。

 

 

 

 

超音波・レーザ測距センササンプルプログラム(1)

 私の手元には、とある事情で入手した未使用のままの超音波測距センサ(SRF02)とレーザ測距センサ(VL53L0Xモジュール)があります。

 放置したままだともったいないので、測定精度比較サンプルプログラムを作成することにしました。

 

 今回一番のハードルになるのは、レーザ測距センサになります。
 実はこのレーザ測距センサ、インターフェースがI2Cになりますが、I2Cのアドレスマップがデータシート上に公開されていません。
 どうやって制御するかといえば、Linux、mbed、arduino向けのAPIが公開されており、それを利用するしかありません。
 APIソースコードを解析すれば、他のプラットフォームでも利用できそうですが、この記事では簡単に動かすことを目的としているので、STmicroがAPIを提供してるプラットフォームで動かそうと思います。

 よって今回は、mbedを使用することにしました。

 使用するセンサ・ボードを下記に示します。

 

mbed NXP LPC1768評価キット: マイコン関連 秋月電子通商 電子部品 ネット通販

超音波センサー SRF02: マイコン関連 秋月電子通商 電子部品 ネット通販

VL53L0X TOFレーザー測距センサモジュール - VL53L0X - ネット販売

 

 次回以降、回路図、部品制御、プログラムについて記載していこうと思います。

12V・24V入力切替回路(2)

 前回の記事の続きになります。

 

 検討した回路を下記に示します。

 

f:id:trykmkm:20170910003705p:plain

図 12V・24V入力切替回路

 

 ちなみに、部品は秋月電子で購入できるものから、選定しました。

 

 上記回路の動作概要を説明します。

 青枠回路は、Vinが19以上のとき、Q1がONになり、3端子レギュレータで降圧し、12Vを出力します。

 緑枠回路は、Vinが19V未満のとき、Q3がOFF、Q2がONになり、Vinをそのまま出力します。

※19Vは、ツェナーダイオードのVz=15Vと、Pch-FETのVgs=4Vの和になります。

 

 この回路を適用すれば、Vinが12Vのとき、入力をそのまま出力します。そして、Vinが24Vのときは、12Vを出力します。

 

12V・24V入力切替回路(1)

自動車から電源を取得し、耐圧20V負に電源を供給する場合を考えます。


自動車の電源は、12V出力の車両と24V出力の車両があります。

12V出力の場合、直接負荷に入力できますが、24V出力の場合、降圧が必要になります。

上記内容を実現する回路を検討します。

回路の名称は「12V・24V入力切替回路」とします。

 

下記は、電源入力から負荷までのブロック図です。

 

f:id:trykmkm:20170902194138p:plain

図 12V・24V切替回路ブロック図

 

詳細は次回に記載します。

 

 

DI(依存性注入)参考サイト

私、諸事情で畑違いのJAVAプログラミングをすることになり、DI(依存性注入)について勉強することになりました。

 

参考になりそうなページをメモします。

Spring Frameworkで理解するDI(1):DI:依存性の注入とは何か? (1/3) - @IT

springの再入門 - DI(依存性注入) - Qiita

「なぜDI(依存性注入)が必要なのか?」についてGoogleが解説しているページを翻訳した - Qiita

Android開発:Dagger2でDI(Dependency Injection)する備忘録 - Li::Feel

Dagger: Android向けの依存性注入フレームワーク

AndroidでDI(依存性注入)やってみた - 名前はまだない。

回路CAD DesignSparkPCB

 今後、Blog記事で回路図を掲載することがあるかも知れないので、回路CADをインストールすることにしました。

 回路CADと言えば、orCADが有名ですが、シェアウェアのため、個人でなかなか手を出せません。

 そこで、フリーのCADを探すことにしました。

 

 ググってみると、P板.comが回路CAD一覧(※1)を公開していました。

  ※1 P板.com推奨CADのご紹介 | プリント基板ネット通販P板.com

 

 一覧の中で、フリーかつ部品ライブラリが多いのは、DesignSparkPCB(※2)をインストールすることにしました。

 

 ※2 DesignSpark ( Our Software ⇒  PCB software)

 

 インストーラをダウンロードして、起動し、表示画面の通り進めていくと、簡単にインストールできます。

 インストール完了後、DesignSparkを起動すると、初回起動時はユーザ登録画面が表示されます。既定の項目を入力して、レジストボタンをクリックするとユーザ登録は終了で、CAD機能が使用できるようになります。

 

 さっそく使用してみました。感想ですが、私はorCADを使用していたので、DesignCADは多少違和感があるのですが、十分使えると思います。

 

 さっそく簡単な回路を入力しました。

 

f:id:trykmkm:20170727001225p:plain