Maker Faire Tokyo 2020に出展します

今年は「チームいわて」で参加します。コロナウィルスへの対応で、チームメンバーに展示を託すリモート参加です。出展作品は次の2点です。
(1)「LabVIEW Community Edition用の無料の電子ブック紹介」
(2)「球体をテトラヘクス結合したピースによるピラミッドパズル」

「LabVIEW Community Edition用の無料の電子ブック紹介」

LabVIEWは研究開発や工場の自動化などで使われているプログラミング環境で、計測・制御分野で強みを持っています。今年の5月に非商用であれば無料で使えるCommunity Editionがリリースされましたので、ArduinoやRaspberry Piを使っているメイカーに使い方を紹介したいと考えています。

電子ブックのダウンロードサイト
日本語版
英語版
初めてLabVIEWに触る人でもこの本だけで使いこなせるように、29個のサンプルプログラムを用意しました。きっとプログラムを動かしながら理解を深められると思います。
電子ブックの内容
1章 : LabVIEWで学ぶプログラミング
2章 : LabVIEWコミュニティ版を使ってみよう
3章 : グラフィカルプログラミングにふれる
4章 : 自分のアプリを作ってみる
5章 : LabVIEWとArduino
6章 : LEDの特性を調べてみよう
7章 : 半導体センサを使ってみる

「球体をテトラヘクス結合したピースによるピラミッドパズル」

六角形を4個並べた図形をテトラへクスと言い、7種類の図形があります。

OLYMPUS DIGITAL CAMERA

六角形の内接円でテトラへクスを作ると下のようになります。
薄い円形の板ではなく球でピースを作ります。
7種類を2セットで、14個のピースを作るには56個の球が必要です。
56個の球を積み上げると一辺が6個の正四面体になります。
1+(1+2)+(1+2+3)+(1+2+3+4)+(1+2+3+4+5)+(1+2+3+4+5+6) = 56

さて、球体をテトラヘクス結合した14個のピースでうまく正四面体が出来上がるでしょうか?

OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA

難しいパズルだと感じるかもしれませんが、組立手順はたくさんあります。

問題です。球に外接する立体を使って同じように正四面体を作るにはどんな立体を使えば良いでしょうか?

OLYMPUS DIGITAL CAMERA

菱形12面体と言います。表裏が120°ずれているので、表裏違いのピースが3種類増えます。表裏違いのピースを組みとして、7組14個でパズルを作ったのですが、球のパズルよりも8倍難しいと考えられます。

来場者にこんな話をしたかったのですが、今年は残念です。

フルカラーウェルカムボードの製作

OLYMPUS DIGITAL CAMERA

壁時計に使っているESP32と32×8 LEDパネルのスケッチを書き換えてSendai Micro Maker Faire用のウェルカムボードを作りました。

使用部品と配線はESP32と32×8フルカラーLEDでデジタル壁時計をつくるを参照してください。
外装についてはデジタル壁時計の組み立てを参照してください。

英数字の5×8フォントを作って表示させたのが新しい点です。フォントデータが96行あるので見苦しいですが、それ以外はシンプルに書いたつもりです。左端から右端に向かってLEDの色が変化していくプログラムに、”フォントピクセルだけ表示する”という条件をつけています。

フォントデータはAppleⅡeの資料を見かけたのでデータ化してみました。

 

 

 

 

 

 

LabVIEWで画像処理、便利?

LabVIEWで画像処理するのは便利ですかと聞かれたのでデモプログラムを作成しました。NI Visionは所有していないので無料評価版を使いましたが、あと数日で期限が切れるので、期限があるうちにアップロードすることにしました。

「ビー玉を並べる作業のAVIファイルを開いてビー玉の個数と位置を表示するNI Visionのデモプログラム」

AVIファイルのフレーム取得、斜めから撮影した画像の台形補正、差分画像の生成、登録画像の検出などが使われています。

作業者が盤の上にビー玉を4個順番に置く作業をしています。作業をビデオに録画してビー玉を置いた場所や置いた順番を自動的にチェックするプログラムです。デモプログラムはAVIファイルに記録されている作業を順次再生しながらビー玉を検知して位置と個数を表示します。デモプログラムでは判定は行いません。

ファイルはNIのCommunity「北東北LabVIEWユーザー会」からダウンロードしてください。

LabVIEW2017の”評価版”で作ったものですが、LabVIEW2009版にバージョンダウンしたものもアップしています。Visionを持っていない方は最新の評価版で試してみてください。

AVIで保存するプログラムとAVIファイルのフレームをjpgで保存するプログラムもアップしています。

LabVIEWでミニCNCフライスを制御して測定治具にする方法

部品の検査で複数箇所の寸法を測定するときに、3軸ステージにセンサーを載せてセンサーを移動させて測定する場合がよくあります。安価なCNCフライス組み立てキット(送料込みで$220)を見ていると、まさに3軸ステージです。測定をLabVIEWで行うとするとCNCフライスもLabVIEWで制御した方が治具としては効率的に運用できるはずです。

OLYMPUS DIGITAL CAMERA

このCNCフライスはGrblという制御用ファームウェアでG-codeを受けてステッピングモーターのパルスと主軸用PWMを生成しています。そしてGrblはAtmega328pチップを使用するArduinoボードに書き込めるオープンソースのファームウェアなのです。CNCキットを使わない場合でも、パルスモーターを使った計測治具をArduinoとGrblを使ってLabVIEWで制御したら簡単で便利です。

さて、G-codeは3軸から6軸のCNC工作機械に使用される数値制御用プログラム言語です。NISTのG-code標準書「The NIST RS274NGC Interpreter」はありますが、メーカー毎の独自規格が用いられているようです。Grblの開発は「LinuxCNC」を参考に進められているとのことですから、Grblで使用するG-codeについてはGrblの資料とLinuxCNCがレファレンスになります。

G-codeはコマンドとパラメータを行単位で記述して機械の動作を指示します。
例えば、「G1 X30.0 Y10.0 F250」は、250という速度(F250)で、XY座標の(30.0, 10.0)まで直線的に移動(G1)するという指示です。mmやinchなどの単位系の指定や絶対座標あるいは相対座標などの座標系の選択は事前に指示されているものが使われます。

G-codeプログラムは、一連の動作をG-codeで記述したものをテキストファイルで保存します。PCからG-codeプログラムをGrblなどのファームウェアに送るアプリケーションをG-code Senderといいます。Grblで使えるG-code Senderとしては[bCNC]や[Universal G-code Sender]など多くの種類があります。フライスの軌跡表示、ボタンによるマニュアル移動、先読みバッファへの効率的なコマンド発信など機能が充実しています。LabVIEWでG-code Senderを作成する意味合いは、G-codeとGrblを使った簡便で安価な位置制御と計測とを統合することにあります。

生産者・消費者デザインパターンで、UIイベントループ、G-code送信&レスポンス受信ループを作成し、さらに測定ルーチン用にループを追加しました。G-codeではカッコ内はコメントとして受け取られるので、UIイベントループから”(measure)”を送信することで測定用のキューを生成し、測定ループの動作タイミングを作り出しています。

測定のための動作例を紹介します。ワーク座標の原点(0,0,0)に移動し、3秒待機した後、250の速度で(20,20,0)に直線補完で移動します。0.5秒待機し、(Measure)というコメントを受けます。LabVIEWプログラムでは(Measure)をトリガーにして測定を行います。測定に要する3秒待機した後、原点に戻ります。

 

GrblはAtmega328pチップを使用するArduinoボード(Uno, Duemilanove, Nano, Micro, etc)で動作します。ArduinoのSketchではありませんが、ブートローダ領域を残したまま書き込むことができるとのことです。GitHub-gnea/grblからZipファイルをダウンロードしてArduino IDEにライブラリとして追加します。サンプルフォルダにある「grblUpload.ino」を開いて「マイコンボードに書き込む」ボタンを押すと書き込まれてGrblが動き出します。

UNOの場合のピン配置は次のようになっています。
D2/D5:X軸Step Pulse / X軸Direction
D3/D6:Y軸Step Pulse / Y軸Direction
D4/D7:Z軸Step Pulse / Z軸Direction
D8:Stepper Enable/Disable
D9:X軸Limit SW
D10:Y軸Limit SW
D11:主軸PWM
D12:Z軸Limit SW
D13:主軸回転Direction

A0:Reset/Abort (DI Pullup)
A1:Feed hold (DI Pullup)
A2:Cycle Start/Resume (DI Pullup)
A3:Coolant Enable
A4:(NotUsed/Reserved)
A5:Probe

AVRチップの優れた機能を駆使して精密なタイミングと非同期の動作を実現し、30kHzまでジッターなしで制御できているとのことです。

Grblではパルスモーターなどハードウェアに関連するパラメータを$xxx変数としてEEPROM領域に記憶します。実際にX軸のStep Pulse(D2)の出力をオシロスコープで測定してみました。

パルス幅($0): 10μsec
step/mm($100): 250steps/mm
F(Feed Rate): 500mm/min
等速移動の周波数: 2.1kHz

パルス幅($0): 10μsec
step/mm($100): 250steps/mm
F(Feed Rate): 10000mm/min
等速移動の周波数: 41.5kHz

 

lv-G-SenderはLabVIEW2014以降で動作します。ダウンロードはここから。CNCが手元に無くとも、Arduino UNOと2相4線のパルスモーターとPulse/Direction入力のドライバーがあれば楽しむことができるのではないかと思います。

上記内容は10月25日のNIDays2017の会場の片隅で行われるユーザー会で紹介する予定です。

<<コメントはスパムがひどいため受け付けないようにしています。トップ画面の下の方に連絡先のメールアドレスがありますのでご連絡ください。スパムでなければメールは大歓迎です。>>

(2017.10.11)