mutsumiyokoiこんにちは。本日はセンサの調整を行いました。Termで値をみてそれをグラフ化し、いいグラフに近づけるようにセンサの向きを調整します。値をとっている間に電池が切れそうになってしまい充電をしていたので2回しか調整できませんでした。調整せず1回、調整をして2回、計3回測定しグラフ化しました。右のセンサの値をグラフ化したものがこちらです。左のセンサの値をグラフ化したものがこちらです。どちらもまだきれいなグラフになりません。センサの調整が必要なようです。最後に本日のオフショットです。mutsumiyokoiこんにちは。本日はまずPWMモードの設定をざっと読み複雑なんだなということを学びました。次にStep.7をコンパイル、インストールして180mm前進するようにしました。Classic2の車輪の直径は48mm、1-2相励磁のため1回転400パルスなので180mm進むためには約478パルス必要になります。次に90度右回転するようにしました。右回転させるためには左の車輪は前進、右の車輪は後進するよう設定します。90度回るようになりました!次に壁にぶつからないように走行させます。センサーチェックをして閾値を入力しました。その後走行させるとまっすぐではありませんが、壁にぶつからず走らせることができました。明日はまっすぐ走行できるようにセンサーを調整をすることになりそうです。Pi:Co杯プレ大会は、東日本支部の5月の月例会にお邪魔して開催しました。前半は、宇都宮さん、平井さん、小島さんらによる技術交流会を行い、後半はPi:Co杯(仮)プレ大会を行いました。技術交流会の前に春日名誉教授からライントレースのデモが行われました。技術交流会はこんな感じ。宇都宮さんの発表内容はスケジュールを立てて本格的にPi:Coの開発をしてしました。センサの角度は治具を作って左右を同じ角度に調整し、さらに、センサが壁の上をセンスしているため、車体を前傾姿勢になるように、そこに貼るテフロンシートを工夫されていました。配置ではなく、ハードウェアの改善をしたいが、ルール上、改善ができないことになっているのでソフトウェアで改善してしまうところところがすごい。SH7125にはEEPROMがないたいため、プログラム領域の一部をユーザープログラムで読み書きして疑似的EEPROM化していました。ステッピングモーターはパルスを与えて位置制御するのが普通だ考えていたが、宇都宮さんのマウスは、DCモータであり、それからプログラムを移植するには加速度/トルク指令にする必要かあり、それにあう式を導いて、ステッピングモーターでありながら、トルク指令で動作するようにしていました。平井さんの発表内容はPi:Coの組み立てマニュアルに対するありがたアドバイスでした。私が、入社してPi:Coを組み立てたとき、同じことを思ったので、早急に修正してアップしなければ。Ver2.1として発売する予定です。平井さんのみアルマイト加工した車輪を使用しており、モーターの軸に入らないとのこと。モーターの軸を紙やすりで削っていれたとのこと。小島さんの発表内容はコンパイラ、Flash書き込みをWindows環境ではなく、Linux環境の構築から始めたところがすごい。小島さんも宇都宮さんと同じでセンサについていろいろ解析をして、ハードウェアの改善ができないため物理的にセンサの光軸をずらしてセンサの飽和を回避していました。平井さんのPi:Coは、いきなり後ろに走るというパフォーマンス?を見せていただきました(笑)。その後何とか前進するようになりましたが、袋小路でぶつかってしまいリタイアとなりました。それでも、両サイドの壁にぶつからずに走ったのはすごい。小島さんのPi:Coは、スタートをスイッチ押さずに、Halfのように反射型距離センサを使ってスタートされていました。安定して走行を始めましたが、同じところで止まってしまうバグが発生。重ね探索することで同じところで停止するは回避できたものの、旋回時に電池のケーブルにぶつかったみたいで回転不足でリタイアとなってしまいました。宇都宮さんのPi:Coが唯一完走したPi:Coでした。探索は44秒683でGoalしましたが、第二走行で斜め走行をしましたが、段差とパラメータ調整不足により最短での完走はできませんでしたが、記録には残らないが、斜め走行でGoalしたいところを見たく、何回かトライして12秒という好タイムをたたき出しました。それにしても、優勝者クラスにPi:Coを渡す、横壁にぶつからずに制御するのは当たり前なのですね。宇都宮さんの第二走行。センターにて行います。mutsumiyokoiこんにちは。今日はほとんど進みませんでした。ブザーできれいなドレミを流すのにMTU2というのを使います。このMTU2というのは設定が必要なのですが複雑怪奇でして。その設定をするために必要な知識(序論といったところでしょうか?)を勉強しました。この序論も複雑怪奇で今日は脳が幾度もショートしてしまいました。その説明をうまく言葉にすることができないのですorz一つの波(1周期)が1秒間に100回あれば100Hz(ヘルツ)で1kHz=1msecは1秒当たり1000回数えるとき1周期あたり1/1000秒であるということを指しています。PWMを利用してきれいな周波数を流したいのでどこで1にするのか0にするのか指令を与えなければいけません。flopというレジスタがぶら下がっていてこれは1bit収納できる引き出しのようなものです。その指令をどこのレジスタに入れるのか、これが分かりにくいのです。うーん本当に説明するのが難しいです。最後に本日のオフショットをどうぞ。mutsumiyokoiこんにちは。本日はまずStep.5をコンパイル、インストールしセンサーチェックを行いました。真ん中の右側のLEDが付かず、一ヵ所半田を増すことになりました。Termでそれぞれのセンサが壁に近い時と遠い時の値を確認しセンサーチェックは終了。次にStep.6とStep.7を飛ばして、ハードのチェックをするためにStep.8をコンパイル、インストールしました。明日からはまたPCと向き合うことになりそうです。それでは本日のオフショットです。mutsumiyokoiこんにちは。本日はスイッチで音階を鳴らせるようにしました。Classic2で行いました。音はそれぞれ周波数が違います。4のサンプルプログラムをコンパイル、インストールしドレミの音がでることを確認しました。次に音階を増やすようにプログラムを書き換えます。青色のスイッチを押して二進数が増えると音階も上がり赤色のスイッチを押して二進数が減ると音階が下がるようになりました。上記のbreakはcaseと対になっているように見えますがそうではなく切りたい場所にいれるだけなので、breakがないならその次にあるブログラムとつながって動くだけです。最後に本日のオフショットです。2番目の写真はドレミファが鳴らせて喜んでるところです。mutsumiyokoiこんにちは。本日はまずStep3-2をコンパイル、インストールしました。Classic2の先頭4つのLEDが2進数を表していて赤色のスイッチで増加、青色のスイッチで減少させることができるようになりました。黄色のスイッチを押すとLEDが表している数の回数、ブザーがなるようになりました。次に赤色のスイッチ、青色のスイッチを押したときに押したことが分かるようにブザーがなるようにしてみます。方形波のループの数を表しています。fffを減らすと方形波のそれぞれの波形の長さが短くなり、高周波(高音)になります。増やすと長くなり、低周波(低音)になります。赤いスイッチの方を高音に、青いスイッチの方を低音にしました。高音すぎて聞こえにくかったり、長い低音になってしまったので赤いスイッチの方を長く、青いスイッチの方を短くしました。できたのがこちらのプログラムです↓このあとは付けてなかったフォトトランジスタとLEDを半田付けしました。最後に本日のオフショットです。次回は来週の水曜日になります。mutsumiyokoiこんにちは。本日からプログラミングの続きです。Step.3初めのほうにでてくる↑のintはunsignedが付いていないので+だけでなく-も含みます。intは32bitの整数の型で、CPUによってbit数が変動する型なのは以前習いました。state_lは変数です。RAMは書き換え可能の記憶装置です。ROMは書き換え不可の記憶装置です。RAMには番号(アドレス)のついた引き出しがあり、番号に対して中身が書き換え可能になっています。ヒトが変数を定義(好きな名前を付ける)とコンパイラーはCPUが分かるように割り当てをしてくれます。CPUは訳すと中央演算処理装置といい、名前の通り計算をしその結果(データ)のやりとりをしています。計算は+、-、×、÷をしています。いわゆる四則演算ですね。CPUにはRAM、ROMやI/Oなどがぶら下がっています。I/OとはInput/Outputのことで、ここにLEDやスイッチが繋がっています。0x004fは16進数なのでこれを2進数にすると0100_1111になります。1になっているbitが出力設定となり、PED0~3(つながているのはLED)の端子が出力設定され、1の時にLEDが点灯します。Classic2に転送します。Classicの後ろを自分の方に向けたとき)の赤色のスイッチを1回押すと左のLEDが点灯し、2回目押すと消えます。真ん中の黄色のスイッチを1回押すと真ん中の2つLEDが点灯し、2回目押すと消えます。右の青色のスイッチを1回押すと右のLEDが点灯し、2回目押すと消えます。次にCPU横の二色発光のLEDを半田付けしました。このLEDを黄色のスイッチで点灯、消灯するようにします。以下のように書き換えます。黄色のスイッチを1回押すと真ん中二つのLEDと二色発光のLEDが点灯、2回押すとこれらのLEDが消灯するようになりました。次に点灯は先ほどのまま、二色発光のLEDの青色を赤いスイッチを2回目押したとき赤色を青いスイッチを2回押したとき消灯するように書き換えます。以下のように書き換え次にを以下のように書き換え最後にを以下のように書き換えコンパイルし、転送します。プログラム通り点けたり消したりすることができるようになりました。最後に本日のオフショットです。mutsumiyokoiこんにちは。本日は昨日に引き続き「光反射型距離センサ」の後半戦です。昨日は受光時の外乱光を除去するためにハイパスフィルターを使用し、それを使用すると電圧が下がってしまうという欠点があってどうにかしたいというところで終わっていました。そこで登場するのがオペアンプです。オペアンプは+と-が同じ電位になるように、出力電圧を増幅するものです。入力側が+、フィードバック側が-のとき非反転増幅回路といいます。何が反転しないのかというと入力側の電圧の波形に対して、出力側の電圧の波形が反転しないということです。増幅率は1+R1/R2で求められます。反転増幅回路の場合は、増幅率は-(1+R1/R2)で求められます。set(オフセット)というのがあります。入力側の波形で反応しない領域があるのです。それをオフセット領域といいます。オフセット領域があることでノイズに強いのです。Classic2の場合は小さい値でも反応させたいのでbias化します。biasとは電圧を常時付加することを指します。オフセットの値は型番によって決まっているので、それ以上の電圧をかければ絶えず反応できます。そのためbias化して電圧を上げます。オペアンプに入力される信号はbias化された信号(0.5V)とフォトトランジスタからの信号(signal)が合わさったものです。11とこの段階ですでに5V超えてしまいます。これではいけないのでなんとかしないといけません。オペアンプの特徴として増幅率は1以上というのがあります。1倍の回路をヴォルテージフォロワといいます。先ほどの図のR2を∞にできたとしたら、増幅率は限りなく1に近くなります。この∞の抵抗を実現したい!そこでコンデンサの出番です。コンデンサは交流だと抵抗として働き、直流だと電流を流しません。直流だと流さない=大きな抵抗=∞の抵抗になるのです。電源からの信号(バイアスの信号)は一定なので直流成分です。コンデンサをつけて∞の抵抗に見立てて増幅率を1倍にします。signalは変化するので交流成分です。よってコンデンサで直流成分は1倍、交流成分はそれ以上増幅させます。すると5Vを超えることなく、全ての値に反応できるようになるのです。今日で回路はおしまい?みたいです。次回からはソフトを本格的に勉強していきます。オフセット・bias最後に本日のオフショットです。mutsumiyokoiこんにちは。本日のテーマは「光反射型距離センサ」でした。Classic2はこのセンサを使って壁までの距離を見ています。このセンサの特徴として光の量は距離の2乗に反比例の関係を利用して距離を測定しています。発光する側にはNPNのトランジスタがついていてトランジスタのBaseからGNDの間に抵抗が付けられています。downと呼びNPNの場合、CPUから不安定な信号がきても動かないので必要のない時にLEDが光ることを防ぐことができます。仕組みは図のように抵抗と抵抗の間の電圧が限りなく0Vなるため不安定な信号がきても動かないようにしています。up(電源側に抵抗を接続)すると不安定な信号がくると動いてしまいます。downすると不安定な信号がくると動いてしまいます。受光側はフォトトランジスタというのが付いています。これはフォトダイオードとトランジスタが組み合わさったものです。受ける光が強くなればなるほど、流れる電流量も多くなります。ADCとはアナログデジタルコンバーターのことでアナログデータからデジタルデータへの変換を行っています。反対にDACはデジタルアナログコンバーターのことでデジタルデータからアナログデータへの変換を行っています。壁との距離が近いと受光する量が増えフォトトランジタのエミッタにつながった抵抗の電位差が大きくなります。その電位差の値をマイコンがキャッチし、距離を測定します(近いと認識)。反対に壁が遠く受光する量が減ると電位差は小さくなります。その電位差の値をマイコンがキャッチし、距離を測定します(遠いと認識)。回路を見るとフォトトランジスタの出力にコンデンサとそこからGNDを繋ぐ位置に抵抗が付いています。コンデンサは高周波のとき抵抗値が小さくなり低周波の抵抗値は∞になります。Classic2が発した光の反射光だけを受光するわけではありません。蛍光灯や日光、所謂外乱光も受光してしまいます。Classic2が発した光の反射光だけを見れるようにしているのです。Filter)で除去します。Filterを用います。これらのフィルターは電圧が下がってしまうという欠点があります。それをどう乗り越えるのかはまた明日の講義になりそうです。Filterそれでは最後に本日のオフショットです。