Агуулгын хүснэгт:

Блоклохгүй APDS9960 дохио мэдрэгчийн хэрэгжилт: 5 алхам
Блоклохгүй APDS9960 дохио мэдрэгчийн хэрэгжилт: 5 алхам

Видео: Блоклохгүй APDS9960 дохио мэдрэгчийн хэрэгжилт: 5 алхам

Видео: Блоклохгүй APDS9960 дохио мэдрэгчийн хэрэгжилт: 5 алхам
Видео: Видео ПРОЕКТОР ДЛЯ ИГР!!! VIVICINE K3 на базе ANDROID 9.0 #vivicine 2024, Долдугаар сарын
Anonim
Блоклохгүй APDS9960 дохио мэдрэгчийн хэрэгжилт
Блоклохгүй APDS9960 дохио мэдрэгчийн хэрэгжилт
Блоклохгүй APDS9960 дохио мэдрэгчийн хэрэгжилт
Блоклохгүй APDS9960 дохио мэдрэгчийн хэрэгжилт
Блоклохгүй APDS9960 дохио мэдрэгчийн хэрэгжилт
Блоклохгүй APDS9960 дохио мэдрэгчийн хэрэгжилт

Оршил

Энэхүү зааварчилгаанд SparkFun_APDS-9960_Sensor_Arduino_Library ашиглан APDS9960 дохио зангаа мэдрэгчийг хэрхэн блоклохгүй хэрэгжүүлэх талаар дэлгэрэнгүй бичсэн болно.

Танилцуулга

Тиймээс та хаахгүй гэж юу гэж өөрөөсөө асуудаг байх? Эсвэл энэ асуудлын төлөө блоклох уу?

Илүү чухал зүйл бол блоклохгүй байх нь яагаад чухал вэ?

За, тиймээс микропроцессор програм ажиллуулахдаа кодын мөрүүдийг дараалан гүйцэтгэдэг бөгөөд ингэснээр таны бичсэн дарааллын дагуу функц руу дуудлага өгч, буцааж өгдөг.

Блоклох дуудлага гэдэг нь гүйцэтгэлийг зогсооход хүргэдэг аливаа төрлийн функцын дуудлага бөгөөд энэ нь дуудагдсан функцийг гүйцэтгэж дуустал дуудагч гүйцэтгэлийг үргэлжлүүлэхгүй гэсэн дуудлага юм.

Тэгвэл энэ нь яагаад чухал вэ?

Хэрэв та температурыг унших, товчлуурыг унших, дэлгэцийг шинэчлэх гэх мэт олон үүргийг дараалан гүйцэтгэх шаардлагатай код бичсэн бол дэлгэцийг шинэчлэх код хаагдсан дуудлага байвал таны систем хариу өгөхгүй болно. товчлуур дарж, температурын өөрчлөлт, учир нь процессор дэлгэцийн шинэчлэлтийг хүлээж, товчлуурын төлөв эсвэл хамгийн сүүлийн температурыг уншихгүй бүх цагийг өнгөрөөх болно.

Миний хувьд орон нутгийн болон алсын температур/чийгшлийн утга, орчны гэрлийн түвшин, барометрийн даралтыг хэмждэг, цагийг хянадаг, эдгээр бүх үзүүлэлтүүдийг LCD дэлгэц дээр харуулдаг, uSD -д бүртгэдэг IoT -д суурилсан WiFi сүлжээний төхөөрөмжөөр MQTT үүсгэхийг хүсч байна. картыг бодит цаг хугацаанд нь уншиж, товчлуурын оролтыг уншиж, гаралтын LED дээр бичиж, дохио зангаагаар IoT дэд бүтэц дэх бүх зүйлийг ESP8266-12-ээр хянана.

Харамсалтай нь надад олдсон APDS9960 номын сангийн цорын ганц хоёр эх сурвалж нь SpagoFun болон AdaFruit номын сангууд байсан бөгөөд хоёулаа Avago (ADPS9960 үйлдвэрлэгч) -ийн програмын кодоос авсан бөгөөд хэсэг хугацааны дотор "readGesture" нэртэй дуудлага эзэмшдэг (1) {}; Дээрх төсөлд ашиглах үед ADPS9960 мэдрэгч ханасан байх үед ESP8266-12E-ийг дахин тохируулдаг (өөрөөр хэлбэл объект ойрхон байх үед эсвэл мэдрэгчийг гэрэлтүүлдэг өөр IR эх үүсвэр байсан үед).

Тиймээс энэхүү зан байдлыг шийдвэрлэхийн тулд би дохио зангаа боловсруулалтыг хоёр дахь процессор руу шилжүүлэхээр шийдсэн бөгөөд ингэснээр ESP8266-12E нь үндсэн микроконтроллер бөгөөд энэ системийн боол болж, дээрх Зураг 1 & 2-т харуулсны дагуу системийн тойм ба системийн бүтцийн диаграммыг тус тус харуулав.. Зураг 3 нь прототипийн хэлхээг харуулж байна.

Одоо байгаа коддоо оруулах шаардлагатай өөрчлөлтүүдийг хязгаарлахын тулд би "APDS9960_NonBlocking" гэж нэрлэсэн боодлын анги/номын сан бичсэн.

Дараахь зүйл бол блоклохгүй шийдлийн дэлгэрэнгүй тайлбар юм.

Надад ямар эд анги хэрэгтэй вэ?

Хэрэв та APDS9960_NonBlocking номын санд ажилладаг I2C шийдлийг бүтээхийг хүсвэл танд дараах хэсгүүд хэрэгтэй болно.

  1. ATMega328P 1 хөнгөлөлтийг эндээс аваарай
  2. PCF8574P -ийг 1 хямдруулж аваарай
  3. Энд 6K 10K эсэргүүцэл
  4. 4 унтраалттай 1K резистор энд байна
  5. 1N914 диодыг 1 удаа эндээс аваарай
  6. PN2222 NPN транзистороос 1 хөнгөлөлт энд байна
  7. 1 унтраалга 16 МГц болор энд байна
  8. 0.1 кФ конденсаторыг 2 үнээр эндээс аваарай
  9. 1 хямдралтай 1000uF электролитийн конденсатор энд байна
  10. Энд 1 ширхэг 10uF электролитийн конденсатор байна
  11. 22pF 2 конденсатор энд байна

Хэрэв та дохио мэдрэгчийн гаралтыг зэрэгцээ интерфэйсээр уншихыг хүсч байвал PCF8574P болон гурван унтраалттай 10K резисторыг унагаж болно.

Надад ямар програм хангамж хэрэгтэй вэ?

Arduino IDE 1.6.9

Надад ямар ур чадвар хэрэгтэй вэ?

Системийг тохируулахын тулд эх кодыг (оруулсан) ашиглаж, шаардлагатай хэлхээг бий болгохын тулд танд дараахь зүйлс хэрэгтэй болно.

  • Электроникийн хамгийн бага ойлголт,
  • Arduino болон түүний IDE -ийн талаархи мэдлэг,
  • Arduino програмыг хэрхэн яаж програмчлах тухай ойлголт
  • Зарим тэвчээр.

Хамрах сэдвүүд

  • Хэлхээний товч тойм
  • Програм хангамжийн товч тойм
  • APDS9960 дохио зангаа мэдрэгч төхөөрөмжийг туршиж байна
  • Дүгнэлт
  • Ашигласан материал

Алхам 1: Хэлхээний тойм

Хэлхээний тойм
Хэлхээний тойм

Хэлхээг хоёр хэсэгт хуваасан;

  • Эхнийх нь R8… 10 ба IC1 резистороор хийгдсэн зэрэгцээ хөрвүүлэх I2C цуваа юм. Энд R8… R10 нь 8 битийн I/O өргөтгөх чип IC1 ба NXP PCF8574A -ийн I2C хаягийг тохируулсан болно. Энэ төхөөрөмжийн хүчинтэй хаягийн муж нь тус тус 0x38… 0x3F байна. I2C програм хангамжийн жишээн дээр 'I2C_APDS9960_TEST.ino' '#тодорхойлох GESTURE_SENSOR_I2C_ADDRESS' -ийг энэ хаягийн мужид тохируулан өөрчлөх шаардлагатай болно.
  • Бусад бүх бүрэлдэхүүн хэсгүүд нь Arduino Uno -ийн суулгагдсан боолыг бүрдүүлдэг бөгөөд дараахь үүргийг гүйцэтгэдэг;

    • R1, T1, R2 ба D1 нь боол төхөөрөмжийг дахин тохируулах оролтыг өгдөг. Энд IC1 - P7 дээрх идэвхтэй өндөр импульс нь U1 -ийг дахин тохируулах болно.
    • R3, R4 нь TX/RX шугамыг програмчлах зориулалттай төхөөрөмжийн хязгаарлах эсэргүүцэл юм.
    • C5 ба R7 нь Arduino IDE -д хавсаргасан FTDI төхөөрөмжийн DTR шугамын импульсээр U1 -ийг автоматаар програмчлах боломжийг олгодог.
    • R5 ба R6 бол APDS9960 -ийн C6 -тай I2C татах эсэргүүцэл бөгөөд орон нутгийн нийлүүлэлтийн төмөр замыг салгах боломжийг олгодог.
    • U1, C1, C2, Q1 нь суулгагдсан Arduino Uno -ийг бүрдүүлдэг бөгөөд энэ нь цаг юм.
    • Эцэст нь C3 ба C4 нь U1 -ийн орон нутгийн нийлүүлэлтийн төмөр замыг салгах боломжийг олгодог.

Алхам 2: Програм хангамжийн тойм

Програм хангамжийн тойм
Програм хангамжийн тойм
Програм хангамжийн тойм
Програм хангамжийн тойм
Програм хангамжийн тойм
Програм хангамжийн тойм

Оршил

Энэхүү эх кодыг амжилттай эмхэтгэхийн тулд суулгагдсан Arduino Uno U1 програмчлахын тулд танд дараах нэмэлт номын сан хэрэгтэй болно;

SparkFun_APDS9960.h

  • Оруулсан: Стив Куинн
  • Зорилго: Энэ бол jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library-аас салгасан SparkFun APDS9960 мэдрэгчийн салаа хувилбар юм. Энэ нь дибаг хийхэд туслах хэд хэдэн өөрчлөлттэй бөгөөд хуурамч өдөөлтийг багасгах мэдрэмтгий бус детектортой.
  • Хаанаас:

APDS9960_NonBlocking.h

  • Оруулсан: Стив Куинн
  • Зорилго: APDS9960 Gesture Sensor-ийн энэхүү хаалтгүй хэрэгжилтийг Arduino код дээрээ оруулах цэвэр интерфэйсийг хангаж өгдөг.
  • Хаанаас:

Хэрэв та үүнд хэрхэн хүрэхээ мэдэхгүй байгаа бол суулгагдсан Arduino Uno (ATMega328P) микроконтроллерыг хэрхэн програмчлах талаар дараах зааврыг үзнэ үү.

ATTINY85, ATTINY84, ATMEGA328P програмчлах нь: ARDUINO ISP IS

Функциональ тойм

ATMega328P суулгагдсан боолын микроконтроллер нь ADPS9960 -аас INT шугамыг санал болгодог. Энэ шугам буурахад микроконтроллер ADPS9960 регистрүүдийг уншиж, дохио зангаа зөв хийгдсэн эсэхийг тодорхойлдог. Хэрэв хүчин төгөлдөр дохио илэрсэн бол энэ дохионы код 0x0… 0x6, 0xF -ийг В порт дээр байрлуулж, 'nGestureAvailable' -ийг доогуур байна.

Мастер төхөөрөмж нь 'nGestureAvailable' идэвхтэй байгааг харахдаа В порт дээрх утгыг уншиж, дараа нь өгөгдөл хүлээн авснаа хүлээн зөвшөөрөхийн тулд 'nGestureClear' товчийг дарна.

Боол төхөөрөмж дараа нь 'nGestureAvailable' -г өндөр болгож, B. Порт 5 дээрх өгөгдлийг цэвэрлэнэ. Зураг 5 нь логик анализатороос бүрэн илрүүлэх/унших мөчлөгийн үед авсан дэлгэцийг харуулдаг.

Кодын тойм

Дээрх 1 -р зурагт U1 -д суулгагдсан боол Arduino Uno програм хангамж хэрхэн ажилладаг, 2 -р зураг хоёр үндсэн/урд талын даалгавар хэрхэн хоорондоо харилцан уялдаатай байгааг нарийвчлан харуулав. Зураг 3 бол APDS9960_NonBlockinglibrary -ийг хэрхэн ашиглахыг тодорхойлсон кодын хэсэг юм. 4 -р зураг нь Arduino Uno Digital Pins болон ATMega328P дээрх бодит тоног төхөөрөмжийн голуудын хоорондох зураглалыг өгдөг.

Суулгасан боолын микроконтроллер нь APDS9960 -ийг эхлүүлж, дохио зангаа нь INT гаралтыг идэвхжүүлж, түүний I/O -ийг тохируулж, INT0 векторыг таслахын тулд GESTURE_CLEAR () тасалдлын үйлчилгээний горимыг (ISR) хавсаргана., үүнийг унах ирмэгийн гох болгож тохируулж байна. Энэ нь үндсэн төхөөрөмжөөс nGestureClear оролтыг бий болгодог.

APDS9960 -аас тасалдсан гаралтын 'INT' pin нь U1 оролт болгон тохируулагдсан Digital Pin 4, Hardware IC Pin 6 -тэй холбогдсон байна.

Digital pin 7, Hardware IC pin 13 дээрх 'nGestureAvailable' дохионы шугамыг гаралт болгон тохируулсан бөгөөд идэвхгүй (идэвхгүй) гэж тохируулсан болно.

Эцэст нь В порт 0… 3 битүүдийг гаралт болгон тохируулж, хамгийн бага хэмжээнд тохируулна. Эдгээр нь илрүүлсэн янз бүрийн дохио зангаа хэлбэрийг илэрхийлдэг өгөгдлийн цоорхойг бүрдүүлдэг; Байхгүй = 0x0, Алдаа = 0xF, Дээш = 0х1, Доош = 0х2, Зүүн = 0х3, Баруун = 0х4, Ойролцоо = 0х5 ба Алс = 0х6.

Дижитал зүү 4 -ийг унших замаар APDS9960 Interrupt гаралтын INT -ийг тасралтгүй санал асуулгад хамруулдаг "Loop" үндсэн даалгаврыг төлөвлөсөн болно. APDS9960 -аас INT гаралт идэвхгүй болох үед мэдрэгч идэвхжсэнийг илтгэнэ.) 'with it's while (1) {}; эцэс төгсгөлгүй гогцоо.

Хэрэв хүчин төгөлдөр зангаа илрүүлсэн бол энэ утгыг В портод бичээд 'nGestureAvailable' гаралтыг баталгаажуулж, 'bGestureAvailable' логик семафорыг тохируулж, цаашид ямар нэгэн дохио зангаа бүртгэхээс сэргийлнэ.

Мастер идэвхтэй 'nGestureAvailable' гаралтыг илрүүлсний дараа энэ шинэ утгыг уншиж 'nGestureClear' идэвхтэй доод түвшинг импульслэнэ. Энэ унаж буй ирмэг нь "ISR GESTURE_CLEAR ()" урд талын даалгаврыг өдөөж, "Loop" арын даалгаврын гүйцэтгэлийг түр зогсоох, В порт, "bGestureAvailable" семафор болон "nGestureAvailable" гаралтыг цэвэрлэх хуваарийг гаргах болно.

"GESTURE_CLEAR ()" урд талын даалгаврыг одоо түр зогсоосон бөгөөд "Loop" арын даалгаврыг дахин төлөвлөсөн байна. APDS9960 -ийн цаашдын дохио зангаа одоо мэдрэгдэж байна.

Ийм байдлаар тасалдсан өдөөгдсөн урд/арын даалгавруудыг ашигласнаар боолын төхөөрөмжийн 'readGesture ()' дахь хязгааргүй давталт нь үндсэн төхөөрөмжийг ажиллуулахад нөлөөлөхгүй бөгөөд боолын төхөөрөмжийг ажиллуулахад саад болохгүй. Энэ нь маш энгийн бодит цагийн үйлдлийн системийн (RTOS) үндэс суурийг бүрдүүлдэг.

Тэмдэглэл: 'n' угтвар нь "nGestureAvailable" шиг идэвхтэй доод түвшинг илэрхийлсэн гэсэн үг юм.

Алхам 3: Блоклохгүй APDS9960 дохио зангаа мэдрэх төхөөрөмжийг турших

Блоклохгүй APDS9960 дохио зангаа мэдрэх төхөөрөмжийг туршиж байна
Блоклохгүй APDS9960 дохио зангаа мэдрэх төхөөрөмжийг туршиж байна
Блоклохгүй APDS9960 дохио зангаа мэдрэх төхөөрөмжийг туршиж байна
Блоклохгүй APDS9960 дохио зангаа мэдрэх төхөөрөмжийг туршиж байна
Блоклохгүй APDS9960 дохио зангаа мэдрэх төхөөрөмжийг туршиж байна
Блоклохгүй APDS9960 дохио зангаа мэдрэх төхөөрөмжийг туршиж байна
Блоклохгүй APDS9960 дохио зангаа мэдрэх төхөөрөмжийг туршиж байна
Блоклохгүй APDS9960 дохио зангаа мэдрэх төхөөрөмжийг туршиж байна

Оршил

APDS9960 модуль нь +5v-ээр хангагдсан боловч самбар дээрх +3v3 зохицуулагчийг ашигладаг бөгөөд энэ нь I2C шугам нь +3v3-тэй нийцдэг бөгөөд +5v биш юм. Тиймээс би түвшний шилжүүлэгчийн хэрэгцээг арилгахын тулд +3v3 нийцтэй Arduino Due -ийг туршилтын микро хянагч болгон ашиглахаар шийдсэн юм.

Хэрэв та жинхэнэ Arduino Uno -ийг ашиглахыг хүсч байвал I2C шугамыг U1 рүү шилжүүлэх шаардлагатай болно. Дараах зааварчилгааг үзнэ үү, энд би I2C ашиглах талаар олон практик зөвлөмжийг өгдөг ашигтай слайд (I2C_LCD_With_Arduino) хавсаргасан болно.

I2C интерфэйсийн туршилт

Дээрх 1 ба 2 -р зураг нь I2C интерфэйсийн системийг хэрхэн тохируулах, програмчлахыг харуулав. Та эхлээд APDS9960_NonBlocking номын санг татаж суулгах хэрэгтэй болно. энд

Зэрэгцээ интерфэйсийн туршилт

Зэрэгцээ интерфэйсийн хувьд 3 ба 4 -р зурагт мөн адил нарийвчилсан мэдээлэл оруулсан болно

Алхам 4: Дүгнэлт

Дүгнэлт
Дүгнэлт

Ерөнхий

Код нь сайн ажилладаг бөгөөд дохио зангаа ямар ч хуурамч эерэг зүйлгүйгээр хариу үйлдэл үзүүлдэг. Энэ нь миний дараагийн төсөлд боол төхөөрөмж болж хэдэн долоо хоног ажиллаж байна. Би олон янзын бүтэлгүйтлийн горимыг туршиж үзсэн (мөн Quinn-ийн гэр бүлийн сониуч зан туршлагатай) нь өмнө нь ESP8266-12-ийг дахин тохируулж, сөрөг нөлөө үзүүлээгүй.

Боломжит сайжруулалтууд

  • Ойлгомжтой. APDS9960 Gesture Sensor номын санг хаахгүй байхаар дахин бичнэ үү.

    Үнэндээ би Broadcom -тэй холбоо барьсан бөгөөд тэр намайг орон нутгийн дистрибьюторт хандаж, миний дэмжлэг хүссэн хүсэлтийг тэр даруй үл тоомсорлов, би зүгээр л SparkFun эсвэл AdaFruit биш гэж бодож байна. Тиймээс үүнийг хэсэг хугацаанд хүлээх хэрэгтэй болно

  • Кодыг жижиг боолын микроконтроллер руу оруулна уу. ATMega328P -ийг нэг даалгаварт ашиглах нь арай л хэтрүүлсэн хэрэг болно. Би эхлээд ATTiny84 -ийг харсан боловч кодыг эмхэтгэсэн хэмжээ нь хилийн шугаманд тохирсон болохыг мэдэрсэн тул үүнийг ашиглахаа больсон. Өөр I2C номын сантай ажиллахын тулд APDS9960 номын санг өөрчлөх шаардлагатай болно.

Алхам 5: Ашигласан материал

Суулгасан arduino програмчлахад шаардлагатай (ATMega328P - U1)

SparkFun_APDS9960.h

  • Оруулсан: Стив Куинн
  • Зорилго: Энэ бол jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library-аас салгасан SparkFun APDS9960 мэдрэгчийн салаа хувилбар юм. Энэ нь дибаг хийхэд туслах хэд хэдэн өөрчлөлттэй бөгөөд хуурамч өдөөлтийг багасгах мэдрэмтгий бус детектортой.
  • Хаанаас:

Энэ хориглодоггүй функцийг өөрийн arduino код руу оруулж, ажилласан жишээнүүдийг өгөх шаардлагатай

APDS9960_NonBlocking.h

  • Оруулсан: Стив Куинн
  • Зорилго: APDS9960 Gesture Sensor-ийн энэхүү хаалтгүй хэрэгжилтийг Arduino код дээрээ оруулах цэвэр интерфэйсийг хангаж өгдөг.
  • Хаанаас:

Бодит цагийн үйлдлийн систем

https://en.wikipedia.org/wiki/Real-time_operating_system

APDS9960 мэдээллийн хуудас

https://cdn.sparkfun.com/assets/learn_tutorials/3/2/1/Avago-APDS-9960-datasheet.pdf

Зөвлөмж болгож буй: