2021年7月28日水曜日

M5StickC Clock Auto Tuner

M5StickC (ESP32) controls the accuracy of a small pendulum clock.  The pendulum has a small magnet attached to it.  The CPU detects pendulum vibration with a Hall sensor (A3144), and determines the rate of the clock.  It then compares with the internet time, and depending on the difference, the coil under the pendulum pulls down or push up the pendulum.  This has the same effect as adjusting the gravity.


Here is the close-up of pendulum, magnet, coil and Hall sensor.

 

The accuracy chart of the clock displayed on the M5StickC.


The chart below shows accuracy and current for about 4 hours.  The blue line is clock accuracy (left scale in seconds).  Once it gets stable, the deviation is within +/- 0.2 seconds.  The red line is relative coil current.  As the clock's mainspring gets unwound, the coil current is gradually changing.



Below is the schematic diagram.  The clock has a tiny pendulum which weighs only 3.3 grams including the magnet, thus does not require much magnetic force to change cycle time.  So the coil is connected directly to the M5StickC GPIO with a series resistor of 100ohm.


Here is the video.  The clock accuracy chart and the relative coil current chart are alternating every 5 seconds.





2021年6月16日水曜日

壁に張り付くロボットの試作

 プログラミング教室でデモをするときに、ホワイトボードに張り付いて動くロボットがあると便利だろうと考え、JK Soft・ランニングエレクトロニクスさんの「うぉーるぼっと」をまねて、Arduino Nanoで動くロボットを作ってみました。

全体像です。メイン基板は別のプロジェクトで作ったもの、N20ギヤモーターとタイヤはうぉーるぼっとBLEのものを流用しています。タイヤの直径は約43mm、摩擦を増やすために液体ゴムを塗ってあります。


裏側です。電池はリチウム電池2個を直列に接続。中央のネオジウム磁石は直径20mm、厚さ3mmで、真ん中に穴があいているものです。2つのキャスターもどきは、アルミのくるみボタンにプラスチックねじを接着して使っています。

 

横からの写真です。磁石はタイヤに隠れていますが、磁石と壁との距離は2.5mm程度にしています。


動画です。冷蔵庫に張り付けてテストしています。




 

 

 

 

 





2021年6月15日火曜日

ALGYAN6周年基板でライントレース

 ALGYAN6周年IoT基板をいただきました。モータードライバ基板を実装できるようになっているので、ライントレースロボットを作ってみました。基板設計者様の意図とは違う使い方をしている部分もありますが、 なんとか動いています。

全体像です。

 

 

 電池を取り除いて、上から撮った写真です。秋月のDRV8835ドライバーモジュールが在庫切れとのことなので、代わりに、同じく秋月のTC78H653モジュールを使いました。このモジュールは16ピンで、DRV8835モジュールより大きいですが、両端の4ピンを使わず、部品面を下にして実装すると、ほぼDRV8835モジュール同じように使えました。

 

 

TC78H653モジュールの写真です。両端の4ピンと、MODEピン、STBYピンには、ピンをはんだ付けしていません。 VMとSTBYをショートしてあります。ALGYAN基板のJP3は、+5V(CN1側)をブリッジしてあります。

 



CN4USBと、SW1、SW2の穴を利用して反射型フォトセンサを取り付けました。

 

 

裏側です。N20ギヤモータ(手元にあった3V 100RPMのもの)を秋月のユニバーサル基AE-FRISK-120-UV-THに固定し、それをALGYAN基板の取付穴を使ってスペーサを介して取り付けました。3mmのねじを使うため、ALGYAN基板の穴を少し大きくしました。

 

 

電源は、とりあえず9Vの電池から3端子レギュレータで5Vを作っています。

 

 

回路図です。

 


8の字ライントレースの動画です。


 





2021年6月12日土曜日

Arduino Nano でミニロボット


Arduino Nanoを利用したミニロボットです。 鎌ケ谷市中央公民館でのデジタルワークショップ(2021年8月8日)で使いました。

 


全体像です。台車は9V電池のケース、車輪とDCギヤモータは「ちっちゃいものくらぶ」で調達しました。


KiCADで設計して作った基板です。Seeed Fusion PCBで製造してもらいました。モータードライバとして、秋月のTC78H653またはDRV8835が使えるようになっています。

 

