Tips(ソフト編)

BlueSMiRF関連(オーディオプラグに繋ぐには6)

今日はなんだか沢山ブログを書いてますねぇsweat01けど、カレンダー通りのお仕事なので、ゴールデンウィークでお休みで、沢山な訳ではないのですよ。。。

さて、前回、完成したBlueSMiRFモジュールを使って、以下のソフトで無線通信でできることとできないことを試してみましたので、まとめておきますpaper早速、SimROBOTでも試しましたよscissors


roboBASIC

  • コントローラー情報...
  • プレイ/ストップ/リセット... 
  • Catch & Play(ヒューマノイド)...
  • オブジェクトコード転送...不可
  • 削除...不可 
  • ゼロ点設定...不可
  • モーターコントロールパネル...不可

roboRemocon

  • PCコントロール...
  • Download(オブジェクトコード転送)...不可

SimROBOT

  • PCコントロール...
  • Catch & Play(ヒューマノイド)...
  • Download(オブジェクトコード転送)...不可

RZ1Action

  • Catch & Play(ヒューマノイド)...

RZ1Basic

  • コントローラー情報...
  • プレイ/ストップ/リセット...
  • オブジェクトコード転送...
  • 削除...
  • Catch & Play(ヒューマノイド)...
  • PCコントロール...
  • ETX/ERXのPCコントロール...
  • AD値、変数値などの値の取得...
  • ターミナル...
  • ゼロ点設定...不可

ゼロ点設定が、私のロボットでは、roboBASICも、RZ1Basicも、途中で止まってしまいます。RZ1Basicでデバグしたところ、4番目のモーターのデータを取得の際です。原因究明中です。

モーターコントロールパネル(roboBASIC)は、途中で変なことが起こって回線が途切れて、roboBASICがハングアップします。

オブジェクトコードの転送は、途中Baudrateの変更に対応したRZ1Basicのみ可能で、その他、roboBASIC, roboRemocon, SimROBOTは当然、不可です。削除も結局、空のオブジェクトコードを転送しているので、Baudrate変更に対応していなければ不可


ついでに、RZ1Basicで、ポート設定する時に、BlueSMiRFにチェックを入れるんですが、これがv0.3.3では保存できていませんでした。従って、v0.3.3では、毎回、起動した際、最初に、ポート設定を開いて、BlueSMiRFにチェックを入れる必要があります(オブジェクトコードの転送をしないのであれば、このチェックは必要ありません)。直しましたので、次のバージョンからは平気です。

| | コメント (8) | トラックバック (0)

ROBOBASIC講座(低電圧検出ルーチン)

今回は電源電圧の検出についてです。前回出てきたADポートの6番がそれに割り当ててあります。電圧が下がると暴走を始めるので、組み込んでおきたいルーチンですよね。しかし私は、この辺り全然試していないので、以下に上げた参考資料をもとにまとめたものです。

《参考資料》

  1. ロボットのいる生活。
    ROBOZAK(ROBONOVA-I)用低電圧検知回路を作りました。 しかし・・・
  2. RoboZak奮戦記
    電源検出電圧の実測値と計算値
  3. 週刊ロボザックお助け掲示板
    低電圧とプログラム暴走の関係
  4. Overall Template Program (コード下記:1)
  5. action_auto.bas (コード下記:
  6. HERO'S Download
    ATmega128/128L日本語翻訳データシート
  7. ROBONOVA-I 日本語マニュアル

《ROBONOVA-Iのマニュアルでは》
ハイテックのサイトからダウンロードできるROBONOVA-I 日本語マニュアルのP95に「(7) LOW-VOLTAGE WARNING設定方法」という項目があります。ここには以下のように書いてあります。

Screensnapz006

《個体差がある》
avalonさんは151くらい
(1、3)、fkさんは155くらい(3) 、Overall Template Programでは148、action_auto.basでは160でチェックしていて、個体差があるようです。あと、ADアダプタと、バッテリでも値が異なるようです(2)。


《電圧を求める式は》

ATmega128/128Lのデータシート(6)のA/D変換器の項目(p153〜)を読んでみたけど難しいですねsweat01avalonさんが(1)と(3)の中で、電圧とAD(6)の値の関係は「Overall Template Program」のrobot_voltageに式が書いてありますが、少し間違っており、以下のようにおっしゃられています。

----------------------------------
式は恐らくこうだと思います。
Value = (Voltage/基準電圧 × 1/2) × 256 - 1
→ 5.8V / 5 × 1/2 × 256 - 1 ≒ 147
※256はADポートの分解能
※-1は0〜255までなので
※1/2は分圧回路・・・精度はここまでないと思います。
※基準電圧は約5Vですが、これが下がるとValueが大きくなってしまいます。

----------------------------------

《robo_voltageを使う場合は》
one以前、ハイテックにあったテンプレートについて(1)で書きましたが、Overall Template Programにあるrobo_voltageのルーチン(以下)はENDIFがないので、このままでは変なことが起きてしまうかもしれませんので、このルーチンを使う場合は、ENDIFを書き加えて下さいね。

twoそれから毎回呼ぶ必要もないなぁという場合は、例えば以下のように動かす前だけチェックするようにしてもいいのかもしれません。

IF RR<>0 THEN GOSUB robot_voltage
ON RR GOTO MAIN,K1......
.....

IF A<>0 THEN GOSUB robot_voltage
ON A GOTO MAIN,K1......
.....

threeあと、好みですが、例えば以下の様にアレンジすると、電圧が下がると点減回数が増えるようにできますね。

CONST kLED=52
CONST
kLowVolt=155
CONST kStopVolt=151
A=AD(6)
IF A<kStopVolt THEN
    END

ELSEIF A<kLowVolt THEN
    FOR v=A TO kLowVolt
        OUT kLED, 1
         DELAY 200
        OUT kLED, 0
        DELAY 200
    NEXT v
ENDIF
RETURN

《電圧検出用ルーチン》

いちおうハイテックさんのページにあったコードの中にあった、電圧検出用ルーチンを書いておきます。

1, Overall Template Programより
'================================================
robot_voltage: ' [ 10 x Value / 256 = Voltage]
    DIM v AS BYTE

    A
= AD(6)

    IF A < 148 THEN ' 5.8v

    FOR v = 0 TO 2
        OUT 52,1
        DELAY 200
        OUT 52,0
        DELAY 200
    NEXT v

    RETURN

2, action_auto.basより
'================================================
robot_voltage: ' [ 10 x Value / 256 = Voltage]
    A
= AD(6)
    TEMPO 230
    IF A < 160 THEN MUSIC "G" ' 6.25 Volt
    RETURN

| | コメント (2) | トラックバック (0)

通信ができないエラーの場合

ちょっとTipsを

タイムオーバー(エラーコード:-4)、転送エラー(エラーコード:-5)など、通信ができなくなってしまうエラーが出てしまうようになった場合の原因として

  • プログラム転送中にエラーになった
  • ハングアップしてしまうようなプログラムを転送した

ことも考えられます。
MR-C3024は、スイッチを入れると、転送されてあるプログラミングがスタートしてしまうので、プログラムが変になっていると致命傷になってしまう場合があります。

Parallels_desktopscreensnapz031_2 このような場合、少し荒てですが、スイッチオンと同時に、「プログラムの停止」ボタンを何度かクリックしてみて下さい。いっぱつでうまくいくとは限りませんので、何度か試してみて下さい。そうすることで、暴走する前に、プログラムが止まり、次からは転送できるようになるかもしれませんよ。

転送エラーは、プログラムの暴走だけが原因ではないと思いますので、とろあえず、ひとつの手段として、紹介しましたが、ここ で書いた、《テストコード》ですが、スイッチを入れて、すぐにプログラムを止めるコードを入れておいた方が安全ではないかということを考えて作ってみたコードです(まだリモコン/赤外線センサを繋いでないので試していませんけどsweat01)。いかがでしょうかねsign02

| | コメント (0) | トラックバック (0)

プログラミング・シミュレータの注意点2

以前「プログラミング・シミュレータの注意点」で話題にしましたが、32号で、roboBASICを使って、以下のように、DIR(モータの回転方向)の設定を行っています。

DIR G6A 1,1,1,1,1,1
DIR G6B 1,1,1,1,1,1
DIR G6C 1,1,1,1,1,1
DIR G6D 1,1,1,1,1,1

プログラミング・シミュレータの注意点」で、roboBASICの基本的なDIR設定として、以下のような設定を書きましたが、

DIR G6A 1,0,0,1,0,0
DIR G6B 1,1,1,1,1,1
DIR G6C 0,0,0,0,0,0
DIR G6D 0,1,1,0,1,0

DIRの設定は、マイコンのROMに記録され、電源をオフにしても残っているため、DIRの設定を再度行わない限り、モータは前回設定した方向に動きます。

ここで問題なのは、roboScript上で、DIRの設定ができないことです。つまり、同じMOVEデータをroboScriptでロボザックに転送したとしても、そのデータを転送する前に動かしていたプログラムのDIR設定が異なっていれば、動きが異なってしまうということです。

週刊ロボザックを購読している方は、モーション作りは、プログラミング・シミュレータを使えるんだから、DIRの方向があやふやなroboScriptなんか使わず、プログラミング・シミュレータでモーションを作り、roboBASICで動かす。と、その方針なんでしょうかね。。。なんかモヤモヤしてたものが取れた感じでスッキリしました。

| | コメント (0) | トラックバック (0)