NXT-Touch

Dari IgosCenter

Langsung ke: Navigasi, Cari

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.

Gambar:NXT-base_touch.png

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

(c) Igos Center Bandung, 2009