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と簡単な計算で求めることができる。大きさの違う電池の電圧測定ができるよう、測定用のリード線を出しておくことにした。赤い線を電池のプラス側、黒い線を電池のマイナス側に押し当てて測定を行う。


2016年6月19日日曜日

16.6.19 温度計いろいろ


これまでに作った温度計を並べてみた。毎日使っているものもある。



残像表示
残像表示の振子時計と温度計。振子が動き続けるよう、コイルと永久磁石で駆動する。コイルの駆動とLEDの表示でけっこう電気を使うので、電源はACアダプタを使っている。もう2年くらい動き続けている。振子はレゴのパーツで作ってあるが、季節が変わると長さがかなり変わるようで、錘を調整して時間合わせをする。


液晶で温度・湿度表示
8文字*2行の小型の液晶を秋月で発見し、これにAM2320という温・湿度センサーをつけて温度・湿度計にした。温度計の他にもキッチンタイマーとトレーニング用のメトロノームの機能もついている。液晶モジュールが3.3Vでないと動かないので、電池2ヶをステップアップレギュレータで昇圧して使っている。


実用的なLED表示
ものづくり教室の教材用に実用的な温度計を作成した。センサーはトランジスタ型の温度センサー、表示は3ケタの7SegLEDを使う。こちらもキッチンタイマーとメトロノーム付き。ユニバーサル基板で組むので、ジャンパ線が多く教材には不向きか。


色で温度を表示
変わり種で、色で温度と湿度を表示するものを作ってみた。センサーはトランジスタ型の温度センサを2ヶ使い、1ヶは昔の乾湿式温度・湿度計と同じように水に浸したガーゼでくるむ。本物と同じ温度差にはならないが、係数を調整して湿度を表示するようにした。3色のLEDで青→緑→赤と30段階の色で温度・湿度を表示する。色だけでは大雑把にしかわからないので、1ケタの7SegLEDで温度と湿度を表示する。湿度を測るために水を使うのが面倒で、湿度は数秒ごとに値を変化させて色をデモするようにしてある。最近は息子と孫が作ったナノブロックのルーブル美術館のイルミネーションになっている。



CDの周りの目盛りで温度を表示
CDの周りに0℃から30℃までの目盛りを印刷し、目盛りの外側にフォトインタラプタ用の穴を開け、CDをモーターで回転させて一番上の数字で温度を表示するようにした。最初は1周で36度分の目盛りをつけたが、これだといったん温度の表示がずれると回復できないという欠点があることに気が付き、30℃から0℃までの間はセンサー用の穴を開けないようにして0℃の位置を検出できるようにした。これで表示の再現性がぐっと高くなった。温度が変化したときだけCDを回せばいいが、それではつまらないので、1分毎くらいにCDを回転させるようにした。基板は以前作成したリモコン基板を使うので、教材用として使えそうである。



ストロボで温度を表示
こちらもCDの周りに数字を印刷して表示するが、数字は1ケタの0-9までの数字を4組印刷してある。数字の上にLEDが2ヶ並んでいて、表示する数字が下に来た時にLEDを光らせ、ストロボで2ケタの数字を表示するようにした。最初はセンサー用の穴を4ヶ開け、1周に4回ストロボを光らせるようにしてみたが、穴を手で開けたため位置の精度が悪く、数字がにじんで見にくくなることが判明し、明るさは1/4になるが、1周に1回だけストロボを光らせるようにした。ものづくり仲間が3Dプリンタで作ったパーツを使わせてもらい、モーターの軸とCDを直結している。ストロボ点灯は20Hzくらいなので回転数は1200RPMくらい。温度を表示するだけだとつまらないので、5秒ごとくらいに温度の表示と数字が流れる表示を繰り返すようにしてある。



2016年6月12日日曜日

16.6.12 ダビンチゴール


ものづくり仲間がピタゴラゴールを入手したので、これで遊んでみることにした。


旗が立ったときに「ピタゴラスイッチ」と言うのを「ダビンチスイッチ」に変更する。マイコンはPIC18F14K22を使う。プログラムメモリは16KBytesしかないので、2秒位の音声でも圧縮しないと入らない。まずPCでADPCMのエンコーダを作成した。次にPICで動くADPCMのデコーダを作成。データは自分の声で作った(11.025KHz, 4bits)。


ピタゴラゴールとつなぐため、ピタゴラゴールの基板の配線を外し、旗が立ったことを検出するスイッチとスピーカを自作の基板に接続した。これでピタゴラゴールの旗が立つと、スピーカーから「ダビンチスイッチ」の声が出るようになった。


ボールをゴールに運ぶ仕掛けは、格子状の道をランダムに歩き回る2輪車を使うことにした。以前作ったもののモータとフォトインタラプタの取り付け方法、フォトインタラプタの測定方法を改善したものを作成した。これでゴールに到達すると、2輪車がレゴで作ったボールホルダを押し、ボールがゴールに入る。
生徒がこのダビンチゴールで遊べるか、仲間と検討してみる。


2016年6月10日金曜日

16.6.10 ハモンド風音源


去年単音のミニキーボードを作ったが、和音が鳴るものを作ってみようと思い、ハモンド風の音源を作ってみた。ハモンドにはレスリースピーカーがつきものなので、こちらもまねしてみた。


和音を鳴らせるCPUを探してみたところ、DSP機能付きで40MIPSで動き、16bitのDACを2チャンネル持っているdsPIC33FJ64GP802というものを発見。これで実験してみたところ24KHzのサンプリングで90本のサイン波を鳴らすことができた。
これを使うことにして、音源方式を検討してみた。FM音源は音作りが面倒だし、波形メモリ方式はメモリが足りない。ハモンドオルガンのトーンホイールの数を調べてみたところ、79ヶということなので、ハモンド音源を作ることにした。
まず、ユニバーサル基板にCPU、電源部、出力部、鍵盤スイッチ、を作った。dsPICは3.3Vでないと動かないので、電池2ヶを3.3Vに昇圧して使う。出力部はトランジスタでヘッドホンを鳴らす簡単なアンプを作った。


ソフトは、サイン発生部はDSPのMAC命令を使うためにアセンブラでコーディングした。各トーンホイールごとの振幅は別途計算しておき、サンプリング周波数ごとにサインの発生と振幅の乗算を行う。
レスリースピーカーのシミュレーションは、音源の出力を遅延用のメモリに書込み、読み出しのアドレスを周期的に変化させて周波数の変化をつけ、さらに前後と左右の音量の変化をつけるようにした。本物は高域と低域に分けて別のスピーカーを回しているが、今回は全体を同じように変化させている。音量変化をなしにすると、音が広がる感じのコーラス効果になる。この計算もアセンブラでコーディングしてある。
各フィートの音量とエフェクトの設定を8ヶずつプリセットできるようにし、白鍵で呼び出すようにした。デモ用に自動演奏する仕組みも作り、ジャズのピアノトリオのデータを入れてある。


ハモンドといえばドローバーが必須なので、スライドボリュームでドローバーを作った。各フィートの音量を制御する9ヶのボリュームと、全体の音量を制御するボリュームの10ヶのボリュームを使う。エフェクトのパラメータも9ヶなので、ドローバーで値を設定できるようにした。


こちらは8bitのPIC18F26K22を使った。ドローバーの値(0-8)をLEDで表示することにしたが、PICのピン数が足りず、5ヶのLEDで表示することにした。ドローバーで作ったパラメータをプリセットで記憶できるようにした。各フィートの音量とエフェクト、それぞれ9種類記憶できる。
PICのプロフラム領域に余裕があるので、こちらにも自動演奏の機能をつけておいた。
また、MIDIのキーボードで演奏できるよう、MIDI入力のインターフェイスをつけ、音源側に送るようにした。


2016年4月13日水曜日

16.4.13 永久ごま2


ものづくり教室で、3年ぶりに永久ごまを作ることにした。経験者には同じ原理で動くブランコまたは他のものを作ってもらうことにする。


初代の永久ごまは百円ショップで調達した盃の上で回したが、同じ店に行ってみたが盃は売っていなかった。仲間に相談したところ、缶ビールの底が丸くなっている、というアイデアをもらい、缶ビールの底の上で回すことにした。試作ができたころ、別の仲間が百円ショップで盃を発見し調達してきてくれた。今回は盃か缶ビールか、生徒に選んでもらうことにした。


こまが回る原理はブラシレスモータに近い。ローターに相当するこまは永久磁石を4ヶ持っている。ステーターには電磁石を2ヶ使い、こまの磁石の位置を検出するためにリードスイッチを使う。永久磁石が狙った位置に来たことを検出し、電磁石を駆動してローターを回す。こまはバランスよく作れるようレゴで作る。
調整はリードスイッチの位置とコマの軸の長さ。安定して回る組み合わせを試行錯誤で探す。


電磁石2ヶのコイル巻きが難関の工程。ポリウレタン線が絡まらないように慎重に巻いていく。


制御はいつものPICマイコンを使う。基板は以前リモコン用に作成したプリント基板。
ケースは木製。シナベニヤの板と角棒を接着して作る簡単な構造とした。


ものづくり仲間の希望もあり、経験者用にこまと同じ原理で動くブランコを用意した。
振り子時計と同じ構造で、ブランコに永久磁石を付け、ブランコの真下にリードスイッチと電磁石を付け、ブランコを駆動する。


ブランコの形は、作りやすさを優先し、板の両側に直角に棒を立ててブランコを支えることにした。ブランコの軸はレゴで作る。ブランコをチェーンやひもでぶら下げることも検討したが、駆動方法を考えるとブランコの形が固定されているのが間違いないので、アルミ棒でブランコをぶら下げることにした。



こまと違い、リードスイッチの位置を変えることができないので、リードスイッチで永久磁石の位置を検出してから電磁石を駆動するまでの時間と電磁石の駆動時間を設定できるようにした。ボリューム1ヶとタクトスイッチ2ヶを使う。
試作機はデモ用に電磁石を駆動している間、ブランコにつけたLEDが点灯するようにしてある。