Re: The history of "M&Y"

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

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ねた その25 ev3devのPyt... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

EV3ねた」カテゴリの最新記事