Arduinoで作る浮遊光球

by ArduinoDeXXX in Circuits > Art

25691 Views, 29 Favorites, 0 Comments

Arduinoで作る浮遊光球

IMG_4365_m.jpg
IMG_4292.JPG
IMG_4293.JPG

Instructablesに 「Levitating Death Star」 という記事があります。市販の浮遊地球儀を使って、「デス・スター」の模型を作ったものです。美しいビジュアルもさることながら、使用した地球儀に関心をそそられました。そこで早速、永久磁石を複数使って静的な浮上を試してみたのですが、これは難しいことが分かりました(*)。

(*)Webで調べると、この困難は「アーンショウの定理」(参考A参考B)で保証されているようです。一方で、この定理の間隙を縫った知育玩具もあるようです(参考C)。

そこで、電磁石とArduinoを使って新たな工作を行うことにしました。上記の記事と差異は下記の3点です。

  • 既製の市販品は(なるべく)使わない
  • 球体の回転を持続させる
  • 球体に電池を入れない


VIDEO(1): 浮遊球体の回転、発光、点滅


ここでは最初の浮上トライアルから、室内装飾としての組み立てまで、作業を段階的に紹介します。手元にArduinoがあれば、1000円程度の予算で着手できます。是非コイルを巻いてチャレンジしてみてください。

(*) The English translation was published in Instructables also.

【勘所】 振動と対策

Step1.png

ネオジム磁石を使えば、10行ほどの至極簡単なプログラムと少しの材料で、50g程度の物体を空中浮揚できます。主な作業は、鉄芯入りの電磁石(コイル)を巻くだけです。このコイルを指でつまんで磁石の上に近づけると、拍子抜けするほど簡単に空中に浮き上がります。

しかし、「空中浮揚の試行」から、「空中浮遊器の試作」に移ろうとすると厄介な問題が生じます。それは浮遊している物体(磁石付き)の振動です。振動の大きさが微細なら良いのですが、多くの場合、振動は徐々に大きくなり、最終的に落下したり、上方の電磁石に張り付いてしまいます。またこの振動の問題は、浮遊物体にLEDを取り付けて、これを無線で光らせようとすると一層顕著になります。

この振動を抑えるには、何らかのダンパ(アブソーバ)を浮遊機器に追加する必要があります。この時、もし浮遊している物体(永久磁石)と電磁石との距離を連続的かつ正確に評価できるなら、物理的な材料を使わず、プログラムを少し修正するだけで仮想的なダンパを実現できます。

一方この工作では、安価で扱いやすい磁気センサを使ってこの距離を評価します。この時、センサの出力値は制御で生じる磁界の変化(ノイズ)の影響を受けるため、この距離の動的かつ正確な評価は簡単ではありません。ノイズを除去(フィルタリング)するには、適当な処理をプログラムに加える必要がありますが、この処理をArduinoで行うのが難しいとしたら、物理的なダンパの追加が求められます。

材料

IMG_4491_m.jpg
IMG_4528_m.jpg
IMG_4495.JPG

ここでは簡単な空中浮揚の試行から最終的な機器の作成まで、必要な材料を段階別に紹介します。

最初は、最もシンプルな道具立てで空中浮揚の試行を行います。この試行の材料は、下記の【浮揚システム】に記載しています(本ステップの最初の写真も参照)。この試行では、20mの銅線を巻いて電磁石を作り、これを指でつまんで磁石付きの物体を浮揚させます。この試行で最も重要なのは、十分な計測範囲を持った磁気センサ(ホール効果センサ)を用意することです。下記のセンサを用いれば、50g程度の物体まで浮揚できるはずです。

