ブログパーツUL5

メンテナンス用に大型LCD表示を製作

 メンテナンス用に見やすくするために、LCDの大型化(20文字×4行)にすることにしました。まず、プログラムの修正箇所を調査してみたら、意外と簡単でLCDのアドレスを追加修正してあれば出来そうなことがわかりました。問題はどのフリーソフトでコンパイルするかですが、やはり、定評のあるMPLAB ICEを利用することにしました。出来上がったバイナリファイル(HEXファイル)を先日製作したRCDライターで書き込みました。

超ローコストRS232Cモニターを参考に製作しましたが、RS232Cなど余計な回路は省いていますから、部品はPICと半固定抵抗とコネクタだけです。

書き換えた例 (MPLABにて、main.cを書き換えた)

//----------- 修正前のLCD表示アドレス(16×2)
case 13 : //return command
if (lcd_loccnt <= 0x10) lcd_loccnt = 0x40;
else if (lcd_loccnt <= 0x50) lcd_loccnt = 0x00;
break;
//-----------

という箇所を次のように修正する。

//----------- 修正後のLCD表示アドレス(20×4)
case 13 : //return command
if (lcd_loccnt <= 0x14) lcd_loccnt = 0x40;
else if (lcd_loccnt <= 0x54) lcd_loccnt = 0x14;
else if (lcd_loccnt <= 0x28) lcd_loccnt = 0x54;
else if (lcd_loccnt <= 0x68) lcd_loccnt = 0x00;
break;
//----------

もう1箇所

//----------- 修正前のLCD表示アドレス(16×2)
if (lcd_loccnt == 0x10) lcd_loccnt = 0x40;
if (lcd_loccnt == 0x50) lcd_loccnt = 0x00;
//-----------

という箇所を次のように修正する。

//----------- 修正後のLCD表示アドレス(20×4)
if (lcd_loccnt == 0x14) lcd_loccnt = 0x40;
if (lcd_loccnt == 0x54) lcd_loccnt = 0x14;
if (lcd_loccnt == 0x28) lcd_loccnt = 0x54;
if (lcd_loccnt == 0x68) lcd_loccnt = 0x00;
//-----------

RCDライタ−は安く出来たが、動作の信頼度はありますね。LCD代とPIC代だけで表示器が出来てしまう時代に改めて驚きですね。

0

    光センサーを試す

     光センサーが送られてきて手元には3本(長いのが2本、短いのが2本)あります。以前は、光センサーの特性をアナログポートのAD値で調べましたが、今回はRoboZakでデジタルポートの11番と17番に接続するようなので、デジタル入力でとうなるのか調べてみました。

     簡単なプログラムを組んで、LCD表示させてみたところでは、明るいと「0」(Hi)となり、暗いと「1」(Lo)になります。ただ、電球の下で暗くなるのには1mm以下まで接近しないと反転しませんでした。フットブラケットに取付けるのもかなりシビアになりそうな光センサーのようです。また、取付けられた光センサーのバラツキも問題になりそうです。アナログであればプログラムの中で調整できますが、デジタルではON/OFFしかりませんので、微調が出来ません。取り付けには注意が必要ですね。

     roboBASICで、A=IN(11)、A=IN(17)という入力コマンドを入れれば、すぐにLCDで値は読むことが出来ました。しかし、出力反転となる距離は床から1mm程度しか離れていませんからほとんど非接触のタッチセンサー(?)というレベルですね。一応、デジタルポートの扱いもわかりました。
    0

      56号は購入

       定期購入を止めたので飛び飛びに必要なものだけを購入することにしました。56号には光センサーがあるので、一応、購入しておくことにしました。理由はこのセンサーが階段を上り下りする時に確認するように使われる可能性があるためです。しかし、フットカバーが5mmも上り隙間ができるのはどうも格好悪いので、当分は変更しないことにしています。
       次回は2回分を飛ばした59号のサウンドセンサーを購入する予定です。

      56号の部品一覧
      A.光センサー
      0

        自作LCD表示に成功

         キットでLCD表示がすでにうまく表示できるようになっていますが、それがうまく動作していない時に調べていた情報から、PICマイコンにプログラムを書く込む小型ライターの製作から始まり、書き込みプログラムのインストールをしてプログラムの書き込みまでを学習してみました。最初はVppの13Vが出てないので不安でしたが、チャージポンプですからパルスが出力しないとならないのは理解していたので、動作させればRCDによる書き込みは全く問題なくできました。
        サイズはキットの1/3です。

         ただ、コストを考えれば自作の部品代は2000円弱ですから、2000円ぐらいのキットを購入した方がいいかもしれません。でもカスタマイズできないので自作の方が転送速度の固定や可変など自由に設定できるのがいいですね。液晶はキットのものを流用して動作確認してみました。最初はLCDの調整用VRの位置がよくなくて表示しませんでしたが、なんとか表示しました。

         これでLCD表示が自由に設定できるようになったのでLCD製作は終りとします。それにしてもRCDというライターは安くて便利ですね。RC232Cのケーブルをもらうことになっているので、今後のPICマイコンの開発が楽になります。
        0

          フローリングでやっと安定連続歩行

           連続歩行のモーションは、すでにある歩行モーションを連続すればすぐ出来ると思い、取組みましたが、意外と問題が発生して途中で倒れてしまいます。原因は、床の凸凹とサーボの動きのバラツキにより、RZ-1が揺れるため静止状態でバランスさせてモーションを調整してうまくいきません。そのため、試行錯誤して一番安定して、早くて、自然な動きにするのには苦労しました。

           参考までに、私の作成したモーションです。但し、RZ-1毎にバランスとサーボの動きが微妙に違いますから、動作を保証するものではありません。畳の上ではうまく行きません。このモーションはジャイロなしで安定して長い距離の歩行ができます。

           距離センサーを作動させる部分はコメント文にして動作させていません。5番のサーボは、首のサーボなので無視してください。

          '================================================
          forward_walk:

          SPEED 4
          MOVE24 88, 71, 152, 92, 117, 102, 100, 40, 80, , , , 100, 40, 80, , , , 114, 76, 140, 100, 90, 60,
          WAIT

          loop1:
          '-------------------------------
          'left up
          SPEED 15
          MOVE24 88, 107, 105, 107, 117, 102, 90, 40, 80, , , , 120, 40, 80, , , , 114, 76, 140, 100, 90, 60,
          'left down
          MOVE24 88, 56, 143, 122, 117, 102, 85, 40, 80, , , , 140, 40, 80, , , , 114, 80, 140, 87, 90, 60,
          MOVE24 88, 40, 163, 112, 117, 102, 85, 40, 80, , , , 140, 40, 80, , , , 114, 80, 140, 87, 90, 60,
          WAIT
          SPEED 5
          'left center
          MOVE24 98, 65, 141, 112, 102, 102, 90, 40, 80, , , , 120, 40, 80, , , , 100, 83, 154, 80, 100, 100,
          MOVE24 114, 74, 142, 104, 100, 102, 100, 40, 80, , , , 100, 40, 80, , , , 88, 100, 134, 85, 102, 60,
          WAIT
          '---------------------------------------
          'right up
          SPEED 15
          MOVE24 114, 76, 140, 100, 90, 102, 120, 40, 80, , , , 90, 40, 80, , , , 88, 107, 105, 107, 117, 60,
          'right down
          MOVE24 114, 80, 140, 87, 90, 102, 140, 40, 80, , , , 85, 40, 80, , , , 88, 56, 143, 122, 117, 60,
          MOVE24 114, 80, 140, 87, 90, 102, 140, 40, 80, , , , 85, 40, 80, , , , 88, 40, 163, 112, 117, 60,
          WAIT
          SPEED 5
          'right center
          MOVE24 100, 83, 154, 80, 100, 102, 120, 40, 80, , , , 90, 40, 80, , , , 98, 65, 141, 112, 100, 100,
          MOVE24 88, 100, 134, 85, 102, 102, 100, 40, 80, , , , 100, 40, 80, , , , 114, 74, 142, 104, 100, 100,
          WAIT
          '----- AUTO Fowrd walk ----------------------------------
          'A=AD(3)
          IF A>70 THEN
          GOSUB standard_pose
          GOSUB backward_walk
          GOSUB right_turn
          GOSUB right_turn
          GOSUB right_turn
          GOSUB right_turn
          GOSUB standard_pose
          DELAY 200
          MOVE24 88, 71, 152, 92, 117, 102, 100, 40, 80, , , , 100, 40, 80, , , , 114, 76, 145, 100, 90, 60,
          WAIT
          ENDIF

          GOTO loop1

          RETURN
          '================================================
          0

            タッチセンサーについて

             「タッチセンサーを取り付ける」について、ちょっと検討してみました。
            コネクターをADポートに差してタッチセンサーのシステムを組み立てるとしています。しかし、すでにリモコンと電源電圧検出回路で2つは利用できない状況にあり、加速度センサー、ジャイロとでX軸とY軸を確保し、距離センサーを載せてADポートに割り当てる予定ですから、ポートがあまりせんので、私にとってあまり魅力的なアイテムではありません。残りの一つは、音声入力を考えたいますが、タッチセンサーはたぶんデジタルポートに接続することにあんるのでしょう。

             音声認識は専用ボードが用意されるようなので、マイクもそちらのボードに直接接続するようになりそうですから、どのセンサーをアナログポートに接続するか悩みどころですね。
            0

              距離センサー(GP2D12)でテスト走行

               一足先に距離センサー(GP2D12)を胸に仮に取付けて、といって倒れた時の緩衝クッションに挟んだだけで、モーションの作成に取り掛かりました。すでにプログラムに作成してある歩行モ−ションにif文で距離センサーのAD値で分岐するように追加すれば、障害物に近づくと回避するモーションが割り込むようにできます。

               基本的なアルゴリズムは簡単なのですが、実際に、プログラムしてみると安定走行させながら、できるようになるにはかなり工夫が必要です。意外とモーション作成にはノウハウが必要なようです。

               因みに、AD値は80位で分岐して右ターンするようにするプログラムを組んでいますが、今一、バランスを崩して倒れてしまいます。暫くは、基本動作ができたら、部屋の中を歩き回れるように、安定感のあるモーションに仕上げて見たいと思います。

              0

                メンテナンス用LCDプログラム例

                 メンテナンスで利用することが多いと思うので、LCD表示プログラムを作成していつでもすぐ利用できるようにしました。参考までにご利用ください。但し、LCD制御コードが違う場合には修正が必要です。

                =========== LCD表示サンプルプログラム ===========
                DIM A AS BYTE
                DIM i AS BYTE
                DIM j AS BYTE
                ' 通信速度の自動設定
                FOR i=0 TO 1
                 PRINT " "
                 DELAY 50
                NEXT i
                ' roboBAISCのLCD初期化
                LCDINIT
                ' メインルーチン
                MAIN:
                ' タイトル表示
                PRINT 12 'CLS
                PRINT "Welcome RZ-1"
                PRINT 13 'CR
                PRINT 10 'LF
                PRINT "2008/02 Ver.1"
                DELAY 2000
                ' リモコンを除くAD値を一括表示
                PRINT 12 'CLS
                FOR i=0 TO 6
                 A = AD(i)
                PRINT FORMAT(A,DEC,3)
                PRINT " "
                NEXT i
                DELAY 2000
                ' AD値を順番に表示
                FOR j=0 TO 7
                 PRINT 13 'CR
                 PRINT 10 'LF
                 PRINT "AD("
                 PRINT FORMAT(j,DEC,1)
                 PRINT ")="
                 FOR i=0 TO 8
                  A=AD(j)
                  PRINT FORMAT(A,DEC,3)
                  PRINT " "
                  DELAY 400
                 NEXT i
                NEXT j
                GOTO main
                END
                ==============================================

                 これで純正品を購入しないで済みました。浮かしたお金(?)で、3000円と秋葉原価格よりも1000円程安い精密圧着ペンチを見つけ購入することにした。 センサーの接続用コネクタを作成するのに半田付けではどうも面倒なので購入することにしました。すでに、センサー用のピンとソケットは購入しているので、少し練習してうまくいくようであればサーボモータのケーブルの整理をそのうちやろうと思います。

                0

                  シリアル制御LCD表示が動作

                   先日購入したシリアル制御LCD表示がどうも相性があり、正常動作していませんでしたが、やっと正常動作できるようになりました。原因は2つあり、1つは通信速度の自動設定機能がうまく機能しないこと、もう1つはLCDの初期設定のエスケープコードが邪魔していたことでした。購入したLCD表示には、起動時のスペース(" ")のパルス幅で通信速度を検出して自動的に設定できるという優れた機能があります。このことが相性の問題を生じさせていることがわかりました。

                  (写真はリモコン以外のAD値を表示)

                  問題点1
                   ETX端子(プリント基板にはTXと印刷されている)では、9600bps以上では表示していたが、4800bps以下で表示できなかった。
                  問題点2
                   LCD端子では、通信速度の自動設定機能がうまく機能せずLCD端子の通信速度の4800bpsにならない。

                  対策1
                   ETX端子での設定は、タイミングを少し調整したら動作するようになりました。LCD初期設定の時に、下記のような設定をしてあげれば問題なく動作しました。
                  ====================
                  FOR i=0 TO 1
                  A = " "
                  ETX 4800,A
                  DELAY 50 'これでタイミングをとる
                  NEXT i
                  ====================

                  対策2
                   LCD端子での設定は、ちょっと苦戦しましたが、LCDINITコマンドをLCDの通信速度の設定後に行うことで動作するようになりました。
                  ====================
                  DIM A AS BYTE
                  DIM i AS BYTE
                  ' LCD表示の通信速度設定
                  FOR i=0 TO 1
                   PRINT " "
                   DELAY 50
                  NEXT i
                  ' roboBASICのLCD初期設定
                  LCDINIT
                  PRINT 12 'CLS
                  ' アナログポートのAD値を表示
                  FOR i=0 TO 6
                   A = AD(i)
                   PRINT FORMAT(A,DEC,3)
                   PRINT " "
                  NEXT i
                  END
                  =======================

                   このLCD表示は、高い純正品ではないので、LOCATEコマンドなどには対応していません。LCD制御はroboBASICのコマンドでなく、print文でアスキーコードを送るなどの表示方法にはプログラムで工夫する必要があります。それが面倒な場合には、純正品の購入をお勧めします。でも購入したキットは2600円ですから機能的には十分です。なお、秋月でLCD表示のキットの販売が再開されれば、試してみる価値はありそうです。折角、製作したPICライターの使う場面が遠退いたのは、残念ですが別の機会に利用しましょう。
                  0

                    PIC用の超小形のライター製作

                     液晶表示がトリガーとなって、いろいろと情報を集めていましたら、PICのマイコン用に、超安価で小形のRCDライターを製作できる情報を見つけました。

                     写真のように余りものの部品と不足の部品をちょっと買い足して、超小形のライターを製作しました。このライタはRS232Cに直結して、PICマイコンに書き込みできるもので、ICピンは18ピンにしました。組立てた回路図は、RCDkiteの回路図のバージョン2.5です。回路は同じですが、ユニバーサル基板で部品配置は全く違います。

                    http://feng3.cool.ne.jp/rcd/#v25sch

                    なお、このライタは小型化と安価を優先していますから、使用条件が厳しいので必ず使用説明書を読む必要があります(ノートPCでは利用できません)。また、680円でキットも販売されているようです。

                    【追伸】
                     PICProg4U(FENG3 作のフリーソフト)を利用したら、問題なくRCDライタとして認識してくれて、無事にPIC16F628Aのマイコンに書込みができました。なお、照合も問題なく正常動作でした。


                    0


                      カレンダ

                           12
                      3456789
                      10111213141516
                      17181920212223
                      242526272829 
                      << February 2008 >>