Mundarija:
- 1 -qadam: O'chirish sxemasi
- 2 -qadam: dasturiy ta'minotga umumiy nuqtai
- 3 -qadam: Bloklanmaydigan APDS9960 imo -ishorali qurilmasini sinovdan o'tkazish
- 4 -qadam: Xulosa
- 5 -qadam: Adabiyotlar
Video: Bloklanmagan APDS9960 ishorali sensori: 5 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:27
Muqaddima
Bu yo'riqnomada SparkFun_APDS-9960_Sensor_Arduino_Library yordamida APDS9960 imo-ishorali sensorni blokirovka qilmaydigan dasturini qanday yaratish haqida batafsil ma'lumot berilgan.
Kirish
Demak, siz o'zingizga blokirovka qilmaydigan nima deb so'rayapsiz? Yoki bu uchun blokirovka qilyapsizmi?
Eng muhimi, nima uchun blokirovka qilmaslik kerak?
OK, shuning uchun mikroprotsessor dasturni ishga tushirganda, u ketma -ket kod satrlarini bajaradi va bunda siz yozgan tartib bo'yicha funktsiyalarga qo'ng'iroqlar qiladi va qaytadi.
Blokirovka qilish - bu bajarilishning to'xtatilishiga olib keladigan har qanday funktsiyaga qo'ng'iroq, ya'ni qo'ng'iroq qiluvchining chaqirilgan funksiya bajarilmaguncha bajarilishi davom etmaydi.
Xo'sh, nima uchun bu muhim?
Agar siz haroratni o'qish, tugmani o'qish va displeyni yangilash kabi ko'p funktsiyalarni muntazam ravishda bajarishi kerak bo'lgan kod yozgan bo'lsangiz, displeyni yangilash kodi qo'ng'iroqni blokirovka qilsa, sizning tizimingiz javob bermaydi. tugma bosilganda va harorat o'zgaradi, chunki protsessor butun vaqtini displey yangilanishini kutadi va tugma holati yoki oxirgi haroratni o'qimaydi.
O'z navbatida, MQTTni WiFi orqali ishlaydigan IoT ish stoli qurilmasini yaratmoqchiman, u mahalliy va masofadan turib harorat/namlik ko'rsatkichlarini, atrofdagi yorug'lik darajasini, barometrik bosimni o'qiydi, vaqtni kuzatib boradi, bu parametrlarning barchasini LCD displeyda ko'rsatadi, uSD -ga kirishni xohlaydi. real vaqt rejimida karta, tugma kirishini o'qish, chiqish LED-lariga yozish va IoT infratuzilmasidagi narsalarni boshqarish uchun imo-ishoralarni kuzatish va ularning hammasini ESP8266-12 boshqarishi.
Afsuski, men topa oladigan APDS9960 kutubxonasining ikkita manbasi - bu SparkFun va AdaFruit kutubxonalari edi, ularning ikkalasi ham Avago (ADPS9960 ishlab chiqaruvchisi) dastur kodidan olingan va "readGesture" nomli qo'ng'iroqni o'z ichiga oladi (1) {}; Yuqoridagi loyihada ishlatilganda, ADPS9960 sensori to'yinganida (ya'ni, ob'ekt yaqin joyda qolganda yoki sensorni yorituvchi boshqa IQ manbai bo'lganida) ESP8266-12E qayta o'rnatiladi.
Shunday qilib, bu xatti-harakatni hal qilish uchun men imo-ishoralarni qayta ishlashni ikkinchi protsessorga o'tkazishni tanladim, bunda ESP8266-12E asosiy mikrokontrollerga aylandi va bu tizim, yuqoridagi 1 va 2-rasmlarda tasvirlanganidek, tizimga umumiy nuqtai nazar va tizim tuzilishi diagrammalariga mos keladi.. 3 -rasmda prototip sxemasi ko'rsatilgan.
Mavjud kodimga o'zgartirishlar kiritishni cheklash uchun men "APDS9960_NonBlocking" deb nomlangan o'rash sinfini/kutubxonasini ham yozdim.
Quyida blokirovka qilinmaydigan yechim haqida batafsil tushuntirish berilgan.
Menga qanday qismlar kerak?
Agar siz APDS9960_NonBlocking kutubxonasi bilan ishlaydigan I2C yechimini qurmoqchi bo'lsangiz, sizga quyidagi qismlar kerak bo'ladi.
- Bu erda ATMega328P 1 ta chegirmali
- Bu erda PCF8574P uchun 1 chegirma
- Bu erda 6 ta 10K rezistorlar
- Bu erda 4 ta 1K rezistorlar
- Bu erda 1N914 diodasi o'chirilgan
- Bu erda PN2222 NPN tranzistoridan 1 ta chegirma
- Bu erda 16 MGts chastotali 1 ta kristal
- Bu erda 0,1uF kondansatkichlari 2 ta
- Bu erda 1 ta 1000uF elektrolitik kondansatkich
- Bu erda 1 off 10uF elektrolitik kondansatkich
- Bu erda 2 ta 22pF kondansatkichlari
Agar siz ishora sensori chiqishini parallel interfeys orqali o'qishni xohlasangiz, PCF8574P va uchta o'chirilgan 10K rezistorni tashlab qo'yishingiz mumkin.
Menga qanday dastur kerak?
Arduino IDE 1.6.9
Menga qanday ko'nikmalar kerak?
Tizimni sozlash uchun manba kodidan foydalaning (taqdim etilgan) va kerakli sxemani yaratish uchun sizga quyidagilar kerak bo'ladi;
- Elektronikani minimal tushunish,
- Arduino va uning IDE haqidagi bilimlari,
- O'rnatilgan Arduino -ni qanday dasturlash haqida tushuncha (Qarang: ATTiny85, ATTiny84 va ATMega328P dasturlash: Arduino ISP sifatida).
- Bir oz Sabr.
Mavzular qamrab olingan
- O'chirish davri haqida qisqacha ma'lumot
- Dasturiy ta'minot haqida qisqacha ma'lumot
- APDS9960 ishorali sezish moslamasini sinovdan o'tkazish
- Xulosa
- Manbalar
1 -qadam: O'chirish sxemasi
O'chirish ikki qismga bo'linadi;
- Birinchisi, R8… 10 va IC1 rezistorlari orqali amalga oshiriladigan parallel konvertatsiyaga ketma -ket I2C. Bu erda R8… R10 8 bitli IC1 va NXP PCF8574A kirish -chiqish kengaytirgichi uchun I2C manzilini o'rnatdi. Bu qurilma uchun tegishli manzil diapazoni mos ravishda 0x38… 0x3F. "I2C_APDS9960_TEST.ino" taqdim etilgan I2C dasturiy ta'minot misolida #define GESTURE_SENSOR_I2C_ADDRESS 'manzilini shu diapazonga mos ravishda o'zgartirish kerak bo'ladi.
-
Boshqa barcha komponentlar Arduino Uno o'rnatilgan qulni tashkil qiladi va quyidagi funktsiyalarni bajaradi;
- R1, T1, R2 va D1 qul qurilmani tiklash sozlamalarini beradi. Bu erda IC1 - P7 faol yuqori impuls U1ni qayta o'rnatishga majbur qiladi.
- R3, R4 - TX/RX liniyalarini dasturlash uchun o'rnatilgan qurilmalar uchun joriy cheklovli rezistorlar.
- C5 va R7 Arduino IDE -ga ulangan FTDI qurilmasining DTR chizig'idagi puls orqali avtomatik ravishda U1 ni dasturlash imkonini beradi.
- R5 va R6 - APDS9960 uchun C6 bilan I2C tortishish rezistorlari bo'lib, ular mahalliy etkazib beriladigan temir yo'lni ajratishni ta'minlaydi.
- U1, C1, C2 va Q1 mos ravishda Arduino Uno -ni tashkil qiladi va uning soati mos ravishda.
- Nihoyat, C3 va C4 U1 uchun mahalliy etkazib beriladigan temir yo'lni ajratishni ta'minlaydi.
2 -qadam: dasturiy ta'minotga umumiy nuqtai
Muqaddima
Ushbu manba kodini muvaffaqiyatli kompilyatsiya qilish uchun sizga Arduino Uno U1 o'rnatilgan dasturlash uchun quyidagi qo'shimcha kutubxonalar kerak bo'ladi;
SparkFun_APDS9960.h
- Muallif: Stiv Quinn
- Maqsad: Bu jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library-dan ajratilgan SparkFun APDS9960 Sensorining vilkalar versiyasi. Nosozliklarni tuzatishga yordam beradigan bir nechta o'zgartirishlar mavjud va soxta ishga tushirishni kamaytirish uchun sezgir bo'lmagan detektor mavjud.
- Manba:
APDS9960_NonBlocking.h
- Muallif: Stiv Quinn
- Maqsad: APDS9960 Gesture Sensor-ning blokirovka qilinmagan ilovasini Arduino kodingizga kiritish uchun toza interfeysni taqdim etadi.
- Manba:
Agar siz bunga qanday erishishni bilmasangiz, o'rnatilgan Arduino Uno (ATMega328P) mikrokontrollerini dasturlash bo'yicha quyidagi ko'rsatmaga qarang;
ATTINY85, ATTINY84 va ATMEGA328P: ARDUINO ISP sifatida
Funktsional nuqtai nazar
ATMega328P o'rnatilgan qul mikrokontroli ADPS9960 dan INT liniyasini so'roq qiladi. Bu chiziq pastga tushganda, mikrokontroller ADPS9960 registrlarini o'qiydi va to'g'ri ishoraning sezilganligini aniqlaydi. Agar yaroqli imo -ishora aniqlangan bo'lsa, bu ishoraning kodi 0x0… 0x6, 0xF B portiga qo'yiladi va "nGestureAvailable" past bo'ladi.
Asosiy qurilma "nGestureAvailable" faolligini ko'rganda, u B portidagi qiymatni o'qiydi, so'ngra ma'lumotlarning qabul qilinganligini tasdiqlash uchun "nGestureClear" past vaqtga past bosadi.
Keyin qul qurilmasi "nGestureAvailable" balandligini tasdiqlaydi va B portidagi ma'lumotlarni o'chiradi. Yuqoridagi 5-rasmda mantiq analizatoridan to'liq aniqlash/o'qish tsikli davomida olingan ekran tasviri ko'rsatilgan.
Kodni ko'rib chiqish
Yuqoridagi 1 -rasmda U1 dagi o'rnatilgan dasturiy ta'minot Arduino Uno, 2 -rasm bilan birga, ikkita fon/oldingi vazifalar qanday o'zaro ta'sir qilishi haqida batafsil ma'lumot berilgan. 3 -rasm - bu APDS9960_NonBlockinglibrary -dan qanday foydalanishni ko'rsatadigan kod segmenti. 4 -rasm Arduino Uno Digital Pins va ATMega328P -dagi haqiqiy apparat pinlari o'rtasidagi xaritani ko'rsatadi.
Qayta o'rnatilgandan so'ng, o'rnatilgan mikrokontroller APDS9960 -ni ishga tushiradi, bu esa INT -chiqishini ishga tushirishga imkon beradi va uning kirish -chiqish konfiguratsiyasini o'rnatadi, INT0 vektorini uzish uchun GESTURE_CLEAR () uzluksiz xizmat ko'rsatish tartibini (ISR) biriktiradi (Raqamli pin 2, Uskuna IC pin 4)., uni tushayotgan chekka tetiği uchun sozlash. Bu asosiy qurilmadan nGestureClear kirishini hosil qiladi.
APDS9960 -dan "INT" uzilish chiqish pimi U1 -ga kirish sifatida sozlangan Digital Pin 4, IC IC 6 -sonli ulanadi.
Digital pin 7, Hard IC IC pin 13-dagi "nGestureAvailable" signal chizig'i chiqish sifatida konfiguratsiya qilingan va yuqori, faol bo'lmagan (tasdiqlanmagan).
Nihoyat, Port B 0… 3 bitlari mos ravishda chiqish sifatida konfiguratsiya qilinadi va past darajaga o'rnatiladi. Bular har xil aniqlangan imo -ishoralar turlarini ifodalovchi ma'lumot to'pini hosil qiladi; Yo'q = 0x0, Xato = 0xF, Yuqoriga = 0x1, Pastga = 0x2, Chap = 0x3, O'ng = 0x4, Yaqin = 0x5 va Far = 0x6.
Raqamli pin 4 o'qish orqali APDS9960 Interrupt chiqish INTni doimiy ravishda so'roq qiladigan "Loop" fon vazifasi rejalashtirilgan. APDS9960 dan INT faolligi past bo'lganda, sensor ishga tushganligini bildiradi, mikrokontroller "readGesture () 'with while while (1) {}; cheksiz tsikl.
Agar yaroqli imo -ishora aniqlansa, bu qiymat B portiga yoziladi, "nGestureAvailable" chiqishi tasdiqlanadi va "bGestureAvailable" mantiqiy semafori o'rnatiladi, bu esa boshqa imo -ishoralarni qayd qilinishiga to'sqinlik qiladi.
Magistr faol "nGestureAvailable" chiqishini aniqlagandan so'ng, u bu yangi qiymatni o'qiydi va "nGestureClear" faol pastini uradi. Bu pasayish "ISR GESTURE_CLEAR ()" oldingi vazifasini "Loop" fon vazifasini bajarilishini to'xtatishni, B portini, "bGestureAvailable" semaforini va "nGestureAvailable" chiqishini to'xtatishni rejalashtiradi.
"GESTURE_CLEAR ()" oldingi vazifasi to'xtatildi va "Loop" fon vazifasi qayta rejalashtirildi. APDS9960 -dan boshqa imo -ishoralarni endi sezish mumkin.
To'xtatilgan ishga tushirilgan old/orqa vazifalarni shu tarzda ishlatganda, qul qurilmasining "readGesture ()" potentsial cheksiz aylanishi asosiy qurilmaning ishlashiga ta'sir qilmaydi va qo'shimcha qurilmaning ishlashiga to'sqinlik qilmaydi. Bu juda oddiy real vaqtda operatsion tizimning (RTOS) asosini tashkil qiladi.
Eslatma: "n" prefiksi "nGestureAvailable" da bo'lgani kabi faol past yoki tasdiqlangan degan ma'noni anglatadi.
3 -qadam: Bloklanmaydigan APDS9960 imo -ishorali qurilmasini sinovdan o'tkazish
Muqaddima
APDS9960 moduli +5v bilan ta'minlangan bo'lsa ham, u bortda +3v3 regulyatorini ishlatadi, ya'ni I2C liniyalari +3v3 mos keladi va +5v emas. Shuning uchun men daraja almashtirgichlarga bo'lgan ehtiyojni bartaraf qilish uchun +3v3 mos keladigan Arduino Due -ni mikrokontroller sifatida ishlatishni tanladim.
Agar siz haqiqiy Arduino Uno -dan foydalanishni xohlasangiz, I2C liniyalarini U1 darajasiga o'tkazishingiz kerak bo'ladi. I2C -dan foydalanish bo'yicha ko'plab amaliy maslahatlar beradigan foydali slaydlar to'plamini (I2C_LCD_With_Arduino) biriktirgan quyidagi ko'rsatmaga qarang.
I2C interfeysini sinab ko'rish
Yuqoridagi 1 va 2 -rasmlarda I2C interfeysi uchun tizimni qanday sozlash va dasturlash ko'rsatilgan. Avval APDS9960_NonBlocking kutubxonasini yuklab olishingiz va o'rnatishingiz kerak bo'ladi. Bu yerga
Parallel interfeyslarni sinab ko'rish
3 va 4 -rasmlar parallel interfeys uchun bir xil
4 -qadam: Xulosa
Umumiy
Kod yaxshi ishlaydi va imo -ishoralarni hech qanday yolg'on pozitsiyalarsiz aniqlaydi. Bu mening keyingi loyihamda qul qurilmasi sifatida bir necha haftadan buyon ishlamoqda. Men turli xil muvaffaqiyatsiz rejimlarni sinab ko'rdim (va Quinnning uy xo'jaliklari moggie ham shunday), natijada ESP8266-12 ni asl holatiga qaytarish natijasida hech qanday salbiy ta'sir ko'rsatilmagan.
Mumkin bo'lgan yaxshilanishlar
-
Aniq. APDS9960 Gesture Sensor kutubxonasini blokirovka qilmaslik uchun qayta yozing.
Aslida men Broadcom bilan bog'landim, u meni mahalliy distribyutor bilan bog'ladi, u mening qo'llab -quvvatlash so'rovimni darhol e'tiborsiz qoldirdi, menimcha, men SparkFun yoki AdaFruit emasman. Shunday qilib, ehtimol bu biroz kutishga to'g'ri keladi
- Kodni kichikroq mikrokontrollerga ulang. Bitta vazifa uchun ATMega328P -dan foydalanish biroz ortiqcha. Men dastlab ATTiny84 -ga qaragan bo'lsam -da, uni ishlatishdan to'xtadim, chunki kodning tuzilgan o'lchami chegara chizig'iga mos kelishini sezdim. Boshqa I2C kutubxonasi bilan ishlash uchun APDS9960 kutubxonasini o'zgartirish kerak bo'lgan qo'shimcha xarajatlar bilan.
5 -qadam: Adabiyotlar
O'rnatilgan arduino (ATMega328P - U1) ni dasturlash uchun zarur
SparkFun_APDS9960.h
- Muallif: Stiv Quinn
- Maqsad: Bu jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library-dan ajratilgan SparkFun APDS9960 Sensorining vilkalar versiyasi. Nosozliklarni tuzatishga yordam beradigan bir nechta o'zgartirishlar mavjud va soxta ishga tushirishni kamaytirish uchun sezgir bo'lmagan detektor mavjud.
- Manba:
Bu blokirovka qilmaydigan funksiyani arduino kodingizga kiritish va ishlangan misollar keltirish talab qilinadi
APDS9960_NonBlocking.h
- Muallif: Stiv Quinn
- Maqsad: APDS9960 Gesture Sensor-ning blokirovka qilinmagan ilovasini Arduino kodingizga kiritish uchun toza interfeysni taqdim etadi.
- Manba:
Haqiqiy vaqtda operatsion tizim
https://uz.wikipedia.org/wiki/Real-time_operating_system
APDS9960 ma'lumotlar jadvali
https://cdn.sparkfun.com/assets/learn_tutorials/3/2/1/Avago-APDS-9960-datasheet.pdf
PCF8574A ma'lumotlar jadvali
Tavsiya:
Arduino yordamida imo -ishorali boshqariladigan robot: 7 qadam
Arduino yordamida imo-ishorali boshqariladigan robot: Robotlar qurilish, harbiy, ishlab chiqarish, yig'ish va hokazo kabi ko'plab sohalarda qo'llaniladi. Robotlar avtonom yoki yarim avtonom bo'lishi mumkin. Avtonom robotlar hech qanday odam aralashuvini talab qilmaydi va vaziyatga qarab o'z -o'zidan harakat qila oladi. Se
Uyda DIY Arduino ishorali boshqaruv robotini qanday qilish kerak: 4 qadam
Uyda DIY Arduino ishorali boshqaruv robotini qanday qilish kerak: Uyda DIY Arduino ishorali boshqaruv robotini qanday qilish kerak. Ushbu loyihada men sizga DIY Arduino ishorali boshqaruv robotini yasashni ko'rsataman
APDS9960 ishorali sensori bilan masofani yaqinligini o'lchash: 6 qadam
APDS9960 ishorali sensori bilan masofani yaqinligini o'lchash: Ushbu qo'llanmada biz APDS9960, arduino va Visuino ishorali yordamida masofani o'lchashni o'rganamiz. Videoni tomosha qiling
Boshqariladigan imo -ishorali Roverni qanday qilish kerak: 4 qadam
Qanday qilib imo -ishorali boshqariladigan haydovchi yasash mumkin: Bu erda imo -ishorali boshqariladigan roverni yaratish bo'yicha ko'rsatmalar (tele bilan boshqariladigan rover). U bortda to'qnashuvni oldini olish sensori o'rnatilgan rover qurilmasidan iborat. Uzoq masofadan boshqarish pulti o'rniga uzatuvchi - bu qo'lqop kiyish mumkin bo'lgan salqin qo'lqop
Arduino bilan APDS9960 imo -ishorali sensoridan qanday foydalanish kerak: 7 qadam
Arduino bilan APDS9960 imo -ishorali sensorni qanday ishlatish kerak: Ushbu qo'llanmada biz Visuino dasturidan foydalanib OLED -displeyda qo'l yo'nalishlarini ko'rsatish uchun Arduino bilan APDS9960 imo -ishorali sensoridan qanday foydalanishni bilib olamiz. Videoni tomosha qiling