• Tidak ada hasil yang ditemukan

Menghidupkan Accelerometer

Bab 2 Proyek-proyek Arduino

5.3 Menghidupkan Accelerometer

Sebuah strategi pragmatis untuk mendapatkan akrab dengan perangkat baru untuk menghubungkan itu dan melihat data apa yang memberikan. Program berikut membaca nilai input untuk semua tiga sumbu dan output mereka ke port serial:

const unsigned int X_AXIS_PIN = 2;

const unsigned int Y_AXIS_PIN = 1;

71

const unsigned int BAUD_RATE = 9600;

void setup(){ Serial.begin(BAUD_RATE); } void loop(){ Serial.print(analogRead(X_AXIS_PIN)); Serial.print(“"); Serial.print(analogRead(Y_AXIS_PIN)); Serial.print(“"); Serial.println(analogRead(Z_AXIS_PIN)); delay(100); }

Program uji kita adalah yang sederhana seperti itu bisa. Kita mendefinisikan konstanta untuk tiga analog pin dan menginisialisasi port serial di setup () function. Perhatikan bahwa kita tidak mengatur pin analog ke INPUT eksplisit, karena itu default pula. Dalam loop () fungsi, kita terus-menerus output nilai-nilai yang kita baca dari pin analog ke port serial. Buka monitor seri, dan bergerak sensor sekitar sedikit-miringkan sekitar sumbu yang berbeda. Anda harus melihat output yang mirip dengan berikut:

344 331 390 364 276 352 388 286 287 398 314 286 376 332 289 370 336 301 379 338 281

72 Nilai-nilai ini merupakan data yang kita peroleh untuk x-, y-, dan z-sumbu. kapan Anda memindahkan sensor hanya sekitar sumbu x, misalnya, Anda dapat melihat bahwa nilai pertama perubahan sesuai. Berlaku juga untuk data banyak sensor memancarkan, dan accelerometers tidak terkecuali. Mereka sedikit berbeda dalam nilai-nilai minimum dan maksimum yang mereka hasilkan, dan mereka sering Jitter sedikit.

Mereka mungkin mengubah nilai output mereka bahkan meskipun Anda tidak bergerak mereka, atau mereka mungkin tidak mengubah output mereka nilai-nilai dengan benar. Pada bagian ini, kita akan menentukan minimum sensor dan nilai maksimum, dan kita akan meratakan jitter. Menemukan nilai-nilai tepi sensor mudah, tetapi tidak dapat dengan mudah otomatis. Anda harus terus-menerus membaca output sensor sementara bergerak itu. Berikut adalah program yang melakukan pekerjaan:

const unsigned int X_AXIS_PIN = 2;

const unsigned int Y_AXIS_PIN = 1;

const unsigned int Z_AXIS_PIN = 0;

const unsigned int BAUD_RATE = 9600;

int min_x, min_y, min_z;

int max_x, max_y, max_z;

void setup() {

Serial.begin(BAUD_RATE); min_x = min_y = min_z = 1000; max_x = max_y = max_z = -1000; }

void loop() {

const int x = analogRead(X_AXIS_PIN);

const int y = analogRead(Y_AXIS_PIN);

const int z = analogRead(Z_AXIS_PIN);

min_x = min(x, min_x); max_x = max(x, max_x); min_y = min(y, min_y); max_y = max(y, max_y); min_z = min(z, min_z); max_z = max(z, max_z);

73 Serial.print("x("); Serial.print(min_x); Serial.print("/"); Serial.print(max_x); erial.print("), y("); Serial.print(min_y); Serial.print("/"); Serial.print(max_y); Serial.print("), z("); Serial.print(min_z); Serial.print("/"); Serial.print(max_z); Serial.println(")"); }

Kita mendeklarasikan variabel untuk nilai-nilai minimum dan maksimum dari ketiga kapak, dan kita menginisialisasi mereka dengan angka yang pasti keluar dari berbagai sensor (-1000 dan 1000). Dalam loop () fungsi, kita secara permanen mengukur percepatan semua tiga sumbu dan menyesuaikan minimum dan nilai maksimum sesuai. Kompilasi dan upload sketsa, kemudian

memindahkan papan breadboard dengan sensor ke segala arah, dan kemudian miringkan ke segala arah. Pindahkan perlahan-lahan, bergerak cepat, miringkan perlahan-lahan, dan miring dengan cepat.

Gunakan kabel panjang, dan berhati-hati ketika bergerak dan berputar papan breadboard sehingga Anda tidak sengaja melonggarkan sambungan.

Setelah beberapa saat nilai-nilai minimum dan maksimum akan menstabilkan, dan Anda harus mendapatkan output seperti ini : x (247/649), y (253/647), z (278/658) Tuliskan nilai-nilai ini, karena kita membutuhkannya nanti, dan mungkin Anda akan membutuhkannya ketika Anda melakukan percobaan sensor sendiri.

Sekarang mari kita lihat bagaimana untuk menyingkirkan jitter. Pada prinsipnya, itu sederhana. malah kembali data percepatan segera, kita mengumpulkan

74 pembacaan terakhir dan kembali rata-rata mereka. Dengan cara ini, perubahan kecil akan disetrika out. Kode terlihat sebagai berikut :

Line 1 const unsigned int X_AXIS_PIN = 2;

- const unsigned int Y_AXIS_PIN = 1;

- const unsigned int Z_AXIS_PIN = 0;

- const unsigned int NUM_AXES = 3;

5 const unsigned int PINS[NUM_AXES] ={

- X_AXIS_PIN, Y_AXIS_PIN, Z_AXIS_PIN

- };

- const unsigned int BUFFER_SIZE = 16;

- const unsigned int BAUD_RATE = 9600;

10 - int buffer[NUM_AXES][BUFFER_SIZE]; - int buffer_pos[NUM_AXES] = { 0 } - - void setup(){ 15 Serial.begin(BAUD_RATE); - } -

- int get_axis(const int axis){

- delay(1);

20 buffer[axis][buffer_pos[axis]] = analogRead(PINS[axis]);

- buffer_pos[axis] = (buffer_pos[axis] + 1) % BUFFER_SIZE;

-

- long sum = 0;

- for (int i = 0; i < BUFFER_SIZE; i++)

25 sum += buffer[axis][i];

- return round(sum / BUFFER_SIZE);

- }

-

75 30 int get_y() { return get_axis(1);}

- int get_z() { return get_axis(2);}

- - void loop(){ - Serial.print(get_x()); 35 Serial.print(“"); - Serial.print(get_y()); - Serial.print(“"); - Serial.println(get_z()); - }

Seperti biasa, kita mendefinisikan beberapa konstanta untuk pin kita gunakan pertama. Kali ini, kita juga mendefinisikan sebuah konstanta bernama NUM_AXES yang berisi jumlah sumbu kita mengukur. Kita juga memiliki sebuah array bernama PIN yang berisi daftar pin kita gunakan. Ini membantu kita menjaga kode kita lebih generik nanti. Sejalan 11, kita menyatakan buffer untuk semua sumbu. Mereka akan diisi dengan data sensor kita mengukur, sehingga kita dapat menghitung nilai rata-rata ketika kita membutuhkannya. Kita harus

menyimpan posisi kita saat ini di setiap buffer, sehingga dalam baris 12, kita mendefinisikan sebuah array dari posisi penyangga. setup () hanya

menginisialisasi port serial, dan tindakan nyata terjadi di yang get_axis () function.

Dimulai dengan penundaan kecil untuk memberikan Arduino beberapa waktu untuk beralih antara pin analog, jika tidak, Anda mungkin mendapatkan buruk data. Kemudian membaca percepatan untuk sumbu kita telah berlalu dan menyimpannya di posisi buffer saat ini milik sumbu. Hal ini meningkatkan posisi penyangga dan set kembali ke nol saat akhir buffer telah tercapai. Akhirnya, kita kembali nilai rata-rata dari data yang kita telah dikumpulkan sejauh untuk sumbu saat ini.

Itulah seluruh trik. Untuk melihat efeknya, meninggalkan sensor tersentuh pada meja Anda, dan menjalankan program dengan ukuran buffer yang berbeda. Jika Anda tidak menyentuh sensor, Anda tidak akan mengharapkan output

76 program untuk berubah. Tetapi jika Anda mengatur BUFFER_SIZE ke 1, Anda dengan cepat akan melihat perubahan kecil. mereka akan menghilang segera setelah buffer cukup besar. Data percepatan kita mengukur sekarang cukup akurat, dan kita akhirnya dapat membangun sebuah game controller yang tidak akan mengganggu pengguna karena gerakan tak terduga.

Dokumen terkait