前の記事はこちら 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 続き