Re: The history of "M&Y"

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

えっ! もう引退!?

2021-07-06 | EV3ねた

アフレルのページにこんな広告(!?)が掲載されていました。

 

1998年に初代のRCXが発売されてから23年。
世界70カ国以上で、多くの方に愛され続けてきました。
2021年7月、教育版レゴ® マインドストーム® は引退します。

「創造的で喜びあふれた学びの体験」をより多くの人に。
レゴ® エデュケーションは新しいステージへ、これからも進化を続けます。

https://afrel.co.jp/thanks-mindstorms-ev3

 

えっ! もう LEGO MINDSTORMS EV3 が終了!?

我が家なんか、NXTで止まっていて、ちょっと前にやっとEV3を動かしてみたところなのに・・・

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

EV3ねた その26 ev3devのPython 話す・・・

2020-07-13 | EV3ねた

前の記事はこちら EV3ねた その25 ev3devのPython 続き

 

ev3dev の Python のサンプルスクリプトを打ち込んで、いろいろと試しています。

2つほど紹介します。

 

タッチセンサーを接続して、タッチセンサーのボタンを押すと、EV3本体のLEDの色が変わるスクリプトです。

#!/usr/bin/env python3
from ev3dev2.sensor.lego import TouchSensor
from ev3dev2.led import Leds

ts = TouchSensor()
leds = Leds()

print("Press the touch sensor to change the LED color!")

while True:
    if ts.is_pressed:
        leds.set_color("LEFT", "GREEN")
        leds.set_color("RIGHT", "GREEN")
    else:
        leds.set_color("LEFT", "RED")
        leds.set_color("RIGHT", "RED")
 
スクリプトは無限ループなので、終了するときはEV3本体の「戻るボタン」を押します。

 

もう一つが・・・英語をしゃべるEV3

#!/usr/bin/env python3
from ev3dev2.sound import Sound

sound = Sound()
sound.speak('Welcome to the E V 3 dev project!')
 

たったこれだけのスクリプトで、EV3がしゃべります。

ちょっと感動しました!

 

ただ、まあ、これくらいの英語なら、なんとか分かりますが・・・普通の文章を読ませると・・・やっぱり音声合成っぽいので・・・なんとなくしゃべっているように聞こえる・・・程度のものです。(笑)

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

EV3ねた その25 ev3devのPython 続き

2020-06-11 | EV3ねた

前の記事はこちら EV3ねた その24 ev3devのPython

 

いやぁ、もう、昨今のコロナウイルス感染拡大の影響で、休日も平日も外に出られない(出られない訳では無いですが、なるべく出ないようにしている)ことで・・・暇つぶしに EV3 の研究を続けています。

(この歳になると、新しいことを始めるのが、非常に億劫になるのですが・・・)

さて、コマンドライン(SSH)でのPythonの実行はできたのですが、スクリプトを作るのにも nano を毎回使うのは疲れそうですよね。

ということで、その23で(訳が分からずに)インストールした Visual Studio Code を使用してみます。

 

まず、PCの適当な場所に作業用のディレクトリを作成します。(今回は、d:\pytestとします)

Visual Studio Code を起動します。

File ⇒ Open Folder で、d:\pytest を指定します。

左の Exploer の一番下にある EV3DEV DEVICE BROWSER  をクリックして、出てきた「check here connect to device」をクリック して、一覧から ev3dev EV3 を選択すると・・・

EV3DEV DEVICE BROWSER の下に ev3dev が表示され、緑色のランプが点灯します。(これで、EV3と接続したってこと)

次に PYTEST をクリックして、そこにある New File をクリックして、新しいファイルを作成します。(ファイル名は test.pyにしました)

そうしたら、右側に画面にスクリプト(プログラム)を入力します。

 

 

スクリプトの入力が終わったら、EV3DEV DEVICE BROWSER の右側にある Send Workspace to Device をクリックします。これで、スクリプトがEV3に転送されます。転送が終わると、画面右下に Download to ev3dev Complete が表示されます。

これで、転送ができたので、今度はスクリプトを実行します。

 

左側の緑ランプのある ev3dev をクリックすると、EV3に配置されたディレクトリやファイルの一覧が表示されます。

/home/robot の下に /pytest があり、その下に test.py があります。

test.py を右クリックして run を選択すると、スクリプト(test.py)が実行されます。

 

で・・・このサイクル(プログラム編集、転送、実行)を繰り返してソフト開発をすることになります。

これを簡略化するために・・・

pytestディレクトリに下に .vscode ディレクトリを作成し、その下に launch.json ファイルを作成します。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Download and Run Current File",
            "type": "ev3devBrowser",
            "request": "launch",
            "program": "/home/robot/${workspaceFolderBasename}/${relativeFile}"
        }
    ]
}
 
これで・・・test.py を編集後に F5 キーを押すだけで、転送&実行 が実施されるようになります。
 

ここまで、実験してきましたが・・・ここに至るまで大変な時間が掛かりました。

解決までに悩まされた(大きな)2つの例を書いておきます。

/usr/bin/env: 'python3\r': No such file or directory

実行すると、ファイルが無い・・・と怒られます。

何がどうダメなのか? 全く分かりませんでした。

で、これは・・・スクリプトファイルの行末のコードが正しくない・・・らしいです。

上の画面のハードコピーの一番下の青色の行で「・・・ UTF-8 CRLF Python ・・・」と並んでいる、 CRLF がダメなんだそうです。この CRLF をクリックして、 LF に変更します。 再度、転送&実行すると、エラーが解消されます。

 

もう一つ・・・

Starting program failed: Failed to execute child process "/home/robot/pytest/test.py" (Permission denied)
 

Permission denied って アクセス拒否ですよね。

test.py ファイルの権限が足りないとか・・・!?

何がどう足りないの!? と悩みましたが・・・

正解は・・・スクリプトの1行目に必要な

#!/usr/bin/env python3

これが無かったり、間違っている場合のエラーになります。

 

続きの記事はこちら EV3ねた その26 ev3devのPython 話す・・・

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

EV3ねた その24 ev3devのPython

2020-06-10 | EV3ねた

前の記事はこちら EV3ねた その23 ev3devのPythonに挑戦!?

 

さて、前回は Python に挑戦・・・と書いた割には、単にサンプルプログラムを動かすだけで終わってしまい・・・良く分からなかったの、もうちょっといじってみます。

 

前回の作業で、Visual Studio Code のインストールはしましたが、Python のインスト-ルはしてないように思っていました。

想像の通りで・・・ev3dev に Python は含まれているので、特別にインストールは必要ないそうです。

さらに、Python はインタプリタ言語なので、コマンドを打つと、その一行が解釈されて実行されます。

(私の若かりし頃に流行った BASIC に似てます・・・)

 

いつもの通り・・・putty を起動して、ev3dev にログインします。

 

robot@ev3dev:~$ python3

で、Pythonが起動します。

 

 

以下、参考にしたのはこのページ http://yakushi.shinshu-u.ac.jp/robotics/?EV3#i9d40f09

 

モジュールのインポート

>>> import ev3dev.ev3 as ev3

 

ポートAに接続したモーターを動かしてみる。

>>> m = ev3.LargeMotor('outA')
>>> m.reset()
>>> m.run_forever(speed_sp=500)

これで、モーターが動きます。

何もしないと、ずっと動きっぱなしになるので・・・以下の命令で停止させます。

>>> m.stop()

 

モーターを3秒間だけ動かす

>>> m.run_timed(time_sp=3000, speed_sp=500, stop_action='brake')

同じ動きですが・・・別のやり方(sleep関数を使う方法)

>>> import time
>>> m.run_forever(speed_sp=500)
>>> time.sleep(3)
>>> m.stop()

これをインタプリタで実行するのに意味があるのか・・・!?

