木目のパズル「プログラミングとレーザーカッターの素敵な関係」

Wood grain puzzle “Lovely relationship between Processing programming and laser cutter”

この記事はMFT2018 (Maker Faire Tokyo 2018 )エントリーシートの予稿です。

出展者のプロフィール
レーザー加工といえばイラストレーターで図案を描いてMDFを切り抜くものという風潮に抗って、Processingプログラムでパズル図案を描いて、地元の木材をレーザーカッターで切り抜いて木目のパズルを作っています。本業は計測の自動化と解析処理用のLabVIEWプログラムを提供していますので、LabVIEWホーム版を使ったArduino+FM音源YMF825の音作りツールも紹介する予定です。

出展内容
プログラムで描いた画像をレーザー光線がたどって切り取ってくれる。画面の中の五角形が厚みを持った五角形の木片になる。ジグソーパズルの無限の組み合わせをプログラムで描いて、地元の木材でパズルを作ってみよう。絵はいらない、木目が元の場所を教えてくれるから。久慈の南部アカマツ、遠野の桜、浄法寺のウルシ、木目は木の物語。プログラミングとレーザーカッターの素敵な関係を提案します。木目のパズルを見に来てね。

ジグソーパズルの製作
(1)Processingでピースの形状をランダムに作画します。
(2)レーザーカッターで切断します。
(3)パズルの完成です。
(4)画面の図形が厚みを持ってさわれる!!!

デモビデオ「プログラミングとレーザーカッターの素敵な関係」
https://www.facebook.com/koji.ohashi.12/videos/1696150310460940/

五角形のパズル

OLYMPUS DIGITAL CAMERA

Processingでレーザー加工用図形をプログラムしよう!!

Processingって何?

たくさんあるプログラムツールの中でProcessingを選ぶ理由は四つ。
(1) オープンソースなので無料で使うことができる。
(2)図形をPDFで出力できる。
(3)グラフィック関連の関数が一通り揃っている。
(4)プログラムサンプルが豊富で使いやすい。

 

タングラムという古典的な図形パズルを例にプログラム方法を紹介します。

タングラムって何?

プログラムで作成するタングラムの図案。
図案が少し違いますが、タングラムを切断加工している様子です。
プログラムサンプル

processingでのプログラムはディスプレイに表示することを主眼に作られているのでピクセルが基本単位です。72ピクセルが1インチ(25.4mm)ですから、1mmは72/25.4ピクセルとなります。長さ100mmは100*72/25.4ピクセルとなります。つまり、欲しい寸法(mm)とプログラムで使うピクセルの変換は72/25.4を掛ければ良いだけです。

また、ドキュメントサイズを変数で指定することとPDFライブラリを使用していることに注目してください。

 

 

5V駆動のステッピングモーターを試す

28BYJ48 DC 5V 4-フェーズ5線式ステッピングモータとULN2003ドライバボード
これも去年の春に購入したまま眠っていたパーツです。中国直送で200円前後で購入できます。

便利なライブラリを見つけて動かしてみたという段階です。通常のstepperライブラリではなく、AccelStepperというライブラリを使うことでハーフステップで滑らかに駆動することができます。28BYJ-48モーターでの使い方は42Botsの記事に従いました。

回転数は1000pps(およそ15rpm)が上限で、それ以上はトルクが小さくなり指でシャフトをつまむと止まってしまいます。

 

 

美しいミニマリズムの8pinoで光る置き物を作る

最近のArduino IDEではボード追加で8pino(Trinket 8MHz)をプログラミングできるようになりました。価格は888円なので中国直送互換機には及びませんが、ボードの小ささでは群を抜いています。

I2Cの加速度センサーで姿勢を検知して傾けるとフルカラーLEDの色や光の強さが変わるようにプログラミングしてみました。

用意した機材
8pino
GY521(加速度・ジャイロセンサー)
マイコン内臓フルカラーLED

機能
加速度センサーで置き物の前後左右方向の傾きに応じて目に配置された2個のLEDの色と明るさが変化します。不感帯を設けて垂直に静止している時には光らないようにしています。

メモリーが小さいのでプログラムもミニマル目指して推敲を重ねました。「最大5,310バイトのフラッシュメモリのうち、スケッチが5,176バイト(97%)を使っています。グローバル変数は69バイトのRAMを使用しています。」

 

Arduino GPSロガー (Pro Mini 3.3V版)

道路施設の維持管理のために適切な予防保全が必要と言われていますが、人口が減少がしていく中で山間の生活道路の質を維持するために、コストをかけずに客観的な情報を蓄積していけるシステムが望まれているのではないでしょうか?

