Агуулгын хүснэгт:
- Алхам 1: Хэлхээний тойм
- Алхам 2: Програм хангамжийн тойм
- Алхам 3: Блоклохгүй APDS9960 дохио зангаа мэдрэх төхөөрөмжийг турших
- Алхам 4: Дүгнэлт
- Алхам 5: Ашигласан материал
Видео: Блоклохгүй APDS9960 дохио мэдрэгчийн хэрэгжилт: 5 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:04
Оршил
Энэхүү зааварчилгаанд 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 шийдлийг бүтээхийг хүсвэл танд дараах хэсгүүд хэрэгтэй болно.
- ATMega328P 1 хөнгөлөлтийг эндээс аваарай
- PCF8574P -ийг 1 хямдруулж аваарай
- Энд 6K 10K эсэргүүцэл
- 4 унтраалттай 1K резистор энд байна
- 1N914 диодыг 1 удаа эндээс аваарай
- PN2222 NPN транзистороос 1 хөнгөлөлт энд байна
- 1 унтраалга 16 МГц болор энд байна
- 0.1 кФ конденсаторыг 2 үнээр эндээс аваарай
- 1 хямдралтай 1000uF электролитийн конденсатор энд байна
- Энд 1 ширхэг 10uF электролитийн конденсатор байна
- 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 модуль нь +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
Зөвлөмж болгож буй:
Ухаалаг гэрлэн дохио: 6 алхам
Ухаалаг гэрлэн дохио: Би яагаад энэ төслийг хийсэн бэ Би Howest Kortijk -ийн оюутан. Энэ бол миний 2 -р семестрийн MCT сургуулийн төсөл бөгөөд би машинаа жолоодож, гудамжинд тайван байх үед бусад гэрлэн дохио байхгүй үед улаан гэрлийн өмнө зогсох нь ашиггүй болно
APDS9960: 6 алхамтай дохио зангаа мэдрэгчтэй ойролцоо зайг хэмжих
APDS9960 дохио мэдрэгчтэй зайны ойролцоо хэмжилт: Энэхүү гарын авлагад бид APDS9960, arduino, Visuino дохио мэдрэгч ашиглан зайг хэрхэн хэмжих талаар сурах болно
APDS9960 дохио мэдрэгчийг Arduino дээр хэрхэн ашиглах вэ: 7 алхам
APDS9960 Gesture Sensor -ийг Arduino -тэй хэрхэн ашиглах вэ: Энэхүү гарын авлагад бид Visuino програм хангамж ашиглан OLED дэлгэц дээр гар чиглэлийг харуулахын тулд Arduino -тэй APDS9960 Gesture Sensor -ийг хэрхэн ашиглах талаар сурах болно
DF дохио зангаа таних мэдрэгчийн шинэ өдөр: 5 алхам
DF дохио зангаа таних мэдрэгчийн шинэ өдөр: Хэдхэн хоногийн өмнө би зургаа харуулсны дагуу дохио таних мэдрэгчтэй болсон. Энэ нь хэдхэн хоногийн турш ашигласан, Би энэ Gravity гэдэгт үнэхээр итгэлтэй байна: Дохио зангаа & Мэдрэгч мэдрэгч бол сонгодог бүтээл юм! Шинжлэх ухааны уран зөгнөлтэй үргэлж хамт ирдэг зангаа таних чадвар
RaspberryPi ашиглан TicTacToe -ийн техник хангамжийн хэрэгжилт: 4 алхам
RaspberryPi ашиглан TicTacToe -ийн техник хангамжийн хэрэгжилт: Энэхүү төсөл нь бөөрөлзгөнө pi ашиглан хоёр тоглогчийг харуулсан хоёр өөр өнгийн LED ашиглан TicTacToe интерактив загварыг бий болгох зорилготой юм. Энд байгаа санаа бол үүнийг өргөн цар хүрээтэйгээр гудамжинд хэрэгжүүлэх явдал байв - 3x3 хэмжээтэй хагас бөмбөрцгийн сүлжээг төсөөлөөд үз дээ