かんたんな図を描いて仕事を進める

最近技術的なアドバイスをするシーンが増えていて「図にしてみましょうか」ってよく言っています。また、プロジェクトが複雑化したときにも図で整理をします。この文脈で使う図は、作ろうとしているシステム全体を把握する概念的な図です。世間的にはポンチ絵、またはブロック図と呼ばれている図です。

この図はUMLの図や回路図のような厳密なものではない、というのがポイントです。

実例

『自分の顔を探せ!』のシステム構成図

ICCで数年間展示していた『自分の顔を探せ!』というシステムを作るときに描いた図です。これを描いてシステムに必要なデバイス、開発すべきプログラム、連携の方法を肉付けしていきました。簡単に直したいのでフリクションで描いてました。この図を描いてMTGした時に、プレゼン用リモコンはMIDIコントローラの方で代替できるからいらんねとなった記憶があります。

組み換えが多いと想定される時はプレゼンテーションソフト等を使うのがオススメです。

図をきれいにする

写真撮って出しではなく一手間かけると一気にそれっぽくなります。

上記実例図の元の写真

写真を撮るときのコツ

  • できるだけ正面から撮る
  • 照明環境が画面全体で均一になるように撮る

パソコンでやる場合

クロップ→グレースケール化→レベル補正またはトーンカーブ

プレビュー.appのレベル補正でやった時の設定
GIMPのトーンカーブでやった時の設定

スマホでやる場合

専用のアプリを使うほうが楽です。色々使って一番良かったのはAdobe Scanでした。次点がCam Scanner。Adobe ScanはPDF出力しか出来ないので、面倒な時はスキャンのプレビュー結果をスクショして使っています笑

スマホの方が台形補正もいっぺんにやってくれるので斜めから撮った写真しかない時はスマホの方が楽かも。

絵心がないよって不安な人は?

絵心は不要なのでとにかく描けって言いたいところなのですが、絵のトレーニングをオススメするほうがWinWinだと思いますので参考書籍を置いておきます。

『VISUAL THINKING』に載っているトレーニングは本当に便利でした。アイデア出しを絵でやる時に絵心ないから出来ませんって人がいた時に、この本に載っているトレーニングを事前に全員でやって、その抵抗を打ち破ることが出来ました。トレーニングと言っても正確に描くデッサンではなくて、アイデアを伝えるための絵を最速で描く方法を教えてくれるのが肝です。

『アイデアスケッチ』は岐阜のIAMASで生まれた手法です。こちらも同じくアイデアを伝えるためにスケッチを再定義し、誰でも簡単に描ける技法として構成したものです。スケッチ自体から始まってアイデアを生成するワークショップにまで発展しているので、そちらに興味がある人はこちらの本もおすすめです。

どちらもBNN新社なので、回し者みたいですが関係はありません。この2つに確か共通していたのですが、太いペンを使うと適当に描いてもそれっぽく見えるので重要です。細かく描きたいんだ!って時はデカく描きましょう。

それでは良い適当な図ライフを〜。

オリエンタルモーターの電動スライダEASシリーズをArduinoから動かす


オリエンタルモーターの電動スライダEASシリーズの動作

電動スライダは、こちらの動画のような1軸の直線上に動く装置です。今回使ったのはオリエンタルモーター社のEAS4RNX-E040-ARAKD-1です。オリエンタルモーターは値段も書いてあるし取説もすぐダウンロード出来るので、他メーカーと違って連絡無しに買えるから楽です*1。また、モーター部とメカ部が一緒にまとまってるのでバラバラに買わなくていいのもメリットでした。

これをArduinoから動かしました。こちらの電動スライダーはモータードライバーが付属しています。モータードライバーは位置決め機能内蔵タイプ。RS-485上でmodbusプロトコルで通信可能になっており、Arduinoとの通信はこれを使います。

Arduino側はArduino MKR 485 Shieldというものを使います。このShieldが使えるのはArduino MKRシリーズのみなのでArduinoの選択肢は限られてきます。

物理的な接続

f:id:miso_engine:20210120105259j:plain
モータードライバー側でRS-485通信で使うジャックはRJ-45なので、Ethernetケーブルが刺さります。Ehternetケーブルの片方を剥いてArduino MKR 485 Shieldに繋げるのが一番手軽でした。3本の線を下記表のように繋げます。

ケーブルの色 ドライバー側端子 Shield側端子
オレンジ GND GND
緑白 TR+ Y
TR- Z

modbusでの通信

必要ライブラリ

  • ArduinoModbus
  • ArduinoRS485

モータードライバー側へのレジスタ書き込みのみ確認しています。ModbusRTUClientのbegin関数を呼んでからholdingRegisterWrite関数を使います。引数は3つ、スレーブIDの指定、動作コマンド指定、書き込み内容です。

最もよく使うコマンド 0x007D

「ドライバ入力指令(下位)」です。上位を使わないので下位だけで大丈夫です。これを使うと実際にスライダーを動かす指令やホーミングなどを命令出来ます。ただ、一回書き込むと命令は実行されなくて、すぐに0x0000を書き込んで内容を消してやると動きました。本番のシステムでは念の為0x0000書き込みを本命令の前後に入れる処理を入れました。サンプルとしてここに置いておきます。

void Homing() {
  uint16_t value = 0x0010;

  ModbusRTUClient.holdingRegisterWrite(1, 0x007D, 0x0000);
  delay(50);
  ModbusRTUClient.holdingRegisterWrite(1, 0x007D, value);
  delay(50);
  ModbusRTUClient.holdingRegisterWrite(1, 0x007D, 0x0000);
}

おまけ

開発するならPC接続ケーブルは買ってPCから設定その他出来るようにしておくのはマストです。PCで動くサポートソフトMEXE02はWindowsのみで動作。Ver4も出ていますが、ARシリーズの場合はVer3でないと動きません。電動スライダー用設定ファイルというものがあって、それをMEXE02から入れると、設定パラメータの単位がピッタリ(ex.目標位置が0.1mm単位設定)になって楽になりました。

CC05IF-USB|オリエンタルモーター株式会社

たまには宣伝

こういう動き系とかチョコッとしたシステム頼めないかなぁと思ったら弊社までご相談くださいませ。

*1:でも選定に困ったら連絡するとめっちゃ相談してもらえるそうです

ArduinoでSDカードからカンマ区切りのデータを読み出してパースする

csv形式でコマンドを書いてそれをArduinoでパースしたのでコードを共有します。パース部分はこちら(カンマ区切りのデータをarduinoのシリアルで受け取り配列に入れたい - Qiita)の記事を参考にParseElements関数に切り出しました。

呼び出し側のReadCommnadFromSD関数では改行コード毎にParseElements関数を呼び出す仕組みにしています。while文の中で必要な処理を書いてました。

void ReadCommandFromSD() {
  File myFile = SD.open("test.txt");
  
  while (myFile.available()) {
    String source = myFile.readStringUntil('\n');
    String elements[9];
    ParseElements(source, elements, 9);
  }
}

void ParseElements(String sourceStr, String *elements, unsigned int elements_size){
  int beginIndex = 0;
  for (int i = 0; i < elements_size; i++) {
    unsigned int endIndex;
    endIndex = sourceStr.indexOf(',', beginIndex);
    if (endIndex != -1) {
      elements[i] = sourceStr.substring(beginIndex, endIndex);
      beginIndex = endIndex + 1;
    } else {
      elements[i] = sourceStr.substring(beginIndex);
      break;
    }
  }
}