【浮揚システム】

  • Arduino UNO
  • 軟鉄製の六角ボルトとナット(5mm径、40mm長)・・・電磁石のコアになります
  • 軟鉄製のボルト用スペーサ(5mm径、20mm長)・・・ボルトのネジ山から銅線を守ります
  • ステンレス製の大径ワッシャ(外径20mm、内径5mm、2枚)・・・電磁石のフランジになります
  • 絶縁コーティング銅線(0.4mm径、20m長)・・・2枚のワッシャに挟まれたスペーサに巻きつけます
  • モータ・ドライバIC: Toshiba TA7291P
  • ホール効果センサ: Allegro UGN3503UA
  • ネオジム磁石(10~13mm径、2mm厚、3~4個): 私は100円ショップで買いました
  • 電磁石用の電源(5-6V): 単3電池4本でOKです


第一段階の浮揚実験が終わったら、次は「空中浮遊機器」の作成に移ります。まず適当なフレームを作り、浮揚に用いる電磁石をこれに取り付けます。また見栄えを良くするために電気部品を目隠します。さらに装飾品としてインパクトを持たせるために、浮遊物体にLEDを取り付け、これを無線で光らせながら回転させます。これらに必要な材料は、それぞれ【懸架フレーム】【無線光球】【回転装置】にまとめています(本ステップの2枚目と3枚目の写真も参照)。

【懸架フレーム】

  • ステンレス製のL字金具(2つ)
  • ステンレス製のボウル(150mm径)
  • ステンレス製のボルトとナット(5~6組)・・・金具やボウルの接続用
  • 低反発ウレタン・シート(5mm厚)
  • Arduino用の電源(9~12V)


【無線光球】


【回転装置】

  • 小型の電動ファン(5~6V用)
  • ステンレス製の小型のL字金具とステー・・・懸架フレームにファンを取り付ける部材として
  • ステンレス製のボルトとナット(2~3組)・・・同上

Arduinoで空中浮遊

TA7291P3.png

ここではコイルを指でつまんで磁気浮揚を試します。本ステップの内容を一読して作業を開始すれば、想像より簡単に浮揚に成功すると思います。

まず前ステップの【浮揚システム】の材料を用意します。次に浮揚用の電磁石を作ります。作り方はステップ9を参照してください。電磁石ができたら、上の図を見ながら部品の配線を行います。配線が済んだら、本ステップの最後に添付しているサンプル・スケッチ 「levitate_with_BangBang.pdf」の内容をArduinoにアップロードします。

なお、この試行で最も重要なのは、十分な計測範囲を持つ磁気センサ(ホール効果センサ)を用意することです。ここでは、このセンサを電磁石のコア(軟鉄製ボルト)の頭に取り付けます。取り付けは少し厚めの両面テープとセロハン・テープを使います(ステップ9の写真参照)。これにより、センサや電磁石の動作不良への対応が容易になります。

下記のVIDEO(2)は、計測範囲が狭いセンサを用いた浮揚実験の様子です。この実験では、5gを超える物体の浮揚は困難でした。これに対し、その下のVIDEO(3)は、センサを前ステップで紹介したものに代えたものです。このセンサを使うと、50g程度の物体も浮揚できます。


VIDEO(2): 計測範囲が狭い磁気センサを使った浮揚の試行


VIDEO(3): 計測範囲が広いセンサに交換した浮揚の試行


下に添付したサンプル・プログラムを見て分かるように、浮揚の制御は至極簡素なものです。しかしこれで、ネオジム磁石を付けた50g程度の物体を浮揚させることができます。ネオジム磁石は、2~4個ほど重ねて使うと浮揚が安定します(電磁石との間隙も広がります)。なお、磁石は浮揚時にS極が上向きになるように取り付けてください。

また、モータ・ドライバIC(ピン2と10)と電磁石の接続は任意ではないので、浮遊が上手くいくように接続して下さい。それでも浮揚が安定しない時は、プログラムの中の閾値(200)を少し変えてみてください。上手く浮揚している間は、電流の向きが高速で変わるため、指に軽い振動が伝わります。

空中浮遊の改良

IMG_4474_m.jpg

磁気浮揚の能力、すなわち浮揚物体の質量の上限は、前ステップで見たように、使用する磁気センサの計測可能範囲に依存します。

一方、電磁石が作り出す外部磁界が良質であれば、同じセンサを使って磁気浮揚の能力を改善できるかもしれません。そこで、外部磁界がなるべく均質になるように、コアになる軟鉄ボルトの六角形の角を削って丸くしてみました。

その結果、磁気浮揚の能力が整形前の2倍近く向上し、100gを超える物体も浮揚できました。ただし、ボルトの頭を削りすぎて小さくすると、磁気浮揚の能力は逆に低下するので注意してください。

VIDEO(4): ボルトの頭を丸く削った浮揚実験

浮遊コイルの固定

step5.jpg
IMG_4515.JPG
IMG_4033_m.jpg

ステップ3と4では、電磁石を指でつまんで磁気浮揚を行いました。ここでは、それなりに見栄えの良いフレームを作り、これに電磁石を取り付けます。

フレームに磁化しやすい鉄製の部品を使うと、いろいろ面倒なことになります。木材、プラスチック、アルミニウムなどであれば心配ないですが、ここでは質感および入手と組み立ての容易さの観点から、ステンレス製の金具とボウルを用います。なおこれらのステンレス製品は、程度の差はあれ磁化します。

組み立てたステンレス製のフレームに電磁石を取り付けて空中浮遊を試したところ、浮揚物体は空中で安定せず、上下に振動するようになりました。またこの振動は徐々に大きくなり、最終的に床に落ちたり、上方の電磁石に吸いついたりします。

そこで思い出されるのが、ステップ3の浮揚試行で指先に感じた軽い振動です。電磁石を指でつまんだ試行では、指がクッションの役目を果たして振動を吸収し、浮揚物体の振動(もしくは共振)を抑えていたと考えられます。しかし、ステンレス製のフレームと電磁石との間にはそうした緩衝材はありません。

したがって、何らかの緩衝装置を追加すれば、浮遊が安定するかもしれません。そこでまず、物理的な材料を使わずに、プログラム上で仮想的な緩衝装置(ダンパ)を実現できないか試してみました。しかしこれは予想外に難しく、安定的な浮遊はなかなか実現できませんでした。(下記のVIDEO(5)の冒頭では、物理的ダンパなしで安定的な空中浮遊が実現できていますが、これはレア・ケースです。)

原因を分析したいところですが、Arduinoでシリアル通信を行うと処理速度が低下するため、実際の状態はよくつかめません。また、浮揚の制御で生じる磁場の影響がセンサの出力に混入するため、浮遊物体の位置や動きの正確な評価も困難です。そこで、状態と制御のモデルを作り、Excelのスプレッド・シートでシミュレーションを行いました(*)。その結果、下記の傾向を確認することができました。

(*)シミュレータの作成は簡単ではないので詳細は割愛します。電磁石が作る外部磁界のモデルをwebで調べましたが適当なものはなかなか見当たりませんでした。最終的に参照したのは次の2つの解説です(解説A解説B)。

(1) 浮遊物体と電磁石の距離を正確かつ高頻度で計測できるならば、単純なPD制御をプログラムに書き足すことで振動を抑制できる

しかし、磁気センサの出力値は、電磁石が作り出す磁場の変化(ノイズ)の影響を受けるため、浮遊物体の位置の正確な評価は容易ではありません。

(2) このノイズの変化は周期性を持つが、そのパターンは諸条件に依存するため、この変化パターンを利用してノイズを除去するのも容易ではない

(3) このノイズ込みのセンサ出力を移動平均のような単純な方法で処理しても、浮遊の振動を抑えるのは困難である

(4) 物理的な緩衝材(ダンパ)は、たとえそれが弱くて貧弱なものだとしても、振動による浮遊の失敗を劇的に改善する

(5) 処理周期が1ミリ秒程度の場合、処理時間の短縮化は非常に重要である(上のグラフ参照)

以上のシミュレーション結果を受けて、低反発のウレタン・シートの小片をフレームと電磁石の間に挟みました。さらに、PD制御に基づく下記のサンプル・プログラム 「levitate_with_PD.pdf」 の内容をArduinoに新たにアップロードしました。その結果、しつこい振動が消え、安定的な浮遊を実現できました。


VIDEO(5): ステンレス製フレームの下での磁気浮遊

浮遊物体の回転

IMG_4360_a.jpg
IMG_4487_a.jpg
IMG_4098_a.jpg

前ステップでは磁気浮遊の機器を作りました。ここでは、これに浮遊物体の回転機構を追加します。

浮遊物体を持続的に回転させる方法は幾つか考えられます。例えば、電磁石と磁気センサをもう一組用意して、浮遊物体の側面に別の磁石を付ければ、浮遊物体の回転をかなり自由にコントロールできます。VIDEO(6)は、追加の磁気センサを使わずマニュアルで制御していますが、これは「シャフトなし・ブラシなし」モータと言えるかもしれません。


VIDEO(6): シャフトレス&ブラシレス・モータ


しかし装飾品として部屋に置くだけなら、この機構は過剰装備の気がします。そこで、上昇気流で物体を回転させる方法を試してみました。具体的には、浮遊物体の下部にプロペラ(風車)を付けて、その下に湯を入れたカップを置いてみました。その結果、条件が良いと極低速で回転しますが、十分な回転を得るのは難しいことが分かりました。

そこで今度は、直径2cm程度の小さな電動ファンを試しました。このファンを浮遊物体の斜め後方に置いてみたところ、十分な回転を維持できることが分かりました。なお、このファンの電源は、Arduino、浮揚コイルもしくは後述のジュール・シーフと共有できます。また、ファンの角度を変えることで、浮遊物体の回転速度を自由にコントロールできます。

【追記:2017年4月】
先日、球体がファンの風と逆方向に回っているのを見つけました。そこでファンを外してみたところ、回転速度が上がりました。おそらく、ステップ8で付けたジュール・シーフ用のコイルがモータとして動作しているものと思われます。

無線LEDの点灯

Untitled Sketch_回路図_1.jpg
Untitled Sketch_1_回路図a.jpg
IMG_4091_m.jpg

ジュール・シーフは、単三電池1本でLEDを点灯できるシンプルで巧妙な仕組みです。これに受信用のコイルを追加すれば、LEDを無線で点灯できます。ここでは、透明もしくは半透明のプラスチック球に無線で点灯するLEDを格納して、これを浮遊、回転させます。

無線でLEDを点灯するための材料は、ステップ2【無線光球】の下に記載しています。本ステップ冒頭の配線図を見ながらこれらの部品を組み立てると、LEDを無線で点灯できます。なお、ここでは、送信用と受信用のコイルをそれぞれ用意する必要があります。これらの作り方はステップ9を参照してください。

最初は、無線で光るLEDを一つ取り付けるところからスタートします。この時重要なのは、良質な電源の確保です。Arduinoの動作電源の電圧が低い(USBによる5V給電等)、もしくはジュール・シーフ(送信側)の電源を浮揚系と共有するケースでは、浮遊が不安定になる傾向があります。安定した浮遊を維持するには、Arduinoに十分な電圧(9~12V)を供給するとともに、浮揚系とジュール・シーフにそれぞれ独立した電源を手当てした方が良いと思います。

なお、浮揚系の磁気センサの出力ラインに、ジュール・シーフの部品(特に送信用コイル)を近付けると、浮遊が不安定になり落下します。このため、ジュール・シーフの部品は、この出力ラインやArduinoからできるだけ離して配置します。またGNDの共有も避けた方が良いと思います。さらに慎重を期す場合、コイル以外のジュール・シーフの部品は、鉄製の容器に格納してください(次のステップの3つめの写真参照)。

以上の作業により、電池が入っていないプラスチック球が、浮いて回って光ります。ただ、LEDが1つだと少し寂しいかもしれません。下のVIDEO(7)の冒頭では、白と赤の2色のLEDを並列につないで彩りを演出しています(上の2つ目の回路図参照)。


VIDEO(7): 浮遊球体の回転と発光

追加LEDの点滅

Untitled Sketch_回路図.jpg
IMG_4481.JPG
IMG_4535.JPG

前ステップのVIDEO(7)では、浮遊球体の中の白と赤のLEDが無線で点灯しています。これら2つのLEDは、1つの受信用コイルに並列に接続されています。ただし明るさを維持するために、極性は逆向きにセットしています(前ステップの2つ目の回路図参照)。

しかし実際には、LEDを追加すると、最初のLEDの輝度はかなり低下します。そこで、各LEDに対して、それぞれ専用の受信コイルを作って接続します。これらの受信コイルを積み重ねて、浮遊球体の底部に取り付けると、輝度の低下がかなり抑えられることが分かります。ちなみに、前ステップの3つ目の写真は、受信コイルをLED毎に手当てして撮影したものです。

このように、無線ジュール・シーフの受信コイルを複数用意すれば、複数のLEDを無線で点灯でき、輝度の低下もかなり抑えられます。そこでさらに送信側に新たなコイルを追加すると、常時点灯のLEDと別に、点滅を繰り返すLEDを同時に演出できます。

そのためには、上の配線図を見て新たな送信用コイルを追加します(作り方はステップ9参照)。次に、球体の底部に積み重ねていた受信用コイルを離して、球体の底部とその近傍に重ねずに配置します(上の2つめの写真参照)。そこで改めてこの球体を浮かせて回すと、底部に取り付けた受信コイルに繋がるLEDは常時点灯し、その傍に取り付けた受信コイルに繋がるLEDは定期的に点滅を繰り返します。

なお、上の回路図の無線ジュール・シーフで用いるコイルの作り方と設置方法は、浮揚系の電磁石の作り方と併せて、次のステップ9で解説しています。


VIDEO(8): 浮遊球体の回転、発光、点滅

【補足】 コイルの作成と取付け

IMG_4524.JPG
IMG_4519.JPG
IMG_4025.JPG
IMG_4031.JPG

前ステップで完成した浮遊機器には、全部で6つのコイルが使われています(小型ファン内部のコイルを除く)。その内の1つは、浮揚系の一部としてフレーム上部に取り付けられます。このコイルは2枚のステンレス製ワッシャに挟まれた鉄芯の周りに、直径0.4mmの絶縁コーティング銅線を20m巻いて作られます。鉄芯は内径5mmの軟鉄スペーサ(長さ20mm)に同じ直径の軟鉄ボルト(長さ40mm以上)を刺したものです。

これに対し、残り5つのコイルは無線ジュール・シーフの部品として使われます。この内2つは送信側で、あとの3つは受信側になります。これら5つのコイルは鉄芯を持たず、個々のコイルの銅線は浮揚系コイルほど長くありません。

また受信側の3つのコイルは同じ方法で作られます。具体的には、直径20mmの丸棒の周りに、直径0.4mmの絶縁コーティング銅線を45回巻いて作ります。この内1つは浮遊球内側の底部に取り付けられ、常時点灯のメインLEDに接続します。そして残り2つの受信側コイルは、この底部のコイルの近傍に互いに重ならないように取り付けられ、点滅を繰り返す2つのサブLEDに接続します(前ステップの2枚目の写真参照)。

一方、送信側の2つのコイルは、設置場所だけでなく作り方も異なります。まずメインLEDを光らせるコイルは、直径15mmの丸棒の周りに、直径0.4mmの絶縁コーティング銅線を30回(=15回×2)巻いて作ります。この時、15回巻いたところで銅線を20cmほど丸棒から引き出して折り返し、切断することなく同じ方向に改めて15回巻きます。そして、浮遊球底部の外側に浮遊球と接触しないように取り付けます。

次にサブのLEDを点滅させるコイルは、直径15mmの丸棒の周りに、直径0.4mmの絶縁コーティング銅線を30~45回巻いて作ります。このコイルは、途中の銅線引き出しは不要です。このコイルも浮遊球の外側に接触しないように設置しますが、その位置は球の回転軸から少しずらして、最初の送信側コイルと重ならないようにします(上の3枚目と4枚目の写真参照)。