2019年12月18日水曜日

GR-KURUMIと電動消しゴムでバランスロボ

MAENOH!さん考案の電動消しゴムロボットはメーカーフェアでも好評でしたので、ルネサスナイト15での発表用に、GR-KURUMIで作ってみました。


全体の写真です。ダイソーの電動消しゴムを使っています。電池は3.7VのLiPo。


CPU周りの写真です。GR-KURUMIの左にジャイロセンサー(MPU6050)、下にモータードライバ(DRV8835)、リセットボタンのすぐ下に赤外線の受信モジュールが見えます。KURUMIに載っているのは3.3Vのレギュレーターです。


回路図です。Arduino ProMiniと兼用の回路なので、3.7VがKURUMIのRAW端子に接続されていますが、JP8をOFFにしていますので、KURUMIおよび周辺への電源は3.3Vのレギュレータから供給されます。


ソースコードはこちら。テレビリモコン(ソニーフォーマット)による操縦ができます。ビット順が逆になっていて、データとアドレスをまとめて12bitで扱っているので、試す場合は、シリアルモニターでコードを表示させてみて、それをキーコードのセクションに記述してください。ジョイスティックによる操縦機能は除いてあります。

2019年8月11日日曜日

M5StickC バランスロボ


M5StickC には加速度計、ジャイロスコープ、電池、などが入っており、 モーターとドライバを追加するだけで、倒立振子を作ることができました。
 8月2日のM5Stackユーザーグループミーティングと8月3日4日のメーカーフェア東京で展示しました。

 全体像です。左から、M5StickC、モータードライバ、モーターです。
白い粘着テープは転倒したときの衝撃防止用です。


モータードライバは、共立エレショップのKP-DRV8830。
i2cのプルアップに4.7kΩの抵抗を使っています。
モーターも、共立エレショップのRM0TV0009AWZZ。
軸には、内径0.8mmの熱収縮チューブをかぶせています。
モーターや、基板の固定は両面テープで、かなりいい加減です。



裏側です。


MPU6886対応版はこちら。

2019年5月6日月曜日

ESP32で古時計の精度改善

これまではCPUとしてESP8266を使っていましたが、今回はその上位バージョンであるESP32とOLEDディスプレイが合体したボードを使って、機能と性能の向上を図りました。
モジュールの写真です。


時計と組み合わせた写真です。左が普通の振り子時計(以下重力振り子時計と呼びます)、右は回転振り子時計です。



動作原理を説明します。
振り子に取り付けられた磁石の磁力線を磁気センサーが検出して振り子のタイミングを認識し、時計のギヤ比を使って時計が指している時刻を算出します。一方正確な時刻は、WiFiを通してNTPサーバーから取得します。これらを比較して、時計が遅れている場合は振り子の周期が短くなるように、進んでいる場合は振り子の周期が長くなるように、調整します。

重力振り子の場合は、振り子に取り付けた磁石に対して、電磁コイルで上下方向の力を加えます。これは重力加速度が変化したのと同等の効果があるので、振り子の周期が変化します。下の写真の黒い楕円がコイル、振り子の下端についている円柱状のものが磁石、その直下にホールセンサーが黄色いワイヤーでコイルに固定されています。


回転振り子の場合は、振り子に取り付けた磁石に対して、電磁コイルで水平方向の力を加えます。これは振り子を吊っているワイヤの捻じりばね係数が変化したのと同等の効果があるので、回転振り子の周期が変化します。下の写真は回転振り子に取り付けた正方形の磁石。
下の写真は、ベースプレートの裏に取り付けた、コイルとデジタルコンパスです。



ディスプレイには、現在時刻、誤差、コイル電流に加え、誤差とコイル電流のグラフも表示されます。下は回転振り子時計の例です。2行目の-0000.04が0.04秒の遅れを示しており、113はコイル電流です(範囲は-1023から1023で、最大電流は100mA程度)。
グラフのX軸の範囲は約5時間、Y軸の誤差は+/-0.5秒の範囲を表示しています。


Webサーバーの機能も備えているので、WiFi経由でブラウザからアクセスできます。下の例はパラメータの設定画面です。


重力振り子時計の実験結果です。青が誤差で縦軸は左側、赤がコイル電流で縦軸は右側です。約1週間の測定でほぼ+/-0.1秒以内に収まっています。左の大きな変動は、時計を動かしたためのもの、右側の変動は周囲に置いたものによる影響と思われます。


重力振り子時計用の回路図です。
磁気センサーはデジタル出力のホール素子です。


回転振り子時計用の回路図です。
磁気センサーはi2c接続のデジタルコンパスです。

以下2020年5月17日追記

ソースコードはこちらです

ハードウェアをブログにアップしてから1年近くが経ってしまい、その間にソフトはだいぶ変更されたので、Web画面の構成など写真とは一部異なります。かなり強引なコーディングなので、より良い書き方がありましたら、教えていただけるとありがたいです。


2019年4月18日木曜日

Auto tuner for anniversary clock

An anniversary clock is a mechanical clock which has a time keeping mechanism called torsion pendulum, where  a horizontally rotating pendulum is suspended by a thin wire called torsion spring.  Anniversary clocks run much longer (up to one year before winding is required) than ordinary pendulum clocks because the rotating speed is very slow.  The name "anniversary" came from  the fact that winding is required once every year.  Anniversary clocks are less accurate than ordinary pendulum clocks.


The method of tuning torsion pendulum vibrating frequency is similar to the method for tuning ordinary pendulum (see this page).  Instead of applying vertical force to the pendulum, the tuning device applies horizontal force to imitate changing the elasticity of the torsion spring.  When the magnetic force pushes back the pendulum, that is equivalent to strengthening the torsion spring which shortens the pendulum period.  Below is the overall photo.


Here is the back of the base plate where you can see a coil to generate magnetic flux and a magnetic sensor (digital compass, HMC5883) to detect pendulum position.


Here is the magnet attached to the pendulum (flat silver square below white ball).


The external tuning device comprises ESP32 with OLED display (WEMOS LOLIN32 OLED), H bridge driver (L9110).


The display shows the time from internet and the clock accuracy, along with graphs of accuracy and coil current alternating every 5 seconds.  In contrast with the tuning device last year whose resolution was 1 second, this device calculates the accuracy to the resolution of 0.01 seconds.  The photo below shows accuracy of -0.04 seconds and relative current of 113.  The graph is showing the last 5 hours of accuracy trend.


Here is the accuracy (blue, left scale in second) and coil current (red, right scale in relative quantity -1023 to 1023) for 24 hours.  You can see the accuracy is within one second.


Here is the same graph with about one month of data.  During this period, clock location was changed, sensor position was changed, main spring was winded up, etc.  Because of these activities, you see the big jump in accuracy and output, but the accuracy came back to within 1 second.


Here is the schematic diagram.


Source code is here.