İçindekiler:

I2C Sensör Arayüzü ile Başlarken? - MMA8451'inizi ESP32 Kullanarak Arayüz: 8 Adım
I2C Sensör Arayüzü ile Başlarken? - MMA8451'inizi ESP32 Kullanarak Arayüz: 8 Adım

Video: I2C Sensör Arayüzü ile Başlarken? - MMA8451'inizi ESP32 Kullanarak Arayüz: 8 Adım

Video: I2C Sensör Arayüzü ile Başlarken? - MMA8451'inizi ESP32 Kullanarak Arayüz: 8 Adım
Video: I2C Protokolünü Tanıyalım | Sensörden Veriye - 4 - 2024, Temmuz
Anonim
I2C Sensör Arayüzü ile Başlarken? - ESP32'leri Kullanarak MMA8451'inizi Arayüz
I2C Sensör Arayüzü ile Başlarken? - ESP32'leri Kullanarak MMA8451'inizi Arayüz

Bu öğreticide, denetleyici (Arduino, ESP32, ESP8266, ESP12 NodeMCU) ile çalışan I2C cihazının (İvmeölçer) nasıl başlatılacağı, bağlanacağı ve elde edileceği hakkında her şeyi öğreneceksiniz.

Adım 1: I2C'ye Nasıl Başlanır - Inter IC İletişiminin Muhteşem Dünyası

Arduino, ESP Serisi, PIC, Rasberry PI vb. hepsi inanılmaz. Ama bir kez sahip olduğunuzda onunla ne yaparsınız?

En iyisi sensörler falan eklemek. Günümüzde birçok yeni teknoloji, bilgisayarın, telefonların, tabletlerin veya mikro denetleyicilerin sensörlerle konuşmasını sağlamak için I2C protokolünü kullanıyor. Akıllı telefonlar, telefonunuzun hangi yöne baktığını bilmek için o ivmeölçer sensörüyle konuşamasaydı daha az akıllı olurdu.

2. Adım: I2C'ye Genel Bakış

I2C, aynı veri yolu üzerinde birden fazla master ve slave'in bir arada bulunmasına izin veren seri, senkron, yarı çift yönlü bir iletişim protokolüdür. I2C veri yolu iki hattan oluşur: seri veri hattı (SDA) ve seri saat (SCL). Her iki hat da pull-up dirençleri gerektirir.

SDA (Seri Veri) – Master ve slave'in veri göndermesi ve alması için hat. SCL (Seri Saat) – Saat sinyalini taşıyan hat. Basitlik ve düşük üretim maliyeti gibi avantajlarla I2C, çoğunlukla düşük hızlı çevresel cihazların kısa mesafelerde (bir ayak içinde) iletişimi için kullanılır.

I2C hakkında daha fazla bilgi edinmek ister misiniz?……

Adım 3: I²C Sensörleri Nasıl Yapılandırılır

Projeye girmeden önce Sensörünüzün birkaç temel özelliğini anlamanız gerekir. Dalmadan önce kendinize bir fincan kahve koyun:)? …

I2C'nin büyük gücü, aynı dört kabloya çok sayıda sensör yerleştirebilmenizdir. Ancak, önceden yapılmış birkaç modülün bağlı olduğu üniteler için, devrelerden birkaç smd direncini çıkarmanız gerekebilir, aksi takdirde veri yolundaki çekme işlemi çok agresif hale gelebilir.

Veri Sayfasından hangi bilgileri istiyoruz?

  1. Sensör işlevselliği
  2. Pinouts ve pin işlevselliği
  3. Arayüz açıklaması (“I2c Adres Seçim tablosuna” bakmayı unutmayınız)
  4. Kayıtlar!!

Her şey yolunda, kolayca bulacaksınız ama Kayıtlar ?? KAYITLAR, bir I²C cihazının içindeki bellek konumlarıdır. Belirli bir sensörde kaç tane kayıt bulunduğunun ve bunların neyi kontrol ettiğinin veya içerdiğinin özetine kayıt haritası denir. Sensörün veri sayfasındaki bilgilerin çoğu, her bir kaydın nasıl çalıştığını açıklamakla ilgilidir ve bilgi nadiren doğrudan bir şekilde sunulduğu için okunması oldukça zahmetli olabilir.

Bununla ne demek istediğimi anlamanız için: Pek çok kayıt türü vardır ama bu giriş için bunları iki genel tipte gruplandıracağım: Kontrol ve Veri kayıtları.

1) Kontrol Kayıtları

Çoğu sensör, kontrol kayıtlarında saklanan değerlere göre nasıl çalıştıklarını değiştirir. Kontrol kayıtlarını, biraz 1'e ayarlayarak açtığınız ve o biti 0'a ayarlayarak kapattığınız Açma/Kapama anahtarları dizisi olarak düşünün. I²C çip tabanlı sensörler, bit gibi şeyler için genellikle bir düzine veya daha fazla operasyonel ayara sahiptir. Modlar, kesintiler, okuma-yazma kontrolü, derinlik, örnekleme hızı, gürültü azaltma vb., bu nedenle, gerçekten bir okuma yapmadan önce genellikle birkaç farklı kontrol kaydında bitleri ayarlamanız gerekir.

2) Veri kayıtları Bir kontrol kayıtlarının anahtar bankalarından farklı olarak, veri çıktı kayıtlarını, sadece ikili biçimde saklanan sayıları tutan kaplar olarak düşünüyorum. Yani Verileri bilmek istiyorsunuz, her zaman cihaz tanımlama, Durum kaydı vb. için kimi kaydettiğim gibi veri kayıtlarını okuyun.

Bu nedenle, bir I²C sensörünün başlatılması çok adımlı bir işlemdir ve doğru işlem sırası genellikle Veri Sayfasında basit bir işlem yerine ters yönde yazılı olarak açıklanır. liste asla “Bu sensörden bir okuma almak için (1), (2), (3), (4), vb. kaydı, bu diğer kontrol kaydında bit y ayarlamanız gerekir”.

Yine de her zaman bir veri sayfasının çoğu metinden daha etkileşimli olduğunu görüyorum. Belirli bir parça veya bilgi parçası için referans verecekseniz ve size tüm detayları, bağlantıları ve referansları verecekse. Sadece oturun ve tüm referanslarınızı çıkarmak için okuyun.:)

Adım 4: Hareketle Başlayın - İvmeölçer

Modern ivmeölçerler, Mikro Elektro-Mekanik Sistemler (MEMS) cihazlarıdır; bu, en küçük gadget'ların içindeki küçük bir çipe sığabilecekleri anlamına gelir. MEMS ivmeölçerler tarafından kullanılan ivmeyi ölçmek için bir yöntem, yaylar üzerinde asılı duran küçük bir iletken kütle kullanmaktır. Cihazın hızlanması, yayların gerilmesine veya büzülmesine neden olur ve iletken kütlenin sapması, yakındaki sabit plakalara kapasitansta bir değişiklik yoluyla ölçülebilir.

İvmeölçerler aşağıdaki özelliklerle belirtilir:

  1. Spesifikasyon şemalarında X, Y ve Z olarak etiketlenen birden üçe kadar eksen sayısı. Bazı ivmeölçerlerin 6 eksenli veya 9 eksenli olarak adlandırıldığını unutmayın, ancak bu sadece jiroskoplar ve/veya manyetometreler gibi diğer MEMS cihazlarıyla birlikte paketlendikleri anlamına gelir. Bu cihazların her birinin ayrıca üç ekseni vardır, bu nedenle 3, 6 veya 9 eksenli Atalet Ölçüm Birimleri (IMU'lar) vardır.
  2. Çıkış türü, analog veya dijital. Dijital ivmeölçer, hızlanma verilerini I2C veya SPI üzerinden okunabilen dijital bir temsile biçimlendirmekle ilgilenir.
  3. 1g'nin Dünya'nın yerçekiminden kaynaklanan ivme olduğu g's cinsinden ölçülen ivme aralığı.
  4. MCU'dan ham verileri analiz etmek için gereken hesaplamaların bazılarını boşaltabilen yardımcı işlemciler. Çoğu ivmeölçer, bir hızlanma eşiğini (şok) ve 0 g (serbest düşüş) durumunu tespit etmek için bazı basit kesme özelliklerine sahiptir. Diğerleri, MCU'ya daha anlamlı veriler sunmak için ham veriler üzerinde gelişmiş işlemler yapabilir.

Adım 5: Denetleyici ile Arayüz

ESP Mikrodenetleyicilerini trendde bildiğimiz için, örneğimiz için ESP32 kullanacağız. Yani önce bir Nodemcu-32'ye ihtiyacınız var.

Başka bir ESP kartınız veya hatta Arduino'nuz varsa endişelenmeyin!!! Arduino, ESP NodeMCU, ESP32'ler vb. için Geliştirme panolarınıza göre Arduino IDE'nizi ve konfigürasyonunuzu ayarlamanız yeterlidir. dijital İvmeölçer koparma panosu.

Ve birkaç atlama teli….

Adım 6: Bağlantılar

Bağlantılar
Bağlantılar

Ve işte bir düzen.

Yukarıdaki modülden Nodemcu-32s modülüme aşağıdaki bağlantıyı kullandım.

ESP32'ler -- Modül

3v3 -- Vin

Gnd -- Gnd

SDA 21 -- SDA

SCL 22 -- SCL

"Unutmayın, çoğu zaman tüm geliştirme kartları (çoğunlukla ESP'lerde) hangi pinlerin kullanıldığını belirlemeye yardımcı olacak net bir pinout'a sahip değildir! Bu nedenle, bağlantıdan önce, SDA ve SCL için olan pinleri kullanmak için kartınızın doğru pinlerini belirleyin."

7. Adım: Kod

Bunun için Adafruit kitaplığı gerekir

downloads.arduino.cc/libraries/github.com/adafruit/Adafruit_MMA8451_Library-1.1.0.zip adresinden

İndirin, açın ve örnekler klasörü bulacaksınız, klasörde Arduino IDE'nizde MMA8451demo'yu açın ve işte başlıyorsunuz….

kontrol cihazınızla MMA8451 sensör arayüzünüz için aşağıdaki kodu göreceksiniz

#Dahil etmek

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451(); void setup(void) { Serial.begin(9600); tel.başla(4, 5); /* NodeMCU'nun SDA=D1 ve SCL=D2'si ile i2c veriyoluna katıl */ Serial.println("Adafruit MMA8451 testi!"); if (!mma.begin()) { Serial.println("Başlatılamadı"); iken (1); } Serial.println("MMA8451 bulundu!"); mma.setRange(MMA8451_RANGE_2_G); Serial.print("Aralık = "); Serial.print(2 << mma.getRange()); Serial.println("G"); } void loop() { // 'ham' verileri 14 bitlik sayılarla okuyun mma.read(); Serial.print("X:\t"); Seri.baskı(mma.x); Serial.print("\tY:\t"); Seri.baskı(mma.y); Serial.print("\tZ:\t"); Seri.baskı(mma.z); Seri.println(); /* Yeni bir sensör olayı al */ensor_event_t olayı; mma.getEvent(&event); /* Sonuçları göster (hızlanma m/s^2 cinsinden ölçülür */ Serial.print("X: \t"); Serial.print(event.acceleration.x); Seri.print("\t"); Serial.print("Y:\t"); Serial.print(event.acceleration.y); Seri.print("\t"); Serial.print("Z:\t"); Serial.print(event.acceleration.z); Seri.print("\t"); Serial.println("m/s^2"); /* Sensörün yönünü al */ uint8_t o = mma.getOrientation(); switch (o) { case MMA8451_PL_PUF: Serial.println("Dikey Önde"); kırmak; case MMA8451_PL_PUB: Serial.println("Dikey Yukarı Arka"); kırmak; case MMA8451_PL_PDF: Serial.println("Portre Aşağı Ön"); kırmak; case MMA8451_PL_PDB: Serial.println("Arkadan Dikey Dikey"); kırmak; case MMA8451_PL_LRF: Serial.println("Yatay Sağ Ön"); kırmak; case MMA8451_PL_LRB: Serial.println("Yatay Sağ Arka"); kırmak; case MMA8451_PL_LLF: Serial.println("Manzara Sol Ön"); kırmak; case MMA8451_PL_LLB: Serial.println("Manzara Sol Arka"); kırmak; } Seri.println(); gecikme(1000); }

Kaydet, Doğrula ve Yükle……

Seri monitörü açın ve bunun gibi bir şey göreceksiniz, sensörü bu nedenle çeşitli okumalar hakkında hareket ettiriyordum.

X: -2166 Y: 1872 Z: 2186

X: -2166 Y: 1872 Z: 2186X: -4,92 Y: 5,99 Z: 4,87 m/s^2

Manzara Sol Ön

X: -224 Y: -2020 Z: 3188

X: -5.10 Y: -3.19 Z: 7.00 m/sn^2

Portre Yukarı Ön

Her şey olması gerektiği gibi gittiyse, artık I2C'nin temellerine ve cihazınızı nasıl bağlayacağınıza sahipsiniz.

Ama cihaz Çalışmıyor??!

Sadece bir sonraki adıma geçin……

Adım 8: I2C Cihazınızın Çalışmasını Sağlayın.

I2C cihazının çalışması için temel adımlar

araştıralım….

  • Kablolama doğru..(tekrar kontrol edin)
  • Program doğru..(Evet deneme örneği..)

Çözmek için aşamalarla başlayın…..

Aşama 1: Cihaz adresini kontrol etmek için I2C cihaz tarayıcı programını çalıştırın ve önce I2C cihazınız tamamdır

Krokiyi indirebilir ve çıktıyı kontrol edebilirsiniz.

Sonuç - Cihaz çalışıyor ve Sensör adresi doğru

I2C tarayıcı. Taranıyor…

Bulunan adres: 28 (0x1C) Bitti. 1 cihaz bulundu.

Aşama 2: Sensör kitaplığını kontrol edin

Adafruit_MMA8451.h dosyasını açın ve cihaz adresini bulun

Sonuç - Adres benim cihazımdan farklı mı??.

/*============================================== ========================= I2C ADRES/BITS --------------------- -------------------------------------------------- */ #define MMA8451_DEFAULT_ADDRESS (0x1D) //!< Varsayılan MMA8451 I2C adresi, A GND ise 0x1C /*======================= ================================================= */

Yap - Dosyayı not defterinden düzenle (adresi değiştir) + Kaydet + IDE'yi yeniden başlat

Çalışıyor. Okumalarınızı alabilirsiniz.

Eşik değil…..???

Aşama 3: Wire.begin'in üzerine yazıldığını kontrol edin?

Adafruit_MMA8451.c dosyasını açın ve Wire.begin'i bulun.

Sonuç - Bu ifadenin üzerine yazılır.

/******************************************************** *************************//*! @brief Donanımı ayarlar (katsayı değerlerini okur, vb.) */ /*************************************** ****************************************/ bool Adafruit_MMA8451::başla(uint8_t i2caddr) { Wire.begin(); _i2caddr = i2caddr;

Yap - Dosyayı not defterinden düzenle (yorum ifadesi) + Kaydet + IDE'yi yeniden başlat

Ve nihayet Cihaz Çalışıyor☺…

Bu öğreticiyi neredeyse aşırı yükledim çünkü asıl amacı nasıl başlatılacağını açıklamak, veri sayfasından veri almak, bağlanmak ve I2C cihazının çok basit bir örnekle çalışmasını sağlamaktı. Umarım her şey olması gerektiği gibi gider ve Sensörünüzü başlatmanız faydalı olacaktır.

Önerilen: