NXT-Touch
Dari IgosCenter
Kini kita akan membuat robot yang bisa jalan dengan bebas, dan akan berputar sendiri jika menabrak halangan. Untuk itu, NXT-base kita lengkapi dengan sensor sentuh di depan.
Konstruksi
Dari mobil NXT-base, tambahkan sensor sentuh sehingga kita punya:
- Dua roda yang masing-masing terhubung ke motor port B dan C.
- Satu sensor sentuh terhubung ke masukan Port-2.
Program iCommand
Untuk menyetir mobil ini, kita akan pakai dua kelas, yaitu:
- Kelas Pilot, untuk menyetir kedua roda.
- Kelas TouchSensor, yang bisa memberikan informasi apakah sedang tertekan atau tidak.
/* * BaseTouch.java */ package robotnxj; import icommand.nxt.comm.NXTCommand; import icommand.navigation.Pilot; import icommand.nxt.*; /** * Menjalankan robot base memakai kelas pilot dan pengaman sensor sentuh * - Awal, robot berjalan * - Jika menabrak, sensor sentuk akan menyala, maka * -- robot mundur sedikit, putar kiri, lalu melanjutkan jalan lagi * Program ini mengenalkan pakem event driven machine sederhana. * * @author kocil */ public class BaseTouch { static final float WHEEL_DIAMETER=5.6F; static final float TRACK_WIDTH=20.0F; static final int STATE_STOP=0; static final int STATE_RUN=1; static Pilot pilot; static TouchSensor touch; static int state; public static void doTouchEvent() { switch (state) { case STATE_RUN : pilot.stop(); pilot.travel(-20); state = STATE_STOP; break; } } public static void doDefault() { switch (state) { case STATE_STOP : if (Math.random() > 0.5) { pilot.rotate(90); } else { pilot.rotate(-90); } pilot.forward(); state = STATE_RUN; break; } } public static void main(String[] args ) throws Exception { boolean touch_value; System.out.println("Koneksi ke robot ... "); NXTCommand.open(); NXTCommand.setVerify(true); // siapkan sensor touch = new TouchSensor(SensorPort.S2); // siapkan motor pilot = new Pilot(WHEEL_DIAMETER, TRACK_WIDTH, Motor.B, Motor.C,true); pilot.setSpeed(500); // event driven machine, bergerak sampai 3 kali menabrak int count = 0; state = STATE_STOP; do { if (touch.isPressed()) { doTouchEvent(); count = count+1; } else { doDefault(); } } while (count < 3); System.out.println("Tutup koneksi ke robot"); NXTCommand.close(); } }
Kontributor: Kocil
