2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
MMA8452Q-aqlli, kam quvvatli, uch o'qli, sig'imli, mikromashinali 12 bitli o'lchamli akselerometr. Foydalanuvchilar tomonidan dasturlashtiriladigan moslashuvchan variantlar akselerometrga o'rnatilgan ikkita funktsiya yordamida ta'minlanadi, ular ikkita uzilish pimiga o'rnatiladi. U ± 2g/± 4g/± 8g foydalanuvchi tomonidan tanlanishi mumkin bo'lgan to'liq o'lchovlarga ega, yuqori o'tkazuvchan filtrli filtrlangan ma'lumotlar va real vaqtda mavjud bo'lgan filtrlanmagan ma'lumotlar. Mana, Arduino nano bilan uning namoyishi.
1 -qadam: Sizga nima kerak.. !
1. Arduino Nano
2. MMA8452Q
3. I²C kabeli
4. Arduino Nano uchun I²C qalqoni
2 -qadam: Ulanish:
Arduino Nano uchun I2C qalqonini oling va uni muloyimlik bilan Nano pinlariga suring.
Keyin I2C kabelining bir uchini MMA8452Q sensoriga, ikkinchi uchini esa I2C ekraniga ulang.
Ulanishlar yuqoridagi rasmda ko'rsatilgan.
3 -qadam: Kod:
MMMA8452Q uchun arduino kodini bizning github omboridan- DCUBE do'konidan yuklab olish mumkin.
Mana havola.
Sensorning Arduino platasi bilan I2c aloqasini osonlashtirish uchun biz Wire.h kutubxonasini o'z ichiga olamiz.
Siz bu erdan kodni nusxalashingiz mumkin, u quyidagicha berilgan:
// Ixtiyoriy litsenziya bilan tarqatilgan.
// Agar xohlasangiz, foyda yoki tekin ishlating, agar u tegishli asarlar litsenziyalariga mos kelsa.
// MMA8452Q
// Bu kod MMA8452Q_I2CS I2C Mini moduli bilan ishlash uchun mo'ljallangan.
#qo'shing
// MMA8452Q I2C manzili - 0x1C (28)
#Addr 0x1C ni aniqlang
bo'sh o'rnatish ()
{
// I2C aloqasini MASTER sifatida boshlang
Wire.begin ();
// Serial aloqani ishga tushiring, bod tezligi = 9600
Serial.begin (9600);
// I2C uzatishni boshlang
Wire.beginTransmission (Addr);
// Boshqarish registrini tanlang
Wire.write (0x2A);
// Kutish rejimi
Wire.write (0x00);
// I2C uzatishni to'xtating
Wire.endTransmission ();
// I2C uzatishni boshlang
Wire.beginTransmission (Addr);
// Boshqarish registrini tanlang
Wire.write (0x2A);
// Faol rejim
Wire.write (0x01);
// I2C uzatishni to'xtating
Wire.endTransmission ();
// I2C uzatishni boshlang
Wire.beginTransmission (Addr);
// Boshqarish registrini tanlang
Wire.write (0x0E);
// +/- 2g oralig'ini o'rnating
Wire.write (0x00);
// I2C uzatishni to'xtating
Wire.endTransmission ();
kechikish (300);
}
bo'sh halqa ()
{
imzosiz int ma'lumotlari [7];
// 7 bayt ma'lumotni so'rang
Wire.requestFrom (Addr, 7);
// 7 bayt ma'lumotni o'qing
// staus, xAccl lsb, xAccl msb, yAccl lsb, yAccl msb, zAccl lsb, zAccl msb
agar (Wire.available () == 7)
{
ma'lumotlar [0] = Wire.read ();
ma'lumotlar [1] = Wire.read ();
ma'lumotlar [2] = Wire.read ();
ma'lumotlar [3] = Wire.read ();
ma'lumotlar [4] = Wire.read ();
ma'lumotlar [5] = Wire.read ();
ma'lumotlar [6] = Wire.read ();
}
// Ma'lumotni 12 bitga aylantiring
int xAccl = ((ma'lumotlar [1] * 256) + ma'lumotlar [2]) / 16;
agar (xAccl> 2047)
{
xAccl -= 4096;
}
int yAccl = ((ma'lumotlar [3] * 256) + ma'lumotlar [4]) / 16;
agar (yAccl> 2047)
{
yAccl -= 4096;
}
int zAccl = ((ma'lumotlar [5] * 256) + ma'lumotlar [6]) / 16;
agar (zAccl> 2047)
{
zAccl -= 4096;
}
// Ma'lumotlarni ketma -ket monitorga chiqarish
Serial.print ("X o'qida tezlashtirish:");
Serial.println (xAccl);
Serial.print ("Y o'qida tezlashtirish:");
Serial.println (yAccl);
Serial.print ("Z o'qida tezlashtirish:");
Serial.println (zAccl);
kechikish (500);
}
4 -qadam: Ilovalar:
MMA8452Q turli xil ilovalarga ega, ular orasida elektron kompas ilovalari, statik yo'nalishni aniqlash, portret/landshaft, yuqoriga/pastga, chapga/o'ngga, orqaga/oldingi holatni aniqlash, daftar, elektron o'quvchi, noutbukning qulashi va tushishini aniqlash, real vaqtda. yo'nalishlarni aniqlash, shu jumladan virtual haqiqat va o'yindagi 3D foydalanuvchi pozitsiyasi haqidagi fikr-mulohazalar, pedometr qadamlarini sanash, HDD uchun tushishni aniqlash, o'lik hisob-kitobli GPS zaxirasi va boshqalar kabi real vaqtda faoliyatni tahlil qilish.