2021年04月24日

Node-redを用いたシリアルカメラ画像取込

今回はシリアルカメラPTC06をNode-Redを用いて画像として取り込んでみました。シリアルカメラPTC06は高画質や高フレームレートは全く期待できませんが、UARTから気軽に画像データを取得することができます。組込マイコンとの接続や簡易的な遠隔監視といった用途に最適です。Node-Redのシリアルポートを使用して画像を取り込んでみました。なお、シリアルポートのノードを使用するため、Node-Redはクラウド版でなく、オンプレミス版を使用する必要があります。

フローの全体は下記です。

serial_camera_node_red.jpg

必要に応じて、最初に解像度設定等のコマンドを実行(Inject)した後でResetコマンドでリセットします。画像を取得したいタイミングでCapture Imageコマンドを実行します。取得した画像を確認するためにはRead Data Lengthコマンドを実行してファイルサイズを取得します。その後でRead Image Dataコマンドを実行します。一括で取得できるデータは200Byte前後のため、Read Image Dataコマンドではファイルを分割してメモリから取得し、Jpegファイルを生成しています。


img.jpg

実際に取得したファイルです。至近距離のため、ぼやけていますが、3秒程度でファイルを取得できました。画像サイズは320x240で12kBとなりました。今回のNode-Redのフローはこちらにアップしています。640x480の場合は40kB前後で15秒程度取得に時間を要します。

Node-Redを用いてシリアルカメラの初期化、設定、画像取得までできました。PTC06のデータシートの記載ミスなのか分かりませんが、画像取得コマンドが56,00,32,0C,00,0D...と記載されていますが、このコマンドでは取得できませんでした。他のシリアルカメラと同様に56,00,32,0C,00,0A...とすると取得できるようになりました。ファーム等によっても若干、挙動が異なるようです。

今回は使用しませんでしたが、Node-RedのDashboardと組み合わせれば、ファイルとして画像を取得するだけでなく、ボタンとtemplate等を活用してDashboardにボタン操作で表示することも可能です。時間を見つけて実装してみたいと思います。
posted by Crescent at 00:00| Comment(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2021年04月17日

WindowsAppによるPython環境、Jupyter Notebook構築

Python環境を構築する場合、AnacondaやWSL、Docker等で環境を構築した方が便利です。PC環境によってはAnacondaやWSL、Docker等を使用できない場合もあります。今回は敢えてWindowsAppでPython環境を構築、jupyter notebookをインストールする場合のポイントについて紹介します。

特に注意点としてWindowsAppの場合、デフォルトではPythonインストールディレクトリにユーザー権限が与えられていないため、pip等で他のソフトをインストールする際に制約があります。

@PythonAppインストール
スタートボタン→Microsoft Storeから検索でPythonをクリック、インストールします。

WinApp0.jpg

単にPythonだけ使用する場合は@のインストール作業だけで十分です。直接、python.exeにアクセスしたい場合は必要に応じてA以降の設定を行います。

Aディレクトリ権限変更
WindowsAppのPythonは下記のディレクトリにインストールされます。ただ、デフォルトではWindowsAppsフォルダにアクセスするユーザー権限が与えられていないため、コマンドラインやエクスプローラからアクセスできません。権限を変更してアクセスできるようにします。

C:\Program Files\WindowsApps\pythonsoftwarefoundation.python.*.**\python.exe


WinApp1.jpg

WindowsAppのフォルダを右クリックして、セキュリティから詳細設定をクリックします。

WinApp2.jpg

画面真ん中の所有者の「変更」をクリックします。

WinApp3.jpg

詳細設定から検索を押して、現在ログインしているユーザを探し、選択してOKを押します。オブジェクトにユーザ名が選択されていればOKです。OKボタンを押して閉じます。


C:\Program Files\WindowsApps以下にあるpythonsoftwarefoundation.python.*.**のPythonフォルダに対しても同様にユーザ権限を付与します。

WinApp5.jpg

アクセス許可エントリから追加をクリックします。

WinApp4.jpg

プリンシパルから検索をクリックし、同様に現在ログインしているユーザを選択して、フルコントロールの権限にチェックを入れてOKを押します。なお、前回と異なる点として権限変更時に「サブコンテナーとオブジェクトの所有者を置き換える」にチェックを入れます。

WindowsAppのフォルダを右クリックして、セキュリティタブのユーザ名に現在ログインしているユーザを選択して、フルコントロールにチェックが入っていることを確認します。これでC:\Program Files\WindowsAppsフォルダ、WindowsApps以下にあるpythonsoftwarefoundation.python.*.**のPythonフォルダにアクセスできるようになりました。

Bjupyter notebookインストール
下記のコマンドでjupyter notebookをインストールします。
"c:\program files\windowsapps\pythonsoftwarefoundation.python.*.**python.exe" -m pip install notebook

インストール後、下記のコマンドでjupyter notebookがインストールされたフォルダを確認します。
"c:\program files\windowsapps\pythonsoftwarefoundation.python.*.**python.exe" -m pip show notebook

今回は下記のようなディレクトリに格納されていました。
C:\Users\(ユーザ名)\AppData\Roaming\Python\Python38\Scripts\jupyter.exe notebook

Cjupyter notebookショートカット作成
毎回コマンドを打ち込むのは面倒なのでショートカットを作成しました。上記で確認したjupyter.exeフォルダにエクスプローラで確認し、jupyter.exeに対して右クリックで「送る」から「ショートカットをデスクトップに作成」をクリックます。デスクトップで作成されたショートカットのリンク先に「~~\jupyter.exe」から「(半角空白)notebook」を追記して「~~\jupyter.exe notebook」に変更してOKボタンを押して設定を反映させます。

winApp7.jpg

これでショートカットをダブルクリックするだけでjupyter notebookにアクセスできるようになりました。
posted by Crescent at 00:00| Comment(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2021年04月10日

PIC32MX + Harmony3 + MSD(USB Host) 設定ポイント

ここ5年くらいはSTM32マイコンを中心に開発、展開していました。しかし、昨今の半導体供給不足で主要なSTM32マイコンが入手困難となっています。運よく在庫がある場合でも価格が上がっている場合が多々あります。STM32マイコンがこれまで通りに安定して入手可能になるには少なくとも半年(2021年末)、長くて数年(2022~23年以降)は要すると思われます。

このような状況を受けて、STM32マイコンの代替として今更ながら古巣のPICマイコンに少し戻ってきました。PICマイコンも半導体供給不足の影響を多少受けていますが、STM32マイコンほど長納期化していません。主にdsPIC33F、30Fを使用していた10年近く前に比べると自動コード生成ツール(Harmony Configurator)、内部可視化(Data Visualizer)等のツール群が充実してきています。

今回はPIC32MX250F128BをターゲットにMPLAB X v5.45+Harmony3を使用してUSBメモリへの書き込み(MSD:Mass Strage Device)を行いました。その際にポイントとなる設定について紹介します。なお、ターゲットへの書き込みはPickit3を使用しました。


全体の手順については既にMicrochipのgithubサイトに詳しく書かれているため、設定のポイントに絞って紹介します。
MPLAB Xには予め、MPLAB Harmony 3 Launcher(旧名称 MPLAB Harmony Configurator 3)をインストールしてあります。


@File System設定
Use File System Auto Mount Featureにチェックを入れます。また、Media TypeにSYS_FS_MEDIA_TYPE_MSDを選択します。この設定を忘れるとSYS_FS_EventHandlerSet関数やSYS_FS_MEDIA_MANAGER_EventHandlerSet関数が生成されず、app.cのサンプルプログラムのビルドで失敗します。


filesystem_setting.jpg


AHeap Size設定
こちらのMicrochipのgithubサイトでは500byte以上とありましたが、500byteでは動作しませんでした。1024byte程度が良さそうです。

system_heap_setting.jpg


BCrystal設定
PIC32MX2XXの場合はこちらのMicrochipのgithubサイトとは異なり、クロック設定箇所はシンプルです。一方でUSBを使用する場合は外付け発振子が必須となります。最終的に設定上部のUSB Clockが48000000Hz(48MHz)になっていればOKです。USB Clockが0Hzといった48MHz以外の場合は設定を見直す必要があります。

crystal_setting.jpg


以上の設定を終えた段階で、プロジェクトフォルダsrc内のapp.c、app.hを下記のサンプルコードに置き換えます。
Harmony3\usb_apps_host\apps\msd_basic\firmware\src

置き換え後、USBメモリをPIC32マイコンに接続し、ファームを書き込むとUSBメモリにサンプルファイルが保存されれば成功です。

result.jpg

今回のコード、プロジェクトファイルは
です。

STM32マイコンのCubeMXのようにMPLAB Harmonyによって最初のセットアップの敷居が下がっていることを実感できました。一方でMPLAB Harmonyの情報が少なく、バージョンによってUIや設定項目が異なるため、情報収集に苦労する面がありました。今後、CubeMXの様に洗練されたUIになることに期待です。
posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2021年04月03日

フォトカプラを使ったUART通信

電圧レベルが異なる場合やノイズ環境といった場合に安全に信号を伝える方法の1つとしてフォトカプラを使用することがあります。フォトカプラでON、OFFといった単純な信号のやりとりの場合はフォトカプラと適切な抵抗のみで信号のやり取りが可能です。一方でUARTやSPIといったある程度高速な信号をやり取りする場合、フォトカプラと抵抗のみでは安定した通信ができません。

下記はフォトカプラと抵抗のみを使用した場合のボーレート38400bpsのUART通信をフォトカプラの入力と出力のTXの電圧波形の比較です。赤がフォトカプラ入力電圧、黄色がフォトカプラ出力の電圧です。

uart.jpg

汎用フォトカプラTPC817を使用し、フォトカプラの入力には直列に330Ω抵抗、フォトカプラの出力には120Ωでプルアップしています。フォトカプラのOFF状態でも1.6V程度出ており、ピークで3V出ています。波形も鈍っており、安定してUART通信できません。

フォトカプラの受光側のフォトトランジスタに流せるコレクタ電流は最大50mA程度です。実際は定格最大が50mA程度であって、発光側の光量によっては数mA以下となります。駆動できる電流が数mA程度の場合、フォトカプラのフォトトランジスタやマイコンの入力端子、ケーブル等の静電容量の影響によって波形が鈍ってしまいます。UARTやSPIといったある程度高速な信号をやり取りする場合はトランジスタやバッファIC等で電流を増幅して伝達することが必要となります。

uart_relay_with_tr.jpg

フォトカプラの出力部分をトランジスタC1815で増幅すると上記のように波形が鈍りを低減させることができました。

BOMコスト低減のためにトランジスタやバッファICを使用したくない場合は、ADuM1200ARZといった信号用デジタルアイソレータIC、大電流対応のフォトカプラTLP250等を使用することで追加回路なしで波形の鈍りを低減できます。なお、TLP250の動作電圧10V以上ですが、仕様範囲外の3.3Vでも動作します。


uart_photo_high_current.jpg

TLP250を用いたフォトカプラの入力と出力のTXの電圧波形の比較です。


uart_photo_fet.jpg

参考になりますが、こちらはフォトカプラの出力を手持ちのパワーMOSFet、IRLU3410PBFで増幅した波形です。信号の鈍りはないものの、MOSFetのゲートの静電容量の影響を受けて波形のON、OFFの長さが完全に変わっています。これでは正しく通信できません。フォトトランジスタの出力電流や増幅回路の静電容量を考えて設計することが重要だと分かります。


フォトカプラは単純な機構なので理想的に動くと勘違いしがちです。特に通信を絶縁する場合のアプリケーションでは波形を見ながら抵抗値や増幅回路等を決定することが重要です。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする