Mindstorms NXT / Processing
2年前にMindstorm NXTをとりあげましたが、今度はProcessingから制御してみました。
「LEGO マインドストーム」
「Raspberry Pi で Processing」
NXTは発売されてから10年以上たっているにもかかわらず、まだこのような使い方ができるのは、うれしいところです。
最新のEV3はもちろん性能は高いのですが、基本的にできることはあまり変わっていません。
むしろ、今回のダイレクトコマンドによる制御やサウンドセンサなどは、NXTでなくてはならないところです。
Processing ライブラリ
http://jorgecardoso.eu/processing/NXTComm/
ここでは、このライブラリとチュートリアルを参考にテストしてみました。
環境: Processing 3.3.5 / Windows 10 (Bluetoothシリアル接続: COM3)
内容: サウンドセンサの値をレベルメータのように表示します。
ボタンを押すと前進し、20cm以内に障害物が近づくと停止する簡単なものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import processing.serial.*; import pt.citar.diablu.processing.nxt.*; LegoNXT lego; void setup() { size(100, 100); lego = new LegoNXT(this, "COM3"); frameRate(10); } void draw() { background(0); /* Sound sensor */ int db = lego.getDB(lego.PORT_2); fill(db/100.0*255, 255-db/100.0*255, 255-db/100.0*255); rect(0, height, width, -db); fill(255); textAlign(CENTER); text("Sound Level", width/2, height-db); /* ultrasonic */ int distance = lego.getDistance(lego.PORT_3); println("Distance(cm) : " + distance); if (distance < 20){ lego.motorHandBrake(LegoNXT.MOTOR_A); lego.motorHandBrake(LegoNXT.MOTOR_B); } /* touch sensor */ if (lego.getButtonState(lego.PORT_1)) { int power = 50; println("touch!"); lego.motorForward(LegoNXT.MOTOR_A, power); lego.motorForward(LegoNXT.MOTOR_B, power); } } |
まだまだ十分現役です。
Category: 未分類