Sadržaj:

Početak rada sa sučeljem senzora I2C ?? - Povežite svoj MMA8451 pomoću ESP32: 8 koraka
Početak rada sa sučeljem senzora I2C ?? - Povežite svoj MMA8451 pomoću ESP32: 8 koraka

Video: Početak rada sa sučeljem senzora I2C ?? - Povežite svoj MMA8451 pomoću ESP32: 8 koraka

Video: Početak rada sa sučeljem senzora I2C ?? - Povežite svoj MMA8451 pomoću ESP32: 8 koraka
Video: #18 Расширенные входы и выходы I2C | Внешний ПЛК Arduino 2024, Srpanj
Anonim
Početak rada sa sučeljem senzora I2C ?? - Povežite svoj MMA8451 pomoću ESP32
Početak rada sa sučeljem senzora I2C ?? - Povežite svoj MMA8451 pomoću ESP32

U ovom ćete vodiču naučiti sve o tome kako pokrenuti, povezati i nabaviti I2C uređaj (akcelerometar) koji radi s kontrolerom (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Korak 1: Kako započeti s I2C - veličanstvenim svijetom komunikacije između IC mreže

Arduino, ESP serija, PIC, Rasberry PI itd. Su nevjerojatni. Ali što učiniti s njim kad ga imate?

Najbolje je dodati senzore i slično. Danas mnoge vruće nove tehnologije koriste I2C protokol kako bi omogućile računalu, telefonima, tabletima ili mikrokontrolerima da govore o senzorima. Pametni telefoni bili bi manje pametni da ne mogu razgovarati s tim senzorom akcelerometra kako bi znali na koju stranu je vaš telefon.

Korak 2: Pregled I2C -a

I2C je serijski, sinkronizirani, poludupleksni komunikacijski protokol koji omogućuje koegzistenciju više master i slave uređaja na istoj sabirnici. Sabirnica I2C sastoji se od dvije linije: serijske podatkovne linije (SDA) i serijskog takta (SCL). Obje linije zahtijevaju pull-up otpornike.

SDA (serijski podaci) - linija za master i slave za slanje i primanje podataka. SCL (Serijski sat) - Linija koja nosi signal sata. Uz prednosti kao što su jednostavnost i niski troškovi proizvodnje, I2C se uglavnom koristi za komunikaciju perifernih uređaja male brzine na kratkim udaljenostima (unutar jedne noge).

Želite li saznati više o I2C? ……

Korak 3: Kako konfigurirati I²C senzore

Prije nego što krenete u projekt, morate razumjeti nekoliko osnova vašeg senzora. Pa si natočite šalicu kave prije nego što zaronite:)? …

Velika snaga I2C -a je u tome što možete staviti toliko senzora na iste četiri žice. No, za jedinice s nekoliko unaprijed izrađenih modula spojenih, možda ćete morati ukloniti nekoliko smd otpornika iz prekida, inače bi povlačenje na sabirnici moglo postati previše agresivno.

Koje podatke želimo od podatkovne tablice ??

  1. Funkcionalnost senzora
  2. Pinouts i pin funkcije
  3. Opis sučelja (ne propustite pogledati "Tablu za odabir adrese I2c")
  4. Registri !!

Sve je u redu lako ćete to pronaći ali Registri ?? REGISTRI su jednostavno memorijske lokacije unutar I²C uređaja. Sažetak broja registara u datom senzoru i onoga što kontroliraju ili sadrže naziva se mapa registra. Većina podataka u podatkovnom listu senzora govori o objašnjavanju kako svaki registar funkcionira, a oni mogu biti prilično pametan za čitanje jer se informacije rijetko prezentiraju na izravan način.

Da bih vam dao dojam o tome što želim reći: postoji mnogo vrsta registara, ali za ovaj uvod ću ih grupirati u dvije opće vrste: kontrolne i podatkovne registre.

1) Kontrolni registri

Većina senzora mijenja način rada na temelju vrijednosti pohranjenih u kontrolnim registrima. Zamislite upravljačke registre kao sklopove prekidača za uključivanje/isključivanje, koje uključujete postavljanjem bita na 1 i isključujete postavljanjem tog bita na 0. Senzori temeljeni na čipu I²C često imaju desetak ili više operativnih postavki za stvari poput Načini rada, prekidi, kontrola čitanja i pisanja, dubina, brzina uzorkovanja, smanjenje šuma itd., Tako da obično morate postaviti bitove u nekoliko različitih kontrolnih registara prije nego što zaista možete očitati.

2) Podatkovni registri Za razliku od kontrolnih registara sklopki, mislim da su izlazni registri podataka spremnici s brojevima koji su slučajno pohranjeni u binarnom obliku. Dakle, želite znati Podatke, uvijek čitajte registre podataka kao što sam tko sam registriran za identifikaciju uređaja, registar statusa itd.

Dakle, inicijalizacija I²C senzora je proces u više koraka, a ispravan redoslijed operacija često se objašnjava pisanim putem u obrnutom smjeru, umjesto jednostavno u podatkovnoj tablici. popis nikada ne kaže "Da biste dobili očitanje s ovog senzora, učinite (1), (2), (3), (4) itd.", ali ćete pronaći opise bitova upravljačkog registra koji govore "prije nego postavite bit x u ovo registar morate postaviti bit y u ovaj drugi upravljački registar”.

Ipak, uvijek smatram da je podatkovni list interaktivniji od većine teksta. ako ćete ga referencirati za određeni dio ili dijelove podataka i dati će vam sve pojedinosti, veze i reference. Samo sjednite i čitajte kako biste dobili sve svoje reference.:)

Korak 4: Počnite s kretanjem - mjerač ubrzanja

Suvremeni mjerači ubrzanja su uređaji za mikro elektromehaničke sustave (MEMS), što znači da se mogu uklopiti u mali čip unutar najmanjih naprava. Jedna metoda za mjerenje ubrzanja koja koriste MEMS akcelerometri je korištenje male vodljive mase suspendirane na oprugama. Ubrzanje uređaja uzrokuje rastezanje ili skupljanje opruga, a otklon vodljive mase može se mjeriti promjenom kapaciteta na obližnje, fiksne ploče.

Akcelerometri su specificirani sljedećim značajkama:

  1. Broj osi, od jedne do tri osi, označene X, Y i Z u dijagramima specifikacija. Imajte na umu da se neki mjerači ubrzanja nazivaju 6-osni ili 9-osni, ali to samo znači da su povezani s drugim MEMS uređajima, poput žiroskopa i/ili magnetometara. Svaki od tih uređaja također ima tri osi, zbog čega postoje 3, 6 ili 9-osne inercijske mjerne jedinice (IMU).
  2. Vrsta izlaza, analogni ili digitalni. Digitalni mjerač ubrzanja brine se o oblikovanju podataka o ubrzanju u digitalni prikaz koji se može očitati preko I2C ili SPI.
  3. Raspon ubrzanja mjereno u g -ima, gdje je 1g ubrzanje uslijed Zemljine teže.
  4. Koprocesori koji mogu iskrcati neke izračune potrebne za analizu sirovih podataka iz MCU -a. Većina mjerača ubrzanja ima neke jednostavne mogućnosti prekida za otkrivanje praga ubrzanja (udar) i uvjeta 0 g (slobodni pad). Drugi mogu izvršiti naprednu obradu sirovih podataka kako bi MCU -u ponudili značajnije podatke.

Korak 5: Sučelje s kontrolerom

Budući da poznajemo ESP mikrokontrolere u trendu, upotrijebit ćemo ESP32 za naš primjer. Dakle, prvo vam je potreban Nodemcu-32.

Bez brige ako imate neke druge ESP ploče ili čak Arduino !!! Vi samo trebate postaviti svoj Arduino IDE i konfiguraciju prema vašim razvojnim pločama, za Arduino, ESP NodeMCU, ESP32 itd.… Također će vam trebati neke vrste I2C dijelova, obično na razbijačkoj ploči. U ovom ću vodiču koristiti MMA8451 digitalna ploča za mjerenje akcelerometra.

I nekoliko kratkospojnih žica….

Korak 6: Veze

Veze
Veze

I evo rasporeda.

Koristio sam sljedeću vezu iz gornjeg modula sa svojim modulom Nodemcu-32s.

ESP32s - Modul

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Upamtite, većinu vremena sve razvojne ploče (uglavnom u ESP -ovima) nemaju dobar jasan pinout koji bi vam pomogao odrediti koji se pinovi koriste! Zato prije povezivanja identificirajte ispravne pinove na ploči kako biste koristili koje igle su za SDA i SCL."

Korak 7: Kodirajte

Za to je potrebna biblioteka Adafruit

s

Preuzmite, raspakirajte i pronaći ćete mapu s primjerima, u mapi samo otvorite MMA8451demo u svom Arduino IDE -u i evo ga….

vidjet ćete sljedeći kôd za sučelje senzora MMA8451 s vašim kontrolerom

#uključi

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * pridružite se sabirnici i2c sa SDA = D1 i SCL = D2 NodeMCU */ Serial.println ("Adafruit MMA8451 test!"); if (! mma.begin ()) {Serial.println ("Nije moguće započeti"); while (1); } Serial.println ("MMA8451 pronađen!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Raspon ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Čitanje 'sirovih' podataka u 14-bitnim brojevima mma.read (); Serial.print ("X: / t"); Serijski.ispis (mma.x); Serial.print ("\ tY: / t"); Serijski.tisak (mma.y); Serial.print ("\ tZ: / t"); Serijski.ispis (mma.z); Serial.println (); / * Nabavite novi događaj senzora */ sensors_event_t događaj; mma.getEvent (& event); / * Prikažite rezultate (ubrzanje se mjeri u 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"); / * Dobijte orijentaciju senzora */ uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Portret sprijeda"); pauza; kućište MMA8451_PL_PUB: Serial.println ("Portret gore natrag"); pauza; kućište MMA8451_PL_PDF: Serial.println ("Portret dolje sprijeda"); pauza; kućište MMA8451_PL_PDB: Serial.println ("Portret dolje natrag"); pauza; slučaj MMA8451_PL_LRF: Serial.println ("Landscape Right Front"); pauza; slučaj MMA8451_PL_LRB: Serial.println ("Landscape Right Back"); pauza; kućište MMA8451_PL_LLF: Serial.println ("Landscape Left Front"); pauza; slučaj MMA8451_PL_LLB: Serial.println ("Pejzaž lijevo natrag"); pauza; } Serial.println (); kašnjenje (1000); }

Spremi, potvrdi i učitaj ……

Otvorite serijski monitor i vidjet ćete nešto poput ovoga, kretao sam senzor otkud i različita očitanja

X: -2166 Y: 1872 Z: 2186

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

Pejzaž lijevo sprijeda

X: -224 Y: -2020 Z: 3188

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

Portret sprijeda

Pa ako je sve prošlo kako treba, sada imate osnove I2C -a i Kako spojiti svoj uređaj.

Ali uređaj ne radi ??

Samo idite na sljedeći korak ……

Korak 8: Uključite svoj I2C uređaj u rad

Osnovni koraci za rad I2C uređaja

Hajde da istražimo….

  • Ožičenje je ispravno (provjerite ponovo)
  • Program je točan.. (Da, to je testni primjer..)

Počnite s fazama za rješavanje …….

Korak 1: Pokrenite program za skeniranje uređaja I2C kako biste provjerili adresu uređaja i prvo je vaš I2C uređaj u redu

Možete preuzeti skicu i provjeriti izlaz.

Rezultat - Uređaj radi i adresa senzora je točna

I2C skener. Skeniranje …

Pronađena adresa: 28 (0x1C) Gotovo. Pronađeno je 1 uređaj (a).

Faza 2: Provjerite biblioteku senzora

Otvorite datoteku Adafruit_MMA8451.h i pronađite adresu uređaja

Rezultat - Adresa se razlikuje od mog uređaja ??

/*================================================ ========================= I2C ADRESA/BITOVI --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Zadana MMA8451 I2C adresa, ako je A GND, njegova 0x1C /*======================= ================================================== */

Do - Uredi datoteku iz bilježnice (promijeni adresu) + Spremi + Ponovo pokreni IDE

Radi. Možete pročitati.

Neće….. ???

Korak 3: Provjerite je li Wire.begin prepisan?

Otvorite datoteku Adafruit_MMA8451.c i pronađite Wire.begin.

Rezultat - Ova izjava je prebrisana

/*********************************************** ************************* //*! @brief Postavlja HW (čita vrijednosti koeficijenata itd.)* / / ********************************** ****************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Do - Uredi datoteku iz bilježnice (izjava o komentaru) + Spremi + Ponovo pokreni IDE

I konačno uređaj počinje raditi☺…

Skoro sam preopteretio ovaj vodič jer mu je glavni cilj bio objasniti Kako započeti, dobiti podatke iz podatkovne tablice, povezati se i omogućiti rad I2C uređaja s vrlo osnovnim primjerom. Nadamo se da će sve ići kako treba, a bit će i korisno pokrenuti vaš senzor.

Preporučeni: