Re: The history of "M&Y"

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

EV3ねた その17 EV3磨き!

2020-05-16 | EV3ねた

前の記事はこちら EV3ねた その16 LEGO 45544 Mindstorm Ev3 Core Set

 

中古で手に入れたEV3ですが・・・ディスプレイなどがキズキズです。

 

 

所詮中古なので仕方がないのですが・・・表示された文字が読み取り難いので・・・磨きました。

SWATCHを磨いた技術を駆使して、パフでゴシゴシ磨きます。

ただ、あんまり力を入れて磨くと、液晶が壊れたら困るので・・・ちょっと優しく・・・(笑)

 

 

完璧ではありませんが・・・まあまあ奇麗になりました。

 

続きの記事はこちら EV3ねた その18 EV3について

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

缶コーヒー50円!

2020-05-15 | ブログ

散歩しているときに見つけた自動販売機

1本100円・・・というのは、良く見かけますが・・・

1本50円というのは初めて見ました。

 

左側のポッカのコーヒーの80円というのも安いと思いますが・・・50円とは・・・

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

1夢1,000円

2020-05-14 | ブログ

散歩をしていて見つけた自動販売機!?

遠くから見たら・・・何の機械か全く分かりませんでした。

福袋の自動販売機と書かれています。

 

 

いろいろなものが当たるようですが・・・

 

 

1回1,000円(一夢1,000円と書かれています)で、やる勇気が無かった・・・

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

EV3ねた その16 LEGO 45544 Mindstorm Ev3 Core Set

2020-05-13 | EV3ねた

前の記事はこちら EV3ねた その15 TPA-81を接続してみる

 

ここのところ、真面目に(!? 笑)EV3の研究をしているので・・・自分へのご褒美(!?)に、まともなEV3のセットを手に入れました。

といっても中古です。

いつものようにヤフオクで落札しました。

 

 

 

中古なので、EV3本体のディスプレイなど、細かい傷などありますが・・・そのうち磨こうと思います。

さっそく、動作確認で(電池を入れて)電源を入れてみました・・・

まあ、普通に使えそうです。

 

で・・・ちょっと気になったのが・・・プログラムが沢山入っています。

しかも、プログラム名が、名前のようです。

5名分ほど・・・

どこかの学校か、お教室で使われていたものなのでしょうか!?

写真データなどでないので、個人情報流出になりませんが・・・こういうところを気を付けたいものです。(笑)

 

 

 

ちなみに、今回のブツは送料込みで3万円弱で手に入れたのですが・・・NXTであれば、さらに半額程度で落札できそうです。

良い時代ですねぇ・・・

 

続きの記事はこちら EV3ねた その17 EV3磨き!

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

設定暗証番号記載票

2020-05-12 | ブログ

昨今話題の10万円給付

「新型コロナウイルス感染症の影響に対する経済対策として政府が実施する、特別定額給付金(10万円一律給付)の制度」の申請が始まったとかで・・・マイナンバーカードがあれば、オンラインで早くもらえるらしいです。

でも、マイナンバーカードを作った時に設定した暗証番号を忘れてしまったり、暗証番号を何回か間違って入力してしまったり、そもそも(カードは受け取ったけど)暗証番号を設定していない場合は、役所に行ってマイナンバーカードの暗証番号を再設定する必要があるようです。

ということで、現在、役所にマイナンバーカードの暗証番号再設定をしてもらう人の列が出来ているそうです・・・

 

我が家もマイナンバーカードを受け取った時に暗証番号を設定しましたが・・・私は(設定した番号なんて)すっかり忘れていました。(だから、郵送の書類が来てからでいいや・・・と考えています。)

ただ・・・カードを受け取った時の日記 マイナンバーカードの受け取り を読むと・・・

番号を記入した紙(控え)を渡されるのですが・・・これをカードと一緒に保管したら、意味無いですよね・・・(笑)

えっ!? 暗証番号を書いた紙を貰った! じゃあ、その紙があれば暗証番号が判明するじゃない!

で・・・探したら、確かにありました。

「設定暗証番号記載票」という紙に、私自身の汚い字で暗証番号を記入したものでした。

 

 

暗証番号といっても、1つ目は英数字なので、「番号」ではなく、「パスワード」ですよね・・・(笑)

受け取った時の記事にも書いたのですが・・・このパスワード(暗証番号)は有効期限が5年なんだそうです。(正確には、発行日から5回目の誕生日)

有効期限が切れたら、再度役所に行って再設定する必要があるそうです。(しかも、有効期限が近いからと言って、自動車免許証のように更新の案内が来るわけでもない)

つまり、もともと役所の窓口に負担が掛かる仕組みなんだと思います。

本当に、このマイナンバーって、市民生活の役に立っているのでしょうか!?

(所詮、これも税金を搾取するための仕組みか・・・笑)

 

最初の話に戻ると・・・今、役所に行ってマイナンバーカードの暗証番号を再設定している人たちは・・・選定暗証番号記載票を失くしてしまったのでしょうか・・・!?

もしかしたら・・・杉並区だけのサービスなのかも!?

 

 

ここまで、書いて・・・その給付金の申請方法が書かれているページを見てみました・・・

そしたら手順は

①申請書が各世帯に届く

②-1 郵送で申請
②-2 オンラインで申請

③給付金が振り込まれる

という感じで・・・結局、①の書類が配達されてこないと、申請できないようです。

私は、てっきり、もうすぐに、オンラインで申請できるのかと思っていました。(だから③が早い・・・と思っていました)

じゃあ、オンラインで申請するメリットは・・・あんまり無いように思います。

 

5/17 追補

あらためて、杉並区のHPを確認すると、オンライン申請というのがあって・・・それは総務省のマイナポータルを使用して(申請書が送られてくるのを待たずに)オンラインで申請できるようです。

https://www.city.suginami.tokyo.jp/_res/projects/default_project/_page_/001/059/712/kyufukin_leaflet_online2.pdf

ただ、マイナポータルのシステム?にアクセス集中していて処理ができなかったり、処理に時間が掛かったりしているようです。

 

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

やっと・・・というか

2020-05-11 | RoboCup2021

以前に 「なんか重要な情報が・・・」の記事でお知らせした内容が「やっと」と言うか「ついに」と言うか、ジュニア・ジャパンのHPに掲載されました。

https://www.robocupjunior.jp/

ロボカップジュニア・ジャパン(RCJJ)2020 の対応方針について
ジャパンオープン2020推薦チームへの「出場資格証明」発行、及び、ジャパンオープン2021での年齢上限緩和等の救済措置について方針を決定いたしました。
詳しくはリンク先PDFをごらんください

 

リンクをクリックすると、PDFファイルが表示されます。

その内容は、4月22日にRCJJ関東ブロックのHPに掲載された内容と同じ・・・と思っていたら、関東ブロックのニュースも上書きされていました。

何か、以前の内容と異なるのでしょうか?

文章を見比べてみたところ・・・

項番1は変化なし。

項番2も変更なし。

項番3も変更なし。

項番4も変更なし。

ということで・・・項番の内容は変わっていないと思われます。

 

PDFの中の日付が4月19日なので、公開されるまでに3週間程度掛かったことになりますね。

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

EV3ねた その15 TPA-81を接続してみる

2020-05-10 | EV3ねた

前の記事はこちら EV3ねた その14 いよいよArduinoとの接続

 

Arduino と EV3 を接続するのに、ArduinoのSDA(ポートA4)とSCL(ポートA5)を使用してしまうと、Arudinoに I2Cのセンサー(例えば TPA-81)を接続することができません。

つまり EV3 <-- (I2C) --> Arduino <--(I2C)--> TPA-81 としたいのですが・・・Arduino には1組のI2Cしかないので、片側にしか使えません・・・

そこで、nicosensor のソフトI2Cを片側に使って

EV3 <-- (ソフトI2C) --> Arduino <--(I2C)--> TPA-81

の接続の実験をしてみます。

nicosensor のページに掲載されているサンプルプログラムを改造して、TPA-81の値をArduinoで読み出して、その読み出した値をEV3に持ってこようとするのですが・・・全然うまく行きません。

 

いや、これで、(貴重な)一日をつぶしました。

まず、ハード的な接続ですが・・・

EV3とarduinoの間の接続は

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

ArduinoとTPA-81の接続は

Arduino    TPA-81
 A4    <---> SDA (10kΩの抵抗をプルアップ接続)
 A5    <---> SCL (10kΩの抵抗をプルアップ接続)
  +5v    <---> +5V
  GND  <---> GND

こんな感じです。

最初は、プルアップ抵抗を100kΩにしていたのですが、EV3から給電すると、通信ができなくなったので、いろいろと実験をして10kΩに変更しました。

 

で・・・

①EV3:ArduinoにI2Cで通信を送ります。
②Arduino:EV3からの信号を受け取ります。
③Arduino:TPA-81の値を読み出します。
④Arduino:TPA-81から読み出した値をEV3に返答します。
⑤EV3:Arduinoから送られた値を受け取ります。

という筋書きなのですが・・・うまくいきません。

要所要所で、LCDに値を表示したり、LEDを光らせて原因を追究していくと・・・

EV3から一組のI2C通信をするには時間が長すぎるようです。(「ようです」というのは、はっきりした原因が分からないからです てへっ)

①⑤の間に②~④の時間が掛かりすぎて、①⑤のI2C通信がきちんと認識されていない感じです。

で・・・過去の自分がどうしたかを確認するために、NXTとArduinoを接続する実験をしたころのプログラムを発掘して確認すると・・・やっぱり、1つのI2C通信で完結できずに、複数の通信に分けていました。

 

どう解決したかというと

①EV3:ArduinoにI2Cで「センサーの値を読み出せ」の通信を送ります。
②Arduino:EV3からの通信を受け取ります。
③Arduino:EV3に「受け取ったよ」と返信します。
④EV3:Arduinoが受け取ったことを確認します。
⑤Arduino:TPA-81の値を読み出します。
⑥EV3:ArduinoにI2Cで「読み出した値を送れ」の通信を送ります。
⑦Arduino:EV3からの通信を受け取ります。
⑧Arduino:TPA-81から読み出した値をEV3に返答します。
⑨EV3:Arduinoから送られた値を受け取ります。

という複雑なやりとりで、TPA-81の値をEV3で受け取ることができました。

(つまり、①~⑤でTPA-81の値を読ませて、⑥~⑨で読んだ値を転送する)

 

 

ここまでしないとセンサーの外付けができないとなると、面倒ですね。

(NXTは、RS-485通信ができるので、こんな複雑なことをしなくても良かったのですが・・・)

EV3はUSBでのシリアル通信ができるらしいので、そっちを研究した方が良いのかも・・・ですね。

 

と・・・ここまで書いてから・・・

あれっ!? EV3の指示が来てからセンサーを読むから時間がかかるんだよね。

じゃあ、普段から(無駄だけど)常にセンサーを読み出しておいて、EV3から指示が来たら読み出しておいた値を転送すれば済むんじゃない・・・と気が付きました。(それができるかは、今後の研究ですかねぇ、ROBOTCの試用期間も過ぎてししまったので・・・)

そういえば、他のチームのロボットの超音波センサーは、常に動いていたなぁ・・・

 

続きの記事はこちら EV3ねた その16 LEGO 45544 Mindstorm Ev3 Core Set

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

『どうぶつの森』が中国で流通停止! ・・・なんだって・・・

2020-05-09 | ブログ

ニュースで、「任天堂のゲームソフト『あつまれ どうぶつの森』が淘宝などの中国のECサイトで検索できなくなった。」というのをやっていました。

 

どうも、話の流れは・・・香港の活動家が「どうぶつの森」のデザイン機能を駆使して、(香港の)民主化についての抗議を投稿したことが原因のようです。

 

出展:msnニュース

 

あんまり、他国の政治に関することを書くつもりは無いのですが・・・「どうぶつの森はこんな使い方もできる!」と知って・・・

ほほ~う、と思いました。(笑)

 

で・・・なぜ、急に検索できなくなったのか、については公式なコメントなどは無い様ですが・・・

どう考えても、政府の情報操作ですよね。

 

この事件を聞いて、2008年に中国から私のブログ(だけ)が見えなかった事件を思い出しました。(笑)

M&Yの履歴は禁止?

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

EV3ねた その14 いよいよArduinoとの接続

2020-05-08 | EV3ねた

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

 

さて、いろいろと試行錯誤を繰り返して EV3とArduino を接続する方法を考えました。

まず、ハード的な接続は、こんな感じです。

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

それから、ArduinoのD5ポートに緑色のLEDを配線しました。(通信の動作確認用)

 

 

そして、まずEV3側のプログラム(ROBOT-C)


void checkI2C(tSensors port)
{
 while(nI2CStatus[S1]!=0)
   {}
  return;
}

void LED_ON()
{
  char Wbuf[3] = {2,0x62,0x01};
  char Rbuf[1];

  sendI2CMsg(S1,Wbuf,0);
  checkI2C(S1);
  readI2CReply(S1,Rbuf,1);
}

void LED_OFF()
{
  char Wbuf[3] = {2,0x62,0x02};
  char Rbuf[1];

  sendI2CMsg(S1,Wbuf,0);
  checkI2C(S1);
  readI2CReply(S1,Rbuf,1);
}

int SENSOR_A()
{
  char Wbuf[3] = {2,0x62,0x10};
  char Rbuf[1];

  sendI2CMsg(S1,Wbuf,1);
  checkI2C(S1);
  readI2CReply(S1,Rbuf,1);
 return Rbuf[0];
}

int SENSOR_B()
{
  char Wbuf[3] = {2,0x62,0x20};
  char Rbuf[2];
  sendI2CMsg(S1,Wbuf,2);
  checkI2C(S1);
  readI2CReply(S1,Rbuf,2);
  return (Rbuf[0]<<8)+Rbuf[1];
}

task main()
{
 int i;

 while(true)
  {
    LED_ON();
    wait1Msec(100);

    i=SENSOR_A();
    displayBigTextLine(8,"A: %d",i);
    i=SENSOR_B();
    displayBigTextLine(10,"B: %d",i);

    LED_OFF();
    wait1Msec(900);
  }
}

 

それから、Arduino 側のプログラム

#include  
#define LED_RED 13
#define LED_GREEN 5
#define I2C_ADDRESS 0x31

byte COM;
int v1=0;
int v2=10000;

void receiveEvent(int DataNum)
  {      
  digitalWrite(LED_RED, HIGH);
  COM = Wire.read();
  if(COM==1)
    {
    digitalWrite(LED_GREEN,HIGH);
    }
  else if(COM==2)
    {
    digitalWrite(LED_GREEN,LOW);
    }
  else if(COM==0x10)
    {
    v1++;
    if(v1>100)
      v1=0;  
    }
  else if(COM==0x20)
    {
    v2--;
    if(v2<0)
      v2=100;
    }  
  digitalWrite(LED_RED, LOW);
  }

void requestEvent() 
  {
  byte d[2];
  
  digitalWrite(LED_RED, HIGH);
  if ((COM == 1) || (COM == 2)) 
    {
    d[0]=0;
    Wire.write(d,1);
    }
  else if (COM == 0x10) 
    {
    d[0]=v1;
    Wire.write(d,1);
    }
  else if (COM == 0x20) 
    {
    d[0]=v2 >> 8;
    d[1]=v2 & 0xff;
    Wire.write(d,2);
    }
  digitalWrite(LED_RED, LOW);
  }

void setup()
  {  
  pinMode(LED_RED, OUTPUT);
  digitalWrite(LED_RED, LOW);
  pinMode(LED_GREEN, OUTPUT);
  digitalWrite(LED_GREEN, LOW);

  Wire.begin(I2C_ADDRESS);
  Wire.onReceive(receiveEvent);    
  Wire.onRequest(requestEvent);                 
  }

void loop() 
  {
  }

 

なるべく単純にプログラムになるように心がけました。

 

やることは

(1) EV3の指示でArduinoのD5ポートのLEDを点灯する。
(2) EV3の指示でArduinoのD5ポートのLEDを消灯する。
(3) EV3の指示でArduinoの 変数v1 の値をEV3に送る。(1byte)
(4) EV3の指示でArduinoの 変数v2 の値をEV3に送る。(2byte)

こんな感じです。

(3)と(4)でArduinoに接続したセンサーの値を v1 や v2 に格納すれば、読み取ったセンサーの値をEV3に送れますね。

 

プログラムは、ROBOT-C や arduino の基本的にな使い方に沿っていないところがあるかもしれませんが・・・(なにせ、急遽勉強してつくったもので)

 

これで沢山のセンサーをEV3に接続できますね。

(ただ、EV3とArduinoの接続に I2Cポート(A4とA5)を使用してしまうので、アナログポートが2つつぶれてしまうのと、TPA-81のような、I2C接続のセンサーが使えない・・・これは、どうすればいいかなぁ

 

以下、自分の備忘録として解説

まず、EV3側で sendI2CMsg を実行します。第1パラメータはポート番号、第2パラメータはI2C機器に送るデータの配列、第3パラメータは受信するデータ数(=Byte数)です。で、第2パラメータの配列には、送るデータ数、I2Cアドレス、送るデータ・・・を格納します。

Arduino側は、EV3からの sendI2CMsg の通信を受け取って、Wire.onReceive で設定した関数(今回は receiveEvent )を呼び出します。 receiveEvent の中の Wire.read でEV3からのデータうぃ受け取ります。

次に、EV3側で readI2CReply を実行します。第1パラメータはポート番号、第2パラメータはI2C機器から受け取ったデータを格納する配列、第3パラメータは受信するデータ数です。

Arduino側は、EV3からの readI2CReply の通信を受け取って、Wire.onRequest で設定した関数(今回は requestEvent)を呼び出します。 requestEventの中の Wire.write でEv3にデータを送ります。

そうすると、EV3側では、 readI2CReply の第2パラメータの配列に Arduinoからのデータが格納されます。

 

続きの記事はこちら EV3ねた その15 TPA-81を接続してみる

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

EV3ねた その13 ROBOT-C でI2C通信 出来てた!

2020-05-07 | EV3ねた

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

 

前回までで、EV3に接続するArduinoを、なんとか(NXTの)超音波センサーに偽装させて、通信ができないか!?

について、頑張っていたのですが・・・なんと、そんなこと全然頑張らなくても良いことがわかりました。

 

上にも書いたように、これまでは、LEGO純正の超音波センサーと同じ振る舞いをして、EV3に「超音波センサーが接続されたよ」と認識させることで、EV3のポートビューでArduinoから送られてきた値が(超音波センサーでに偽装して)表示ができます。だから、なんとか、超音波センサーが接続された振る舞いを真似しようとやっきになっていました。

だから、0x08を受け取ったら、”LEGO"を返して、0x10を受け取ったら”sonar"を返して・・・とやっていました。

しかし・・・単に接続するだけであれば、そんなのは全然必要ありませんでした。

Arduinoをポートに接続して、(何もしないから) UNKNOWN のまま、超音波センサーを読み出すプログラムを書けば Arduino からの値を受け取れるところまでは、前の記事で書いた通りです。

これを、汎用的なI2Cの通信に置き換えてテストしたのが下のプログラムです。

このプログラムを動かせば、普通にArduinoからの値が読み取れます。

(もちろん、Arduino側で 0x42 が送られたら、1Byteの値を返すようなプログラムが必要です。)

 

task main()
{
char Wbuf[3] = {2,0x02,0x42};
char Rbuf[1];

while(true)
  {
  sendI2CMsg(S1,Wbuf,1); 
  wait1Msec(20);
  readI2CReply(S1,Rbuf,1);

  eraseDisplay();
  displayBigTextLine(10," %d",Rbuf[0]);

  wait1Msec(500);
  }
}

(Arduino側は、nicosensor に掲載されたプログラム)

 

超音波センサーに偽装するだけでは、1つのセンサーの値しかやりとりできませんが・・・

このやり方が成功したので、いくつもの値をやりとりできる可能性が出てきました!

 

さて・・・それでは、単純に受け渡しができるような、Arduino側のプログラムを研究したいと思います。

 

続きの記事はこちら EV3ねた その14 いよいよArduinoとの接続

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

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でシェアする

AMAZONの謎・・・

2020-05-05 | ブログ

前回、歯医者さんに行ったときに指導されて、歯間ブラシを使っています。

以前に購入したのが無くなりそうなので、AMAZONで買おうと探してみると・・・

 

 

こんな感じで、見つかったのですが・・・価格が謎です。

1個(40本入)だと314円だけど、2個だと960円です。

2個買うと、1個分が480円です。

4個買うと、1個分が410円と、ちょっと安くなりますが・・・それでも314円には、かないません。

一応、画面には何個買うかの入力が可能なので・・・

2個を1組買うのではなく、1個を2組買う入力ができるように思います。

そうすると、2個買っても 314円×2で済むと思うのですが・・・

普段の私なら、躊躇なくポチって実験するのですが・・・今は、新型コロナウイルスの影響で、宅配便の配達の方たちの業務がひっ迫しているようなので、注文するときには一気に注文することにしています。

ですので・・・一緒に買う必要のあるものが揃ってから注文してみたいと思います。

 

M&Y母に話したら、1個だと安い送付方法(例えば定形外郵便とか)が使えるけど、2個以上だと宅配便になるとかじゃない!? という想像でしたが・・・この歯間ブラシがそんなに大きいとは思えません・・・よね。

 

価格設定が謎のままですが・・・結局3個(3組)注文しました。1個×3で 314円×3で注文できました。(笑)

(2個組を買うより安い・・・)

 

 

そして・・・

普通に届きました・・・

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

International CoSpace onLine Challenge – iCooLChallenge® @RoboCup 2020

2020-05-04 | RoboCup2020

RobopCup2020 ねた

今年の世界大会(2020ボルドー)は延期になってしまいましたが・・・

本来開催される日程に CoSpace の iCoolChallenge が開催されるようです。

https://cospacerobot.org/competition/icoolchallenge/icoolchallenge-robocup2020

 

オンラインの競技は、こういうのができて良いですね。

 

開催される競技はこんな感じです。

Categories:
1. RCAP CoSpace Grand Prix Challenge, FirstSteps U12
2. RCAP CoSpace Grand Prix Challenge, U12 
3. RCAP CoSpace Grand Prix Challenge, U19
4. RCAP CoSpace Rescue Challenge, FirstSteps U12
5. RCAP CoSpace Rescue Challenge, FirstSteps U19
6. RCAP CoSpace Rescue Challenge, U12
7. RCAP CoSpace Rescue Challenge, U19
8. RCAP CoSpace Rescue Challenge, University

で、U12とU19の説明ですが・・・

Age Regulation:
• All participants aged 12 and below are eligible for U12.
• All participants aged 19 and below are eligible for U12.

最後の行の U12 は U19 の間違いでしょう・・・

競技それぞれに U12 又は U19が付いているのですが・・・8.の University というのだけ参加条件が分かりません。

(競技名からすると、大学対応なのでしょうけど・・・)

 

Participation:
• Participants from RCAP region are eligible for all RCAP CoSpace Challenge leagues.
• Participants outside of RCAP region are only eligible for RCAP Rescue U12 and RCAP Rescue U19 categories.
• iCooLChallenge 2020 will only accept individual participant.
• All students are required to register through the online form

この参加条件を読むと・・・なんとなくこの競技会は、RCAPの一部なんでしょうね・・・

本来であれば、RCAPの範囲の地域の参加者はどれにでも参加可能で、RACPの範囲外の参加者はU12とU19の表示がある競技のみに参加できるようですが・・・今回は、ほとんどの競技がU12やU19なので、あまり関係ありませんね。

 

Registration Fees
• iCooLChallenge 2020 is free for all accepted participants.

で・・・参加費は無料ということです。

 

この iCoolChallenge iCoolChallengeですが・・・

18-May-2020 Registration close. No registration will be accepted after the deadline.

参加申し込みの締め切りが 5月18日のようです。

コメント
  • 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でシェアする