3行目の time.sleep(3) を入力すると、3秒間入力が不可になります。

これは、プログラムを組む場合の紹介なのでしょうね。

で・・・もう一つモーターを3秒間動かすやり方です。

>>> import time
>>> ts = ev3.TouchSensor('in1')
>>> t0 = time.time()
>>> m.run_forever(speed_sp=500)
>>> while time.time()-t0 < 3:
>>>     if ts.value() == 1:
>>>         m.stop()
>>> m.stop()

これは、インタプリタでは実行できないので、プログラム(スクリプトというらしい)を組みます。

一旦Pythonを終了します。 終了は ctrl+d

 

robot@ev3dev:~$ nano test.py

で、スクリプトを組みます。

#!/usr/bin/python3
import ev3dev.ev3 as ev3

import time
m = ev3.LargeMotor('outA')
m.reset()
ts = ev3.TouchSensor('in1')
t0 = time.time()
m.run_forever(speed_sp=500)
while time.time()-t0 < 3:
   if ts.value() == 1:
      m.stop()
m.stop()

これを入力してファイル(test.py)に格納します。

ファイルに実行権を与えます。

robot@ev3dev:~$ chmod +x test.py

で・・・実行します。

robot@ev3dev:~$ ./test.py

コマンドを打ってから、モーターが動き出すまでに結構な時間が掛かります。

おそらく、転送とコンパイル?をしているのだと思います。

 

何もしなければモーターが3秒間回ります。

モーターが回っている間にIN1に接続したタッチセンサーのボタンを押すとモーターは(3秒を待たずに)停止します。

 

もう一度 Python を立ち上げて、インタプリタを使えるようにします。

今度は超音波センサーを使ってみます。

>>> import ev3dev.ev3 as ev3
>>> us = ev3.UltrasonicSensor('in2')
>>> us.value()
326

その時にセンサーの値が表示されます。

じゃあ、超音波センサーを使ったスクリプトを書いてみます。

#!/usr/bin/python3import ev3dev.ev3 as ev3m = ev3.LargeMotor('outA')m.reset()ts = ev3.TouchSensor('in1')us = ev3.UltrasonicSensor('in2')m.run_forever(speed_sp=500)while ts.value() == 0:  if us.value() >300:    m.run_forever(speed_sp=500)  else:    m.stop()m.stop()

これを test2.py に格納します。

これを実行すると・・・超音波センサーの値が30cm以上のときにモーターが回ります。

タッチセンサーのボタンを押すとスクリプトが終了します。

 

続きの記事はこちら EV3ねた その25 ev3devのPython 続き

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

EV3ねた その23 ev3devのPythonに挑戦!?

2020-06-06 | EV3ねた

前の記事はこちら EV3ねた その22  ev3devのC言語 続き

 

ev3dev の C言語を動かしてみたのですが・・・どうも、素人には敷居が高いようです。(苦笑)

サンプルプログラムの light.c や servo.c がどうして動かないかも(まだ)分かりません。

でも、何故か、tacho.c は動く・・・

まだまだ、(私自身での)研究が必要なようです。

で・・・ぐぐると、ev3dev での Python が初心者にはよさそうです。

Python は、知りませんが・・・別件で、レスキューAの世界チャンピオンに質問した時に、「EV3でPythonはどうですか」と勧められたのもあり、一回使ってみたいと思っていました。

じゃあ、今回勇気を出して、使ってみようと思います。

 

いつものとおり、ev3dev の言語一覧のページから 

https://www.ev3dev.org/docs/programming-languages/

「get start with Python」をクリックします。

ev3dev/ev3dev-lang-python の GitHub が表示されます。

ここの Python + VSCode introduction tutorial に従って、まずは、Visual Studio Code を導入します。

 

①Visual Studio Codeのインストール

https://code.visualstudio.com/ で(私の場合は Windows用を)ダウンロードします。

(今回、ダウンロ-ドされたのは、 VSCodeUserSetup-x64-1.45.0.exe でした)

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

②vscode-hello-pythonプロジェクトをGitHubからダウンロードして解凍します。

vscode-hello-python-master.zip をダウンロードして解凍(展開)します。

③Visual Studio Codeを起動して、vscode-hello-python-masterを開きます。

File ⇒ Open folder で(展開してできた) vscode-hello-python-master のディレクトリを開きます。

画面右下に何か選択肢が表示されるので、Show Recommendations をクリックします。

 ④ev3dev-browser拡張機能をインストールします。

画面左の一覧から ev3dev-browser extension の install をクリックします。

⑤インストールが完了したら、[ Reload and Reload Window ]をクリックします。

そんな表示無い!?

エクスプローラアクティビティペインを開きます。

画面左の縦のツールバーの一番上のExploereのアイコンをクリックします。

⑦EV3DEV DEVICE BROWSERの横にある矢印をクリックして開きます。

⇒ click here to connect to device が表示されます。

ev3devデバイスがオンになっていて、ホストコンピューターにネットワーク接続されていることを確認します。(私の当場合はUSB接続)

click here to connect to device をクリックして EV3 を指定します。

⑨F5を押してプログラムをダウンロードし、実行します。

情報パネルが自動的に開き、プログラムのステータスとエラー/デバッグメッセージが表示されます。

そして・・・EV3のLEDがピカピカと点滅します。

EV3のディスプレーに「Hello world」が表示されます。

⑩hello.pyを指定すると、サンプルプログラムのソースが表示されます。

 

 

なんか、良く分からないけど・・・この Visual Studio Code の画面でプログラムを作って、転送とコンパイルをすると実行される・・・ようですね。

これなら、使えるかも・・・

 

続きの記事はこちら EV3ねた その24 ev3devのPython

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

EV3ねた その22  ev3devのC言語 続き

2020-05-27 | EV3ねた

前の記事はこちら EV3ねた その21  ev3devのC言語

 

ev3dev の C言語

サンプルプログラムが動かなかったり・・・でも、動くものもあったり・・・良く分からない状態です。


Getting Started with C

こんなページがありました。

これに従って、ソースの編集から実行までをやってみます。

 

ホームディレクトリを /home/robot/ev3dev-c として・・・(pwd で、現在のディレクトリが表示されます)

mkdir c-demo
cd c-demo

新しく c-demo というディレクトリを作成して、そこに移ります。

nano main.c

nano というスクリーンエディタで、main.c を編集します。(今回は新規作成します)

#include
int main()
{
    printf("Hello world!\n");
    return 0;
}

これを入力したら Ctrl+o で書き込み、Ctrl+x で nano を終了します。

これで、main.c にサンプルプログラムが書き込まれました。

 

次に Makefile を作成します。

nano Makefile

再びスクリーンエディタを使って、Makefileを作成します。

all: main.o
 gcc main.o -o bin
main.o: main.c
 gcc -I . -c main.c
clean:
 rm -rf *.o
 rm bin

(↑ TABが消えて分かりにくいですね。)

作成した Makefile を使用してコンパイルするには

make

と入力します。

gcc -I . -c main.c
gcc main.o -o bin

と表示されて、プロンプトに戻ります。

プログラムの実行は・・・

./bin

で・・・

画面に「Hello world!」が表示されます。

ということで、基本は、なんとなく分かりました。

 

それから・・・

PCからプログラムを実行するのではなく、EV3単体で実行する方法が分かりました。

EV3に表示されているメニューの一番上の「File Browser」を選択すると、現在のディレクトリと、そのディレクトリにあるファイルの一覧が表示されます。(表示できる行数が少ないので、分かりにくいですが・・・)

そこで、実行したいオブジェクトファイル(コンパイルして作成したファイル)のあるディレクトリに移って、実行したいファイルを選択するとプログラムが動作します。

サンプルプログラムにある tacho を実行すると、EV3のディスプレイに細かい文字でズラズラっと表示されます。(プログラムが終了すると、メニュー表示に戻ります。)

 

 

さて、単純なプログラム作成方法は分かったのですが・・・次は、肝心のセンサーやモーターの使い方の研究ですね。

 

続きの記事はこちら EV3ねた その23 ev3devのPythonに挑戦!?

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

EV3ねた その21  ev3devのC言語

2020-05-22 | EV3ねた

前の記事はこちら EV3ねた その20  ev3devにC言語を入れてみる

 

さて、ev3devをインストールして、C言語をセットアップしたまでは良いのですが・・・

https://github.com/in4lio/ev3dev-c

C言語のテストプログラム hello.c を動かしてみると・・・単にPCが画面上にメッセージが表示されるだけであり・・・EV3でチャント動作しているのかが分かりません。

一応説明には・・・

It's the right time to take a look at a small example. "hello.c" outputs a greeting as well as toggles the left LED color:

と書かれていて、メッセージが表示されると共に、左側のLEDの色が変わるハズなのですが・・・何も変わりません。

 

で、さらに、下の方にある light.c も実行してみます。

コンパイルがコレ

cd ev3dev-c/eg/light/
make

実行がコレ

./Debug/light

でも、実行しても・・・何も起こりません。(本当は、LEDの色が変わって点滅するハズなのですが・・・)

 

もしかしたら、何かインストールに失敗してとか・・・

 

気を取り直して、他のサンプルプログラムを実行してみます。

 

sensor.c :TOUCH and COLOR sensors example

というのが、出来そうだったので、タッチセンサーをポート1に接続しました。

コンパイルは、hello を参考に

gcc sensor.c -lev3dev-c -o sensor

を実施しました。

で、プログラムの実行は、

./sensor

です。

そうしたら、以下のようなメッセージが表示されて

TOUCH sensor is found, press BUTTON for EXIT...

タッチセンサーのボタンを押したら、プログラムが終了しました。

なんか、はじめて、プログラムが実際に動いた感じがします。

カラーセンサーを接続すると、判定した色を画面上に表示します。(「BLACK」とか「RED」とか・・・)

 

じゃあ、今度はモーターを動かしてみます。

servo.c :SERVO motor example

これが、モーター関係っぽいので、実行してみます。

コンパイルはコレ

gcc servo.c -lev3dev-c -o servo

で、実行してみると・・・

*** ( EV3 ) Hello! ***
Found servo motors:
Servo motor is NOT found
*** ( EV3 ) Bye! ***

こんな表示は出て、何も起こりません・・・

2行目に「見つけた!」と表示されたのに、3行目で「見つかりません」と表示されます。

ダメなのかなぁ・・・やっぱダメ!

 

え~い もう、良く分からないから、ついでに怪しいヤツに挑戦してみます。


tacho.c :TACHO motor running for 5 sec

これも、サーボモーターっぽいからやってみます。

gcc tacho.c -lev3dev-c -o tacho

で、コンパイルして実行です。

Waiting tacho is plugged...
*** ( EV3 ) Hello! ***
Found tacho motors:
  type = lego-ev3-l-motor
  port =
LEGO_EV3_M_MOTOR is NOT found
*** ( EV3 ) Bye! ***

やっぱり、モーターは見つけたけど、モーターが見つけられない・・・という現象ですね。

でも、よく見たら・・・「LEGO_EV3_M_MOTOR」が見つけられない・・・M_MOTORって、小さいヤツのことじゃないかな。 

大きなサーボモーターのかわりに、小さなサーボモーター(Mモーター)を接続してプログラムを実行してみると・・・

Waiting tacho is plugged...
*** ( EV3 ) Hello! ***
Found tacho motors:
  type = lego-ev3-m-motor
  port =
LEGO_EV3_M_MOTOR is found, run for 5 sec...
  max_speed = 1560
run to relative position...
*** ( EV3 ) Bye! ***

なんか表示が変わった・・・そして、モーターが動きました。

 

 

ということで、全く動かない訳ではないのですが・・・なにをどうやって動かすのか、まだ分からない状態です。

 

続きの記事はこちら EV3ねた その22  ev3devのC言語 続き

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

EV3ねた その20  ev3devにC言語を入れてみる

2020-05-19 | EV3ねた

前の記事はこちら EV3ねた その19  EV3DEVのインストール

 

ev3dev を入れたので、引き続きC言語をインストールします。

 

https://www.ev3dev.org/docs/getting-started/

Step 7: Choose a programming language and write some code

で、「See the available programming languages」をクリックすると、使用可能な言語がずらっと並びます。

とりあえず、C言語かな・・・ということで

「Get start with C」をクリックします。

 

すると、GitHubの表示になるのですが・・・私は、GitHubの使い方が良く分からないんだよなぁ・・・

それから・・・Linuxも全く分かりません・・・

いろいろと分からないけど・・・「GETTING STARTED」に書かれている通りに進めてみます。

 

まず、EV3を起動して、(勿論ev3devを起動します)PCと接続します。

PCで、putty を起動して、EV3と接続します。(勿論IDとパスワード入力が必要です。)

これで、準備は完了です。

 

さて・・・

①You need to install the compiler and other tools:

コンパイラとその他のツールをインストールする

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install git

1つ目のコマンドを入れると、いきなりパスワードを聞かれます。(そんなに重要なことなの・・・笑)

で・・・いきなりエラーがドバっとでました。

Err:1 http://security.debian.org stretch/updates InRelease  Could not resolve 'security.debian.org'

どうも、インターネット接続が必要なようです。

改めて、インターネット接続をして再実行します。

さあ、今度は・・・大丈夫のようです。インストールが進んでいきます。

(コマンドを打ち込むのは大変なので、コピペしますが、右クリックでペーストされます。)

2つ目のコマンドを実行中に、「この作業に138MB必要だけど続ける?(Y/n)」と聞かれるので、勿論「Y」と入力します。

 

②Then, clone the library repository and its submodules to the directory of your choice, such as "/home/robot/ev3dev-c":

ライブラリリポジトリとそのサブモジュールを、「/ home / robot / ev3dev-c」などの任意のディレクトリに複製します。

ということなのですが・・・読んでも良く分からないので、順番にコマンドを実行します。

cd /home/robot/
git clone https://github.com/in4lio/ev3dev-c.git
cd ev3dev-c/
git submodule update --init --recursive

 

③Compile and install static and shared libraries:

静的ライブラリと共有ライブラリをコンパイルしてインストールします。

cd source/ev3/
make
sudo make install
make shared
sudo make shared-install

これで、インストールは完了のようです。

 

サンプルプログラムとして hello.c を実行する例が書かれていますので、やってみます。

cd ../../eg/hello/
more ./hello.c

これで、hello.c の中身が表示されます。

コピペしたのが、以下のソースです。

 

#include
#include "ev3.h"
#include "ev3_light.h"

int main( void )
{
        printf( "Hello, LEGO World!\n" );
        ev3_init();
        switch ( get_light( LIT_LEFT )) {
        case LIT_GREEN:
                set_light( LIT_LEFT, LIT_RED );
                break;
        case LIT_RED:
                set_light( LIT_LEFT, LIT_AMBER );
                break;
        default:
                set_light( LIT_LEFT, LIT_GREEN );
                break;
        }
        ev3_uninit();
        return 0;
}

 

このプログラムをコンパイルして実行してみましょう。例を静的ライブラリにリンクしていることに注意してください。

とことです・・・

gcc hello.c -lev3dev-c -o hello
./hello

これを実行すると・・・PCの画面上に(puttyのコメンドラインの画面に)「Hello, LEGO World!」が表示されたけど・・・そういうものなの?

(てっきり、EV3のディスプレイに表示されるものと勝手に考えていたので、拍子抜けです・・・)

 

とりあえず、インストールをしてみましたが・・・実際に使うとなると、ソースプログラムを入力(編集)しますよね。これ、どうやって入力するのでしょうか!?

もしかして、vi とか使ってやるのかなぁ・・・とすると、まずはエディタの使い方から勉強しないと・・・先は長そうです。(⇒ やってみると、vi も使用可能なのですが・・・nano というスクリーンエディタがあり、ある程度自由に編集できました。それでも、現在のWindowsシステムに慣れた世代には、なかなか厳しい感じがします。)

 

続きの記事はこちら EV3ねた その21  ev3devのC言語

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

EV3ねた その19  EV3DEVのインストール

2020-05-18 | EV3ねた

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

 

これまでの研究で、NXC や ROBOTC でEV3を動かす実験をしてきましたが・・・

・・・NXTを越えるものではない・・・という印象です。(あくまで私見です)

おそらく、LEGOの部品(センサーやモーター)で完結した世界では、素晴らしいものだと思うのですが・・・

自作センサーを接続するとなると、急に敷居が高くなるように思いました。

 

で・・・今度は、普通のC言語をやってみたいと思います。

挑戦するのは EV3DEV のC言語です。

まずは、EV3DEVのインストールです。

ページはここですが・・・

https://www.ev3dev.org/

全部英語です。(涙)

 

 

Google先生に頑張ってもらって、やってみます

 

Getting Started with ev3dev

 

Step 1: Download the latest ev3dev image file

ev3dev のイメージファイルをダウンロードします。

画面の一番大きなリンク「Download ev3dev-buster beta for LEGO MINDSTORMS EV3」をクリックして、ダウンロードします。(⇒ ev3dev-stretch-ev3-generic-2020-04-10.zip)

 

Step 2: Flash the SD card

SDカードにイメージを書き込みます。

Etcherというツールをダウンロードします。(⇒ balenaEtcher-Portable-1.5.86.exe)

Download and install Etcher from their website.

と書かれていますが・・・ダウンロードしたexeファイルを起動しても、インストールされるわけではなく、単にツールが起動するようです。

Etcherが起動したら、MicroSDカードをPCに接続し

①イメージファイルの選択 STEP1でダウンロードした ev3dev-stretch-ev3-generic-2020-04-10.zip を選択
②MicroSDカードのドライブを指定します。(勝手に選択されるので、ドライブ名が正しいか確認)
③右側の Flash!をクリック

「Flash Complete !」が表示されたら、書き込み終了になります。

Etcherを終了して、MicroSDカードを取り外します。

 

(Step 3:EV3は無し)

 

Step 4: Boot ev3dev

MicroSDカードをEV3に挿してEV3の電源を入れます。(MicroSDカードを抜くときに苦労するらしいので、取り出しやすいようにMicroSDカードにテープを貼りました。)

最初は、マインドストームの起動ロゴが表示されますが、LEDが赤色に点灯して ev3dev がブートします。オレンジ色のLEDが点滅して、EV3のLCD上に読めないような小さな文字が流れて・・・

しばらくして、起動すると、LEDが緑色になり、メニュー画面が表示されます。

(画面、右上にバッテリーの電圧が表示されます。また、このメニュー画面からEV3の電源OFFにする場合は、EV3の「戻るボタン」を押して、「Power OFF」を選択します。)

 

Step 5: Set up a network connection

タイトルはネットワーク接続とありますが、PCとEV3を接続するだけのようです。

方法としては、2種類(①Bluetoothを使用して接続 ②USBケーブルで接続)あるようですが、簡単で確実なUSBケーブルでの接続をします。

EV3とPCをUSBケーブルを接続して、コントロールパネルの「デバイスとプリンター」を開くように書かれているのですが・・・Winodws10だと、コントロールパネルがありません。

で・・・試行錯誤して分かった手順を備忘録として記載しておきます。

PCの画面の右下にあるネットワークのアイコンを右クリックして「ネットワークとインターネットの設定を開く」⇒「WiFi」⇒「ネットワークと共用センター」

ここで、右上にインターネット接続のアイコンが出ていることを確認して、左のメニューの「アダプターの設定の変更」をクリックする。

ネットワークの一覧に「Remote NDIS Compatible Device」が表示されます。(これがEV3のこと・・・らしい)

右クリックの「名前の変更」で、分かりやすく「EV3」に変更する。

「ネットワークと共用センター」に戻って、インターネット接続しているアイコンをダブルクリックして、ネットワークの状態を表示します。

上の方の接続に「インターネット」と表示されていることを確認して、下のプロパティをクリックします。

プロパティの共有タブで、上にある、「ネットワークの他のユーザーに、このコンピュータのインターネット接続をとおしての接続を許可する」にチェックを入れます。(さらにホームネットワーク接続の一覧で EV3 を選択します)

PC側の設定は以上なので、設定画面などを閉じます。

 

EV3側ですが・・・メニューの上から3番目「Wireless and Network」を選択します。次に「All Network Connection」を選択します。さらに、有線接続として「Wired」を選択します。

上から2番目の「Connect automatically」にチェックを入れます。(白黒なので、分かりにくい! 選択が外れたときに、黒四角になっていればOK) そして、一番上の Connect を選択すると、Status:Connected となります。

※とりあえず、インターネット接続をする設定をしてみましたが、単純にPCとEV3を接続するだけなら、インターネット接続は必要無いようです。ですので、PC側の「他のユーザーの接続を許可する」を外しました。

 

Step 6: Connect to the EV3 via SSH

まず、PuTTYというツールをダウンロードします。(私は直接実行できる 64ビット版の putty.exe をダウンロードしました。)

HostName に「ev3dev」を入力して、Openボタンをクリックすると、コマンドプロンプトが表示されます。

ev3devにID/PW「robot / maker」で、ログインします。

 

 

とりあえず、ev3devの導入は、これでイイみたい・・・

プロンプトに fortune と入力すると、何らかの返答があるようです。(笑)

 

続きの記事はこちら EV3ねた その20  ev3devにC言語を入れてみる

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

EV3ねた その18 EV3について

2020-05-17 | EV3ねた

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

 

これまで、EV3を使ってみて感じたこと・・・

 

・起動が遅い(⇒電源を入れてから起動するまでの時間が長い!)

・シャットダウンが遅い(⇒電源断までの時間が長い!)

・USBのポートの形状が古臭い(mini-Bって、もう前時代的ですよね)

・程よい大きさ(でも意外と重い)

・カッコイイデザイン

・LCDにバックライトが欲しい(文字が見にくい・・・私だけ!?)

 

で・・・ここのところ、EV3に外部の一般的なセンサーを増設するために Arduino を接続する実験をしてきました。

とりあえず、ROBOTCを使用して、I2C通信で接続することはできました。

でも・・・NXTのRS-485接続の方が優秀な気がします。

EV3は、WiFi接続や、Bluetooth接続などが簡単にできるのですが・・・RoboCupJuniorの競技をターゲットとして考えると、(基本的に競技では)どちらも使用禁止なので、結局使えません。

ということで

 

う~ん いまいち!

 

いまのところ、こんな感じ・・・です。

 

我が家にある、MINDSTORMS を並べてみました。

 

 

EV3を手にしたときに、「大きい!」と思いましたが、NXTと変わらないのですね。NXTは角のとれた柔らかいデザイン、対してEV3はカクカクしたデザインなので、大きく感じるのでしょうか?

それにしても、RCXは、手ごろな大きさで、とっても使いやすかったと思います。これに自作センサーが接続できれば、今でも現役で使えると思うのですが・・・(笑)

 

続きの記事はこちら EV3ねた その19  EV3DEVのインストール

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

EV3ねた その17 EV3磨き!

2020-05-16 | EV3ねた

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

 

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

 

 

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

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

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

 

 

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

 

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

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

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

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