電子工作をしていると「どれくらい回っているか」「どの位置にあるのか」を知りたい場面があります。モーターの回転から、関節、つまみやレバーまで、角度はさまざまなものの状態を表す重要な情報です。
本記事では、そんな「角度を測る」ための基板を作りました。20mm四方の基板に磁気エンコーダとマイコンをまとめ、USBで簡単に角度を取得できます。基板の制作から、スイッチサイエンスマーケットプレイスで販売までまとめました。
私はホームIoT作品を作るのが好きで、ドアの開閉をIoT化したことがあります。開閉検知だけなら磁気スイッチを使えば簡単で、そうしたデバイスも多く販売されています。
ドアがどれだけ開いているのかまで知りたくなりました。開き具合まで取得できれば、空調や換気の情報と連携したり、ルンバなどのロボットが通過できるか判断したりと、より幅広い分野への応用が期待できるからです。
ドアの開き具合はヒンジの角度で取得できると考えました。閉じた状態を0°、半分くらい開いた状態を45°、全開を90°とすれば、ドアの状態を連続的な数値として扱えます。
角度を測定できるセンサーはいくつもありますが、この用途では磁気エンコーダが適していると考えました。ヒンジにマグネットを取り付け、その上に磁気エンコーダを配置することで、機械的な接触なしに角度を取得できます。また、アブソリュートエンコーダを使えば絶対角度を取得できるため、電源を入れ直したときにも現在の角度をそのまま取得できるメリットがあります。
完成したものがこちらです。ドアの開き具合に合わせて、GUIアプリのドアも同じように開閉します。角度が連続的に取得できるため、単純な開閉検知よりも細かな状態を扱えます。
世の中には、さまざまな磁気エンコーダ基板が販売されています。I2CやSPIなどのインターフェースを搭載したものが多く、マイコンと通信し角度を取得できます。モーターの位置検出などを考えると、とても合理的な構成です。
モーターを制御する場合、現在の角度をできるだけ速く取得し、制御に反映させる必要があります。数ms単位、あるいはそれより短い周期でセンサー値を読み出す用途では、マイコンとセンサーをI2CやSPIで接続する構成が適しています。
一方で、すべての「角度を測りたい」という用途が、高速な通信を必要としているわけではありません。例えば、ドアの開き具合を測る場合、1秒間に何千回も角度を取得する必要はありません。
同じように、
といった用途では、モーター制御ほど高速な通信は必要ありません。むしろ、こうした用途で重要なのは、センサーを使うための回路やプログラムをいちから用意しなくても、簡単に角度を取得できることです。そこで考えたのが、磁気エンコーダの値をUSB通信で取得できる基板でした。
センサーとマイコンを準備し、自分で通信処理を書くところから始めるのではなく、PCにつなぐだけで、角度を取得できるようにします。「ただ角度を測りたい」という用途に、もっと手軽な選択肢があっても良いのではないでしょうか。
磁気エンコーダICは12bitのAS5600を使い、その値をマイコンで読み取ってUSB通信でPCへ送信します。製作した基板では、0〜4095の角度を取得できるようにしました。
基板の設計にはEasyEDAを使いました。ブラウザ上で進められるため、扱いやすいツールです。製造はJLCPCBを利用しました。EasyEDAと連携しているため利用しやすく手軽です。
マイコンはWCHのCH32V203を採用しました。32bit RISC-Vコアを搭載しており、USB 2.0 Full-SpeedのHost/Device機能を内蔵しています。ユーザーがUSB用のICを追加する必要がないため、部品点数を減らせます。部品点数が少なくなれば、基板を小さくしやすくなるだけでなく、実装コストも抑えられます。結果として、磁気エンコーダ、マイコン、USBコネクタをシンプルにまとめた、比較的安価な基板にできました。
完成した基板は、USBケーブルでPCにつなぐだけで使用できます。さらに、回路図やソフトウェアはGitHubで公開しています。
単に角度値をUSBから取得できるようにするだけでなく、誰かに使ってもらう前提で、機器に組み込みやすくする工夫を織り込みました。
まずは基板の大きさです。サイズは20×20mmです。ドアやダイヤル、ロボットの関節など、角度を測りたい場所には、必ずしも広いスペースがあるとは限りません。特に磁気エンコーダは、測定対象となる磁石の近くに配置する必要があります。そのため、基板が大きいと取り付け場所の自由度が下がってしまいます。できるだけ小さくしておけば、狭い場所にも取り付けやすくなります。
もう一つこだわったのが、実装部品を片面だけに配置したことです。両面実装にすれば、さらに小さくできる可能性があります。しかし、基板を取り付けることを考えると、裏面に部品が出ていると制約が生まれます。裏面を平らな面として使えるため、両面テープなどでも固定しやすく、ケースや治具に組み込むときに扱いやすくなります。
小さな基板ですが、こうした細かな工夫を入れることで、いろいろな場所に気軽に取り付けて使えます。
せっかく基板を作ったので、自分向けだけで終わらず、販売にもチャレンジしてみました。スイッチサイエンスマーケットプレイスを利用しています。
こちらが製作した基板の販売ページです。
販売で大変なことはいくつかありましたが、こだわったのがパッケージです。小さな基板なので、ただ袋に入れて発送することもできます。ただ、せっかく自分で設計した基板なので、手元に届いたときにも「ちゃんとした製品」と感じてもらえるものにしたいと考えました。
アクセサリーケースを利用することで、基板をコンパクトに収められました。保護材も付けています。
表面にはステッカーを貼り付けています。GitHubページのQRコード付きです。また、ネオジム磁石も同梱しているため、注意書きも記載しています。
「ドアの開き具合を測りたい」という小さなきっかけから、USBにつなぐだけで角度を取得できる基板を作りました。
ドアだけでなく、ダイヤルの回転量を読み取ったり、レバーの位置を検出したり、ロボットの関節角度を取得したり、「角度を測りたい」という場面は意外と身近にあります。製作した基板が、そんな「ちょっと角度を測りたい」という場面で役立ててもらえればと思います。