Re: The history of "M&Y"

Team "M&Y" and "花鳥風月"
the soliloquy of the father
毎日更新!

EV3ねた その12 ROBOT-C でI2C通信 できそう・・・

2020-05-06 | EV3ねた

前の記事はこちら EV3ねた その11 ROBOT-C でI2C通信 続き

 

じゃあ、

[Mindstorms]EV3 nicosensor

のところにあった、プログラムをArduinoに入れて、EV3と接続してみます。

ハード的な接続は nicosensor のページの回路図にあるように

     EV3        Arduino
青 SDA    <---> D2 (100kΩの抵抗をプルアップ接続)
緑 SCL     <---> D3 (100kΩの抵抗をプルアップ接続)
黄 VBUS  <---> +5V
赤 GRND <---> GND

です。

(私は、常識的に SDA:A4 SCL:A5 と接続してしまって、動かなくて悩みました 苦笑)

 

う~ん、やっぱり、通信できない・・・

いろいろやってみると・・・SDAのところに接続しているプロアップの100KΩの抵抗を抜き差しすると、「NXT用超音波センサー」に偽装できることが分かりました。

ただ、一旦超音波センサーと認識されても、ケーブルを抜き差しすると、やっぱり UNKNOWN になっちゃいます。

何ででしょうか!?

 

さらに、いろいろと試すと・・・EV3の電源OFFの状態の時からArduinoを接続したままで、(EV3の)電源を入れると、(起動までにけっこうな時間が掛かりますが)何もせずに超音波センサーに偽装できることが分かりました。

 

さらに・・・

私は、Arduinoの電源をEV3のポートから(6本の信号線から)供給していたのですが・・・Arduino自体にPCから給電すれば、普通に使えることが分かりました。

ということは、EV3のポートから給電する方法は(電力不足!?)で使えないということなんでしょうか?

折角、EV3とArduinoを接続できても、Arduino用に別にバッテリーを搭載する必要があるとすると、魅力が半減ですねぇ。

ということで、[Mindstorms]EV3 nicosensorに掲載されていたプログラムで、少なくとも EV3とArduinoの接続はできました。ただ、このプログラムでは、あくまでも1つの(センサー)の値が渡るだけであり、沢山のセンサーを制御するためには、もっと工夫をしなければなりません。

でも、とりあえず、「通信ができた」ということで、一歩前進です。(ふぅ)

 

さらに調べていくと・・・どうして EV3 と Arduino を接続したままで、EV3の電源を入れると通信ができるのかが分かりました。EV3は、ポートにセンサーをつなぐと、すぐに(即座に!)何のセンサーを接続したかを判断するために、Product ID(0x08)とRead Sensor Type(0x10)を送信します。(超音波)センサー側は、0x08に対して”LEGO"、0x10に対して”Sonar”を返すと、それを受け取って、「ああ、ポートにはNXT用の超音波センサーが接続されたな・・・」と判断するようです。

しかし、Arduinoの電源をEV3のポートから供給すると、(Arduinoの起動にちょっとだけ時間が掛かるため)EV3から Product IDとRead Sensor Type が送られていることを認識できずに、対応する正しいデータを返送できずに、UNKNOWNになってしまう・・・という筋書きのようです。

(私が使用しているEV3は電源がNi-H電池なので、EV3のポートからの電源供給の電圧が低くてダメなのかと。だからわざわざアルカリ乾電池を買ってきたのに・・・)

だから、接続してから・・・ 0x08 0x10 0x41 0x42 0x42 0x42・・・と EV3⇒Arduino に通信するのですが・・・Arduino側では、初めの方の 0x08 0x10 0x41 を認識できずに 0x42 0x42 0x42 だけを受け取っています。

 

さらに分かったことは・・・ 0x42 0x42 0x42 だけを受け取って、UNKNOWN になっているポートに普通の超音波センサーで読み取るプログラムを実行すると、 0x08 0x10 の儀式を経ていないにも関わらず、それ以降は超音波センサーとして認識されました。

例えば、こういうプログラム

#pragma config(Sensor, S1,     NXTSONAR,       sensorSONAR)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//
task main()
{
 int i;
 while(true)
 {
    i=SensorValue[S1];
   eraseDisplay();
  displayBigTextLine( 5,"  %3d cm",i );
  wait1Msec(500);
 }
}

ということで、EV3とArduino で通信ができたっちゃできたのですが・・・まだまだですね。

EV3が0x42 を間断なく送信している姿がけなげですが・・・無駄のような気がします。(私は根がケチなので・・・)

この、休みなく送信する 0x42 をどうにかできませんかねぇ・・・

 

ちなみに、IIC-BYTE になると、ポートビューではこんな感じです。

 

NXTの超音波センサーとして認識されると、ポートビューでリアルタイムに値が表示されます。

本日のまとめ・・・

EV3に接続したセンサーを「NXTの超音波センサー」として、偽装するには、接続直後にEV3が送信する 0x08,0x10 にセンサーが側を返信する必要があります。超音波センサーとして認識されると、EV3のポートビューでセンサーの値を確認できます。0x08 や 0x10 に返信しないと UNKNOWN になりますが、0x42に返信するとそれ以降は、超音波センサーとして認識されて通信ができます。

(ポートビューを使わないのであれば、0x08 や 0x10 に返信する必要はない・・・)

 

続きの記事はこちら EV3ねた その13 ROBOT-C でI2C通信 出来てた!

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EV3ねた その11 ROBOT-C でI2C通信 続き

2020-05-03 | EV3ねた

前の記事はこちら EV3ねた その10 ROBOT-C でI2C通信

 

EV3に接続したI2Cセンサー(TPA-81)の読み取りについて、実験をしています。

これまでの現象をまとめると・・・

①プログラムを実行しても、センサーからの値が読み込まれない。
②何度も読み込みを実行している最中に、SCLの線を抜き差しすると、それ以降はセンサーの値が読みこまれるようになる。
③そのまま、センサーの電源を一旦切っても(その後に再びON)、センサーの値は読み込まれる。
④EV3とセンサーの間の線を一旦外すと(その後に再接続)センサーからの値が読み込まれない。

こんな感じです。

で・・・分かったことは、センサーの値が読み込まれない間は、(EV3のポート情報を確認すると)ポート1は UNKNOWN になっているのですが、②でSCLの線を抜き差しして、センサーの値が読みこまれるようになった後は、ポート1は IIC-BYTE と表示されていました。

これは、EV3がポート1を I2C機器と認識したから、通信ができるのだと思うのですが・・・どうやったら、プログラムからポート1を I2C機器(IIC-BYTE) に設定できるのでしょうか!?

プログラムの最初に書く

#pragma config(Sensor, S1,     TPA81,          sensorEV3_GenericI2C)

 sensorReset(S1);
 SensorType[S1] = sensorEV3_GenericI2C;

などを入れてみても、何も変わりません。

 

で、SCLの信号線にLEDを付けて、通信を目で確認できるようにしてみて分かったのですが・・・

電源を入れてすぐや、EV3とセンサーの間のケーブルを抜き差しすると・・・SCLの信号がピロピロと点滅しっぱなしになります。これは、ポートに接続したセンサーをEV3が勝手に判断する何らかの手順があるように思います。

(TPA-81は、その手順に従っていないので、UNKNOWN になってしまうのではないかと・・・)

 

じゃあ、その手順に従って信号を返せば、Arduino との通信もできるのではないか・・・と、逆に希望がわいてきました。

 

もう、意地になって、ググっていくと・・・

[Mindstorms]EV3 nicosensor

https://sites.google.com/site/yugenkaisyanico/nicosensor_ev3

というページに、とっても役に立つ情報が書かれていました。

 

 

以下にコピペします。

I2C通信は常にマスター側(インテリジェントブロック側)に主導権があります。最初はマスター→スレーブに送信します。送信データの1バイト目の値がスレーブアドレスです。これが適合しないと返信しないという決まりがあります。NXT超音波センサのスレーブアドレスは0x02です。送信データの2バイト目がコマンドです。
センサを接続すると、最初にインテリジェントブロックからセンサに対して2つのコマンドが送られます。
Product ID(0x08)とRead Sensor Type(0x10)です。
そこで、NXT超音波センサと同じ内容を返します。
Product ID(0x08)→"LEGO"(0x4C, 0x45, 0x47, 0x4F, 0x00)
Read Sensor Type(0x10)→"Sonar"(0x53, 0x6F, 0x6E, 0x61, 0x72, 0x00)
Product IDが正しい場合、インテリジェントブロックからはNXT超音波センサ「NXT-US-CM」として認識されます。
Product IDが不明だと「IIC-BYTE」となります。I2C通信そのものに失敗すると「UNKNOWN」となり、以後、通信をしてくれません。
NXTは接続にProduct IDなどの問い合わせがありません。過去に製作したnicosensorは、このコマンドの応答機能を実装していませんでした。この機能を追加するとEV3へ対応できます。
距離測定のコマンドはRead Measurement Byte 0(0x42)です。測定値は1バイト(0~255)です。有効範囲は1~254となります。

 いや~、私が悩みに悩んでいたことが、あっさり書かれていて、逆に拍子抜けです。

nicosensorは、かつて、NXT用の自作センサーを接続するきっかけを提供してくださった、記事です。これがEV3に対応したということですね。

分かったことは・・・

EV3は(NXTと違って 笑)賢いので、ポートにセンサーが接続されると、勝手に「おいおい何を接続したんだ?」と勝手に調べます。で、接続したのがLEGOの超音波センサーなら「ポート1にLEGOのNXT用の超音波センサーが接続されました」と勝手に認識してくれるのでしょう。ここで、接続したけど「LEGOの超音波センサーだよ」と認識できない時は、IIC-BYTEになるようです。(うまく接続しないと UNKNOWNのまま、なのでしょう)

ということで、単にI2Cのセンサーを接続してもダメなことが分かりました。

ちゃんと、(接続時に)EV3の問いかけに対して、回答を送らないと通信をしてくれない・・・ということですね。

(ただ、なぜ、SCLの線を抜き挿しすると、それ以降の通信をしてくれるのかは、謎のままです・・・)

 

しかも、nicosensorのページには、Arduino側のプログラムもダウンロードできるようになっていて、至れり尽くせりです・・・

では、早速、Arduinoに接続して実験をしてみます・・・わくわく

 

続きの記事はこちら EV3ねた その12 ROBOT-C でI2C通信 できそう・・・

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EV3ねた その10 ROBOT-C でI2C通信

2020-05-02 | EV3ねた

前の記事はこちら EV3ねた その9 ROBOT-C を使ってみる

 

さて・・・ROBOT-Cが使えるようになったのですが・・・

本来の目的である、EV3とArduinoの通信ができるか、の研究を続けます。

まず、ROBOT-Cの普通の操作を覚えなければならないのですが、これは簡単でした。

 

プログラムを入力して、「Compile Program」ボタンでコンパイルします。このときに、エラーがあれば、表示されるのですが・・・エラーが無い時に、ノーリアクションなので、コンパイルが終わったのか、終わらないのか、とっても不安になります。(一応、下の方のメッセージエリアに「File "xxx.c" compiled on 日付 時刻」が表示されるので、コンパイルが終わったよ、アピールはあるのですが・・・)

次に、「Download to Robot」ボタンで、EV3に転送します。すると、「Program Debug」というパネルが表示されて、その中の「Start」ボタンで実行します。

 

さて、一通り操作に慣れたところで肝心のI2C通信のプログラムを研究します。

ただ、いきなりArduinoとの通信をするには、不明点が多いので、まずは普通のI2Cセンサーを接続してみます。

NXTと直接接続した実績のある、非接触型温度センサー(サーモパイル)のTPA-81を接続しています。

 

ハード的な接続は簡単です。

EV3のポート1とブレッドボードを結んで・・・4本の線をセンサー(TPA-81)に接続します。

     EV3        TPA-81
青 SDA    <---> SDA
緑 SCL     <---> SCL
黄 VBUS  <---> +5V
赤 GRND <---> GND

さて、ハード的な接続は簡単にできたのですが・・・そう簡単にはセンサーの値を読み込んでくれません。

 

NXCの I2Cbyte( ) のような関数があるハズ・・・と思っていたのですが・・・ROBOT-CのHELPで検索しても出てきません。(もしかしたら・・・ROBOT-Cでは、I2Cを直接扱うことができないの? と真面目に思いましたよ)

http://www.robotc.net/download/lego/

に、貼りついている ROBOTC for LEGO MINDSTORMS 4.0 Users Guide にも、I2C関係の関数は記載されていません。

せっかく、ROBOT-Cをインストールしたのに、ガックシです。

 

でも、あくらめずに、ググってみると・・・

http://www.robotc.net/wikiarchive/NXT_I2C_Sensors

こんなページが見つかりました。

ここには、

nI2CBytesReady
nI2CRetries
nI2CStatus
readI2CReply
sendI2CMsg 

これらが掲載されていました。ただ、NXT用の関数のリファレンスのようで、EV3で使えるかどうかは不明です。

readI2CReply と sendI2CMsg は、まさしくI2Cの通信を行うものなので、これがあれば I2C 通信ができそうです。

何も考えずに ROBOT-C のプログラムに readI2CReply と sendI2CMsg を打ち込んでみると・・・ちゃんと、関数名として認識して紺色の太字になったので、EV3でも使えそうと期待が高まりました。

で、この関数を使ったサンプルを探して、ネットをさまよいました。

が・・・全然ありません。

やっと探したのが、ここ・・・

 

https://engmuhannadalkhudari.wordpress.com/2016/02/11/nxtev3-arduino-i2c-ultimate-guide/

ここに、EV3とArduinoの接続のことが書かれているようです。(ただ英語なので、よくわかんない)

EV3側のプログラムは EV3-SW で書かれているようなのですが・・・下の方にROBOT-Cのプログラムがありました。

これを、解析して、作ったのがこれ・・・です。

 

task main()
  {
  int i;
  char Wbuf[3] = {2,0xD0,0x02};
  char Rbuf[8];
  
  while(true)
    {
    sendI2CMsg(S1,Wbuf,8);
    wait1Msec(20);
    readI2CReply(S1,Rbuf,8);

    eraseDisplay();
    for(i=0;i<8;i++)
     displayBigTextLine(i*2,"  %d : %d",i,Rbuf[i]);

    wait1Msec(500);
    }
  }

自分への備忘録として解説を入れておきます・・・

sendI2CMsg関数の第1パラメータはポート番号(S1とかS2)、第2パラメータは送るデータの配列のアドレス、第3パラメータは受信するデータの数

送る配列には、データ数、I2Cのアドレス、渡すデータ・・・を格納します。上のプログラムでの「2,0xD0,0x02」は、2個のデータを渡す、I2Cアドレスは0xD0、渡すデータは2で、合計3バイトを送ります。

readI2CReply関数の第1パラメータはポート番号、第2パラメータはI2C機器から受け取るデータの格納配列のアドレス、第3パラメータは受信するデータの数

 

さて、このプログラムで、TPA-81の値が読み取れるっちゃ読み取れるのですが・・・安定しません。

というか、電源を入れた直後は、通信ができません。(一旦読み取った値が変化しません)

で・・・SCLの線を抜き差しすると、何故か値を読み取るようになります。

何で?

 

まだまだ研究が必要なようです。

 

続きの記事はこちら EV3ねた その11 ROBOT-C でI2C通信 続き

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EV3ねた その9 ROBOT-C を使ってみる

2020-05-01 | EV3ねた

前の記事はこちら EV3ねた その8 EV3でNXCをうごかしてみるプロジェクト Arduinoとの接続・・・できない!

 

苦労して、EV3でNXCを使えるようにしてみたけど・・・NXCはネイティブなEV3に対応している訳ではなく、「なんとか動かすことができる」程度のようです。

じゃあ、まじめにロボット用のプログラム開発をするのには、何を使えば良いのか・・・ググるといろいろな言語が出てくるのですが・・・良く分かりません。

で・・・なんか、ちょっと古そうだけど・・・ROBOT-Cを試してみることにしました。

(ROBOT-Cは有料ですが、10日間のお試しができそうなので・・・この長い連休で研究してみよう!)

 

まずは、ROBOT-CのHP

http://www.robotc.net/

から、Free Trial Download として、「ROBOTC for LEGO MINDSTORMS」をダウンロードします。

私がダウンロードしたファイルは、

ROBOTCforLEGOMindstorms_456Release.exe

でした。

 

まずは、これをインストールします。

インストールが終わると、勝手にデスクトップに5つのアイコンが設定されます。

ROBOTC for LEGO Mindstorms 4.X をダブルクリックして起動します。

 

 

なかなか、グラフィカルでカッコイイ画面です。

ただ、

Latest Version4.56 - August 16, 2017

と、ちょっと古くないですか!?

(もう、安定しているから、バージョンアップが必要ないんです・・・と思いたい!)

 

インストールしたら、Getting Started Guide に従って操作していきます。

(Google先生大活躍です!)

Step 1: Switch Platform Type to EV3
ROBOTC will launch by default in “NXT” mode. Switching the platform type to “EV3” mode will allow you to program your EV3 brain.

ステップ1:プラットフォームタイプをEV3に切り替える
ROBOTCはデフォルトで「NXT」モードで起動します。 プラットフォームタイプを「EV3」モードに切り替えると、EV3ををプログラムできます。

A: To switch platform type, go to the Robot menu and select Platform Type. From there, select LEGO Mindstorms and then choose the LEGO Mindstorms EV3

A:プラットフォームタイプを切り替えるには、[Robot]メニューに移動して[Platform Type]を選択します。 そこから、 [LEGO Mindstorms]を選択してから、[LEGO Mindstorms EV3]を選択します。

※上のツールバーの Robot ⇒ Platform Type ⇒ LEGO Mindstorms ⇒ LEGO Mindstorms EV3

 

Step 2: Updating EV3 Kernel (Operating System)
Before you can use your EV3 with ROBOTC, you’ll need to upgrade your EV3’s Firmware Image. This Firmware Image (1.05X) will be compatible with ROBOTC, LabVIEW and the EV3 Programming Language from LEGO. Firmware downloading takes about 5-6 minutes to complete.
Please note that your EV3 brick must be connected to the computer via USB.  This operation is not supported over WiFi or Bluetooth.

ステップ2:EV3カーネルの更新(オペレーティングシステム)
EV3をROBOTCで使用する前に、EV3のファームウェアイメージをアップグレードする必要があります。 このファームウェアイメージ(1.05X)は、ROBOTC、LabVIEW、およびLEGOのEV3プログラミング言語と互換性があります。 ファームウェアのダウンロードは、完了するまでに約5〜6分かかります。
EV3ブリックをUSB経由でコンピューターに接続する必要があることに注意してください。 この操作はWiFiまたはBluetoothではサポートされていません。

※EV3を起動してをUSBケーブルでPCに接続します。

A: Under the Robot menu, select the Download EV3 Linux Kernel option. Choose the Standard File option to being the firmware upgrade process.

A:[Robot]メニューで、[Download EV3 Linux Kernel]オプションを選択します。 ファームウェアのアップグレードプロセスにするには、[Standard File]オプションを選択します。

※上のツールバーの Robot ⇒ Download EV3 Linux Kernel ⇒ Standard File

B: The “Entering Kernel Firmware Download Mode” is when the EV3 is switching from “run” mode to “bootload” mode. This may take 5-10 seconds to switch. If you get an error message from this point, simply try the upgrade again and it should be successful.

B:「カーネルファームウェアダウンロードモードに入る」とは、EV3が「実行」モードから「ブートロード」モードに切り替わっているときです。 切り替えには5〜10秒かかる場合があります。 この時点でエラーメッセージが表示された場合は、アップグレードを再試行するだけで成功します。

C: The next step is to erase the EV3. This takes about 2-3 minutes.

C:次のステップはEV3を消去することです。 これには約2〜3分かかります。

D: Once the EV3 is erased, the new firmware/kernel is downloaded. This also takes 2-3 minutes.

D:EV3が消去されると、新しいファームウェア/カーネルがダウンロードされます。 これにも2〜3分かかります。

E:Once the firmware is updated, the EV3 will reboot and be ready for use. ROBOTC will report to you when the EV3 has finished booting up.

E:ファームウェアが更新されると、EV3が再起動し、使用できるようになります。 EV3の起動が完了すると、ROBOTCが報告します。

 

Step 3: Install ROBOTC Firmware
Once the EV3 Firmware/Kernel has been updated, you’re ready to install the ROBOTC Virtual Machine (VM) to enable you to program your EV3 with ROBOTC.

ステップ3:ROBOTCファームウェアをインストールする
EV3ファームウェア/カーネルが更新されたら、ROBOTCを使用してEV3をプログラミングできるようにするROBOTC仮想マシン(VM)をインストールする準備が整います。

To install the ROBOTC VM, open the Robot menu and select Download Firmware. From here, select Standard File and the firmware download process will begin.

 ROBOTC VMをインストールするには、[Robot]メニューを開き、[Download Firmware]を選択します。 ここから[Standard File]を選択すると、ファームウェアのダウンロードプロセスが開始されます。

※上のツールバーの Robot ⇒ Download Firmware Standard File

A: Unlike the Firmware/Kernel, the ROBOTC VM only takes about 5 seconds to install.

A:ファームウェア/カーネルとは異なり、ROBOTC VMのインストールには約5秒しかかかりません。

Step 4: Start using ROBOTC!
We have a number of sample programs available under the File Menu -> Open Sample Programs

ステップ4:ROBOTCの使用を開始する!
[File]メニュー-> [Open Sample Programs]から、いくつかのサンプルプログラムを利用できます。

 

これで、とりあえずの環境設定は終わりのようです。

 

続きの記事はこちら EV3ねた その10 ROBOT-C でI2C通信

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EV3ねた その8 EV3でNXCをうごかしてみるプロジェクト Arduinoとの接続・・・できない!

2020-04-30 | EV3ねた

前の記事はこちら EV3ねた その7 EV3でNXCをうごかしてみるプロジェクト EV3本体での実行

 

さて、ここまででタイトルにあるように、「EV3でNXCを動かす」ことはできました。

これで、満足・・・終了・・・と、いう訳にはいきません。

 

今回の目的は、「EV3 に Arduino を接続する」です。

この実験を行うために、Arduino側の準備をします。

もう、この歳になると・・・いろいろと忘れていて・・・Arduino側の準備をするのにも、大きな労力(勇気と時間)が必要になります。

まず、Arduino NANOを探して、それから LCD(液晶ディスプレー)を探して・・・それらをブレッドボードに挿して、テストできるように配線・・・

で、過去に作ったサンプルプログラムを動かすまでに、結構な時間が掛かりました。

なんとか、配線と起動テストは出来たのですが・・・LCDの2行目の真ん中のドットの列が制御不能(つまり壊れて表示不可)になっていました。

 

(次回、秋葉原に行くときに買ってこないと・・・)

 

過去の自分を思い出しながら、Arduinoの設定をやっています。

 

さあ、これで、EV3とArduinoを接続してみる環境は整いました・・・

 

で・・・これまで、NXTとArduinoを接続したプログラムなどを参考に、実験しようとしたのですが・・・

NXCにI2C関係の関数が軒並みコンパイルエラーになります。

(I2CBytes関数などがダメ、やっぱりEV3でNXCは無理なのかなぁ?)

やっぱり、NXCはネイティブのEV3には対応していない(とりあえず、Ev3でも動かせるよ・・・というレベル)と聞いたことがあるのですが、やっぱり、そんなものなのでしょうか!?

 

もうちょっと足掻いてみますけど・・・

なんだか、ちょっと、既にあきらめ気分です。

 

続きの記事はこちら EV3ねた その9 ROBOT-C を使ってみる

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EV3ねた その7 EV3でNXCをうごかしてみるプロジェクト EV3本体での実行

2020-04-26 | EV3ねた

前の記事はこちら EV3でNXCをうごかしてみるプロジェクト 動いた!

 

とりあえず、EV3 で NXC を動かすことができました。

で・・・まだ手順が残っています。

 

これまで、プログラムを実際に動かすためにはPCのNXCの画面から、「Run Program」ボタンをクリックして実行します。

つまり、PCとEV3をケーブルで接続したまま(もしかしたらWiFiなどの無線で通信することで、ケーブル接続は必要なくなるかもしてませんが・・・)でないと実行指示ができません。

これは、ロボカップジュニアの競技としては・・・ダメ(使い辛い)ですよね。 

 

普通なら、プログラムをEV3に転送した後に、(PCとEV3の接続を切って)EV3単体で実行できるようになると思うのですが・・・

 

で、それを実現するのが、今回の作業になります。(そのハズ)

 

■手順17 EV3本体での実行

BricxCC の「Tools」から「Explorer」を選択してBricxCC Explorerを起動します。 Explorer ウィンドウ左側のEV3内部(デフォルトの位置)に右クリックして「Create folder」を選択し「Run」フォルダを作成します。作成した Run フォルダの中に(手順12で)ダウンロードしたプログラムランチャー(run.rbf)をコピーします。

EV3上で実行したいファイル(例えば Sound.c)の名前を「App.c」へ変更します。

(それに伴って、PRJファイル(例えば Sound.prj)の名前を App.prj に変更します。)

App.c をコンパイルしてEv3に転送します。

 

EV3で、「Run」というプログラムが表示されるので、EV3単体でプログラムを実行できます。

 

ただ・・・EV3に転送できるプログラムは1つだけのようです。複数のプログラムを転送して、EV3側で選択して実行することは、できないのでしょうか・・・!?

 

続きの記事はこちら EV3ねた その8 EV3でNXCをうごかしてみるプロジェクト Arduinoとの接続・・・できない!

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EV3ねた その6 EV3でNXCをうごかしてみるプロジェクト 動いた!

2020-04-25 | EV3ねた

前の記事はこちら EV3でNXCをうごかしてみるプロジェクト 動かない!

 

なにがなんだか、わからないうちに動くようになった、NXCですが・・・

いろいろやった・・・の「いろいろ」が思い出せなくて困っています。

 

一回目は、参考にさせて頂いた記事(Ev3:BricxCCのインストール、設定とプログラム)の通りに操作してみて、ダメだったので、その日はあきらめました。

再度、翌日に BricxCC の再インストールから実施したのですが、やっぱりダメ

ヘッダーファイルの修正に失敗したのかと思って、修正前のヘッダーファイルに入れ替えて、再度ヘッダーファイルの修正をしてみたけどダメ

 

で、本当にあきらめかけたのですが・・・あきらめるのが悔しくて、最後のあがき・・・とばかりに、いろいろと試してみました。

 

で・・・

本当に、いろいろやった結果・・・

サンプルプログラムとして、モーターを動かすサンプルプログラムがあるけど・・・この最初が

// Sample Program “Motor.c”
#include < stdio.h >
#include < unistd.h >
#include “C:\BricxCC\lms_api\ev3_output.h”
#include “C:\BricxCC\lms_api\ev3_command.h”

こうなっています。

これを

// Sample Program “Motor.c”
#include “jissenPBL.h”

こうしたら、なんか動きました。

(つまり手順16で、入力したモーター制御のプログラムのヘッダー定義が違っていたってこと)

 

よし!!

長かった・・・(涙)

良くあきらめずに、頑張った オレ!

 

 

じゃあ、次のサンプルプログラム「サウンドの再生」をやってみます。

プログラムは以下のとおり・・・

// Sample Program “Sound.c”
#include "jissenPBL.h"

int main()
{
OutputInit();
SoundInit();

PlayTone(440,1000); //frq(Hz),duration
Wait(1000);

PlayToneEx(330,400,100); //frq(Hz),duration,vol(100 only?)
Wait(1000);

PlayFileEx("/home/root/lms2012/prjs/Bravo.rsf",100,false); //Filename,vol,loop
Wait(1000);

PlayFile("/home/root/lms2012/prjs/Boo.rsf"); //Filename only
Wait(1000);

OnFwdEx(OUT_BC,70,0);
Wait(1000);
Off(OUT_BC);
}

を入力して、 sound.c としてコンパイルします。

するとエラーになります。

sound.prj ファイルは、できていません。

しかたがないので、(先に作った)motor.prj をコピーして sound.prj にすると、(sound.c が)コンパイルできます。

ということで、どうしたら prj ファイルができるのでしょうか?

 

で、この謎ですが・・・

.prj ファイルは、BricxCC の Projrct Manager を操作すると(ファイルが)作成されることが分かりました。

よし、また、一歩前進!

 

とりあえず、動かすことには成功しました。

いや~ 本当に長かった・・・

 

続きの記事はこちら EV3でNXCをうごかしてみるプロジェクト EV3本体での実行

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EV3ねた その5 EV3でNXCをうごかしてみるプロジェクト 動かない!

2020-04-24 | EV3ねた

新型コロナウイルスの感染拡大で、ステイホームを余儀なくされている今日この頃

皆さん、いかがお過ごしでしょうか(笑)

 

ずっと家にいるのも大変ですよね・・・

この時間でなにをやろうか考えていて、ふと・・・そうだEV3を使って見よう・・・と考えました。

我が家のチームはNXTまでしか使ったことがなく、EV3は購入したものの、一回箱から出しただけ、の状態でした。

たまに、M&Yのロボットで Rescue-Maze(正式には Rescue-B 笑)のデモをやるのに、見せるのはNXTのロボットだから、現在のチームには参考にならないかも・・・

しかもそのときに、偉そうに「EV3に沢山のセンサーを接続したいのなら、このロボットみたいにArduinoに接続すれば沢山のセンサーを接続できるよ」と説明したりしてます。本当に、EV3とArduinoが接続できるのか・・・自分で確認しないとダメだなぁ・・・と常々思っていたことを実験してみます。

 

では、EV3でNXCを動かす環境を作ってみます・・・

参考にしたのは、このページ

Ev3:BricxCCのインストール、設定とプログラム

丁寧に書かれているので、とにかく手順通りにやってみます。

 

■手順01 BricxCCの通常版、テストリリース版、linux tool、lms apiの4つのパッケージのダウンロード

http://bricxcc.sourceforge.net/

 

Downloading の latest version から最新版のBricxCCをダウンロードするのですが・・・すでにリンク切れのようです。幸いにも test release のリンクの方にはいろいろと揃っているようなので、こちらから調達します。

最新版として bricxcc_setup_33810_20130220.exe

テストリリース版として test_release20131007.zip

あと2つ

linux_tools.zip

lms_api.zip

をダウンロードします。

 

■手順02 G++ クロスコンパイラ環境 for ARMプロセッサ(EV3)のダウンロード

https://sourcery.mentor.com/GNUToolchain/package4574/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi.exe

arm-2009q1-203-arm-none-linux-gnueabi.exe をダウンロードします。

 

■手順03 EV3ソースコード のダウンロード

https://github.com/mindboards/ev3sources

GitHubの Clone or Download をクリックして Download zip で全体をダウンロードします。

ev3sources-master.zip をダウンロードします。

展開(解凍)して・・・必要なのは、その中の ev3sources/lms2012/lms2012/sourceの下のファイルを lms2012フォルダを作成して、その下に格納します。

 

■手順04 EV3最新ファームウェアのダウンロード

これは、別途最新版にしたので省略

 

■手順05 BricxCCのBricxCCのインストール

(手順01で入手した)bricxccbricxcc_setup_33810_20130220.exe

を実行して、インストールします。

インストールするディレクトリとして(デフォルトではなく) C:\BricxCC を指定しました。

 

■手順06 G++ クロスコンパイラ環境のインストール

(手順02で入手した)arm-2009q1-203-arm-none-linux-gnueabi.exe を実行して CodeSourcery Lite のインストールを行います。

 

■手順07 BricxCCテストリリース版のインストール

(手順01で入手した)test_release20131007.zip を展開して、先ほどインストールした BricxCC に上書きします。

(丸ごとコピーして、上書きする)

 

■手順08 linux_tools.zip の解凍

(手順01で入手した)linux_tools.zip を解凍すると make.exe と rm.exe の2つのファイルが出てくるので、C:\BricxCC ディレクトリに格納します。

 

■手順09 lms_api.zipの解凍

(手順01で入手した)lms_api.zipを解凍して、フォルダ(lms_api)ごと C:\BricxCC ディレクトリに格納します。

 

■手順10 lms2012フォルダの格納

EV3ソースコードから取り出した(手順03で作成した)lms2012フォルダを C:\BricxCC ディレクトリに格納します。

 

■手順11 環境変数(PATH)の設定

画面左下の Windowsマークを右クリックして システム → システム情報→システムの詳細設定 でシステムのプロパティが開くので、詳細設定タブの環境変数をクリックします。

Pathを選択して 編集 をクリックして 変数値の最初に C:\BricxCC;C:\BricxCC\lms_api; を追記します。

 

■手順12 ヘッダファイル(JissenPBL.h)、EV3 BricxCCプログラムランチャー(run.rbf) のダウンロード

九州工業大学 花沢研究室 File Download

ヘッダファイル(JissenPBL.h)と EV3 BricxCCプログラムランチャー(run.rbf)をダウンロードします。

 

■手順13 JissennPBL.h の編集

(手順12で入手した)JissennPBL.h をメモ帳で開いて、#include の部分に追加します。

#include <sys/types.h> //追加
#include <sys/stat.h> //追加
#include //追加
#include "lms2012\lms2012.h"

#include "C:\BricxCC\lms_api\ev3_output.h"
#include "C:\BricxCC\lms_api\ev3_command.h"
#include "C:\BricxCC\lms_api\ev3_lcd.h"
#include "C:\BricxCC\lms_api\ev3_sound.h" //追加
#include "C:\BricxCC\lms_api\ev3_button.h" //追加
#include "C:\BricxCC\lms_api\ev3_constants.h" //追加
#include "C:\BricxCC\lms_api\ev3_timer.h" //追加

 

■手順14 二重宣言の解消

ヘッダファイル間で二重宣言されてしまっているため、このままコンパイルすると 通常ではエラーが発生してしまいます。 無理矢理ですが、この二重定義のままオブジェクトファイルの生成を行います。 この状態で一度、コンパイルを行います(コンパイルエラーが表示されます)。

⇒ここまで、すごく丁寧に書かれていた説明が、急にわからなくなりました。「一度コンパイルを行います」と言われても、何をどうやってやるのか、具体的な操作が書かれていません。う~ん、困った!

とりあえず、下の方に書いてあるモーターを動かすプログラムを入力してやってみました。

EV3をPCに接続し、EV3の電源を入れて・・・NXCを起動して、モーターを動かすプログラムを入力してみて、コンパイルします。

はい、エラーがドバっとでますね。

これで、続けていいのかなぁ

 

次に2重宣言のエラーとwarning表示を消します。C:\BricxCC\lms_api内にある ev3_lcd.h の内容を変更します。

ev3_lcd.h の52、54、55行目をコメント「//」にします。

#define LCD_BUFFER_SIZE (LCD_BYTE_WIDTH * LCD_HEIGHT)
→ // #define LCD_BUFFER_SIZE (LCD_BYTE_WIDTH * LCD_HEIGHT)

typedef byte IMGDATA; //!< Image base type
→ // typedef byte IMGDATA; //!< Image base type

typedef IMGDATA* IP; //!< Instruction pointer type
→ // typedef IMGDATA* IP; //!< Instruction pointer typeev3_constants.h

 

ev3_constants.h の内容を変更します。

ev3_constants.h も同じように52、53、54、330行をコメント「//」にします。

#define LCD_WIDTH 178 /*!< LCD horizontal pixels */
→ // #define LCD_WIDTH 178 /*!< LCD horizontal pixels */

#define LCD_HEIGHT 128 /*!< LCD vertical pixels */
→ // #define LCD_HEIGHT 128 /*!< LCD vertical pixels */

#define TOPLINE_HEIGHT 10 /*!< Top line vertical pixels */
→ // #define TOPLINE_HEIGHT 10 /*!< Top line vertical pixels */

#define FILENAME_SIZE 120 //!< Max filename size including path, name…
→ // #define FILENAME_SIZE 120 //!< Max filename size including path, name…

 

■手順15 NXCを起動

BricxCCを起動します。

Port に Automatic

BricType に EV3

Firmware に Linux

を選択します。

 

■手順16 モーターを動かす

File → NEW

// Sample Program “Motor.c”
#include < stdio.h >
#include < unistd.h >
#include “C:\BricxCC\lms_api\ev3_output.h”
#include “C:\BricxCC\lms_api\ev3_command.h”#include "jissenPBL.h"

int main()
{
if (!OutputInit())
{
return -1;
}
OnFwdEx(OUT_AB,70,0);
Wait(10000);
Off(OUT_AB);
}

このプラグラムを入力して、Motor.c としてセーブします。

「View」→「Project Manager」をクリックします。

「Files」内で右クリックして「Add」を選択して

C:\BricxCC\lms_api\ev3_button.c
C:\BricxCC\lms_api\ev3_command.c
C:\BricxCC\lms_api\ev3_lcd.c
C:\BricxCC\lms_api\ev3_output.c
C:\BricxCC\lms_api\ev3_sound.c
C:\BricxCC\lms_api\ev3_timer.c

これらのパスを追加します。

 

File→Open から 今作成したプロジェクトファイル Motor.prj を開きます。

それぞれのパスに C:\BricxCC\lms_api\ を追加します。

 

ここまでで、NXCがEV3で実施可能のハズなのですが・・・使えません。

エラーになります。

 

 

エラーログには

motor.c:2:21: error:  stdio.h : No such file or directory
motor.c:3:22: error:  unistd.h : No such file or directory
make: *** [motor] Error 1

と、エラーが出ます。

そもそも stdio.h が無い・・・

 

ぐぐったりしたけど・・・さすがに、これは、どうしようもない!?

 

 

どなたか、EV3でNXCを使っている方、環境設定のやりかたを教えてください。

 

追補・・・なんかいろいろといじっていたら、コンパイルができるようになりました。

はっきり言うと・・・なんで動くようになったのかわかりません。(苦笑)

別記事で原因を究明していきたいと思います・・・

 

続きの記事はこちら EV3でNXCをうごかしてみるプロジェクト 動いた!

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EV3ねた その4 今更ながらEV3を使ってみる

2020-03-31 | EV3ねた

前の記事はこちら LEGO MINDSTORMS EV3

(カテゴリ名は「NXTねた」のままです 笑)

 

これまで、EV3を(持ってはいたけど)使ったことが無かったので、勇気を出して使ってみます。

 

まずは、ソフトウェアのダウンロードです。

https://education.lego.com/ja-jp/downloads

LEGO EducationのHPのダウンロードページでEV3を選択して、Windowsの日本語版を選んでダウンロードします。

LME-EV3_Full-setup_1.4.2_ja-JP_WIN32.exe

ダウンロードしたファイルを実行します。

インストール途中で「出力ディレクトリ」というのを求められるのですが・・・なんだろう、これは・・・

説明では「プライマリインストールディレクトリ」と書かれているので、インストール先だと想像して、デフォルトのままにします。

C:\Program Files (x86)\LEGO Software\LEGO MINDSTORMS Edu EV3\

次にインストールオプションを聞かれたので、良くわからないけど Educator Edition を選択。

あとは、ライセンス条項に同意したらインストールが開始されます。

 

では、ソフトを立ち上げてみます。

ソフトウェアのアップデートを自動的にチェック、という項目があったので、悩みましたが・・・チェックを入れることにしました。

「準備」というところを、ずっと見て行って、EV3ブロックの名前を入力します。

つぎに「やってみよう」を見ていきます。

4/15 でプログラムらしきものを組んで、実行すると・・・EV3から「ハロー」と音声が出ました。

7/15 でモーターを接続してプログラムを実行すると、モーターが1回転して止まります。

(我が家の場合は、NXT用のモーターを接続しました)