部品を実装した裏側です。白い球形のプラスチックはスペーサーです。(2021/8/7 アップデート)


 

回路図です。(2021/8/7 アップデート)

 

 

細い線のライントレースができるようにしてみました。


カーナビの赤外線リモコンで操縦してみました。


ソースコードは、後日アップロード予定です。



2020年9月22日火曜日

M5StickCバランスロボにBLE

 月刊I/O(2020年3月号、工学社)で紹介していただいたM5StickCのバランスロボ(リンク)を、BLEジョイスティックで操縦できるようにしました。

ジョイスティック送信機は、M5Stack社のJoyC+M5StickCです。右ジョイスティックに左右の回転、左ジョイスティックに前進後退を割り当てました。

 


 

動画です。


 


2021/5/16 ソースコードをアップロードしました。こちら。 

BLEジョイスティックのソースコードはこちら。

 

 

2020年8月10日月曜日

micro:bitと電動消しゴムでバランスロボ

100円ロボット部のMAENOH!さんのアイデアで、ダイソーの100円電動消しゴムとmicro:bitでバランスロボを作りました。BLEと赤外線リモコンで操縦できるようにしてみました。
 


表側です。



 
裏側です。

BLEリモコンです。


ロボットは、基本的に両面テープと結束バンドのみを使って組み立ててあります。

ロボットに使用している部品は、
マイコン: micro:bit
モータードライバ: KS0308(TB6612)
ジャイロ: GY-521(MPU6050)
赤外線受光素子: GP1UXC41QS(互換品)
モーター・車輪:ダイソーの電動字消しx2
電池:16340(3.7Vリチウムイオン)x2
電池ホルダー:18650電池1本用
電源スイッチ
転倒時の衝撃吸収用パッドなど少々


BLEリモコンに使用している部品は、
マイコン:M5StickC
ジョイスティック:JoyC


ロボットの回路図です。


ソフトの開発には、Arduino IDEを使用しました。
PWM周波数の変更と、i2cのタイムアウトのためにライブラリを一部変更しています。





リモコン操縦をしているビデオです。

2020年5月25日月曜日

BalaCでライントレース

M5StackからBalaCという倒立振子のキットが発売されました。M5StickC、モータードライバが載った基板、ギヤモーター、ホイール、充電池がセットになっています。
これに反射型の赤外線センサーを取り付けて、ライントレースをしてみました。
ビデオへのリンクです。


上からの写真です。サーボのように見えるのはギヤモーターです。オレンジ色のモジュールがBalaCに同梱されているM5StickCで、基板を固定するためのねじ穴が2個追加されています。先端に付いている基板が追加した赤外線センサー部分です。


裏側です。i2cのインターフェイスとモータードライバがBalaCの基板に載っています。青い充電池があるので、モーターを回しても余裕です。M5StickCにUSBを接続すれば、この充電池に充電されるようです。


側面です。


赤外線センサー基板を含む先端部分です。適当なボールキャスターが無かったので、アルミのスピンナーを流用しています。

赤外線センサー基板の表側です。

赤外線センサー基板の裏側です。



回路図です。赤外線センサーはTCRT5000です。フォトトランジスタは、コレクタをLEDのアノードに接続し、約1.2Vで動作しています。M5StickCのVoutが5Vなので、このような回路にしています。




ソースコードの主要部分です(LCDの制御などを省いています)。モーター制御のi2cは正しい使い方かどうかわかりませんが、動いています。

#include <M5StickC.h>

void setup() {

  M5.begin();
  Wire.begin(0, 26); //SDA,SCL
}

void loop() {
  
  int16_t sLeft=analogRead(32);
  int16_t sRight=analogRead(33);
  int16_t diff=(sLeft-sRight)/35;
  drive (30+diff, 30-diff);
  delay(20);
}

void drive(int16_t spL, int16_t spR) {
  drvMotor(0, (int8_t)constrain(spL, -127, 127));
  drvMotor(1, (int8_t)constrain(-spR, -127, 127));
}

void drvMotor(byte ch, int8_t sp) {
  Wire.beginTransmission(0x38);
  Wire.write(ch);
  Wire.write(sp);
  Wire.endTransmission();
}