
Arduino’nuzla kolayca eşleştirilebilen ve üzerinde bir manyetometre (pusula) bulunan 3 eksenli bir ivmeölçer mi arıyorsunuz? LSM303 tabanlı Grove 6-Axis Accelerometer&Compass v2 tam olarak bunu yapıyor!
Bugünkü blogda, LSM303 İvmeölçer’i tanıtacağım ve LSM303’ü bir Arduino ve Raspberry Pi’ye nasıl bağlayacağınızı göstereceğim. Hepsi, başlamanıza yardımcı olmak için!
Not: Bu blogda, referansınız için LSM303 veri sayfası da bulunmaktadır!
LSM303 Tabanlı Modül: Grove – 6 Axis Accelerometer&Compass v2.0

LSM303D tabanlı bu ivmeölçer, 3 manyetik alan kanalı ve 3 ivme kanalı ile donatılmıştır. Bu, elektromanyetik alan ve yerçekimi kuvveti okumalarını küçük bir pakette sağlar!
Üstelik, Grove – 6-Axis Accelerometer&Compass, bugün duyduğunuz ve bildiğiniz diğer popüler MEMS ivmeölçerlerle de rekabet edebiliyor!
- ±16g ivmeölçer çıktısını adxl345 ile eşleştirir
- 16-bit veri çıktısı, bir mikrodenetleyici ile kolayca eşleştirilmesini sağlar
- Adxl345’te bulunmayan yerleşik 3D manyetometre, daha geniş bir uygulama yelpazesi sunar
İşte özellikleri:
- Giriş Voltajı: 5V
- SPI/I2C Arayüzleri (Seçilebilir)
- 2 Bağımsız programlanabilir Kesme
- Geniş Tam Ölçek Aralığı
- ±2/±4/±8/±12 gauss manyetik tam ölçek
- ±2/±4/±6/±8/±16g ivme tam ölçek
- 6D yön algılama
- Güç tasarrufu Modu / Düşük güç Modu
Ana uygulamalar şunları içerir:
- Adım sayar
- Serbest düşüş algılama
- Ekran yönü
- Oyun ve sanal gerçeklik giriş cihazları
- Titreşim izleme ve telafi
- Konum algılama
Donanım genel görünümü ve Pin Çıkışı:

- Pin 1: Grove arayüzü, I2C’ye bağlayın
- Pin 2: SPI Arayüzü
- Pin 3: I2C veya SPI seçme pedi (varsayılan I2C’dir).
- SPI kullanmak istiyorsanız bu pedi bağlantısını kesin
- Pin 4: Kesme dijital çıkışı
- Pin 5: Adres seçme pedi
- Varsayılan olarak, b ve a adresi 0x1E’ye bağlıdır, eğer b ve c adresi 0x1D’ye bağlanır
- SPI kullanmak istiyorsanız, bu pedi her iki taraftan da bağlantısını kesin
Neden bu LSM303 modülünü piyasadaki diğer breakout kartları yerine seçmelisiniz?
Diğer LSM303 breakout kartlarını, sensörleri, modülleri vb. bulabilirsiniz, ancak Grove – 6-Axis Accelerometer&Compass V2.0’ı tercih etmenizi sağlayan nedir? İşte neden!
Seeed’in kendi Grove sistemi aracılığıyla LSM303’ü Arduino ile eşleştirme kolaylığı
Grove sistemi, kullanıcıların farklı modülleri kolayca kullanmalarına yardımcı olmak amacıyla Seeed’in kendi girişimidir, tak ve çalıştır sistemimiz aracılığıyla!
Bu, karmaşık jumper kabloları, lehimleme, breadboard veya elektronik devreleri hata ayıklama kullanmanıza gerek kalmayacağı anlamına geliyor!
Diğer VL53L0X modüllerine kıyasla ne kadar basit ve daha az karmaşık olduğunu düşünün?
Tek ihtiyacınız olan, bir Grove Base Shield ve Arduino’nuz! Bugün Grove kullanmaya geçin!
LSM303 Arduino ve Raspberry Pi Kılavuzu
Başlamanıza yardımcı olmak için hem Arduino hem de Raspberry Pi kütüphanesini sağladık.
LSM303 Arduino Kılavuzu
Başlamak için öncelikle aşağıdakilere ihtiyacınız olacak:
*Seeeduino, Seeed’in kendi Arduino’sudur ve standart Arduino kartlarına göre avantajlarla donatılmıştır.
Donanım yapılandırmaları:
- Adım 1: Grove – 6-Axis Accelerometer&Compass V2.0’ı Grove-Base Shield’ın I2C portuna bağlayın
- Adım 2: Grove – Base Shield’ı Seeeduino’ya takın
- Adım 3: Seeeduino’yu bir USB kablosu ile PC’ye bağlayın
Bağlantıları yaptıktan sonra görünüm şöyle olmalıdır:

Yazılım yapılandırmaları:
- Adım 1: Kütüphaneyi Github’dan indirin
- Adım 2: Arduino için kütüphaneyi kurmak üzere Kütüphane nasıl kurulur kısmına bakın
- Adım 3: Yeni bir Arduino şeması oluşturun ve aşağıdaki kodları yapıştırın veya doğrudan şu yol ile kodu açın: Dosya -> Örnek -> Accelerometer_Compass -> Accelerometer_Compass
- Adım 4: Aşağıdaki kodu yükleyin. Kodu nasıl yükleyeceğinizi bilmiyorsanız, lütfen kodu nasıl yükleyeceğinizi kontrol edin
/* LSM303DLM Örnek Kodu, Jim Lindblom SparkFun Electronics tarafından LSM303DLH örnek koduna dayanmaktadır
tarih: 9/6/11
lisans: Creative commons share-alike v3.0
Değiştiren: Frankie.Chu
Değiştiren: Jacky.Zhang 2014-12-11: Seeed Studio'nun 6-Axis Accelerometer&Compass'ına taşındı
Değiştiren: Jacky.Zhang 2015-1-6: SPI sürücüsü eklendi
Özet:
LSM303DLH 3 eksenli manyetometre/3 eksenli ivmeölçer kullanarak seviye ve eğim telafi edilmiş yönü nasıl hesaplayacağınızı gösterir.
Firmware:
İvmeölçerin tam ölçekli aralığını, SCALE sabitini 2, 4 veya 8 olarak ayarlayarak belirleyebilirsiniz. Bu değer, initLSM303() fonksiyonunda kullanılır. Çoğu durumda, LSM303'teki diğer tüm kayıtlar varsayılan değerlerinde olacaktır.
LSM303'ün dahili kayıtlarına yazmak ve okumak için write() ve read() fonksiyonlarını kullanın.
LSM303'ten ivme ve manyetik değerleri almak için getLSM303_accel() ve getLSM303_mag() fonksiyonlarını kullanın. Bu fonksiyonlara, verilerin döneceği bir dizi geçirmeniz gerekecek.
getHeading() sensörün düz olduğunu varsayarak bir yön hesaplar. 0 ile 360 arasında bir float değeri döner. Bu fonksiyona manyetik değerlerle bir dizi geçirmeniz gerekir.
getTiltHeading() eğim telafi edilmiş bir yön hesaplar. 0 ile 360 derece arasında bir float değeri döner. Bu fonksiyona hem bir manyetik hem de bir ivme dizisi geçirmeniz gerekir.
Yönler AN3192'de belirtildiği gibi hesaplanır:
http://www.sparkfun.com/datasheets/Sensors/Magneto/Tilt%20Compensated%20Compass.pdf
*/
/*
donanım & yazılım yorumu
I2C modu:
1, "I2C EN" jumper'ını ve ADDR jumper'ını 0x1E'ye lehimleyin
2, Grove'u I2C ile başlatmak için Lsm303d.initI2C() fonksiyonunu kullanın
SPI modu:
1, "I2C_EN" jumper'ını ve ADDR jumper'ını herhangi bir tarafa kırın
2, SPI protokolü için bir pini çip seçimi olarak tanımlayın.
3, Grove'u SPI ile başlatmak için Lsm303d.initSPI(SPI_CS) fonksiyonunu kullanın
SPI.h bunları Arduino'da bizim için ayarlar
const int SDI = 11;
const int SDO = 12;
const int SCL = 13;
*/
#include <LSM303D.h>
#include <Wire.h>
#include <SPI.h>
/* Global değişkenler */
int accel[3]; // burada ham ivme değerlerini saklayacağız
int mag[3]; // burada ham manyetometre değerleri saklanır
float realAccel[3]; // burada hesaplanan ivme değerleri
float heading, titleHeading;
#define SPI_CS 10
void setup()
{
char rtn = 0;
Serial.begin(9600); // Hata ayıklama için Serial kullanılıyor
Serial.println("\r\ngüç açıldı");
rtn = Lsm303d.initI2C();
//rtn = Lsm303d.initSPI(SPI_CS);
if(rtn != 0) // LSM303'ü başlat, SCALE tam ölçekli aralığı kullanarak
{
Serial.println("\r\nLSM303D bulunamadı");
while(1);
}
else
{
Serial.println("\r\nLSM303D bulundu");
}
}
void loop()
{
Serial.println("\r\n**************");
//getLSM303_accel(accel); // ivme değerlerini al ve accel dizisine kaydet
Lsm303d.getAccel(accel);
while(!Lsm303d.isMagReady());// manyetometre okumalarının hazır olmasını bekleyin
Lsm303d.getMag(mag); // manyetometre değerlerini al, mag dizisine kaydet
for (int i=0; i<3; i++)
{
realAccel[i] = accel[i] / pow(2, 15) * ACCELE_SCALE; // gerçek ivme değerlerini hesapla, g biriminde
}
heading = Lsm303d.getHeading(mag);
titleHeading = Lsm303d.getTiltHeading(mag, realAccel);
printValues();
delay(200); // seri okunabilirlik için gecikme
}
void printValues()
{
Serial.println("X,Y,Z ivmesi:");
for (int i=0; i<3; i++)
{
Serial.print(realAccel[i]);
Serial.println("g");
}
// karşılaştırmak için hem düz hem de eğim telafi edilmiş yönleri yazdır
Serial.println("Manyetik kuzey ile x ekseni arasındaki saat yönündeki açı: ");
Serial.print(heading, 3); // bu yalnızca sensör düz olduğunda çalışır
Serial.println(" derece");
Serial.print("Manyetik kuzey ile yatay düzlemde pozitif x ekseninin projeksiyonu arasındaki saat yönündeki açı: ");
Serial.print(titleHeading, 3); // eğim telafisinin ne kadar harika olduğunu görün?!
Serial.println(" derece");
}
- Adım 5: Seri monitörü açın, aşağıda gösterildiği gibi Renk Sensörünün çıktı sonucunu göreceksiniz:

- Adım 6: İvme değerlerini ve manyetik kuzey ile x ekseni arasındaki saat yönündeki açıyı görebilirsiniz
X/Y/Z, 3 eksenli ivmeyi gösterir ve ardından manyetik kuzey ile x ekseni arasındaki hesaplanan açıyı gösterir.
Ayrıca manyetik kuzey ile pozitif x ekseninin projeksiyonu arasındaki hesaplanan açıyı da gösterir.
LSM303 Raspberry Pi Kılavuzu
Aşağıdaki eğitim, Raspberry Pi 3 Model B kullanmaktadır, ancak Pi B/B+/A+/2/3 gibi diğer modeller de uygundur.
Başlamak için ihtiyaç duyacaklarınız:
-

Raspberry PI 3 Model B -

GrovePi_Plus -

Grove – 6 Eksenli İvmeölçer ve Pusula V2.0
Donanım yapılandırmaları:
- Adım 1: GrovePi_Plus’ı Raspberry’ye takın
- Adım 2: Grove -6-Axis İvmeölçer ve Pusula V2.0’ı GrovePi_Plus’ın I2C portuna bağlayın
- Adım 3: Raspberry’yi USB kablosu ile PC’ye bağlayın
Bağlantıları yaptıktan sonra görünüm şöyle olmalıdır:

Yazılım yapılandırmaları
- Adım 1: Geliştirme ortamını yapılandırmak için Yazılım Ayarlarını izleyin
- Adım 2: Github deposunu Git clone ile indirin
cd ~
git clone https://github.com/DexterInd/GrovePi.git
- Adım 3: Bu sensörü kullanmak için aşağıdaki komutları çalıştırın
cd ~/GrovePi/Software/Python/grove_6axis_acc_compass
python grove_6axis_accel_compass_example.py
İşte örneğin python kodu:
#!/usr/bin/env python
#
# GrovePi örneği, Grove - 6-Axis İvmeölçer&Pusula v2.0 için (http://www.seeedstudio.com.tr/depot/Grove-6Axis-AccelerometerCompass-v20-p-2476.html)
#
# GrovePi, Raspberry Pi ve Grove sensörlerini bağlar. GrovePi hakkında daha fazla bilgi edinebilirsiniz: http://www.dexterindustries.com/GrovePi
#
# Bu kütüphane hakkında bir sorunuz mu var? Forumlarda sorun: http://forum.dexterindustries.com/c/grovepi
#
'''
## Lisans
MIT Lisansı (MIT)
GrovePi, Raspberry Pi için Grove Sensörlerini bağlamak için açık kaynaklı bir platformdur.
Telif Hakkı (C) 2017 Dexter Industries
Bu yazılım ve ilgili belgeleri (bundan böyle "Yazılım" olarak anılacaktır) edinmiş olan herhangi bir kişiye, Yazılım üzerinde kısıtlama olmaksızın işlem yapma izni verilmektedir; bu, kullanma, kopyalama, değiştirme, birleştirme, yayınlama, dağıtma, alt lisans verme ve/veya Yazılımın kopyalarını satma haklarını içerir ve Yazılımın sağlandığı kişilerin de bunu yapmasına izin verilir, aşağıdaki koşullara tabi olarak:
Yukarıdaki telif hakkı bildirimi ve bu izin bildirimi, Yazılımın tüm kopyalarında veya önemli bölümlerinde yer almalıdır.
YAZILIM "OLDUĞU GİBİ" SAĞLANMAKTADIR, HERHANGİ BİR TÜR GARANTİ YAPILMAKSIZIN, AÇIK VEYA ZIMNİ, TİCARET ELVERİŞLİLİĞİ, BELİRLİ BİR AMACA UYGUNLUK VE HUKUKA AYKIRILIK DAHİL ANCAK BUNLARLA SINIRLI OLMAMAK ÜZERE. YAZARLAR VEYA TELİF HAKKI SAHİPLERİ, YAZILIMIN KULLANIMINDAN VEYA YAZILIMLA İLGİLİ HERHANGİ BİR İŞLEMDE HERHANGİ BİR TALEP, ZARAR VEYA DİĞER SORUMLULUKTAN SORUMLU DEĞİLDİR.
'''
import lsm303d
try:
acc_mag=lsm303d.lsm303d()
while True:
# İvmeölçer değerlerini al
acc=acc_mag.getRealAccel()
# Pusulanın hazır olmasını bekleyin
while True:
if acc_mag.isMagReady():
break
# Yönü oku
heading= acc_mag.getHeading()
print("X,Y,Z ivmesi %.3fg, %.3fg, %.3fg" %(acc[0],acc[1],acc[2]))
print("Yön %.3f derece\n" %(heading))
except IOError:
print("İvmeölçerden okuma yapılamadı, sensörü kontrol edin ve tekrar deneyin")
İşte sonuç:

Kaynaklar ve İleriye Gitme
- [Kütüphane] Arduino için 6-Axis Accelerometer&Compass v2.0 Kütüphanesi
- [Kütüphane] Raspberry Pi için 6-Axis Accelerometer&Compass v2.0 Kütüphanesi
- [Veri Sayfası] LSM303D veri sayfası
- [Eagle] 6-Axis Accelerometer&Compass v2.0 eagle dosyası
- [Projeler] 6-Axis Accelerometer&Compass v2.0 Projesi
- ADXL345 ve MEMS ivmeölçer hakkında daha fazla bilgi
Özet
Genel olarak, LSM303’ün standart 3 eksenli ivmeölçer ile birlikte 3D pusula sensörünü entegre etmesi, günlük uygulamalarda uygulanabilir daha geniş bir olasılık yelpazesini gerçekten açıyor. Bununla, hareket algılama projelerinizi kolayca yönlendirebilirsiniz!
Grove – 6 Axis Accelerometer&Compass v2.0 (LSM303D), Arduino ve Raspberry Pi ile entegrasyonu daha kolay olan LSM303 tabanlı bir modüldür!
MEMS ivmeölçer hakkında, özellikle ADXL serisi hakkında daha fazla bilgi edinmek istiyorsanız, bu makaleye göz atabilirsiniz!





