Мазмұны:

I2C сенсорлық интерфейсін бастау? - MMA8451 интерфейсі ESP32s көмегімен: 8 қадам
I2C сенсорлық интерфейсін бастау? - MMA8451 интерфейсі ESP32s көмегімен: 8 қадам

Бейне: I2C сенсорлық интерфейсін бастау? - MMA8451 интерфейсі ESP32s көмегімен: 8 қадам

Бейне: I2C сенсорлық интерфейсін бастау? - MMA8451 интерфейсі ESP32s көмегімен: 8 қадам
Бейне: Урок №8. LCD, I2C. Beyond Robotics 2024, Шілде
Anonim
I2C сенсорлық интерфейсін бастау? - EMA32 көмегімен MMA8451 интерфейсі
I2C сенсорлық интерфейсін бастау? - EMA32 көмегімен MMA8451 интерфейсі

Бұл оқулықта сіз контроллермен (Arduino, ESP32, ESP8266, ESP12 NodeMCU) жұмыс істейтін I2C құрылғысын (акселерометрді) қалай қосуға, қосуға және алуға болатынын білесіз.

1 -қадам: I2C - Интер -IC байланысының керемет әлемін қалай бастау керек

Arduino, ESP сериялары, PIC, Rasberry PI және т.б. бәрі керемет. Бірақ сізде онымен не істейсіз?

Ең жақсы нәрсе - сенсорларды қосу. Бүгінгі таңда көптеген жаңа технологиялар компьютерге, телефондарға, планшеттерге немесе микроконтроллерлерге сенсорлармен сөйлесуге мүмкіндік беру үшін I2C протоколын қолданады. Егер смартфондар сіздің акселерометр сенсорымен сөйлесе алмаса, ақылды болар еді.

2 -қадам: I2C шолуы

I2C-сериялық, синхронды, жартылай дуплексті байланыс хаттамасы, ол бір автобуста бірнеше шеберлер мен құлдардың қатар өмір сүруіне мүмкіндік береді. I2C шинасы екі жолдан тұрады: сериялық деректер желісі (SDA) және сериялық сағат (SCL). Екі желі де тартылатын резисторларды қажет етеді.

SDA (Сериялық деректер) - Деректерді жіберуге және қабылдауға арналған негізгі және қосалқы жол. SCL (Serial Clock) - Сағат сигналын беретін желі. Қарапайымдылық пен өндірістің төмен құны сияқты артықшылықтары бар I2C көбінесе қысқа қашықтықта (бір фут ішінде) төмен жылдамдықты перифериялық құрылғылармен байланыс үшін қолданылады.

I2C туралы көбірек білгіңіз келе ме? …

3 -қадам: I²C сенсорларын қалай конфигурациялау керек

Жобаға кіріспес бұрын сенсордың бірнеше негіздерін түсіну керек. Суға түсер алдында бір кофе кофе құйыңыз:)? …

I2C -нің үлкен күші - сенсорларды бір төрт сымға қоюға болады. Алдын ала дайындалған бірнеше модульдері бар қондырғылар үшін бірнеше smd резисторды үзілістен алып тастауға тура келуі мүмкін, әйтпесе автобустың тартылуы тым агрессивті болуы мүмкін.

Деректер кестесінен қандай ақпарат қажет?

  1. Сенсордың функционалдығы
  2. Түйреуіштер мен түйреуіштердің функционалдығы
  3. Интерфейс сипаттамасы («I2c мекен -жайын таңдау кестесін» қарауды жіберіп алмаңыз)
  4. Тіркелу !!

Бәрі жақсы, сіз оны оңай таба аласыз, бірақ Тіркеу ?? ТІРКЕУЛЕР - бұл I²C құрылғысындағы жад орындары. Берілген сенсорда қанша регистр бар және олар басқаратын не бар реестрдің қысқаша мазмұны регистр картасы деп аталады. Сенсордың мәліметтер парағындағы ақпараттың көпшілігі әрбір регистрдің қалай жұмыс жасайтынын түсіндіруге арналған және оларды оқу өте қиын болуы мүмкін, себебі ақпарат сирек түрде беріледі.

Сізге нені білдіретінімді түсіну үшін: Регистрлердің көптеген түрлері бар, бірақ осы кіріспе үшін мен оларды екі жалпы түрге топтастырамын: Басқару және Деректер регистрлері.

1) бақылау тізілімдері

Датчиктердің көпшілігі басқару регистрлерінде сақталған мәндердің негізінде олардың қалай жұмыс істейтінін өзгертеді. Басқару регистрлерін қосу/өшіру қосқыштарының банктері деп ойлаңыз, олар битке 1 қойып, оны битке 0 қою арқылы өшіресіз. I²C чип негізіндегі сенсорларда бит сияқты нәрселер үшін ондаған немесе одан да көп операциялық параметрлер бар. Режимдер, үзілістер, оқу-жазуды бақылау, тереңдік, іріктеу жылдамдығы, шуды азайту және т.б., сондықтан сіз шын мәнінде оқуға кіріспес бұрын бірнеше түрлі бақылау регистрлерінде биттерді орнатуыңыз қажет.

2) Деректер регистрлері Коммутаторлар тіркеуінің бақылауынан айырмашылығы, мен деректерді шығару регистрлерін екілік түрде сақталатын сандарды ұстайтын контейнерлер деп ойлаймын. Сондықтан сіз Деректерді білгіңіз келеді, әрқашан деректердің регистрлерін оқыңыз, мысалы мен құрылғыны сәйкестендіру үшін кіммін, күй регистрі және т.

Сонымен, I²C датчигін инициализациялау-бұл көп сатылы процесс және операциялардың дұрыс тәртібі көбінесе деректер кестесінде қарапайым емес, кері бағытта түсіндіріледі. «Бұл сенсордан оқуды алу үшін (1), (2), (3), (4) және т.б.» дегенді ешқашан айтпайтын тізім, бірақ сіз бұл ретте x битін орнатпас бұрын, басқару регистрінің биттерінің сипаттамаларын табасыз. регистр, сіз осы басқа бақылау регистрінде бит битін орнатуыңыз керек ».

Мен әрқашан мәліметтер парағының мәтінге қарағанда интерактивті екенін білемін. егер сіз оны белгілі бір ақпаратқа немесе ақпаратқа сілтеме жасасаңыз және ол сізге барлық мәліметтерді, байланыстар мен сілтемелерді береді. Барлық сілтемелерді алу үшін жай отырыңыз және оқыңыз.:)

4 -қадам: Қозғалыстан бастаңыз - акселерометр

Қазіргі акселерометрлер-бұл микроэлектромеханикалық жүйелер (MEMS) құрылғылары, бұл олардың ең кішкентай гаджеттердің ішіндегі кішкене чипке сыятынын білдіреді. MEMS акселерометрлерінде қолданылатын үдеуді өлшеудің бір әдісі - серіппелерге ілінген ұсақ өткізгіш массаны қолдану. Құрылғының үдеуі серіппелердің созылуына немесе тарылуына әкеледі, ал өткізгіш массаның ауытқуын жақын, бекітілген пластиналарға сыйымдылықтың өзгеруі арқылы өлшеуге болады.

Акселерометрлер келесі ерекшеліктермен анықталады:

  1. Спецификациялық диаграммаларда X, Y және Z деп белгіленген бір осьтен үшке дейін осьтер саны. Назар аударыңыз, кейбір акселерометрлер 6 ось немесе 9 ось деп аталады, бірақ бұл олардың гироскоптар және/немесе магнитометрлер сияқты басқа MEMS құрылғыларымен біріктірілгенін білдіреді. Бұл құрылғылардың әрқайсысында үш ось бар, сондықтан 3, 6 немесе 9 осьті инерциялық өлшеу қондырғылары бар.
  2. Аналогтық немесе цифрлық шығыс түрі. Цифрлық акселерометр жеделдету деректерін I2C немесе SPI арқылы оқуға болатын цифрлық көрініске пішімдеуді қарастырады.
  3. Үдеудің диапазоны g -мен өлшенеді, мұнда 1г - Жердің тартылыс күшінің әсерінен болатын үдеу.
  4. MCU бастапқы деректерін талдау үшін қажет кейбір есептеулерді жүктей алатын сопроцессорлар. Акселерометрлердің көпшілігінде үдеу табалдырығын (соққы) және 0-г (бос құлау) жағдайын анықтау үшін қарапайым үзіліс мүмкіндігі бар. Басқалары MCU -ға маңызды деректерді ұсыну үшін шикізат деректерін жетілдіре алады.

5 -қадам: Контроллермен интерфейс

Біз ESP микроконтроллерлерін трендте білетіндіктен, біз мысалда ESP32 қолданамыз. Сондықтан алдымен сізге Nodemcu-32s қажет.

Егер сізде басқа ESP тақталары немесе тіпті Arduino болса, уайымдамаңыз !!! Сізге Arduino IDE мен конфигурациясын Arduino, ESP NodeMCU, ESP32s және т.б үшін әзірлеу тақталарына сәйкес орнату қажет … Сондай -ақ сізге әдетте I2C бөлшектері қажет болады, әдетте MTA8451 қолданамын. цифрлық акселерометрдің ажырату тақтасы.

Ал бірнеше секіргіш сымдар ….

6 -қадам: Қосылымдар

Қосылымдар
Қосылымдар

Ал мұнда макет.

Мен жоғарыдағы модульден келесі қосылымды Nodemcu-32s модуліне қолдандым.

ESP32s - модуль

3v3 - Вин

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

«Есіңізде болсын, көбінесе барлық даму тақталарында (көбінесе ESP -те) қандай түйреуіштер қолданылатынын анықтауға көмектесетін жақсы түйреуіш болмайды !! Сондықтан қосылмас бұрын, SDA мен SCL үшін қандай түйреуіштерді қолдану үшін тақтаның дұрыс түйреуіштерін анықтаңыз. «

7 -қадам: код

Бұл үшін Adafruit кітапханасы қажет

downloads.arduino.cc/libraries/github.com/adafruit/Adafruit_MMA8451_Library-1.1.0.zip сайтынан

Жүктеп алыңыз, ашыңыз және сіз мысалдар қалтасын таба аласыз, қалтада Arduino IDE -де MMA8451demo ашыңыз, осында сіз…

контроллермен MMA8451 сенсорлық интерфейсінің келесі кодын көресіз

#қосу

#қосу #қосу Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * nodeMCU SDA = D1 және SCL = D2 көмегімен i2c шинасына қосылыңыз */ Serial.println («Adafruit MMA8451 сынағы!»); if (! mma.begin ()) {Serial.println («Бастау мүмкін болмады»); кезінде (1); } Serial.println («MMA8451 табылды!»); mma.setRange (MMA8451_RANGE_2_G); Serial.print («Ауқым =»); Serial.print (2 << mma.getRange ()); Serial.println («G»); } void loop () {// 14-разрядтағы «шикі» деректерді оқу 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 (); / * Жаңа сенсорлық оқиғаны алу */ sensors_event_t оқиғасы; mma.getEvent (& оқиға); / * Нәтижелерді көрсету (үдеу 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»); / * Сенсордың бағдарын алыңыз */ uint8_t o = mma.getOrientation (); қосқыш (o) {case MMA8451_PL_PUF: Serial.println («Алдыңғы портрет»); үзіліс; жағдай MMA8451_PL_PUB: Serial.println («Артқа портрет»); үзіліс; жағдай MMA8451_PL_PDF: Serial.println («Алдыңғы жағында портрет»); үзіліс; жағдай MMA8451_PL_PDB: Serial.println («Артқа төмен»); үзіліс; жағдай MMA8451_PL_LRF: Serial.println («Ландшафт оң жақ алдыңғы»); үзіліс; жағдай MMA8451_PL_LRB: Serial.println («Ландшафт оң жақта»); үзіліс; жағдай MMA8451_PL_LLF: Serial.println («Ландшафты сол жақ алдыңғы»); үзіліс; жағдай MMA8451_PL_LLB: Serial.println («Пейзаж сол жақ артқы»); үзіліс; } Serial.println (); кешіктіру (1000); }

Сақтау, тексеру және жүктеу ……

Сериялық мониторды ашыңыз, сонда сіз осындай нәрсені көресіз, мен сенсорды жылжыттым, сондықтан әр түрлі көрсеткіштер

X: -2166 Y: 1872 Z: 2186

X: -2166 Y: 1872 Z: 2186X: -4.92 Y: 5.99 Z: 4.87 м/с^2

Пейзаждың сол жақ алдыңғы жағы

X: -224 Y: -2020 Z: 3188

X: -5.10 Y: -3.19 Z: 7.00 м/с^2

Алдыңғы портрет

Егер бәрі ойдағыдай болса, онда сізде I2C негіздері және құрылғыны қалай қосу керек.

Бірақ құрылғы жұмыс істемейді?

Келесі қадамға өтіңіз …….

8 -қадам: I2C құрылғысын жұмыс істетіңіз

I2C құрылғысының жұмысының негізгі қадамдары

Зерттеп көрейік ….

  • Сым дұрыс … (қайтадан тексеріңіз)
  • Бағдарлама дұрыс.. (Иә, бұл тест үлгісі..)

Шешу үшін кезеңдерден бастаңыз ….

1 -кезең: I2C құрылғысының сканерлеу бағдарламасын іске қосыңыз, сонда құрылғының мекенжайын тексеруге болады және алдымен сіздің I2C құрылғыңыз жақсы

Сіз эскизді жүктей аласыз және шығуды тексере аласыз.

Нәтиже - құрылғы жұмыс істейді және сенсордың мекенжайы дұрыс

I2C сканері. Сканерленуде…

Табылған мекенжай: 28 (0x1C) Орындалды. 1 құрылғы табылды.

2 кезең: сенсорлық кітапхананы тексеріңіз

Adafruit_MMA8451.h файлын ашып, құрылғы адресін табыңыз

Нәтиже - Мекенжай менің құрылғымнан өзгеше?

/*================================================ =========================== I2C ADDRESS/BITS --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Әдепкі MMA8451 I2C мекенжайы, егер A GND болса, оның 0x1C /*======================= ================================================== */

Жасаңыз - Блокноттан файлды өңдеу (мекенжайды өзгерту) + Сақтау + IDE қайта іске қосу

Бұл жұмыс істейді. Сіз оқуларыңызды ала аласыз.

Әйтпесе ……. ???

3 кезең: Тексеру Wire.begin қайта жазылған ба?

Adafruit_MMA8451.c файлын ашып, Wire.begin табыңыз.

Нәтиже - бұл мәлімдеме қайта жазылады

/************************************************* ************************* //*! @brief HW орнатады (коэффициенттердің мәндерін оқиды және т.б.)* / / ******************************** **************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Іс - Блокноттан файлды өңдеу (түсініктеме мәлімдемесі) + Сақтау + IDE қайта іске қосу

Ақырында құрылғы жұмыс істей бастады …

Мен бұл оқулықты шамадан тыс жүктеп аламын, себебі оның негізгі мақсаты - қалай бастау керектігін, деректер кестесінен деректерді алуды, I2C құрылғысын қосуды және қарапайым мысалмен жұмыс жасауды түсіндіру болды.

Ұсынылған: