今年もいわてメイカー展@11/28に出展します。
https://fabterrace.site/makerfesiwate/
山の地形の3Dプリントを紹介します。岩手山、鳥海山、秋田駒ヶ岳などの3Dプリントを手にとって登山路などを辿ると思い出が蘇ることでしょう。
趣味なら無料で使えるLabVIEW Communityもデモします。
あなたの自動計測をサポートします
今年もいわてメイカー展@11/28に出展します。
https://fabterrace.site/makerfesiwate/
山の地形の3Dプリントを紹介します。岩手山、鳥海山、秋田駒ヶ岳などの3Dプリントを手にとって登山路などを辿ると思い出が蘇ることでしょう。
趣味なら無料で使えるLabVIEW Communityもデモします。
LabVIEW Communityの電子ブック「LabVIEW CommunityEditionでプログラミングを楽しもう」をベースにして講習会を開催することになりました。
日 時:令和3年11月18日(木) 9:00~17:00 (受付8:30~9:00)
会 場:岩手県立大学 地域連携棟2F 組込みシステム実験室 (滝沢市巣子152-89)
アクセス: http://i-mos.iwate-pu.ac.jp/access/
対象者:LabVIEWに興味があり研究や技術開発のためにLabVIEWプログラミングを始めたいと考えている方、「LabVIEW CommunityEditionでプログラミングを楽しもう」をダウンロードして一読していただき、内容に興味を覚えた方
<無料電子ブックのダウンロードURL> http://quatsys.com/labview/1109/lvproraku.jp.html
定 員:8名(先着順)
申込期限:令和3年11月15日(月)17:00
受 講 料:無 料
詳細は下記リンクから
http://i-mos.iwate-pu.ac.jp/docs/2021101400016/
対象となりそうな方がいらっしゃったら紹介をお願いします。
今年は「チームいわて」で参加します。コロナウィルスへの対応で、チームメンバーに展示を託すリモート参加です。出展作品は次の2点です。
(1)「LabVIEW Community Edition用の無料の電子ブック紹介」
(2)「球体をテトラヘクス結合したピースによるピラミッドパズル」
LabVIEWは研究開発や工場の自動化などで使われているプログラミング環境で、計測・制御分野で強みを持っています。今年の5月に非商用であれば無料で使えるCommunity Editionがリリースされましたので、ArduinoやRaspberry Piを使っているメイカーに使い方を紹介したいと考えています。
電子ブックのダウンロードサイト
日本語版
英語版
初めてLabVIEWに触る人でもこの本だけで使いこなせるように、29個のサンプルプログラムを用意しました。きっとプログラムを動かしながら理解を深められると思います。
電子ブックの内容
1章 : LabVIEWで学ぶプログラミング
2章 : LabVIEWコミュニティ版を使ってみよう
3章 : グラフィカルプログラミングにふれる
4章 : 自分のアプリを作ってみる
5章 : LabVIEWとArduino
6章 : LEDの特性を調べてみよう
7章 : 半導体センサを使ってみる
六角形を4個並べた図形をテトラへクスと言い、7種類の図形があります。
六角形の内接円でテトラへクスを作ると下のようになります。
薄い円形の板ではなく球でピースを作ります。
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個のピースでうまく正四面体が出来上がるでしょうか?
難しいパズルだと感じるかもしれませんが、組立手順はたくさんあります。
問題です。球に外接する立体を使って同じように正四面体を作るにはどんな立体を使えば良いでしょうか?
菱形12面体と言います。表裏が120°ずれているので、表裏違いのピースが3種類増えます。表裏違いのピースを組みとして、7組14個でパズルを作ったのですが、球のパズルよりも8倍難しいと考えられます。
来場者にこんな話をしたかったのですが、今年は残念です。
壁時計に使っているESP32と32×8 LEDパネルのスケッチを書き換えてSendai Micro Maker Faire用のウェルカムボードを作りました。
使用部品と配線はESP32と32×8フルカラーLEDでデジタル壁時計をつくるを参照してください。
外装についてはデジタル壁時計の組み立てを参照してください。
英数字の5×8フォントを作って表示させたのが新しい点です。フォントデータが96行あるので見苦しいですが、それ以外はシンプルに書いたつもりです。左端から右端に向かってLEDの色が変化していくプログラムに、”フォントピクセルだけ表示する”という条件をつけています。
フォントデータはAppleⅡeの資料を見かけたのでデータ化してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
//ESP32(MH-ET LIVE ESP32 MiniKIT) //Quimat RGB LEDパネルQWS03 (8X32) //2020.01.18 Koji Ohashi MaDA Lab@Morioka Iwate Japan #include <FastLED.h> #define DATA_PIN 16 #define WIDTH 32 #define HEIGHT 8 #define NUM_LEDS (WIDTH * HEIGHT) CRGBArray<NUM_LEDS> leds; int Pos[WIDTH][HEIGHT]; boolean FontMask[WIDTH][HEIGHT]; //96 font starting from ' '(space) byte FFont[96*5]={ 0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x5F,0x00,0x00, 0x00,0x07,0x00,0x07,0x00, 0x14,0x7F,0x14,0x7F,0x14, 0x24,0x2A,0x7F,0x2A,0x12, 0x23,0x13,0x08,0x64,0x62, 0x36,0x49,0x56,0x20,0x50, 0x00,0x00,0x07,0x00,0x00, 0x00,0x1C,0x22,0x41,0x00, 0x00,0x41,0x22,0x1C,0x00, 0x22,0x14,0x7F,0x14,0x22, 0x08,0x08,0x3E,0x08,0x08, 0x00,0x40,0x30,0x00,0x00, 0x08,0x08,0x08,0x08,0x08, 0x00,0x00,0x40,0x00,0x00, 0x20,0x10,0x08,0x04,0x02, 0x3E,0x51,0x49,0x45,0x3E, 0x00,0x42,0x7F,0x40,0x00, 0x62,0x51,0x49,0x49,0x46, 0x21,0x41,0x49,0x4D,0x33, 0x18,0x14,0x12,0x7F,0x10, 0x27,0x45,0x45,0x45,0x39, 0x3C,0x4A,0x49,0x49,0x31, 0x01,0x71,0x09,0x05,0x03, 0x36,0x49,0x49,0x49,0x36, 0x46,0x49,0x49,0x29,0x1E, 0x00,0x00,0x14,0x00,0x00, 0x00,0x40,0x34,0x00,0x00, 0x08,0x14,0x22,0x41,0x00, 0x14,0x14,0x14,0x14,0x14, 0x00,0x41,0x22,0x14,0x08, 0x02,0x01,0x59,0x05,0x02, 0x3E,0x41,0x5D,0x59,0x4E, 0x7C,0x12,0x11,0x12,0x7C, 0x7F,0x49,0x49,0x49,0x36, 0x3E,0x41,0x41,0x41,0x22, 0x7F,0x41,0x41,0x41,0x3E, 0x7F,0x49,0x49,0x49,0x41, 0x7F,0x09,0x09,0x09,0x01, 0x3E,0x41,0x41,0x51,0x71, 0x7F,0x08,0x08,0x08,0x7F, 0x00,0x41,0x7F,0x41,0x00, 0x20,0x40,0x40,0x40,0x3F, 0x7F,0x08,0x14,0x22,0x41, 0x7F,0x40,0x40,0x40,0x40, 0x7F,0x02,0x0C,0x02,0x7F, 0x7F,0x04,0x08,0x10,0x7F, 0x3E,0x41,0x41,0x41,0x3E, 0x7F,0x09,0x09,0x09,0x06, 0x3E,0x41,0x51,0x21,0x5E, 0x7F,0x09,0x19,0x29,0x46, 0x26,0x49,0x49,0x49,0x32, 0x01,0x01,0x7F,0x01,0x01, 0x3F,0x40,0x40,0x40,0x3F, 0x1F,0x20,0x40,0x20,0x1F, 0x7F,0x20,0x18,0x20,0x7F, 0x63,0x14,0x08,0x14,0x63, 0x03,0x04,0x78,0x04,0x03, 0x61,0x51,0x49,0x45,0x43, 0x7F,0x7F,0x41,0x41,0x41, 0x02,0x04,0x08,0x10,0x20, 0x41,0x41,0x41,0x7F,0x7F, 0x10,0x08,0x04,0x08,0x10, 0x40,0x40,0x40,0x40,0x40, 0x00,0x01,0x02,0x04,0x00, 0x20,0x54,0x54,0x54,0x78, 0x7F,0x44,0x44,0x44,0x38, 0x38,0x44,0x44,0x44,0x44, 0x38,0x44,0x44,0x44,0x7F, 0x38,0x54,0x54,0x54,0x58, 0x08,0x7E,0x09,0x09,0x02, 0x18,0xA4,0xA4,0xA4,0x78, 0x7F,0x04,0x04,0x04,0x78, 0x00,0x44,0x7D,0x40,0x00, 0x40,0x80,0x84,0x7D,0x00, 0x00,0x7F,0x10,0x28,0x44, 0x00,0x41,0x7F,0x40,0x00, 0x7C,0x04,0x18,0x04,0x7C, 0x7C,0x04,0x04,0x04,0x78, 0x38,0x44,0x44,0x44,0x38, 0xFC,0x24,0x24,0x24,0x18, 0x18,0x24,0x24,0x24,0xFC, 0x7C,0x08,0x04,0x04,0x04, 0x48,0x54,0x54,0x54,0x24, 0x04,0x3F,0x44,0x40,0x20, 0x3C,0x40,0x40,0x20,0x7C, 0x1C,0x20,0x40,0x20,0x1C, 0x7C,0x40,0x30,0x40,0x7C, 0x44,0x28,0x10,0x28,0x44, 0x1C,0xA0,0xA0,0xA0,0x7C, 0x44,0x64,0x54,0x4C,0x44, 0x08,0x3E,0x77,0x41,0x41, 0x00,0x00,0xFF,0x00,0x00, 0x41,0x41,0x77,0x3E,0x08, 0x02,0x01,0x03,0x02,0x01, 0x2A,0x14,0x2A,0x14,0x2A, }; int count=0; //Display Word char word0[] = "Nice"; char word1[] = "to"; char word2[] = "MEET"; char word3[] = "YOU"; char word4[] = "SQUARE"; char word5[] = "CUBE"; char word6[] = "PUZZLE"; void setup() { Serial.begin(115200); FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); //LEDS.setBrightness(20); LEDS.setBrightness(40); Serial.println("WelcomeDisplay06"); initFontMask(); setPosArray(); } void loop(){ static uint8_t hue; if(count>18){ count=0;} if(count==0){ dispWord(word0,4);} if(count==2){ dispWord(word1,2);} if(count==4){ dispWord(word2,4);} if(count==6){ dispWord(word3,3);} if(count==8){ initFontMask();} if(count==9){ dispWord(word4,6);} if(count==12){ dispWord(word5,4);} if(count==15){ dispWord(word6,6);} for(int j=0;j<WIDTH;j++){ for(int i=0; i < HEIGHT; i++){ if(FontMask[j][i]==true){ int led_num=Pos[j][i]; leds[led_num] = CHSV(hue++,255,255); } } leds.fadeToBlackBy(10); FastLED.delay(50); } count=count+1; } void FontArray2BitMap(int Num, int Pos){ for(int i=0;i<5;i++){ byte font_col=FFont[Num*5+i];//FullFont for(int j=0;j<8;j++){ if((font_col & 1)==1){ FontMask[Pos+i][j]=true; } else { FontMask[Pos+i][j]=false; } font_col=font_col>>1; } } } void dispWord(char *s1,int n){ initFontMask(); for(int i=0;i<n;i++){ FontArray2BitMap(s1[i]-' ',i*5);//from space } } void setPosArray(){ for(int i=0; i < HEIGHT; i++){ for(int j=0; j < WIDTH; j++){ if(i%2==0){ Pos[j][i]=i*WIDTH+j; } else{ Pos[j][i]=(i+1)*WIDTH-j-1; } } } } void initFontMask(){ for(int i=0; i < HEIGHT; i++){ for(int j=0; j < WIDTH; j++){ FontMask[j][i]=false; } } } |
仙台マイクロメイカーフェアに出展します。( #SendaiMMF )
2020年1月25日 12:00-17:00
産業見本市会館(仙台市) サンフェスタ301
いろいろな素材で作ったスクエアキューブパズルの紹介とLabVIEW 2014 Home版で書いた解探索プログラムのデモを行います。
例年NI Daysで開催されてきたLabVIEWユーザー会ですが、今年は日本でのNI Daysがなくなったので、独自開催を計画中です。
日時は2019年12月14日(土曜日) 13:00からを予定しています。場所は未定(浜松町周辺が候補)で、11月15日ぐらいまで参加者の人数を把握して決定するようです。会費は無料ですが、会場費を割り勘で負担する予定です。
予定しているプログラムなど詳細は下記URLのEventsから確認してください。
https://jlabcon.wixsite.com/jlabcon-top
私は、NIのディスカッションフォーラム「北東北ユーザー会」で紹介したIndustrial ShieldsのM-DuinoとSIEMENSのSIMATIC IOT2020を持参します。また、Arduino UNOの互換機でFPGA機能があるXLR8も、使いこなせていませんが、持参します。
また、テトロキューブ16個で4x4x4の立方体をくみ上げるパズルのLabVIEW版を作成しているのですが、自動的に解を探索するLabVIEWプログラムを(出来たところまでですが、)紹介します。画面上でパズルで遊ぶ部分はできましたのでNIのディスカッションフォーラム「北東北ユーザー会」の別トピックスで紹介します。
LabVIEWユーザー会に関する問い合わせは上記URLからお願いします。
メイカー、ホームユーザー向け(非商用)に無料で使える「LabVIEW Community Edition」が来年以降オープンされるとのことです。NI Communityでの質疑から分かった情報をまとめます。
– LabVIEW Community Editionは非商用での利用に限り無料で使うことができます。
– LabVIEW Community EditionはLabVIEW Professional Editionと同じ機能が透かしなしで使うことができます。
LabVIEWがインストールされていないPCでも実行できるプログラムを作成することができます。従来のHome/Student Editionはフロントパネルやダイアグラムにエディション名が書かれた透かしが入っていましたが、LabVIEW Community Editionには透かしが入りません。
– Raspberry Pi, BeagleBone, ArduinoでLabVIEWを使うことができるLINXの新しいバージョンが提供されます。
– ベータ版は2019年第4四半期、正式版は2020年5月にLabVIEW2020版でリリースされる予定です。
LINXの新しいバージョンのベータ版はすでに”NI Software Technology Preview”で公開されています。2019年第4四半期にリリースされるベータ版も”NI Software Technology Preview”で公開されます。
以上(191001)
メイカーフェア東京2018に出展します。
木目のパズル「プログラミングとレーザーカッターの素敵な関係」というタイトルで「チームいわて」のメンバーとして参加します。
ブースはC/02-02です。
「LabVIEW Home版をメイカーな人たちに広めよう」ということで、FM音源モジュールを接続したArduinoに、LabVIEWから音源パラメータを送り込むプログラムをデモします。
タッチディスプレイでLabVIEWのUIをクリックすると、
パラメータがArduinoに送られて、音源モジュールのレジスタが書き換えられ、
音源もジュールからPCのマイク端子に音声信号が送られ、
LabVIEWで信号を受け取って波形とパワースペクトルが表示され、
PCのイヤホン端子から外部スピーカーで音が出る、
というものです。
今回のデモ用にたまたまHPの安いノートPCを購入したのですが、タッチディスプレイの便利さを実感しました。
ブースレイアウトを確認してパッキングしました。
(180803)
LabVIEWで画像処理するのは便利ですかと聞かれたのでデモプログラムを作成しました。NI Visionは所有していないので無料評価版を使いましたが、あと数日で期限が切れるので、期限があるうちにアップロードすることにしました。
「ビー玉を並べる作業のAVIファイルを開いてビー玉の個数と位置を表示するNI Visionのデモプログラム」
AVIファイルのフレーム取得、斜めから撮影した画像の台形補正、差分画像の生成、登録画像の検出などが使われています。
作業者が盤の上にビー玉を4個順番に置く作業をしています。作業をビデオに録画してビー玉を置いた場所や置いた順番を自動的にチェックするプログラムです。デモプログラムはAVIファイルに記録されている作業を順次再生しながらビー玉を検知して位置と個数を表示します。デモプログラムでは判定は行いません。
ファイルはNIのCommunity「北東北LabVIEWユーザー会」からダウンロードしてください。
LabVIEW2017の”評価版”で作ったものですが、LabVIEW2009版にバージョンダウンしたものもアップしています。Visionを持っていない方は最新の評価版で試してみてください。
AVIで保存するプログラムとAVIファイルのフレームをjpgで保存するプログラムもアップしています。
部品の検査で複数箇所の寸法を測定するときに、3軸ステージにセンサーを載せてセンサーを移動させて測定する場合がよくあります。安価なCNCフライス組み立てキット(送料込みで$220)を見ていると、まさに3軸ステージです。測定をLabVIEWで行うとするとCNCフライスもLabVIEWで制御した方が治具としては効率的に運用できるはずです。
この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秒待機した後、原点に戻ります。
1 2 3 4 5 6 7 8 9 10 |
プログラム [意味] G90 絶対座標 (G91:相対座標) G0 X0.0 Y0.0 Z0.0 指定座標に急速移動 G04 P3 3秒待機 G1 X20.0 Y20.0 F250 座標(20,20)に直線補完で速度250で移動 G04 P0.5 0.5秒待機 (Measure) コメント文を利用して測定タイミングを指示 G04 P3 3秒待機 G0 X0.0 Y0.0 指定座標に急速移動 M02 プログラム終了 |
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)