ロビ1.5 その7(ロビ1.1+)
2021年11月19日
11月25日
動作が安定しているのロビ1をベースにロビ2の機能が使えるように制御ボードを変更してロビ2化しています。
ロビ1.5でロビ2の頭のスイッチを取り付けてこの機能を対応しました。
今回はこの機能をロビ1.1で対応してみました。
ロビ2では赤外線送受信器(右目)に頭のスイッチ端子を接続しているので右目の基板の交換が必要でしたが直接LED基板に頭のスイッチ端子を接続する事ができます。
スイッチの取付
ロビ1の頭部にスイッチを取り付けます。
ロビ2のパーツを使う場合は次のパーツが必要になります。
69号ヘッドスイッチボード、右目−頭ケーブル
創刊号フロントヘッドカバー
5号ヘッドボタン
ただしロビ2のフロントヘッドカバーにはロビ1の赤外線LED/マイクボードが取り付けられません。
今回はロビ2のパーツを使わずに市販のスイッチを取り付けました。
取付方法はいろいろ考えられますが一番簡単なタクトスイッチを直接ヘッドカバーに取り付けました。
タクトスイッチはをヘッドカバーの裏から取り付けるためキャップ(指で押す部分)が3mm以上のものを選びます。
手持ちの部品は1mm位だったのでプラ棒を接着して延長しました。
フロントヘッドカバーにスイッチのキャップを通す穴を開けます。
穴の直径はタクトスイッチがスムースにON/OFFできる大きさにします。
タクトスイッチを取り付けた時と赤外線LED/マイクボードが干渉しない位置にします。
タクトスイッチにリード線をハンダ付けしてグルーガン(ホットボンド)で固めます。
スイッチの配線
スイッチは口のLEDボードと右目のLEDボード(人感センサー)を接続するケーブルに配線します。
上から3本目(上記配線図の口のLEDボードのコネクターを参考)のケーブルを切断します。
スイッチの2本のリード線の片側を切断したケーブルの口LEDボード側に接続します。
もう片方のスイッチリード線は上から2本目のケーブルから分岐させます。
ケーブルの被膜をむいてそこにリード線をハンダ付けしてください。
スイッチの配線図が間違えていました。上から2本目が途中で分岐で3本目が切断(右目LED側は未接続)です。(11月25日訂正)
なお口のLEDボードはロビ1のものでもロビ2のものでもどちらでも機能します。
プログラムの変更
ロビ1.1ではロビ2のプログラム(STARTUP.BIN)に頭のスイッチによる割り込みを抑制するパッチを当てていましたがこのパッチが当たっていると頭のスイッチが機能しなくなるのでロビ1.1(Bluetoothを使う場合はロビ1.2)のSTARTUP.BINに以下のパッチを当てて有効化に戻します。
head_switch_enable.csv
またはオリジナルのSTARTUP.BINに対してロビ1の原点補正を行ったものでも構いません。
ロビ2の頭のスイッチはプログラムの途中で押してプログラムの実行が中断するのに用いられています。
頭のスイッチが押されていない状態ではメモリアドレス0x0e18の値は0ですが頭のスイッチが押されると0x0e18に値1がセットされます。
次の命令で頭のスイッチが押されたかを判定いる事ができます。
<calc><mem_r size="2" adr="0x0e18"/><const data="0"/><sub/><ne/><jump adr="押された時の分岐アドレス"/></calc>
押された時の処理で0x0e18に値0をセットします。
これを行わないと0x0e18に値1がセットされたままになるのでスイッチが押されていなくても押されたと判断されてします。
<calc><const data="0"/><mem_w size="2" adr="0x0e18"/></calc>
なおロビ2Sのアイドリング時に0にセットされるのでプログラムの中断処理は0にセットする処理は行われていません。
この機能を使ったプログラムをいくつか作っています。
以下のURLからダウンロードしてSTARTUP.BINに適用してください。
絵本朗読(頭スイッチ対応)
ものまね(頭スイッチ対応)
ランダム値設定(頭スイッチ対応)
このプログラムを実際に動かした動画です。
口のLEDボードに接続されている他のケーブルに対しても接続状態をプログラムから取得できます。
左目コネクターの3番ピン(左目コネクターと同じ)と2番ピンにスイッチを接続するとレジスタアドレス0x0e16でON/OFFの状態が取得できます。
右目コネクターの1番ピンと2番ピンにスイッチを接続するとレジスタアドレス0x0e14でON/OFFの状態が取得できます。
このアドレスは右目の人感センサーの状態を取得するアドレスと同じです。
左目コネクターの1番ピンと2番ピンにスイッチを接続するとレジスタアドレス0x0e12でON/OFFの状態が取得できます。
このアドレスは左目の人感センサーの状態を取得するアドレスと同じです。
目次に戻る