10/15 でプログラムを作るのですが・・・謎の日本語「待ちます。Lモーター」は、何かの英語の直訳なのでしょう。(笑)

(「タッチセンサー>比較する>述べる」というのも、なんだかおかしいですね。正しくは「タッチセンサー>比較する>状態」です。)

はい、これを実行すると、タッチセンサーを押すと、モーターが1回転して止まります。(プログラムも終了します。)

13/15 でカラーセンサーを使っています・・・う~んやっぱりEV3のセットを発掘しないとダメかなぁ。

 

ここまでやったところで、ファームウェアの更新をしようと何度かやっているのですが・・・なかなかできません。

現状のFWは V1.09E で最新のものが V1.10E なので、更新できると思うのですが・・・

https://ev3manager.education.lego.com/

に接続して、EV3DeviceManager.msi をダウンロードして実行したら、ファームウェアの更新ができました。

更新したら、ブロック名などの設定がすべて初期化されました。(笑)

その後、PCとの接続ができなかったりしましたが、何度か電源OFF/ONを繰り返しているうちに接続ができました。

これで、ファームウェアが V1.10Eになりました。

たったこれだけのことで、結構な労力を使いました!

 

さて、我が家のLEGOの箱の山からEV3を発掘しました。

改めて、EV3用のモータとタッチセンサーを取り付けて、おさらいから実施です。

やってみよう、の12/15でカラーセンサーを接続して、13/15 で色の付いたものをカラーセンサーに近づけると、指定した色にだけ反応します。

なかなか賢いですね。

ロボカップジュニアのレスキューラインの交差点の緑もこれで判断できれば簡単なのですが・・・ねぇ。

 

さあ、「さあ、進みましょう」の章で、駆動ロボットを作り始めたのですが・・・

(教育用ではなく)一般用のキットでは、部品が揃わずに頓挫しました。

 

2020/4/26 追補 カテゴリ名「EV3ねた」を追加したので、カテゴリ名を「NXTねた」⇒「EN3ねた」に変更しました。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EV3ねた その3 LEGO MINDSTORMS EV3

2020-03-30 | EV3ねた

前の記事はこちら LEGO mindstorms EV3

 

我が家はみんなLEGO好きです。

M&YのロボットもずっとLEGOでした。

RCXから始まって、NXTに・・・

でも、EV3になる前に卒業・・・

ということで、EV3を使ったことがありませんでした。

NXTは時代遅れということなので、今更ながらEV3を使って見ようかと考えヤフオクで手に入れました。

(今回手に入れたのは EV3 の本体だけ・・・セットは、大昔に購入して、どこかに積まれているハズ)

 

中古で、ディスプレイの部分がキズキズだったので・・・

まずは、磨き粉で磨きました!

 

そして、電池を入れて電源ON!

起動にも、終了(電源OFF)にも、意外と時間が掛かりますねぇ。

 

続きの記事はこちら 今更ながらEV3を使ってみる

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EV3ねた その2 LEGO mindstorms EV3

2016-01-09 | EV3ねた

正確には NXTねた ではないのですが・・・(笑)

 

ちょっと あぶく銭 が入ったので、普段だと買わないようなものを手に入れました。

 

 

LEGO mindstorms EV3 です。

このごろは、円安なので、AMAZONとかでも高価です。ちょっと欲しいなぁ・・・なんて考えていましたが、私のおこずかいでは厳しいし(笑) 「M&Y」も「花鳥風月」も終了だし・・・

と、考えていたのですが・・・またまたヤフオクで、ちょっと訳アリのものを安く手に入れました。

(一応、未使用の新品です・・・)

 

一応箱から出して、見てみました。 EV3の本体は、NXTに比べてカッコイイです。

でも、なんかそれだけ・・・NXTで十分なんじゃない!?

 

まあ、しょせん、コレクションとして1個持っておくのも良いか・・・程度のものです。

そのうち、黒や赤の特別な本体とかも出てくるのでしょうかねぇ。

EV3の発売開始が2013年秋(だったような)なので、もう既に2年以上前ですね。NXTの販売も終了のようですし、すぐに次世代(EV4!?)になっちゃうのか・・・

 

続きの記事はこちら LEGO MINDSTORMS EV3

 

2020/4/26 追補 カテゴリ名「EV3ねた」を追加したので、カテゴリ名を「NXTねた」⇒「EN3ねた」に変更しました。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EV3ねた その1 Lego Mindstorms EV3

2013-01-07 | EV3ねた

http://www.engadget.com/2013/01/07/lego-mindstorms-ev3-arrives-tailored-for-mobile-apps/

 

 

Rescue123

 

 

Lego's Mindstorms kits were born into a world where the PC reigned supreme for control; the company is ushering in 2013 with an acknowledgment that its build-it-yourself toy is part of a much wider universe. Its updated Mindstorms EV3 runs on new Linux firmware that's ready for Android and iOS control out of the box, creates an overall more hackable platform and allows further programming on the core Intelligent Brick itself; accordingly, there's an SD card slot for local storage. A built-in infrared sensor expands the possibilities for a more autonomous design, as well -- Lego suggests that EV3 constructs can follow other moving gadgets, or even their creators, around the room. It should also be the first Lego bundle with its own 3D construction guide, as a new app built with Autodesk's help lets builders see the process from every angle. We won't have the chance to put a kit together until the EV3 line ships in the second half of the year, but Lego already expects the core unit to sell for $350.

 

 

上は記事のコピペですが、重要と思われるところに赤色で印を付けました。

全然関係ないですが・・・・out of the box  って、こんな感じで使うのですね。

個人的には、コントローラ本体とサーボモーター、センサーユニットの小型化を希望しますが・・・希望は、かなわないようです(笑)

 

 

 

http://educationnews.legoeducation.us/Press-Kits/132/LEGO-MINDSTORMS-Education-EV3-Press-Kit

 

 

Rescue124

 

 

 

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする