Talaan ng mga Nilalaman:

Pagsisimula Sa I2C Sensor Interface ?? - I-interface ang Iyong MMA8451 Paggamit ng mga ESP32: 8 Mga Hakbang
Pagsisimula Sa I2C Sensor Interface ?? - I-interface ang Iyong MMA8451 Paggamit ng mga ESP32: 8 Mga Hakbang

Video: Pagsisimula Sa I2C Sensor Interface ?? - I-interface ang Iyong MMA8451 Paggamit ng mga ESP32: 8 Mga Hakbang

Video: Pagsisimula Sa I2C Sensor Interface ?? - I-interface ang Iyong MMA8451 Paggamit ng mga ESP32: 8 Mga Hakbang
Video: How to Build LDmicro Arduino PLC (Part 1) 2024, Hunyo
Anonim
Pagsisimula Sa I2C Sensor Interface ?? - I-interface ang Iyong MMA8451 Paggamit ng mga ESP32
Pagsisimula Sa I2C Sensor Interface ?? - I-interface ang Iyong MMA8451 Paggamit ng mga ESP32

Sa tutorial na ito, malalaman mo ang lahat tungkol sa Paano magsisimula, kumonekta at makakuha ng I2C device (Accelerometer) na gumagana sa controller (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Hakbang 1: Paano Magsimula Sa I2C - Magnificent World of Inter IC Communication

Ang Arduino, ESP Series, PIC, Rasberry PI, atbp. Lahat ay hindi kapani-paniwala. Ngunit ano ang gagawin mo dito kapag mayroon ka na?

Ang pinakamagandang bagay ay ang magdagdag ng mga sensor at iba pa. Ngayon maraming ng maiinit na bagong teknolohiya ang gumagamit ng I2C protocol upang payagan ang computer, telepono, tablet, o microcontrollers na pag-usapan ang mga sensor. Ang mga smart phone ay hindi gaanong matalino kung hindi nila kausapin ang sensor ng accelerometer na iyon upang malaman kung aling paraan ang mukha ng iyong telepono.

Hakbang 2: Pangkalahatang-ideya sa I2C

Ang I2C ay isang serial, magkasabay, kalahating duplex na komunikasyon na proteksyon na nagbibigay-daan sa pagkakaroon ng maraming mga masters at alipin sa iisang bus. Ang I2C bus ay binubuo ng dalawang linya: serial data line (SDA) at serial clock (SCL). Ang parehong mga linya ay nangangailangan ng mga resistors na pull-up.

SDA (Serial Data) - Ang linya para sa master at alipin na magpadala at tumanggap ng data. SCL (Serial Clock) - Ang linya na nagdadala ng signal ng orasan. Sa mga kalamangan tulad ng pagiging simple at mababang gastos sa pagmamanupaktura, ang I2C ay kadalasang ginagamit para sa komunikasyon ng mga low-speed peripheral na aparato sa maikling distansya (sa loob ng isang paa).

Nais bang malaman Dagdag pa tungkol sa I2C? ……

Hakbang 3: Paano Mag-configure ng I²C Sensors

Bago pumunta sa proyekto, kailangan mong maunawaan ang ilang mga pangunahing kaalaman ng iyong Sensor. Kaya ibuhos ang iyong sarili sa isang tasa ng kape bago sumisid:)? …

Ang dakilang lakas ng I2C ay maaari kang maglagay ng maraming mga sensor sa parehong apat na mga wire. Ngunit para sa mga yunit na may konektadong maraming mga naunang modyul, maaaring kailangan mong alisin ang ilang mga smd resistors mula sa mga breakout, kung hindi man ang pull-up sa bus ay maaaring maging masyadong agresibo.

Anong impormasyon ang gusto namin mula sa Datasheet ??

  1. Pag-andar ng sensor
  2. Pag-andar ng mga pinout at pin
  3. Paglalarawan ng interface (Huwag palalampasin na tingnan ang "I2c Address Selection table")
  4. Mga rehistro !!

Mabuti ang lahat madali mo itong mahahanap ngunit Rehistro ?? Ang mga REGISTER ay simpleng lokasyon ng memorya sa loob ng isang I²C na aparato. Ang buod ng kung gaano karaming mga pagrehistro ang mayroong sa isang ibinigay na sensor, at kung ano ang kanilang kontrolin o naglalaman ay tinatawag na isang mapa ng rehistro. Karamihan sa impormasyon sa datasheet ng sensor ay tungkol sa pagpapaliwanag kung paano gumagana ang bawat rehistro, at maaari silang maging isang slog na basahin dahil ang impormasyon ay bihirang ipinakita sa direktang paraan.

Upang bigyan ka ng isang kahulugan ng kung ano ang ibig kong sabihin sa na: Maraming mga uri ng mga pagrehistro ngunit para sa pagpapakilala na ito ay pag-aangkatin ko sila sa dalawang pangkalahatang uri: Mga rehistro sa Control at Data.

1) Mga Rehistro sa Pagkontrol

Karamihan sa mga sensor ay nagbabago kung paano sila gumana batay sa mga halagang nakaimbak sa mga rehistro ng kontrol. Isipin ang mga rehistro ng kontrol bilang mga bangko ng mga switch na On / Off, na iyong binubuksan sa pamamagitan ng pagtatakda ng kaunti sa 1 at i-off sa pamamagitan ng pagtatakda ng kaunti sa 0. Ang mga sensor na nakabatay sa chip ng I²C ay madalas na mayroong isang dosenang o higit pang mga setting ng pagpapatakbo para sa mga bagay tulad ng bit- Mga mode, nakagagambala, kontrol sa read-wrote, lalim, bilis ng pag-sample, pagbawas ng ingay, atbp., Kaya't karaniwang kailangan mong magtakda ng mga piraso sa maraming magkakaibang rehistro ng kontrol bago ka talaga tumagal ng pagbabasa.

2) Mga pagrehistro ng data Kaya nais mong malaman ang Data, palaging basahin ang mga pagrehistro ng data tulad ng kung sino ang nagrehistro para sa pagkakakilanlan ng aparato, Pagrehistro sa katayuan atbp.

Kaya, ang pagpapasimula ng isang sensor ng I²C ay isang multi-step na proseso at ang tamang pagkakasunud-sunod ng mga pagpapatakbo ay madalas na ipinaliwanag sa nakasulat sa pabalik na direksyon, Sa halip na isang prangka sa Datasheet. listahan na hindi sinasabing "Upang makakuha ng isang pagbabasa mula sa sensor na ito, gawin ang (1), (2), (3), (4), atbp", ngunit mahahanap mo ang mga paglalarawan ng mga control register bit na nagsasabing "bago mo itakda ang x magparehistro dapat mong itakda ang bit y sa iba pang control register”.

Palagi akong nakakahanap ng isang sheet ng data ay mas interactive kaysa sa karamihan sa teksto. kung Sangguniin mo ito para sa isang tukoy na piraso o piraso ng impormasyon at bibigyan ka nito ng lahat ng mga detalye, koneksyon at sanggunian. Umupo lamang at basahin upang makawala ang lahat ng iyong mga sanggunian.:)

Hakbang 4: Magsimula Sa Paggalaw - Accelerometer

Ang mga modernong accelerometro ay mga aparato ng Micro Electro-Mechanical Systems (MEMS), na nangangahulugang magkakasya sila sa isang maliit na maliit na tilad sa loob ng pinakamaliit ng mga gadget. Ang isang paraan upang masukat ang pagpabilis na pinagtatrabahuhan ng MEMS accelerometers ay ang paggamit ng isang maliit na masang conductive na nasuspinde sa mga bukal. Ang pagpabilis ng aparato ay sanhi ng mga bukal upang mabatak o makakontrata, at ang pagpapalihis ng kondaktibong masa ay masusukat sa pamamagitan ng isang pagbabago sa kapasidad sa malapit, naayos na mga plato.

Ang mga accelerometro ay tinukoy ng mga sumusunod na tampok:

  1. Ang bilang ng mga palakol, mula isa hanggang tatlong palakol, na may label na X, Y, at Z sa mga diagram ng detalye. Tandaan na ang ilang mga accelerometer ay tinatawag na 6-axis o 9-axis, ngunit nangangahulugan lamang ito na naka-bundle ang mga ito sa iba pang mga aparato ng MEMS tulad ng gyroscope at / o magnetometers. Ang bawat isa sa mga aparatong iyon ay mayroon ding tatlong palakol, kung kaya't mayroong 3, 6, o 9-axis na Inertial Measurement Units (IMU).
  2. Ang uri ng output, alinman sa analog o digital. Ang isang digital na accelerometer ay nangangalaga sa pag-format ng data ng pagpabilis sa isang digital na representasyon na maaaring basahin sa paglipas ng I2C o SPI.
  3. Ang saklaw ng pagpabilis na sinusukat sa g's, kung saan ang 1g ay ang pagbilis dahil sa gravity ng Earth.
  4. Ang mga Coprocessor na maaaring mag-offload ng ilang mga kalkulasyon na kinakailangan upang pag-aralan ang raw data mula sa MCU. Karamihan sa mga accelerometer ay may ilang simpleng kakayahang makagambala upang makita ang isang acceleration threshold (pagkabigla) at isang 0-g (freefall) na kondisyon. Ang iba ay maaaring gumawa ng advanced na pagproseso sa raw data upang mag-alok ng mas makabuluhang data sa MCU.

Hakbang 5: Interface Sa Controller

Dahil alam namin na nasa uso ang ESP Microcontrollers, gagamitin namin ang ESP32 bilang aming halimbawa. Kaya kailangan mo muna ng isang Nodemcu-32s.

Walang alalahanin kung mayroon kang anumang iba pang mga board ng ESP o kahit Arduino !!! Kailangan mo lamang i-set up ang iyong Arduino IDE at pagsasaayos ayon sa iyong Development boards, para sa Arduino, ESP NodeMCU, ESP32 atbp … Kakailanganin mo rin ng ilang uri ng mga bahagi ng I2C, karaniwang sa isang breakout board. Sa tutorial na ito ay gagamitin ko ang MMA8451 digital Accelerometer breakout board.

At iilang mga jumper wires ….

Hakbang 6: Mga Koneksyon

Mga koneksyon
Mga koneksyon

At narito ang isang layout.

Ginamit ko ang sumusunod na koneksyon mula sa module sa itaas sa aking module na Nodemcu-32s.

ESP32s - Modyul

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Tandaan, karamihan sa mga oras hindi lahat ng mga board ng pag-unlad (karamihan sa mga ESP) ay may isang mahusay na malinaw na pinout upang makatulong na matukoy kung aling mga pin ang ginagamit !! Kaya bago ang koneksyon, kilalanin ang mga tamang pin ng iyong board upang magamit kung aling mga pin ang para sa SDA at SCL."

Hakbang 7: Code

Kinakailangan nito ang Adafruit library

mula sa

Mag-download, i-unzip at makikita mo ang mga halimbawa ng folder, sa folder buksan lamang ang MMA8451demo sa iyong Arduino IDE at dito ka pumunta….

makikita mo ang sumusunod na code para sa iyong interface ng MMA8451 sensor sa iyong controller

# isama

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * sumali sa i2c bus na may SDA = D1 at SCL = D2 ng NodeMCU * / Serial.println ("Adafruit MMA8451 test!"); kung (! mma.begin ()) {Serial.println ("Hindi masimulan"); habang (1); } Serial.println ("MMA8451 natagpuan!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Saklaw ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Basahin ang data na 'raw' sa 14-bit na bilang na 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 (); / * Kumuha ng isang bagong kaganapan ng sensor * / kaganapan ng sensors_event_t; mma.getEvent (& kaganapan); / * Ipakita ang mga resulta (sinusukat ang pagpabilis sa 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"); / * Kunin ang oryentasyon ng sensor * / uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); pahinga; kaso MMA8451_PL_PUB: Serial.println ("Portrait Up Back"); pahinga; kaso MMA8451_PL_PDF: Serial.println ("Portrait Down Front"); pahinga; kaso MMA8451_PL_PDB: Serial.println ("Portrait Down Back"); pahinga; case MMA8451_PL_LRF: Serial.println ("Landscape Right Front"); pahinga; case MMA8451_PL_LRB: Serial.println ("Landscape Right Back"); pahinga; case MMA8451_PL_LLF: Serial.println ("Landscape Left Front"); pahinga; case MMA8451_PL_LLB: Serial.println ("Landscape Left Back"); pahinga; } Serial.println (); pagkaantala (1000); }

I-save, Patunayan at I-upload ……

Buksan ang serial monitor at makikita mo ang isang bagay tulad nito, inililipat ko ang sensor tungkol dito kung gayon ang iba't ibang mga pagbabasa

X: -2166 Y: 1872 Z: 2186

X: -2166 Y: 1872 Z: 2186X: -4.92 Y: 5.99 Z: 4.87 m / s ^ 2

Landscape Left Front

X: -224 Y: -2020 Z: 3188

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

Portrait Up Front

Kung ang lahat ay nagpunta sa nararapat, pagkatapos ay mayroon ka nang mga pangunahing kaalaman sa I2C at Paano ikonekta ang iyong aparato..

Ngunit hindi gumagana ang aparato ?? !

Pumunta lamang sa susunod na hakbang ……

Hakbang 8: Gawin ang I2C Device na Gumagana.

Pangunahing mga hakbang para magamit ang aparato ng I2C

Suriin natin ….

  • Tama ang kable.. (suriin ulit)
  • Tama ang programa.. (Oo, halimbawa ito ng pagsubok..)

Magsimula sa mga yugto upang malutas…..

Yugto 1: Patakbuhin ang programa ng scanner ng aparato ng I2C upang suriin ang address ng aparato at unang okey ang iyong aparato ng I2C

Maaari kang Mag-download ng sketch at suriin ang output.

Resulta - Gumagana ang aparato at tama ang address ng Sensor

I2C scanner. Sinusuri …

Nahanap na address: 28 (0x1C) Tapos Na. Natagpuan ang 1 mga aparato.

Yugto 2: Suriin ang library ng sensor

Buksan ang Adafruit_MMA8451.h file at hanapin ang address ng aparato

Resulta - Ang address ay naiiba sa aking aparato ??.

/ * =_ ==== I2C ADDRESS / BITS -------------------- ---- * / #define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Default MMA8451 I2C address, kung ang A ay GND, ang 0x1C / * ==================== =_ * /

Gawin - I-edit ang file mula sa notepad (baguhin ang address) + I-save + I-restart ang IDE

Gumagana ito. Maaari mong makuha ang iyong mga pagbabasa.

Sill hindi ….. ???

Yugto 3: Suriin ang Wire.begin ay na-o-overtake?

Buksan ang Adafruit_MMA8451.c file at hanapin ang Wire.begin.

Resulta - Ang pahayag na ito ay na-overtake.

/ ***** ***** @ maikling Pag-set up ang HW (binabasa ang mga halaga ng mga coefficients, atbp.) * / / ******************************** ***** {Wire.begin (); _i2caddr = i2caddr;

Gawin - I-edit ang file mula sa notepad (pahayag ng komento) + I-save + I-restart ang IDE

At sa wakas ay tumatakbo ang Device☺

Halos sobra akong mag-overload sa tutorial na ito dahil ang pangunahing layunin nito ay upang ipaliwanag Paano magsimula, makakuha ng data mula sa datasheet, kumonekta at makagawa ang aparato ng I2C sa napakahalagang halimbawa. Inaasahan kong mapunta ang lahat ayon sa nararapat, at kapaki-pakinabang na simulan ang iyong Sensor.

Inirerekumendang: