İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
ADXL345, ±16 g'a kadar yüksek çözünürlüklü (13 bit) ölçüme sahip küçük, ince, ultra düşük güçlü, 3 eksenli bir ivmeölçerdir. Dijital çıkış verileri, 16 bitlik ikili tamamlayıcı olarak biçimlendirilir ve I2 C dijital arabirimi aracılığıyla erişilebilir. Eğim algılama uygulamalarında yerçekiminin statik ivmesini ve ayrıca hareket veya şoktan kaynaklanan dinamik ivmeyi ölçer. Yüksek çözünürlüğü (3,9 mg/LSB), 1.0°'den daha düşük eğim değişikliklerinin ölçülmesini sağlar.
Bu eğitimde, ADXL345 sensör modülünün parçacık fotonu ile arayüzlenmesi gösterilmiştir. Hızlanma değerlerini okumak için I2c adaptörlü parçacık kullandık. Bu I2C adaptör sensör modülüne bağlantıyı daha kolay ve daha güvenilir hale getiriyor.
Adım 1: Donanım Gerekli:
Hedefimizi gerçekleştirmek için ihtiyaç duyduğumuz malzemeler aşağıdaki donanım bileşenlerini içerir:
1. ADXL345
2. Parçacık Fotonu
3. I2C Kablosu
4. Parçacık fotonu için I2C Shield
Adım 2: Donanım Bağlantısı:
Donanım bağlantısı bölümü temel olarak sensör ve parçacık fotonu arasında gerekli olan kablo bağlantılarını açıklar. İstenilen çıktı için herhangi bir sistem üzerinde çalışırken doğru bağlantıların sağlanması temel zorunluluktur. Yani, gerekli bağlantılar aşağıdaki gibidir:
ADXL345, I2C üzerinde çalışacaktır. Sensörün her bir arayüzünün nasıl bağlanacağını gösteren örnek kablo şeması buradadır.
Kutudan çıktığı gibi, kart bir I2C arayüzü için yapılandırılmıştır, bu nedenle, aksi takdirde agnostik iseniz bu bağlantıyı kullanmanızı öneririz.
Tek ihtiyacınız olan dört tel! Vcc, Gnd, SCL ve SDA pinlerinden sadece dört bağlantı gereklidir ve bunlar I2C kablosu yardımıyla bağlanır.
Bu bağlantılar yukarıdaki resimlerde gösterilmiştir.
Adım 3: İvme Ölçümü Kodu:
Şimdi parçacık koduyla başlayalım.
Sensör modülünü parçacık ile kullanırken application.h ve spark_wiring_i2c.h kütüphanesini dahil ediyoruz. "application.h" ve spark_wiring_i2c.h kitaplığı, sensör ve parçacık arasındaki i2c iletişimini kolaylaştıran işlevleri içerir.
Parçacık kodunun tamamı, kullanıcının rahatlığı için aşağıda verilmiştir:
#Dahil etmek
#Dahil etmek
// ADXL345 I2C adresi 0x53(83)
#define Addr 0x53
int xAccl = 0, yAccl = 0, zAccl = 0;
geçersiz kurulum()
{
// Değişken ayarla
Particle.variable("i2ccihaz", "ADXL345");
Particle.variable("xAccl", xAccl);
Particle.variable("yAccl",yAccl);
Particle.variable("zAccl",zAccl);
// I2C iletişimini MASTER olarak başlat
Wire.begin();
// Seri iletişimi başlat, baud hızını ayarla = 9600
Seri.başla(9600);
// I2C iletimini başlat
Wire.beginTransmission(Adr);
// Bant genişliği oranı kaydını seç
Wire.write(0x2C);
// Çıkış veri hızını seçin = 100 Hz
Wire.write(0x0A);
// I2C İletimini Durdur
Wire.endTransmission();
// I2C iletimini başlat
Wire.beginTransmission(Adr);
// Güç kontrol kaydını seç
Wire.write(0x2D);
// Otomatik uyku devre dışı bırakma seçeneğini seçin
Wire.write(0x08);
// I2C iletimini durdur
Wire.endTransmission();
// I2C iletimini başlat
Wire.beginTransmission(Adr);
// Veri formatı kaydını seç
Wire.write(0x31);
// Tam çözünürlüğü seçin, +/-2g
Wire.write(0x08);
// I2C iletimini sonlandır
Wire.endTransmission();
gecikme(300);
}
boşluk döngüsü()
{
imzasız int veri[6];
for(int i = 0; i < 6; i++)
{
// I2C iletimini başlat
Wire.beginTransmission(Adr);
// Veri kaydını seç
Wire.write((50+i));
// I2C iletimini durdur
Wire.endTransmission();
// Cihazdan 1 bayt veri iste
Wire.requestFrom(Adr, 1);
// 6 bayt veri oku
// xAccl lsb, xAccl msb, yAccl lsb, yAccl msb, zAccl lsb, zAccl msb
if(Wire.available()==1)
{
data = Wire.read();
}
gecikme(300);
}
// Veriyi 10 bit'e çevir
int xAccl = (((veri[1] & 0x03) * 256) + veri[0]);
if(xAccl > 511)
{
xAccl -= 1024;
}
int yAccl = (((veri[3] & 0x03) * 256) + veri[2]);
if(yAccl > 511)
{
yAccl -= 1024;
}
int zAccl = (((veri[5] & 0x03) * 256) + veri[4]);
if(zAccl > 511)
{
zAccl -= 1024;
}
// Gösterge tablosuna veri çıkışı
Particle.publish("X-Ekseninde İvme:", String(xAccl));
Particle.publish("Y Ekseninde İvme:", String(yAccl));
Particle.publish("Z-Ekseninde İvme:", String(zAccl));
}
Particle.variable() işlevi, sensörün çıktısını depolamak için değişkenleri oluşturur ve Particle.publish() işlevi, çıktıyı sitenin panosunda görüntüler.
Sensör çıkışı, referansınız için yukarıdaki resimde gösterilmektedir.
Adım 4: Uygulamalar:
ADXL345, Ahizelerde, Tıbbi enstrümantasyonda vb. kullanılabilecek küçük, ince, ultra düşük güçlü, 3 eksenli bir ivmeölçerdir. Uygulaması ayrıca Oyun ve işaretleme cihazları, Endüstriyel enstrümantasyon, Kişisel navigasyon cihazları ve Sabit disk sürücüsü (HDD) korumasını içerir.