NXT-Sound

Dari IgosCenter

Langsung ke: Navigasi, Cari

Proyek kali ini adalah NXT-Base yang dilengkapi dengan sensor suara. Kita akan membuat robot yang bisa jalan/berhenti berdasarkan teriakan keras.

Konstruksi

Buat dulu mobil NXT-Base, lalu tambahkan sensor suara. Selengkapnya robot akan memiliki:

  • Satu roda yang bisa berputar bebas (castor)
  • Dua roda yang masing-masing terhubung ke motor port B dan C.
  • Satu sensor suara terhubung ke masukan Port-2.

Gambar:NXT-base_sound.png

Program iCommand

Untuk menyetir mobil ini, kita akan pakai dua kelas, yaitu:

  • Kelas Pilot, untuk menyetir kedua roda.
  • Kelas SoundSensor, untuk membaca tingkat suara.
/*
 * BaseSound.java
 */
 
package robotnxj;
 
import icommand.nxt.comm.NXTCommand;
import icommand.navigation.Pilot;
import icommand.nxt.*;
 
/**
 * Menjalankan robot base memakai kelas pilot, dengan panduan sensor suara
 * - Awal, robot berhenti
 * - Jika ada suara keras (misal tepukan), robot akan mulai berjalan
 * - Jika ada suara keras lagi, robot akan berhenti
 * Program ini mengenalkan pakem state machine sederhana.
 *
 * @author kocil
 */
public class BaseSound {
    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 SoundSensor sound;
 
    public static int atStop() {
        int sound_level;
 
        sound_level = sound.getdB();
        if (sound_level > 50) {
            pilot.forward();
            return STATE_RUN;
        }
        return STATE_STOP;
    }
 
    public static int atRun() {
        int sound_level;
 
        sound_level = sound.getdB();
        if (sound_level > 50) {
            pilot.stop();
            return STATE_STOP;
        }
        return STATE_RUN;
    }
 
    public static void main(String[] args ) throws Exception
    {
        System.out.println("Koneksi ke robot ... ");
        NXTCommand.open();
        NXTCommand.setVerify(true);
 
        // siapkan sensor, terhubung ke port-2
        sound = new SoundSensor(SensorPort.S2);
 
        // siapkan dua motor B dan C sebagai pilot
        pilot = new Pilot(WHEEL_DIAMETER, TRACK_WIDTH, Motor.B, Motor.C,true);
        pilot.setSpeed(500);
 
        // state machine, bergerak selama 20 detik
        long start = System.currentTimeMillis();
        int state = STATE_STOP;
        do {
            switch (state) {
                case STATE_STOP : state = atStop(); break;
                case STATE_RUN : state = atRun(); break;
            }
            sleep(100);
        } while ((System.currentTimeMillis() - start) < 20000);
 
        System.out.println("Tutup koneksi ke robot");
        NXTCommand.close();
 
    }
 
}

Kontributor: Kocil

(c) Igos Center Bandung, 2009