
Arduinoで磁気浮上装置の自作です。今回は、電磁石(コイル)を使って磁石の位置制御をArduinoを使って行ってみました。
▼磁石が中央にとどまるよう制御▼

▲ホールセンサーで磁石の位置を検出して、磁石が常に中央にくるようにArduinoでコイル(磁場)を制御してます。見えませんが下に4つのコイルが配置されてます。一見、いい感じに制御できてるように見えますが、実際は磁石が細かく振動してます。GIF動画にしたときに細かな動きが飛んでしまったようです。
▼撮り直し▼

▲ちょっと大げさにわざと振動させてます。単純なON/OFF制御なのでこんなもんでしょうか。PIDとかのフィードバック制御があった方が安定しそうです。
ここら辺でいったん検証内容をまとめておきます。
ハードの準備
検証を行う準備から。

▲検証にはキットの部品と基板を利用して実施します。基板にコイル4つと中央にホールセンサー2つを半田付け。キットの部品利用はこれだけ、後はArduinoとモータードライバーをこの基板に接続します。
▼Arduinoとモータードライバーを接続▼

▲思いのほか線が多かったです。コイルの上に変な樹脂カバーがありますが検証をスムーズに行うために作成したものです。回路構成と位置制御の内容については後述します。
▼樹脂カバー無しだと▼

▲コイルの鉄芯に磁石が貼り付いてしまい、電流を流しての検証は困難。なのでコイルと適度に距離が取れる治具(樹脂カバー)を作成することにしました。
▼治具の3Dモデル▼

▲コイルと磁石に距離が取れるように少し空間を開けてます。あと効果があるかわかりませんが、磁力を遮らないようにスリット入れてます。
▼3Dプリント▼

▲1年半くらい前に入手したシルクシルバー色(PLA)が使い道が無くずっと余っていたので使いました。PLA材は長期保管で水分吸ってしまって使い物にならないと耳にしますが、全く問題なく使用できました。造形時間は40分ほど。これを基板に付けてハードは完成です。
回路構成

▲磁石の位置を検出するためのホールセンサーが2個。モータードライバ(L289N)を使用してコイルへ電流を流します。コイルは各々軸方向で2個ずつ直列に接続。制御はArduinoを使用します。
▼ジャンパーピン▼

▲コイルはジャンパーピンで接続できるようになってます。1個ずつの各々制御できるように拡張を考慮しているのですかね?よくわかりません。(⊿1:基板よく見たらジャンパーピンはコイルの間じゃなくて、電源ラインとコイルの間にありました。それにしてもなぜここにあるのかよくわりません。)
続いて磁石の位置を制御する方法です。
磁石の位置制御

▲コイルは流れる電流が逆巻きになるように(極性があべこべになる方向に)接続されています。そのため、電流を流すと一方は引力、一方は斥力となって、磁石は片方のコイルに引き寄せられます。磁石の位置に応じて、流す電流の向きを変えることによって磁石を中央にとどめます。
磁石の位置検出にホールセンサーを使用、またコイルへの電流制御にモータードライバを使用して、その制御をArduinoで行います。
ソースコード(スケッチ)
位置制御部分の抜粋です。
magX = analogRead(A0); magY = analogRead(A1); analogWrite(9, 255); if (magX > 512 - x_trim) { digitalWrite(5, HIGH); digitalWrite(6, LOW); } else { digitalWrite(6, HIGH); digitalWrite(5, LOW); } analogWrite(11, 255); if (magY > 512 - y_trim) { digitalWrite(7, HIGH); digitalWrite(8, LOW); } else { digitalWrite(8, HIGH); digitalWrite(7, LOW); }
x軸、y軸各々で、ホールセンサーの値に応じて、コイルへ流す電流の方向を切り替えてるだけです。
テスト稼働

▲うまく写ってませんが、磁石は結構小刻みに動いてます。ただのON/OFF制御なので振動してしまっているようです。
簡単な位置制御検証は完了です。今後はPIDとかのフィードバック制御を組み込んでもうもう少し磁石に位置制御を検証していく予定です。
▼Arduinoで磁気浮上制御まとめ▼
コメント