AKSELEROMETER BERBASIS ARDUINO : TUTORIAL & PEMBAHASAN


Akselerometer dapat mendeteksi besaran dan arah percepatan yang dialami oleh sensor. Salah satu penggunaan umum untuk akselerometer adalah untuk membangunkan perangkat dengan mengetuknya. Banyak ponsel cerdas menggunakan akselerometer untuk mendeteksi saat ponsel diangkat atau disadap. Mereka juga digunakan untuk mendeteksi ketika perangkat telah dijatuhkan. Sebagian besar laptop memiliki akselerometer internal yang dapat mendeteksi saat perangkat jatuh, untuk mematikan hard drive sebelum menyentuh lantai.

Pada artikel ini, kita akan menggunakan Arduino untuk mendapatkan data sensor mentah dari akselerometer dan mengubahnya menjadi nilai percepatan dalam g's.

PENGANTAR AKSELEROMETER ADXL345

Accelerometer yang akan kita gunakan dalam tutorial ini adalah ADXL345. Ada berbagai macam papan ADXL345 yang tersedia, tetapi yang kami gunakan adalah modul breakout dari Adafruit:

Panah arah menunjukkan arah setiap sumbu sensor (x, y, dan z) dalam kaitannya dengan papan fisik. Sumbu z memanjang ke atas dan ke bawah, tegak lurus terhadap sumbu x dan y.

ADXL345 dapat berkomunikasi dengan Arduino melalui SPI dan I2C. Pada artikel ini kita akan menggunakan I2C, namun SPI menjadi pilihan jika ingin menggunakannya.

Deskripsi pin ADXL345:

  • Vin – Menghubungkan ke sumber listrik 5 volt.
  • 3V3 – ADXL345 dapat diberi daya dengan 3,3 volt atau 5 volt. Pin ini adalah tempat sumber listrik 3,3 volt akan terhubung.
  • GND – Menghubungkan ke ground.
  • CS – Pin pilih chip untuk komunikasi SPI.
  • INT1 – Pin interupsi perangkat keras 1.
  • INT2 – Pin interupsi perangkat keras 2.
  • SDO – Pin keluaran data serial. Berfungsi ganda sebagai pin MISO untuk komunikasi SPI.
  • SDA – Pin SDA untuk komunikasi I2C. Berfungsi ganda sebagai pin MOSI untuk komunikasi SPI.
  • SCL – Pin SCL untuk komunikasi I2C. Berfungsi ganda sebagai pin SCLK untuk SPI.


BAGAIMANA AKSELEROMETER ADXL345 BEKERJA


Percepatan adalah laju kenaikan atau penurunan kecepatan:

Formula Percepatan.png

Jika Anda mengendarai mobil dan menginjak gas, mobil memiliki percepatan positif. Jika Anda menginjak rem, mobil memiliki percepatan negatif.

Percepatan statis disebabkan oleh gaya seperti gravitasi. Percepatan dinamis disebabkan oleh gaya gerak seperti percepatan dari mobil yang dipercepat atau diperlambat. Akselerometer mengukur akselerasi statis dan akselerasi dinamis.



ADXL345 mengukur akselerasi dengan mendeteksi perubahan kapasitansi. Di sepanjang setiap sumbu ada pelat kecil yang tergantung di antara dua pegas mikro yang dapat bergerak maju mundur:


Pelat bergerak dan pelat tetap bermuatan, sehingga medan listrik terbentuk di antara keduanya:


Ketika akselerometer dalam keadaan diam, medan listrik antara pelat adalah konstan. Saat sensor dipercepat, pelat bergerak bergerak, dan jarak antar pelat berubah.

Kapasitansi adalah fungsi dari jarak antara dua pelat yang bermuatan, sehingga ketika jarak antara pelat berubah, medan listrik antara pelat juga berubah. Sensor mengukur perubahan kapasitansi ini dan menghitung nilai percepatan.

CARA MENGHUBUNGKAN AKSELEROMETER ADXL345 KE ARDUINO

Sekarang mari kita hubungkan akselerometer ke Arduino dan lihat nilai mentah yang diberikannya. Kami akan menghubungkan akselerometer dengan I2C, jadi kabelnya cukup sederhana:


CARA MEMPROGRAM AKSELEROMETER ADXL345

Untuk memprogram akselerometer ADXL345 kita akan menggunakan perpustakaan Sparkfun ADXL345. Unduh dan instal perpustakaan di sini .

Setelah Anda menginstal perpustakaan, unggah kode di bawah ini ke Arduino. Sketsa akan menampilkan pembacaan akselerometer mentah ke monitor serial.

#include <SparkFun_ADXL345.h>

ADXL345 adxl = ADXL345();

int range = 2; // Range: 2g, 4g, 8g, 16g

void setup() {
  Serial.begin(9600);

  adxl.powerOn();
  adxl.setRangeSetting(range);
}

void loop() {
  int x, y, z;
  adxl.readAccel(&x, &y, &z);

  Serial.print("X: ");
  Serial.print(x);

  Serial.print("    Y: ");
  Serial.print(y);

  Serial.print("    Z: ");
  Serial.println(z);

  delay(250);
}

PENJELASAN KODE

Hal pertama yang kami lakukan adalah menyertakan perpustakaan Sparkfun ADXL345. Selanjutnya kita membuat objek bernama adxl, yang merupakan anggota ADXL345kelas. Kami mengatur adxlobjek sama dengan fungsi ADXL345()The ADXL345()Fungsi mengkonfigurasi modus komunikasi yang sensor akan digunakan untuk berbicara dengan Arduino. Ketika tidak ada argumen yang diteruskan ke fungsi, seperti dalam kasus ini, sensor akan menggunakan I2C untuk berkomunikasi dengan Arduino. Untuk menggunakan SPI, gunakan ADXL345(10)sebagai gantinya.

Selanjutnya kita mendeklarasikan variabel bernama range, yang akan menyimpan rentang sensitivitas yang kita inginkan untuk dimiliki ADXL345. Ini bisa berupa 2, 4, 8, atau 16 g.

Di setup()bagian ini kami menginisialisasi monitor serial. Kemudian kita menginisialisasi ADXL345 dengan powerOn()fungsi. Fungsi ini dipanggil melalui adxlobjek yang kita buat tadi. Selanjutnya, kita memanggil setRangeSetting()fungsi untuk mengatur rentang sensitivitas sensor. Kami meneruskannya ke rangevariabel, yang menyimpan pengaturan rentang yang kami tetapkan saat kami mendeklarasikannya.

Pada loop()bagian ini, hal pertama yang kita lakukan adalah mendeklarasikan variabel untuk menahan pembacaan sensor. ADXL345 menghasilkan pengukuran percepatan terpisah untuk setiap sumbu, jadi kita memerlukan variabel unik untuk setiap sumbu. Oleh karena itu kami mendeklarasikan tiga variabel int – xy, dan z.

Selanjutnya, kita mendapatkan pembacaan sensor dari accelerometer dengan readAccel()fungsi. Argumen dari readAccel()fungsi tersebut adalah variabel yang akan menahan pembacaan sensor dari setiap sumbu. Pengukuran sumbu x sensor akan disimpan dalam variabel yang ditempatkan pada parameter pertama. Pengukuran sumbu y akan disimpan pada variabel pada parameter kedua, dan pengukuran sumbu z akan disimpan pada variabel yang ditempatkan pada parameter ketiga.

Selanjutnya kita memiliki serangkaian Serial.print()fungsi untuk mencetak nilai yang disimpan dalam xy, dan zvariabel ke monitor serial. Kemudian kita tunda selama 250 milidetik untuk sedikit memperlambat output.

Setelah Anda menghubungkan ADXL345 ke Arduino Anda dan mengunggah kodenya, buka monitor serial. Anda akan melihat nilai seperti ini dicetak:

Perhatikan bagaimana nilai X dan Y mendekati nol, tetapi sumbu Z memiliki nilai sekitar 230. Sensor diletakkan rata di atas meja saat tangkapan layar ini diambil, jadi tidak bergerak. Tapi itu semakin cepat. Pembacaan sumbu Z yang lebih tinggi disebabkan oleh percepatan gravitasi. Coba gerakkan sensor dan lihat apa yang terjadi pada nilai sumbu x, y, dan z.

Nilai mentah yang dikeluarkan oleh akselerometer bukanlah nilai ADC Arduino biasa antara 0 dan 1023. Angka yang Anda lihat di monitor serial dalam format "pelengkap dua". Komplemen dua adalah cara untuk mewakili bilangan bertanda (positif dan negatif) dalam biner.

Kita dapat mengonversi dua nilai pelengkap akselerometer menjadi g dengan beberapa faktor konversi dari lembar data ADXL345 .

BAGAIMANA MENGONVERSI NILAI KOMPLEMEN DUA KE G'S

Pada tabel spesifikasi pada halaman 4 lembar data ADXL345 terdapat bagian yang disebut sensitivitas. Bagian ini memiliki faktor skala untuk setiap rentang sensitivitas:


Untuk mendapatkan pembacaan percepatan dalam g, kita perlu mengalikan dua keluaran komplemen sensor dengan salah satu faktor skala ini. Setiap rentang sensitivitas memiliki faktor skala yang berbeda, ditunjukkan oleh kotak merah pada gambar di atas.

OUTPUT AKSELEROMETER ADXL345 DALAM G'S

Sekarang mari kita lihat sketsa yang akan menampilkan pembacaan akselerometer dalam g's. Sketsa ini sebenarnya akan menampilkan pembacaan sensor dalam mili g, tetapi jika Anda menginginkan output dalam g, bagi saja pembacaan mili g dengan 1.000.

#include <SparkFun_ADXL345.h>

ADXL345 adxl = ADXL345();

int range = 2; // Range: 2g, 4g, 8g, 16g void setup() { Serial.begin(9600); adxl.powerOn(); adxl.setRangeSetting(range); } void loop() { int x, y, z; adxl.readAccel(&x, &y, &z); switch (range) { case 2: x = x * 3.9; y = y * 3.9; z = z * 3.9; break; case 4: x = x * 7.8; y = y * 7.8; z = z * 7.8; break; case 8: x = x * 15.6; y = y * 15.6; z = z * 15.6; break; case 16: x = x * 31.2; y = y * 31.2; z = z * 31.2; break; default: Serial.println("Please specify a range of 2, 4, 8, or 16 g"); } Serial.print("X: "); Serial.print(x); Serial.print(" Y: "); Serial.print(y); Serial.print(" Z: "); Serial.println(z); delay(250);
}

PENJELASAN KODE

Bagian atas sketsa dan setup()bagian identik dengan sketsa data mentah yang dijelaskan sebelumnya.

Di loop()bagian ini, kami mendeklarasikan xy, dan zvariabel untuk menyimpan pembacaan sensor dari setiap sumbu. Kemudian kita mendapatkan pembacaan untuk setiap sumbu dengan readAccel()fungsi.

Selanjutnya kita mengubah pembacaan sensor mentah menjadi g dengan mengalikan pembacaan sensor mentah dengan faktor skala. Faktor skala berbeda tergantung pada pengaturan rentang mana yang kita pilih. Ini adalah aplikasi yang sempurna untuk sebuah switch casepernyataan. Jadi kami menggunakan switchpernyataan dengan rangevariabel sebagai kondisinya. Setiap casepernyataan akan menentukan apa yang terjadi ketika rentang diatur ke 2, 4, 8, atau 16 g. Ketika rangevariabel sama dengan 2, kode dalam casepernyataan pertama akan dieksekusi. Faktor skala untuk sensitivitas 2 g adalah 3,9, jadi kami mengalikan output dari setiap sumbu dengan 3,9. Kemudian kita memiliki breakperintah agar program keluar dari casepernyataan tersebut.

Kemudian kita memiliki casepernyataan untuk semua kemungkinan nilai rangevariabel lainnya. Ketika rentang diatur ke 4 g, faktor skalanya adalah 7,8, jadi kita kalikan setiap keluaran sumbu dengan 7,8. Ketika rentang diatur ke 8 g, faktor skalanya adalah 15,6, jadi kami mengalikan ketiga variabel sumbu dengan 15,6. Dan ketika rentang diatur ke 16 g, faktor skalanya adalah 31,2, jadi kita harus mengalikan semuanya dengan 31,2.

Kemudian kami memiliki defaultpernyataan di akhir switch casepernyataan. defaultpernyataan hanya akan dieksekusi jika rangevariabel ditetapkan sama dengan yang berbeda sesuatu dari 2, 4, 8, atau 16. kode di dalam defaultpernyataan akan mencetak garis pada monitor serial yang mengatakan: “Tentukan kisaran 2, 4 , 8, atau 16 g”.

Sekarang kita mencetak xy, dan zvariabel ke monitor serial dengan serangkaian Serial.print()fungsi. Terakhir kami menggunakan delay 250 milidetik untuk memperlambat output agar lebih mudah dibaca di serial monitor. Setelah mengunggah sketsa, buka monitor serial dan Anda akan melihat pembacaan akselerasi yang dihasilkan dalam mili g:

Perhatikan bahwa nilai sumbu Z sekitar 910 mili g. Itu cukup dekat dengan satu g, yang merupakan percepatan gravitasi.



1 Komentar

  1. youtube.com: Youtube videos | Videosl
    youtube.com: youtube.com: youtube.com: youtube.com: youtube to mp3 player youtube.com: youtube.com: youtube.com: youtube.com: youtube.com: youtube.com: youtube.com: YouTube.com: youtube.com: youtube.com: youtube.com:

    BalasHapus

Posting Komentar

Lebih baru Lebih lama