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:
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.
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 ADXL345
kelas. Kami mengatur adxl
objek 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 adxl
objek yang kita buat tadi. Selanjutnya, kita memanggil setRangeSetting()
fungsi untuk mengatur rentang sensitivitas sensor. Kami meneruskannya ke range
variabel, yang menyimpan pengaturan rentang yang kami tetapkan saat kami mendeklarasikannya.
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 – x
, y
, 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 x
, y
, dan z
variabel 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 x
, y
, dan z
variabel 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 default
pernyataan di akhir switch case
pernyataan. default
pernyataan hanya akan dieksekusi jika range
variabel ditetapkan sama dengan yang berbeda sesuatu dari 2, 4, 8, atau 16. kode di dalam default
pernyataan akan mencetak garis pada monitor serial yang mengatakan: “Tentukan kisaran 2, 4 , 8, atau 16 g”.
Sekarang kita mencetak x
, y
, dan z
variabel 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:
youtube.com: Youtube videos | Videosl
BalasHapusyoutube.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:
Posting Komentar