Arduino GPSロガーは路面のデコボコの振動を加速度センサーにより定量化しGPSによる位置情報とともにSDカードに記録して路面診断用のデータを蓄積するツールです。

使用するパーツ
Arduino Pro Mini 328 3.3V 8MHz(スイッチサイエンス 1,243 )
あるいは互換機 EasyWordMall Pro Mini モジュール Atmega328 3.3V 8M Arduino用 (EasyWordMall 375円)

GPS受信機キット (秋月電子通商 2200円)1PPS出力付き

マイクロSDカードスロットDIP化キット(秋月電子通商 300円)

MPU-6050 使用 3軸ジャイロスコープ・3軸加速度センサー モジュール(GY-521)(Umemoto LLC 198円)

動作の概要
電源はIoT機器用モバイルバッテリー cheero Canvas 3200mAhがお勧めです。一般的なモバイルバッテリーでは消費電力が小さすぎて自動的に給電が停止してしまいます。USBケーブルの電源線から5VをPro MiniとGPSモジュールに給電し、Pro Miniから供給される3.3VでSDとGY-521に給電します。
GPSから日付、時刻、緯度、経度、捕捉衛星数を読み取ります。加速度・ジャイロセンサーから約50msec毎に200回データを読み取り、進行方向の加速度の平均値と標準偏差、上下方向の加速度の平均値と標準偏差、左右方向の回転角速度の平均値と最大値と最小値を求めます。
測定の周期はおよそ14秒でしたが、日付から自動生成されるファイル名のファイルmm_dd.txtにカンマ区切りで追記されます。

16.12.31追記
GPSでの時刻はUTC(世界協定時)で出力されるので日本では9時間加算する必要があります。日付の繰り上がりなどを考えると面倒なのでUTCで我慢していましたが、落ち着いて考えると日本時間の9時にファイルの日付が変わるのでそれはそれで面倒です。時差を反映させるTimeというライブラリを見つけましたので、実装しました。

データ表示
オープンソースソフトウェアのQGISを使用して表示します。国土地理院のタイル地図に測定点を表示します。例として振動が大きかったポイントは赤い大きな星印、振動が少なかった地点は小さな丸印で表示しています。
結線
(Arduino Pro Mini 3.3V)
[GPS–Pro Mini]
5V–5V
GND–GND
RXD–NC
TXD–D2

[SD–Pro Mini]
DAT2–NC
DAT3–D10
CMD–D11
VDD–3.3V
CLK–D13
VSS–GND
DAT0–D12
DAT1–NC
SWB–NC
SWA–NC

[GY-521–Pro Mini]
VCC–3.3V
GND–GND
SCL–A5(SCL)
SDA–A4(SDA)
XDA–NC
XCL–NC
ADD–NC
INT–NC

[LED–Pro Mini]
RED LED–D9
GREEN LED–D8

時差対応版

UTC版

 

QGIS上でGoogle Satelliteに表示した例です。三陸海岸を探索していた軌跡です。

ACC4LVでMPU-6050を使ってみる

** LabVIEW Advent Calendar 2016 ** 2016年12月3日の記事です。

MPU-6050は加速度3軸とジャイロ3軸を内蔵したI2C接続のセンサーで、GY521というモジュールで安価に入手することができます。私は安いので海外直送のGY521を使っていますが、中国から送料無料で商売になるのが不思議です。

仕様書にはジャイロはフルスケール(±250, ±500, ±1000, あるいは±2000°/sec (dps)) を16ビットADC、加速度はフルスケール(±2g, ±4g, ±8g, あるいは±16g)を16ビットADCで測定し、OUTPUT DATA RATEはジャイロが最大8kHz、加速度が最大1kHzと書かれています。

Arduinoはお気に入りのESP8266WiFiモジュールです。使い勝手が良いESPr Developer(ESP-WROOM-02開発ボード)を使います。Arduinoでの使い方は購入元のページにリンクがあります。LabVIEWでプログラムを書いてコンパイルして書き込む場合でも、初めにArduinoで基本的な動作を確認するのが良いでしょう。Arduinoが初めての場合はArduino UNOからスタートするのが苦労が少ないと思います。中国直送の互換ボードは安いし、(経験上)きちんと動きますが、USBシリアル変換チップがCH340なので、ネットでドライバーを探してくる必要があるかもしれません。

pb280115

ESPr DeveloperとGY521との接続は4本だけです。
3.3V <—> VCC
GND <—> GND
SCL <—> IO5
SDA <—> IO4

Arduinoでの動作確認のためのサンプルプログラムはArduino Plyagroundのものを使いました。LabVIEWへの移植も基本的にはこれに従いました。

LabVIEWでArduinoにプログラムを書くことができるツールが「Arduino™ Compatible Compiler for LabVIEW」です。名前が長いのでACC4LVと縮めて書いています。使える関数が限定されているサブセット版なので多少の工夫が必要です。例えばU16からI16への変換がありません。どうしましょ。

 

Arduinoのサンプルを素直に移植するとこんな感じです。
mpu-8050d

 

14要素のU8配列を7要素のI16に変換します。U8を2個を上位、下位で合わせてU16になるのですが、I16にする必要があります。U16–>I16の変換はACC4LVには無いので、加算で出力をI16にしています。
sub__rawtoi16d

I16を加速度、温度、ジャイロの単位に変換します。
sub__i16tovalued

シリアル出力用の文字列に変換します。
sub__valuetostringd

 

では、では、

 

テクノ手芸 – 音に反応するネコ

声をかけると目が光りシッポをブルブルさせるフェルトのネコです。

R0014918s

R0014916s

主な部品
Arduino Nano (5V 16MHz)互換ボード
SPW2430搭載 シリコンMEMSマイクモジュール
円盤型 振動モーター(2個入)
導電糸

配線
マイクDC出力:A0
LED+:D5, D9
LED-:D12 (GND) 導電糸引き回し軽減のため
振動モーター:D3

スケッチ(Mic_DelayedReaction-nano12f)

ノイズ除去のために3回測定して中央値をデータとします。そのデータを要素100のdata[]に格納します。100個のデータから標準偏差を計算して音の大きさとします。

音に対するLEDと振動モーターの反応は、音を受けて間を置いてLEDが光り、さらに遅れて振動モーターが動作するようにしています。音の大きさを要素50個のtimeShift[]にリングバッファー状に格納します。LEDと振動モーターのデータは指標をシフトさせて読み込みます。

振動モーターが振動した音をマイクが拾って反応が止まらなくなりますので、要素30個のvibHistory[]に振動モーターへの出力を記録して振動モーターの動作中は音を格納しないようにします。

 

ESP8266気象ユニット(1) – 温湿度・気圧センサー

温湿度・気圧センサーモジュールBME280から温度、湿度、気圧データを取得します。

使用する主なもの
ESP-WROOM-02ピッチ変換済みモジュール《フル版》
BME280使用 温湿度・気圧センサモジュールキット
FT231X USBシリアル変換モジュール

接続
ESP-WROOM-02 ———- 接続先
3V3 ———- 3.3V電源
EN ———- Pull UP
IO14 ———- NC
IO12 ———- NC
IO13 ———- LED+ (LED-は100Ω経由GND)
IO15 ———- Pull DOWN
IO2 ———- NC
IO0 ———- DTR# (FT231X)

GND ———- GND
IO16 ———- NC
TOUT ———- NC
RST ———- 書き込み時 RTS# (FT231X)/実行時 NC
IO5 ———- SCK (BME280)
TXD ———- RXD (FT231X)
RXD ———- TXD (FT231X)
IO4 ———- SDI (BME280)

電源
3端子レギュレーター (NJU723F33 3.3V 500mA)
Pin 1 ———-3.3V出力 (GNDと0.1μFセラミックコンデンサ)
Pin 2 ———-外部電源入力(バッテリーなど) (GNDと0.1μFセラミックコンデンサ)
Pin 3 ———-GND

Arduino IDEの設定
スイッチサイエンスの記事「ESP-WROOM-02開発ボードをArduino IDEで開発する方法」参照

スケッチの書き込みと実行
書き込み時はRSTにRTS# (FT231X)を接続、実行時はRSTはNCで電源OFF-ON

R0015091s

出力例
Temp=28.64
Humidity=55.35
Pressure=989.70

 

WiFiサウンドセンサー

ヘッドフォンをかけていたり、大きめの音で音楽を聴いていると玄関のお客さんに気がつかないことがありますね。WiFiサウンドセンサーは離れた場所の物音や振動をマイクで検知して、LEDの光で知らせてくれます。

R0014992s
R0015003s

主な部品
「Board1 ver.1.0」ESP-WROOM-02搭載モジュール:2個
マイコン内蔵RGB 5mmLED:2個
SPW2430搭載 シリコンMEMSマイクモジュール:1個

受信側のスケッチ

送信側のスケッチ