2017年2月17日金曜日

17.2.17 ステッピングモーターで動く時計


ステッピングモーターを作り、時計の長針と短針を動かすようにした。ステッピングモーターはコイルを4ヶ90度間隔で並べた単純なもの。時計の歯車は以前振子時計で作ったものをほとんどそのまま使っている。


コイルはM3のビスに0.26mmのポリウレタン線を巻いたもの。同じものを4ヶ作り、永久磁石のローターの周りに90度間隔で取り付けてある。コイル1ヶずつに順に電流を流すと、ローターが90度ずつ回転し単純なステップ動作をする。90度回転した後は、電流を止めても永久磁石がコイルのビスをひきつけてブレーキがかかる。乱暴なモーターなので、高速回転はとてもできない。1秒で1回転くらいが限界のようである。今回は1分毎に90度回転させて時計の長針を動かす。


コイルはトランジスタで駆動する。トランジスタ4ヶとスイッチ1ヶ、それにLED1ヶの部品をブレッドボード型の基板に組んだ。PICは8ピンのPIC12F1822を使う。コイルはPWMは使わずオン・オフで駆動している。


振子時計では30秒で1回転するガンギ車の軸にウオームギアをつけ、これで40歯の歯車を回していた。30秒で1/40回転なので、1分では1/20回転となる。今回は1分毎に1/4回転する軸に8歯の歯車をつけ、40歯の歯車を回す。これで1分で(1/4)*(8/40) = 1/20回転となる。時刻合わせはローターの軸を手で回して行う。合わせた後はローターとマイコン側の位相がずれるので、5分くらい前の時刻に合わせ、あとはスイッチを押して1分ずつ動かして時刻と位相を合わせる。


2017年2月10日金曜日

17.2.10 リニアモーターカー


リニアモーターカーを作った。線路側は永久磁石、車体側は電磁石1ヶで駆動する。丸い線路を走らせたかったが、磁石を山のように並べるのは現実的でないので、往復運動とした。走るだけでは面白くないので、おまけでキッチンタイマーを組み込んだ。


本物のリニアは線路側も車体側もコイルを使うが、コイルをいくつも巻くのは難しいので、線路側は永久磁石とした。当然磁気浮上などは考えない。線路側はネオジウム磁石をNSNSNSNSNの順に9ヶ並べる。車体側のコイルは長さ30mmのM3のビスに0.26mmのポリウレタン線を巻いて作る。車輪はレゴのプーリーとし、レールは太さ1mmのメッキ線とした。ものづくり教室の教材用には、仲間がレゴのプーリーの互換品を3Dプリンタで作成してくれた。


コイルの位置を検出するため、いつもの反射型フォトインタラプタを使う。線路と平行に黒のビニールテープで白黒の模様を作った。線路側の磁石と車体の電磁石が引き合うようにコイルに流す電流の方向を切り替える。線路の両端にはタコ糸で作ったストッパーを置いて、停止位置が隣のS極の磁石に近づくようにし、スタート時は電流をたくさん流すようにしてある。動き始めたら電流は減らす。電流は20KHzのPWMの幅を変えて制御する。いつも同じスピードではつまらないので、片道ごとにランダムにスピードが変わるようにした。コイルの作り方のばらつきや電池の電圧変動に対応するため、途中で止まってしまったり片道を走る時間が長すぎるときは、PWMの幅を大きくするようにした。



キッチンタイマーは以前作ったソフトを移植した。表示は7セグメントのLEDだと配線が増えるので、LED6ヶで表示する。分と秒を順に切り替えて表示することにし、12時の位置のLEDが0分、2時の位置のLEDが1分、というように5分まで表示する。秒は12時の位置のLEDが0秒、2時の位置のLEDが10秒、というように表示し、その間は両側の2ヶのLEDが点灯するようにした。分の表示は1秒の間に500ms点灯し、次に秒の表示が1秒の間に2回ブリンクする。
PICはマルツで安く手に入るもので、PWMの出力が3ヶ以上あるものを探し、PIC16F1507とした。コイルの駆動は極性を切り替えるので、モータードライバのBD6211を使う。車体の重量が軽くなるよう電池ケースは基板上ではなく、線路の板に乗せるようにした。


永久磁石の検討用にアマゾンで小型の磁石を購入してみた。磁力が弱くコイルに流す電流を多くしないと動かないので、教材用にはいつもの直径13mmのものを使うことにした。小型のものは30ヶ購入したので、29ヶ並べて長めの線路を走らせてみた。


2016年11月23日水曜日

16.11.23 3代目迷路歩き


予定通り3代目の迷路歩きを作った。車体とライントレースの仕組みは前回のうろうろ歩きをそのまま使う。壁検出用にライントレースと同じセンサーを車体下部に左・前・右の3方向に取り付けたので、センサーは合計で5ヶになった。迷路探索のアルゴリズムはこれまでと同じ左手方式。


センサーが5ヶになったので、車体下部が混雑してきた。配線のケーブルも多くなったので、テープで固定した。新設した3ヶのセンサー用の抵抗などの部品は、基板のコネクタに子基板を取り付けて実装した。



迷路の壁は前回作ったものをそのまま使う。10mm*15mmの角棒を85mの長さに切ったもの。外周の壁は長い棒を用意した。壁と壁の間隔は90mmで、車体が回転できるギリギリの寸法。


迷路探索は左手を迷路の壁にあてながら歩いていく左手方式。遠回りをすることもあるが、簡単な制御で確実に迷路の出口を見つけることができる。いったん迷路を歩いて道を覚えると、次は遠回りをせずに出口まで歩いていく。迷路の出口が見つからずに入り口に戻った場合はLEDでエラーの表示をする。
孫のリー君に見せたら、面白がって自分で壁を作って動かしてみていた。

2016年10月28日金曜日

16.10.28 しつこくうろうろ歩き


うろうろ歩きを孫のリー君に見せたところ、「迷路はできないの?」と言われたので準備を始めた。レゴのモーターを使うことにするが、早く歩くようにする・180度方向転換する・迷路用に交差点でその場で回転して方向転換する、の3点の変更を行った。


レゴのモーターで早く歩く仕組みを考えた結果、右の車輪は歯車で駆動し、左の車輪はチェーンで駆動することにした。見た目は美しくないが、速度は16/40から24/24となり、2.5倍になった。



センサー・基板はレゴのうろうろ歩きのものをそのまま使う。180度方向転換のときは、安定度を高めるために速度を3/4に落とすころにした。180度方向転換が追加になり、動きの感じがかなり変わった。



交差点で回転してうろうろ歩きするようにした。センサーの位置を1列後ろに変更し、車輪が交差点の中央にきたところでブレーキをかけて次の方向を決める。交差点で毎回ブレーキをかけるので動きはギクシャクしている。また、180度方向転換しても迷路の壁にぶつからないことも確認した。


2016年10月17日月曜日

16.10.17 高速版うろうろ歩き


前回作ったレゴのモーターのものは歩くのがあまりに遅かったので、もっと速く歩けるものを作ってみた。安定度は下がったが、格段に速く歩けるようになった。


レゴのプーリーにつけたゴムタイヤの外周をタミヤのミニモーターの軸で直接駆動する。以前も作ったが、モーターの軸をうまくタイヤに押し付けないと安定して動作しないのが難点。今回も輪ゴムを使った。3つ目の車輪はタミヤのボールキャスター。車輪とモーターが小さいので、レゴのモーターのものに比べると高さが半分程度になった。


センサーはレゴのものと同じ反射型のフォトインタラプタを2ヶ使う。取付方法もほぼ同じ。


基板は以前16bitのPIC24FJ64GA002で作ったものを使う。モータードライバはロームのBD6211を2ヶ実装してある。PWMのチャンネル数は十分あるので、左右2つずつのPWMを使ってモーターの回転数を制御している。センサーのインターフェイスの部品はついていないので、端子に部品を乗せた子基板を取り付けた。


ライントレースは、レゴのもので作ったソフトを一部修正して使っている。楕円形のコースでライントレースして走らせると、最高速でもうまく走る。うろうろ歩きはさすがに最高速ではうまくできないので、スピードを遅くしてある。

2016年10月13日木曜日

16.10.13 またもやうろうろ歩き


格子状の道をうろうろ歩きまわる2輪車をまたもや復活。以前は交差点でいったん止まり、その場で90度回転していたが、今回は止まらずに90度方向を変えるようにしてみた。


レゴのモーターを使い、できるだけコンパクトなボディを作った。飾り気は全くない。サイズを優先したため、歯車の組み合わせが限定され、速度はかなり遅い。倒れないように後ろ側だけタミヤのボールキャスターを付けた。


センサーは反射型のフォトインタラプタを2ヶ使う。車輪の少し前の位置に道路の幅より少し外側になるように取り付けた。交差点を検出したときの車輪の位置が重要なので、センサーの前後の位置は試行錯誤で決定した。


基板は以前3輪車用に作ったものを使う。CPUは16bitのPIC24FV32KA301。モータードライバはロームのBD6211を2ヶ実装してある。PWMのチャンネル数が少ないので、PWMの出力をコンデンサに充電してPWMの幅で電圧が変化するようにし、これをBD6211のVREF端子に接続してモーターの回転数を制御している。


ライントレースは、左右のセンサーの値の差が0になるように制御する。一応PID制御でやっているが積分の項は使っていない。両側のセンサーが暗くなったら交差点と判断し、次に進む方向をランダムに決定する。右回転する場合は右側の車輪にブレーキをかけ、左側の車輪を回転させる。右のセンサーが明るくなったら回転終了。スピードが遅いせいもあり、ライントレースや回転でコースを外れることはほとんんどない。

2016年10月10日月曜日

16.10.10 バッテリーチェッカー


凝り性の山仲間から、「バッテリーチェッカーは10Ωの負荷で電池の電圧を図るべき」という意見が出てきた。なるほどそういうものかと思い、なるべく簡単に使えるバッテリーチェッカーを作ってみた。


以前作ったものは電圧をLEDのブリンク数で表示したが、これは見にくいと不評だったので、複数のLEDで電圧を表示することにする。いつものリモコン基板を使うことにすると、電池の入力とスリープからの起動のスイッチを除くと4ヶのLEDしか使えない。4ヶのLEDで8段階の電圧を表示することにした。
電圧表示は以下のようにする。(◇:点灯、◆:消灯、B:ブリンク)
 電圧      Led0 Led1 Led2 Led3
 1.5 -       ◆   ◆   ◆   ◇
 1.4 - 1.5  ◆   ◆   ◇   ◇
 1.3 - 1.4  ◆   ◆   ◇   ◆
 1.2 - 1.3  ◆   ◇   ◇   ◆
 1.1 - 1.2  ◆   ◇   ◆   ◆
 1.0 - 1.1  ◇   ◇   ◆   ◆
 0.9 - 1.0  ◇   ◆   ◆   ◆
      - 0.9  B   ◆   ◆   ◆


負荷抵抗は、いくつか切り替えできるよう、ピンに差し込むようにした。とりあえず、10Ω、100Ωを用意した。元気な電池なら10Ω負荷でも1.5V以上の表示になるが、くたびれた電池だと0.9V以下になる。こういう電池でも負荷抵抗を100Ωに変更すると、1V以上になることもある。10Ω負荷で0.9V以下ならモーターを回すのには使えない、100Ω負荷で0.9V以下なら捨てる、という基準にする。


電圧測定は、PICの10bitsのADコンバータで行う。ADのプラス側の基準電圧を2048mvの内部基準電圧にする。これで電池の電圧をAD変換した値がAdBatとすると、電圧VBatは、VBat = 2*AdBatと簡単な計算で求めることができる。大きさの違う電池の電圧測定ができるよう、測定用のリード線を出しておくことにした。赤い線を電池のプラス側、黒い線を電池のマイナス側に押し当てて測定を行う。