NXT-Sound
Dari IgosCenter
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.
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
