Sommario:

Iniziare con l'interfaccia del sensore I2C?? - Interfaccia il tuo MMA8451 utilizzando ESP32: 8 passaggi
Iniziare con l'interfaccia del sensore I2C?? - Interfaccia il tuo MMA8451 utilizzando ESP32: 8 passaggi

Video: Iniziare con l'interfaccia del sensore I2C?? - Interfaccia il tuo MMA8451 utilizzando ESP32: 8 passaggi

Video: Iniziare con l'interfaccia del sensore I2C?? - Interfaccia il tuo MMA8451 utilizzando ESP32: 8 passaggi
Video: ARDUINO ITA - TUTORIAL BASE #16: Il display LCD con interfaccia I2C 2024, Luglio
Anonim
Iniziare con l'interfaccia del sensore I2C?? - Interfaccia il tuo MMA8451 usando ESP32s
Iniziare con l'interfaccia del sensore I2C?? - Interfaccia il tuo MMA8451 usando ESP32s

In questo tutorial imparerai tutto su come avviare, connettere e far funzionare il dispositivo I2C (accelerometro) con il controller (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Passaggio 1: come iniziare con I2C - Magnifico mondo della comunicazione Inter IC

Arduino, ESP Series, PIC, Rasberry PI, ecc. sono tutti incredibili. Ma cosa ne fai una volta che ne hai uno?

La cosa migliore è aggiungere sensori e simili. Oggi gran parte della nuova tecnologia utilizza il protocollo I2C per consentire a computer, telefoni, tablet o microcontrollori di comunicare con i sensori. Gli smartphone sarebbero meno intelligenti se non potessero parlare con quel sensore dell'accelerometro per sapere in che direzione è rivolto il tuo telefono.

Passaggio 2: Panoramica su I2C

I2C è un protocollo di comunicazione seriale, sincrono, half-duplex che consente la coesistenza di più master e slave sullo stesso bus. Il bus I2C è costituito da due linee: linea dati seriale (SDA) e orologio seriale (SCL). Entrambe le linee richiedono resistori di pull-up.

SDA (Serial Data) – La linea per il master e lo slave per inviare e ricevere dati. SCL (Serial Clock) – La linea che trasporta il segnale di clock. Con vantaggi quali semplicità e basso costo di produzione, I2C viene utilizzato principalmente per la comunicazione di dispositivi periferici a bassa velocità su brevi distanze (entro un piede).

Vuoi saperne di più su I2C?……

Passaggio 3: come configurare i sensori I²C

Prima di entrare nel progetto, è necessario comprendere alcune nozioni di base sul sensore. Quindi versati una tazza di caffè prima di tuffarti:)? …

Il grande punto di forza di I2C è che puoi mettere tanti sensori sugli stessi quattro fili. Ma per le unità con diversi moduli prefabbricati collegati, potrebbe essere necessario rimuovere alcuni resistori smd dai breakout, altrimenti il pull-up sul bus potrebbe diventare troppo aggressivo.

Quali informazioni vogliamo da Datasheet??

  1. Funzionalità del sensore
  2. Pinout e funzionalità dei pin
  3. Descrizione dell'interfaccia (da non perdere la "tabella di selezione degli indirizzi I2c")
  4. Registri!!

Va tutto bene lo troverai facilmente ma Registri?? I REGISTRI sono semplicemente locazioni di memoria all'interno di un dispositivo I²C. Il riepilogo di quanti registri ci sono in un dato sensore e cosa controllano o contengono è chiamato mappa dei registri. La maggior parte delle informazioni sulla scheda tecnica del sensore riguarda la spiegazione del funzionamento di ciascun registro e possono essere piuttosto una fatica da leggere perché le informazioni vengono raramente presentate in modo diretto.

Per darti un'idea di cosa intendo con questo: ci sono molti tipi di registri, ma per questa introduzione li raggrupperò in due tipi generali: registri di controllo e dati.

1) Registri di controllo

La maggior parte dei sensori cambia il modo in cui funzionano in base ai valori memorizzati nei registri di controllo. Pensa ai registri di controllo come banchi di interruttori On/Off, che accendi impostando un bit su 1 e disattivi impostando quel bit su 0. I sensori basati su chip I²C hanno spesso una dozzina o più impostazioni operative per cose come bit- Modalità, interruzioni, controllo lettura-scrittura, profondità, velocità di campionamento, riduzione del rumore, ecc., quindi di solito è necessario impostare bit in diversi registri di controllo prima di poter effettivamente eseguire una lettura.

2) Registri di dati A differenza di un banco di interruttori di registri di controllo, penso ai registri di uscita dei dati come contenitori che contengono numeri che vengono semplicemente memorizzati in forma binaria. Quindi vuoi conoscere i dati, leggi sempre i registri dei dati come chi sono io registro per l'identificazione del dispositivo, registro di stato ecc.

Quindi, l'inizializzazione di un sensore I²C è un processo in più fasi e l'ordine corretto delle operazioni è spesso spiegato per iscritto nella direzione inversa, invece che in un semplice foglio dati. lista che non dice mai "Per ottenere una lettura da questo sensore, fai (1), (2), (3), (4), ecc.", ma trovi le descrizioni dei bit del registro di controllo che dicono "prima di impostare il bit x in questo registro devi impostare il bit y in questo altro registro di controllo”.

Tuttavia, trovo sempre che una scheda tecnica sia più interattiva della maggior parte del testo. se lo farai riferimento per un pezzo o informazioni specifiche e ti darà tutti i dettagli, le connessioni e i riferimenti. Siediti e leggi per ottenere tutti i tuoi riferimenti.:)

Passaggio 4: Inizia con il movimento - Accelerometro

I moderni accelerometri sono dispositivi Micro Electro-Mechanical Systems (MEMS), il che significa che sono in grado di adattarsi a un piccolo chip all'interno del più piccolo dei gadget. Un metodo per misurare l'accelerazione impiegato dagli accelerometri MEMS consiste nell'utilizzare una minuscola massa conduttiva sospesa su molle. L'accelerazione del dispositivo provoca l'allungamento o la contrazione delle molle e la deflessione della massa conduttiva può essere misurata attraverso una variazione di capacità alle piastre fisse vicine.

Gli accelerometri sono specificati dalle seguenti caratteristiche:

  1. Il numero di assi, da uno a tre assi, etichettati X, Y e Z nei diagrammi delle specifiche. Nota che alcuni accelerometri sono chiamati 6 assi o 9 assi, ma ciò significa semplicemente che sono in bundle con altri dispositivi MEMS come giroscopi e/o magnetometri. Ciascuno di questi dispositivi ha anche tre assi, motivo per cui esistono unità di misura inerziale (IMU) a 3, 6 o 9 assi.
  2. Il tipo di uscita, analogica o digitale. Un accelerometro digitale si occupa di formattare i dati di accelerazione in una rappresentazione digitale che può essere letta su I2C o SPI.
  3. L'intervallo di accelerazione misurato in g, dove 1g è l'accelerazione dovuta alla gravità terrestre.
  4. Coprocessori in grado di scaricare alcuni dei calcoli necessari per analizzare i dati grezzi dall'MCU. La maggior parte degli accelerometri ha alcune semplici capacità di interruzione per rilevare una soglia di accelerazione (shock) e una condizione di 0-g (caduta libera). Altri possono eseguire elaborazioni avanzate sui dati grezzi per offrire dati più significativi all'MCU.

Passaggio 5: interfaccia con il controller

Poiché conosciamo i microcontrollori ESP in tendenza, utilizzeremo ESP32 per il nostro esempio. Quindi prima hai bisogno di un Nodemcu-32s.

Non preoccuparti se hai altre schede ESP o anche Arduino!!! Devi solo impostare il tuo IDE Arduino e la configurazione secondo le tue schede di sviluppo, per Arduino, ESP NodeMCU, ESP32 ecc. Avrai anche bisogno di qualche tipo di parti I2C, di solito su una scheda breakout. In questo tutorial userò MMA8451 scheda di sblocco dell'accelerometro digitale.

E pochi ponticelli….

Passaggio 6: Connessioni

Connessioni
Connessioni

Ed ecco un layout.

Ho usato la seguente connessione dal modulo sopra al mio modulo Nodemcu-32s.

ESP32s -- Modulo

3v3 -- Vin

Gnd -- Gnd

SDA 21 -- SDA

SCL 22 -- SCL

"Ricorda, il più delle volte non tutte le schede di sviluppo (principalmente negli ESP) hanno un buon pinout chiaro per aiutare a determinare quali pin vengono utilizzati !! Quindi, prima della connessione, identifica i pin corretti della tua scheda per utilizzare quali pin sono per SDA e SCL."

Passaggio 7: codice

Ciò richiede la libreria Adafruit

da

Scarica, decomprimi e troverai la cartella degli esempi, nella cartella basta aprire MMA8451demo nel tuo IDE Arduino ed ecco fatto….

vedrai il seguente codice per l'interfaccia del tuo sensore MMA8451 con il tuo controller

#includere

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451(); void setup(void) { Serial.begin(9600); Wire.begin(4, 5); /* unisci il bus i2c con SDA=D1 e SCL=D2 di NodeMCU */ Serial.println("Adafruit MMA8451 test!"); if (! mma.begin()) { Serial.println("Impossibile iniziare"); mentre (1); } Serial.println("MMA8451 trovato!"); mma.setRange(MMA8451_RANGE_2_G); Serial.print("Intervallo = "); Serial.print(2 << mma.getRange()); Serial.println("G"); } void loop() { // Legge i dati 'grezzi' in conteggi a 14 bit mma.read(); Serial.print("X:\t"); Serial.print(mma.x); Serial.print("\tY:\t"); Serial.print(mma.y); Serial.print("\tZ:\t"); Serial.print(mma.z); Serial.println(); /* Ottieni un nuovo evento sensore */ sensor_event_t event; mma.getEvent(&event); /* Visualizza i risultati (l'accelerazione è misurata in m/s^2) */ Serial.print("X: \t"); Serial.print(event.acceleration.x); Serial.print("\t"); Serial.print("Y: \t"); Serial.print(event.acceleration.y); Serial.print("\t"); Serial.print("Z: \t"); Serial.print(event.acceleration.z); Serial.print("\t"); Serial.println("m/s^2 "); /* Ottieni l'orientamento del sensore */ uint8_t o = mma.getOrientation(); switch (o) { case MMA8451_PL_PUF: Serial.println("Portrait Up Front"); rottura; case MMA8451_PL_PUB: Serial.println("Portrait Up Back"); rottura; case MMA8451_PL_PDF: Serial.println("Ritratto in basso davanti"); rottura; case MMA8451_PL_PDB: Serial.println("Portrait Down Back"); rottura; case MMA8451_PL_LRF: Serial.println("Paesaggio anteriore destro"); rottura; case MMA8451_PL_LRB: Serial.println("Paesaggio posteriore destro"); rottura; case MMA8451_PL_LLF: Serial.println("Paesaggio anteriore sinistro"); rottura; case MMA8451_PL_LLB: Serial.println("Paesaggio posteriore sinistro"); rottura; } Serial.println(); ritardo(1000); }

Salva, verifica e carica……

Apri il monitor seriale e vedrai qualcosa del genere, stavo spostando il sensore da qui le varie letture

X: -2166 Y: 1872 Z: 2186

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

Orizzontale anteriore sinistro

X: -224 Y: -2020 Z: 3188

X: -5,10 Y: -3,19 Z: 7,00 m/s^2

Ritratto in primo piano

Bene, se tutto è andato come dovrebbe, ora hai le basi di I2C e come connettere il tuo dispositivo.

Ma il dispositivo non funziona??

Basta andare con il prossimo passo……

Passaggio 8: fai funzionare il tuo dispositivo I2C

Passaggi di base per far funzionare il dispositivo I2C

Indaghiamo….

  • Il cablaggio è corretto.. (controlla di nuovo)
  • Il programma è corretto.. (Sì, è un esempio di test..)

Inizia con le fasi da risolvere…..

Fase 1: eseguire il programma di scansione del dispositivo I2C per controllare l'indirizzo del dispositivo e prima il dispositivo I2C è a posto

Puoi scaricare lo schizzo e controllare l'output.

Risultato: il dispositivo funziona e l'indirizzo del sensore è corretto

scanner I2C. Scansione in corso…

Indirizzo trovato: 28 (0x1C) Fatto. Trovati 1 dispositivo/i.

Fase 2: controllare la libreria dei sensori

Apri il file Adafruit_MMA8451.h e trova l'indirizzo del dispositivo

Risultato - L'indirizzo è diverso dal mio dispositivo??

/*================================================ ========================= INDIRIZZO/BIT I2C --------------------- --------------------------------------------------- */ #define MMA8451_DEFAULT_ADDRESS (0x1D) //!< Indirizzo I2C MMA8451 predefinito, se A è GND, è 0x1C /*======================= ================================================== */

Fai - Modifica file dal blocco note (cambia indirizzo) + Salva + Riavvia IDE

Funziona. Puoi ottenere le tue letture.

Davanzale no…..???

Fase 3: Check Wire.begin viene sovrascritto?

Apri il file Adafruit_MMA8451.c e trova Wire.begin.

Risultato: questa affermazione viene sovrascritta

/************************************************** *************************//*! @brief Imposta l'HW (legge i valori dei coefficienti, ecc.) */ /*********************************** ****************************************/ bool Adafruit_MMA8451::begin(uint8_t i2caddr) { Wire.begin(); _i2caddr = i2caddr;

Fai - Modifica file dal blocco note (commento) + Salva + Riavvia IDE

E infine il dispositivo sta funzionando☺…

Ho quasi sovraccaricato questo tutorial perché il suo obiettivo principale era spiegare come iniziare, ottenere dati dal foglio dati, connettere e far funzionare il dispositivo I2C con un esempio molto semplice. Spero che tutto andrà come dovrebbe e sarà utile avviare il tuo sensore.

Consigliato: