Kali ini kita akan berurusan dengan menghubungkan akselerometer triaksial analog ADXL335 ke Arduino.
Diperlukan
- -Arduino;
- - akselerometer ADXL335;
- - komputer pribadi dengan lingkungan pengembangan Arduino IDE.
instruksi
Langkah 1
Akselerometer digunakan untuk menentukan vektor percepatan. Akselerometer ADXL335 memiliki tiga sumbu, dan berkat ini, ia dapat menentukan vektor percepatan dalam ruang tiga dimensi. Karena fakta bahwa gaya gravitasi juga merupakan vektor, akselerometer dapat menentukan orientasinya sendiri dalam ruang tiga dimensi relatif terhadap pusat Bumi.
Ilustrasi menunjukkan gambar dari paspor (https://www.analog.com/static/imported-files/data_sheets/ADXL335.pdf) untuk akselerometer ADXL335. Ditampilkan di sini adalah sumbu koordinat sensitivitas akselerometer dalam kaitannya dengan penempatan geometris badan perangkat di ruang angkasa, serta tabel nilai tegangan dari 3 saluran akselerometer tergantung pada orientasinya di ruang angkasa. Data dalam tabel diberikan untuk sensor diam.
Mari kita lihat lebih dekat apa yang ditunjukkan oleh akselerometer kepada kita. Biarkan sensor terletak secara horizontal, misalnya, di atas meja. Maka proyeksi vektor percepatan akan sama dengan 1g sepanjang sumbu Z, atau Zout = 1g. Dua sumbu lainnya akan memiliki nol: Xout = 0 dan Yout = 0. Ketika sensor diputar "di punggungnya", itu akan diarahkan ke arah yang berlawanan relatif terhadap vektor gravitasi, yaitu. Zout = -1g. Demikian pula, pengukuran dilakukan pada ketiga sumbu. Jelas bahwa akselerometer dapat diposisikan sesuai keinginan di ruang angkasa, jadi kami akan mengambil pembacaan selain nol dari ketiga saluran.
Jika probe diguncang kuat sepanjang sumbu Z vertikal, nilai Zout akan lebih besar dari "1g". Percepatan terukur maksimum adalah "3g" di masing-masing sumbu ke segala arah (yaitu dengan "plus" dan "minus").
Langkah 2
Saya pikir kami menemukan prinsip pengoperasian akselerometer. Sekarang mari kita lihat diagram koneksi.
Chip akselerometer analog ADXL335 agak kecil dan ditempatkan dalam paket BGA, dan sulit untuk memasangnya di papan di rumah. Oleh karena itu, saya akan menggunakan modul GY-61 yang sudah jadi dengan akselerometer ADXL335. Modul semacam itu di toko online Cina berharga hampir satu sen.
Untuk menyalakan accelerometer, perlu mensuplai tegangan +3, 3 V ke pin VCC modul. Saluran pengukur sensor terhubung ke pin analog Arduino, misalnya, "A0", "A1" dan " A2". Ini adalah seluruh sirkuit:)
Langkah 3
Mari kita muat sketsa ini ke memori Arduino. Kami akan membaca pembacaan dari input analog pada tiga saluran, mengubahnya menjadi tegangan dan mengeluarkannya ke port serial.
Arduino memiliki ADC 10-bit, dan tegangan pin maksimum yang diizinkan adalah 5 volt. Tegangan yang diukur dikodekan dengan bit yang hanya dapat mengambil 2 nilai - 0 atau 1. Ini berarti bahwa seluruh rentang pengukuran akan dibagi dengan (1 + 1) ke pangkat 10, yaitu. pada 1024 segmen yang sama.
Untuk mengubah pembacaan menjadi volt, Anda perlu membagi setiap nilai yang diukur pada input analog dengan 1024 (segmen), dan kemudian dikalikan dengan 5 (volt).
Mari kita lihat apa yang sebenarnya berasal dari akselerometer menggunakan sumbu Z sebagai contoh (kolom terakhir). Ketika sensor diposisikan secara horizontal dan melihat ke atas, angkanya datang (2,03 +/- 0,01). Jadi ini harus sesuai dengan percepatan "+ 1g" di sepanjang sumbu Z dan sudut 0 derajat. Balikkan sensornya. Angka-angka tiba (1, 69 +/- 0, 01), yang harus sesuai dengan "-1g" dan sudut 180 derajat.
Langkah 4
Mari kita ambil nilai dari akselerometer pada sudut 90 dan 270 derajat dan masukkan ke dalam tabel. Tabel menunjukkan sudut rotasi akselerometer (kolom "A") dan nilai Zout yang sesuai dalam volt (kolom "B").
Untuk kejelasan, plot tegangan pada output Zout versus sudut rotasi ditampilkan. Bidang biru adalah rentang saat istirahat (pada percepatan 1g). Kotak merah muda pada grafik adalah margin sehingga kita dapat mengukur percepatan hingga + 3g dan hingga -3g.
Pada putaran 90 derajat, sumbu Z memiliki percepatan nol. Itu. nilai 1,67 volt adalah nol bersyarat Zo untuk sumbu Z. Kemudian Anda dapat menemukan percepatan seperti ini:
g = Zout - Zo / sensitivitas_z, di sini Zout adalah nilai terukur dalam milivolt, Zo adalah nilai pada percepatan nol dalam milivolt, sensitivitas_z adalah sensitivitas sensor sepanjang sumbu Z. kalibrasi akselerometer dan hitung nilai sensitivitas khusus untuk Anda sensor menggunakan rumus:
sensitivitas_z = [Z (0 derajat) - Z (90 derajat)] * 1000. Dalam hal ini, sensitivitas akselerometer sepanjang sumbu Z = (2, 03 - 1, 68) * 1000 = 350 mV. Demikian pula, sensitivitas perlu dihitung untuk sumbu X dan Y.
Kolom "C" dari tabel menunjukkan percepatan yang dihitung untuk lima sudut pada sensitivitas 350. Seperti yang Anda lihat, mereka secara praktis bertepatan dengan yang ditunjukkan pada Gambar 1.
Langkah 5
Mengingat kursus geometri dasar, kita mendapatkan rumus untuk menghitung sudut rotasi akselerometer:
angle_X = arctg [sqrt (Gz ^ 2 + Gy ^ 2) / Gx].
Nilai dalam radian. Untuk mengubahnya menjadi derajat, bagi dengan Pi dan kalikan dengan 180.
Hasilnya, sketsa lengkap yang menghitung percepatan dan sudut rotasi akselerometer di sepanjang semua sumbu diperlihatkan dalam ilustrasi. Komentar memberikan penjelasan untuk kode program.
Saat mengeluarkan ke port "Serial.print ()", karakter "\ t" menunjukkan karakter tab sehingga kolomnya genap dan nilainya terletak satu di bawah yang lain. "+" berarti penggabungan (concatenation) dari string. Selain itu, operator "String ()" secara eksplisit memberi tahu kompiler bahwa nilai numerik harus diubah menjadi string. Operator putaran () membulatkan sudut ke 1 derajat terdekat.
Langkah 6
Jadi, kami belajar cara mengambil dan memproses data dari akselerometer analog ADXL335 menggunakan Arduino. Sekarang kita dapat menggunakan akselerometer dalam desain kita.