HomeAboutMeArticlesDiaryModelViewerLinksContact

Arduino と Firefly で加速度を取得

05 September, 2015 - 1 min read - Tags: Grasshopper,Firefly,Arduino,構造とデジタル

以前の記事で ゾーベックの超軽量構造:スマートシェル   というものを取り上げました。シェル形状の最適化を行いましたが、実際のシェルの状況をどのように取得するかが問題でした。ひずみゲージや加速度計などの機器を使えば状態の取得は可能ですが、あまり身近なものではなく、かつ高価です。
ですが、近年では Arduino などのマイコンの登場で、比較的安くこれらのデバイスを自分で作成することが可能になりつつあります。そこで、ここでは、Arduino を使用した加速度計を作成し、Grasshopper に取り込むまでの手順をまとめます。
加速度を取得することにより、ものの固有周期が分かるため、質量の予測ができれば
T = 2π√(m/k)
の関係より、対象物の剛性を評価することが可能になり、その値からアクチュエーター等の操作を行えば、現実のフィードバックを受けながら形状最適化ができるようになります。

始めに、Arduino を使用した加速度計の作成を行います。ですが、それについてはすでにネットに多くの記事があるので、ここでは説明しません。ちなみに、私は「第 17 回 Arduino でパーツやセンサを使ってみよう~加速度センサ編(その1)」を参考に作成しました。
完成したものがこちら、白い板の真ん中にある四角い黒いものが加速度計です。

作成したものは基本的には、リンクを表示したサイトのものと同様ですが、加速度計と Arduino を繋ぐ位置だけ変えており、

  • X → A0
  • Y → A1
  • Z → A2

としてあります。

次に、Grasshopper と Arduino を接続します。接続には Grasshopper のアドインである Firefly を使用します。これは、Arduino だけでなく、Microsoft の Kinect や、任天堂の Wii リモコンなどのデータも取得できるもので、HP のトップには「Design Interactively.」とあり、インタラクティブなデザインを実現することを目標としているようです。

では実際に使用してみます。Firefly が Arduino とデータのやり取りをするために、Arduino に書き込むプログラムが、Firefly をインストールすると付いて来ます。ですが、私が使用した時は、エラーがでてうまく連携できなかったため、INPUT 部分だけを取得するように、下記図中のコードを作成して使用しています。

Grasshopper 側では、始めに Ports Available コンポーネントで Arduino が接続されているポートを確認します。これは Arduino IDE でも確認可能です。

次に Open Port コンポーネントを使用してポートをオープンにします。これは、Arduino と Grasshopper をつなげるような役割をします。Open のインプットに対して True か False で設定するのですが、True の場合は Grasshopper と Arduino がつながっているため、Arduino IDE 側からはアクセスできくなるので注意しましょう。接続が完了すると Msg の部分から Hooray ! (やったね!のような感嘆の意味)が表示されるようになります。

接続が確認されたら Uno Read コンポーネントを使用して、Arduino から出力されてくるデータの取得を行います。ここでも True or False での入力によって、データの取得をアクティブにするかどうか設定できます。True にするとデータの取得をしますが、一度しか取得しないので、Timer コンポーネントでデータの更新の指定をしましょう。ここでは、Arduino への設定でデータ取得を 50ms としているので、Grasshopper 側もそれに合わせて 50ms での更新としました。そうすることによって、リアルタイムで加速度計のデータを取得することができます。

次に、加速度計のキャリブレーションを行います。加速度計は、取得した加速度を 0 ~ 1024 の電圧の範囲で出力します。使用している KXR94-2050 は ±2 gが測定レンジなので、512 が加速度 0 に相当します。ですが、取り付け状況や、加速度計の個体差から、必ずしもそうはなりません。これは加速度計の取扱説明書にも書いてありました。実際の値をみて頂くとわかりますが、今回も X の例をとれば、水平にしていても値は 509 となっています。

そこで、初期値を引いて 0 になるようにし、その修正した値が 512 のとき 1g、すなわち 9.80655m/s2 を示すように 26.10474 をかけてあげることで、m/s2 単位での加速度を取得することができます。
ですが、このままでは、ノイズが多いので、何かの窓関数を使用して、値を調節することが必要になります。

これで加速度が取得できたので、次の記事では、固有周期の取得から剛性の算出を目指します。

© 2021 hrntsm / Built with

Gatsby