Kazalo:

Kako začeti z vmesnikom senzorja I2C ?? - Vmesnik vašega MMA8451 z uporabo ESP32: 8 korakov
Kako začeti z vmesnikom senzorja I2C ?? - Vmesnik vašega MMA8451 z uporabo ESP32: 8 korakov

Video: Kako začeti z vmesnikom senzorja I2C ?? - Vmesnik vašega MMA8451 z uporabo ESP32: 8 korakov

Video: Kako začeti z vmesnikom senzorja I2C ?? - Vmesnik vašega MMA8451 z uporabo ESP32: 8 korakov
Video: Введение в LCD2004 ЖК-дисплей с модулем I2C для Arduino 2024, Julij
Anonim
Kako začeti z vmesnikom senzorja I2C ?? - Vmesnik vašega MMA8451 z uporabo ESP32
Kako začeti z vmesnikom senzorja I2C ?? - Vmesnik vašega MMA8451 z uporabo ESP32

V tej vadnici boste izvedeli vse o tem, kako zagnati, povezati in pridobiti napravo I2C (merilnik pospeška), ki deluje s krmilnikom (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

1. korak: Kako začeti z I2C - Veličastni svet komunikacije med IC

Arduino, serija ESP, PIC, Rasberry PI itd. So neverjetni. Kaj pa storite z njim, ko ga imate?

Najbolje je dodati senzorje in podobno. Danes veliko vroče nove tehnologije uporablja protokol I2C, ki računalniku, telefonom, tabličnim računalnikom ali mikrokrmilnikom omogoča, da govorijo o senzorjih. Pametni telefoni bi bili manj pametni, če se s tem senzorjem merilnika pospeška ne bi mogli pogovoriti, v katero smer je obrnjen vaš telefon.

2. korak: Pregled I2C

I2C je serijski, sinhroni, poldupleksni komunikacijski protokol, ki omogoča soobstoj več glavnih in podrejenih na istem vodilu. Vodilo I2C je sestavljeno iz dveh vrstic: serijske podatkovne linije (SDA) in serijske ure (SCL). Obe liniji zahtevata vlečne upore.

SDA (Serial Data) - Vrstica za nadrejeno in pomožno enoto za pošiljanje in sprejemanje podatkov. SCL (Serijska ura) - Linija, ki nosi signal ure. S prednostmi, kot sta preprostost in nizki proizvodni stroški, se I2C večinoma uporablja za komunikacijo perifernih naprav z nizko hitrostjo na kratke razdalje (znotraj ene noge).

Želite izvedeti več o I2C? ……

3. korak: Kako konfigurirati senzorje I²C

Preden se lotite projekta, morate razumeti nekaj osnov vašega senzorja. Torej si natočite skodelico kave, preden se potopite:)? …

Velika moč I2C je, da lahko na iste štiri žice postavite toliko senzorjev. Toda za enote z več vnaprej pripravljenimi moduli boste morda morali odstraniti nekaj smd uporov iz prekinitev, sicer lahko vlečenje na vodilu postane preveč agresivno.

Kakšne podatke želimo od podatkovnega lista ??

  1. Funkcionalnost senzorja
  2. Funkcije pinouts in pin
  3. Opis vmesnika (ne pozabite pogledati »Tabele za izbiro naslovov I2c«)
  4. Registri !!

Vse je v redu, boste zlahka našli, ampak Registri ?? REGISTRI so preprosto pomnilniške lokacije v napravi I²C. Povzetek, koliko registrov je v danem senzorju, in kaj nadzorujejo ali vsebujejo, se imenuje zemljevid registra. Večina podatkov na podatkovnem listu senzorja govori o razlagi delovanja vsakega registra, zato jih je mogoče prebrati, ker so informacije redko predstavljene neposredno.

Da bi razumeli, kaj mislim s tem: Obstaja veliko vrst registrov, toda za ta uvod jih bom združil v dve splošni vrsti: nadzorne in podatkovne registre.

1) Nadzorni registri

Večina senzorjev spreminja način delovanja glede na vrednosti, shranjene v nadzornih registrih. Pomislite na kontrolne registre kot na stikala za vklop/izklop, ki jih vklopite tako, da nastavite bit na 1 in izklopite z nastavitvijo tega bita na 0. Senzorji na osnovi čipov I²C imajo pogosto ducat ali več operativnih nastavitev za stvari, kot so bit- Načini, prekinitve, nadzor branja in pisanja, globina, hitrost vzorčenja, zmanjšanje hrupa itd., Zato morate ponavadi nastaviti bite v več različnih kontrolnih registrih, preden lahko dejansko odčitate.

2) Podatkovni registri Za razliko od krmilnih registrov, ki se nanašajo na stikala, menim, da so izhodni registri podatkov zabojniki, ki vsebujejo številke, ki so slučajno shranjene v binarni obliki. Če želite vedeti Podatki, vedno preberite podatkovne registre, na primer kdo sem, da se registriram za identifikacijo naprave, register statusa itd.

Torej je inicializacija senzorja I²C večstopenjski proces in pravilen vrstni red operacij je pogosto razložen v obratni smeri, namesto da bi bil preprost v podatkovnem listu. seznam nikoli ne pravi "Če želite odčitati ta senzor, naredite (1), (2), (3), (4) itd.", vendar najdete opise bitov kontrolnega registra, ki pravijo "preden nastavite bit x v tem register, morate nastaviti bit y v tem drugem nadzornem registru”.

Še vedno se mi zdi podatkovni list bolj interaktiven kot večina besedila. če se boste nanjo sklicevali za določen podatek ali podatke, vam bo dal vse podrobnosti, povezave in reference. Samo sedite in preberite, da dobite vse svoje reference.:)

4. korak: Začnite z gibanjem - merilnikom pospeška

Sodobni merilniki pospeška so naprave Micro Electro-Mechanical Systems (MEMS), kar pomeni, da se lahko prilegajo majhnemu čipu znotraj najmanjšega pripomočka. Eden od načinov za merjenje pospeška, ki ga uporabljajo merilniki pospeška MEMS, je uporaba majhne prevodne mase, obešene na vzmeti. Pospešek naprave povzroči, da se vzmeti raztegnejo ali skrčijo, odklon prevodne mase pa je mogoče izmeriti s spremembo kapacitivnosti na bližnje fiksne plošče.

Merilniki pospeška so določeni z naslednjimi lastnostmi:

  1. Število osi, od ene do treh osi, označenih z X, Y in Z v diagramih specifikacij. Upoštevajte, da se nekateri merilniki pospeška imenujejo 6-osni ali 9-osni, vendar to samo pomeni, da so povezani z drugimi napravami MEMS, kot so žiroskopi in/ali magnetometri. Vsaka od teh naprav ima tudi tri osi, zato obstajajo 3, 6 ali 9-osne inercialne merilne enote (IMU).
  2. Vrsta izhoda, analogni ali digitalni. Digitalni merilnik pospeška skrbi za oblikovanje podatkov o pospešku v digitalni prikaz, ki ga je mogoče prebrati prek I2C ali SPI.
  3. Obseg pospeška, merjen v g, kjer je 1g pospešek zaradi Zemljine teže.
  4. Soprocesorji, ki lahko raztovorijo nekatere izračune, potrebne za analizo surovih podatkov iz MCU. Večina merilnikov pospeška ima nekaj preprostih zmožnosti prekinitve, da zazna prag pospeška (udar) in 0-g (prosti pad). Drugi lahko opravijo napredno obdelavo neobdelanih podatkov, da MCU -ju ponudijo pomembnejše podatke.

5. korak: Vmesnik s krmilnikom

Ker poznamo ESP mikrokrmilnike v trendu, bomo za svoj primer uporabili ESP32. Torej najprej potrebujete Nodemcu-32.

Brez skrbi, če imate druge plošče ESP ali celo Arduino !!! Samo nastaviti svoj Arduino IDE in konfiguracijo v skladu s svojimi razvojnimi ploščami za Arduino, ESP NodeMCU, ESP32 itd … Potrebovali boste tudi nekakšne dele I2C, običajno na odklopni plošči. V tej vadnici bom uporabil MMA8451 digitalna deska za merjenje pospeška.

In nekaj mostičkov …

6. korak: Povezave

Povezave
Povezave

In tukaj je postavitev.

Uporabil sem naslednjo povezavo iz zgornjega modula z modulom Nodemcu-32s.

ESP32s - modul

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Ne pozabite, da večinoma nimajo vse razvojne plošče (večinoma v ESP -jih) dober jasen pinout, ki bi pomagal ugotoviti, kateri zatiči so uporabljeni! Zato pred povezavo določite pravilne zatiče vaše plošče, da uporabite, katere zatiče so za SDA in SCL."

7. korak: Koda

To zahteva knjižnico Adafruit

iz

Prenesite, razpakirajte in našli boste mapo s primeri, v mapi preprosto odprite MMA8451demo v svojem Arduino IDE in tukaj ste….

videli boste naslednjo kodo za vmesnik senzorja MMA8451 z vašim krmilnikom

#vključi

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * pridružite se vodilu i2c s SDA = D1 in SCL = D2 NodeMCU */ Serial.println ("Adafruit MMA8451 test!"); if (! mma.begin ()) {Serial.println ("Ni mogoče začeti"); medtem ko (1); } Serial.println ("Najdeno MMA8451!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Razpon ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Preberite 'surove' podatke v 14-bitnem štetju mma.read (); Serial.print ("X: / t"); Serijski.tisk (mma.x); Serial.print ("\ tY: / t"); Serijski.tisk (mma.y); Serial.print ("\ tZ: / t"); Serijski.tisk (mma.z); Serial.println (); / * Pridobite nov dogodek senzorja */ sensors_event_t dogodek; mma.getEvent (& event); / * Prikažite rezultate (pospešek se meri v 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"); / * Pridobite orientacijo senzorja */ uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Portret spredaj"); zlom; etui MMA8451_PL_PUB: Serial.println ("Portret navzgor"); zlom; etui MMA8451_PL_PDF: Serial.println ("Portret spredaj spredaj"); zlom; etui MMA8451_PL_PDB: Serial.println ("Portret navzdol nazaj"); zlom; etui MMA8451_PL_LRF: Serial.println ("Ležeče desno spredaj"); zlom; etui MMA8451_PL_LRB: Serial.println ("Ležeče desno nazaj"); zlom; etui MMA8451_PL_LLF: Serial.println ("Ležeče levo spredaj"); zlom; etui MMA8451_PL_LLB: Serial.println ("Ležeče levo nazaj"); zlom; } Serial.println (); zamuda (1000); }

Shrani, preveri in naloži ……

Odprite serijski monitor in videli boste nekaj takega, senzor sem premikal približno od tod tudi različni odčitki

X: -2166 Y: 1872 Z: 2186

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

Pokrajina levo spredaj

X: -224 Y: -2020 Z: 3188

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

Portret spredaj

No, če je šlo vse tako, kot mora, imate zdaj osnove I2C in Kako priključiti svojo napravo.

Toda naprava ne deluje ?? !

Samo nadaljujte z naslednjim korakom ……

8. korak: Zaženite delovanje naprave I2C

Osnovni koraki za delovanje naprave I2C

Raziščimo….

  • Ožičenje je pravilno.. (preverite še enkrat)
  • Program je pravilen (ja, to je testni primer..)

Začnite s stopnjami za rešitev ……

Korak 1: Zaženite program za optično branje naprav I2C, da preverite naslov naprave in najprej je naprava I2C v redu

Lahko prenesete skico in preverite izhod.

Rezultat - Naprava deluje in naslov senzorja je pravilen

I2C skener. Iskanje …

Najden naslov: 28 (0x1C) Končano. Najdeno 1 naprava (-e).

2. stopnja: Preverite knjižnico senzorjev

Odprite datoteko Adafruit_MMA8451.h in poiščite naslov naprave

Rezultat - Naslov se razlikuje od moje naprave ??.

/*================================================ ========================= I2C NASLOV/BITI --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Privzeti naslov MMA8451 I2C, če je A GND, njegov 0x1C /*======================= ================================================== */

Do - Uredite datoteko iz beležnice (spremenite naslov) + Shrani + Znova zaženi IDE

Deluje. Lahko dobite odčitke.

Ne bo ……. ???

Korak 3: Preverite, ali je Wire.begin prepisan?

Odprite datoteko Adafruit_MMA8451.c in poiščite Wire.begin.

Rezultat - Ta izjava je prepisana

/*********************************************** ************************* //*! @brief Nastavi HW (bere vrednosti koeficientov itd.)* / / ********************************** ****************************************/ bool Adafruit_MMA8451:: začetek (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Do - Uredite datoteko iz beležnice (izjava o komentarju) + Shrani + Znova zaženi IDE

In končno naprava začne delovati …

Skoraj sem preobremenil to vadnico, ker je bil njen glavni cilj razložiti, kako začeti, pridobiti podatke iz podatkovnega lista, se povezati in doseči, da naprava I2C deluje z zelo osnovnim primerom. Upam, da bo vse potekalo tako, kot mora, in bo koristno zagnati vaš senzor.

Priporočena: