Სარჩევი:

არა დაბლოკვის APDS9960 ჟესტების სენსორის განხორციელება: 5 ნაბიჯი
არა დაბლოკვის APDS9960 ჟესტების სენსორის განხორციელება: 5 ნაბიჯი

ვიდეო: არა დაბლოკვის APDS9960 ჟესტების სენსორის განხორციელება: 5 ნაბიჯი

ვიდეო: არა დაბლოკვის APDS9960 ჟესტების სენსორის განხორციელება: 5 ნაბიჯი
ვიდეო: ასე დაბლოკავ SMS რეკლამებს! 🔴 STOP SMS ! 2024, ივლისი
Anonim
არაბლოკირება APDS9960 ჟესტების სენსორის განხორციელება
არაბლოკირება APDS9960 ჟესტების სენსორის განხორციელება
არაბლოკირება APDS9960 ჟესტების სენსორის განხორციელება
არაბლოკირება APDS9960 ჟესტების სენსორის განხორციელება
არაბლოკირება APDS9960 ჟესტების სენსორის განხორციელება
არაბლოკირება APDS9960 ჟესტების სენსორის განხორციელება

პრეამბულა

ეს ინსტრუქცია დეტალურად აღწერს, თუ როგორ უნდა შექმნათ APDS9960 ჟესტების სენსორის არაბლოკირებული განხორციელება SparkFun_APDS-9960_Sensor_Arduino_Library- ის გამოყენებით.

შესავალი

ასე რომ თქვენ ალბათ ჰკითხავთ საკუთარ თავს რა არის დაბლოკვა? ან თუნდაც დაბლოკვა ამ საკითხში?

რაც უფრო მნიშვნელოვანია, რატომ არის მნიშვნელოვანი არა-დაბლოკვის უფლება?

კარგი, ასე რომ, როდესაც მიკროპროცესორი აწარმოებს პროგრამას, ის თანმიმდევრულად ასრულებს კოდის ხაზებს და ამით ახორციელებს ზარებს და ბრუნდება ფუნქციებიდან იმ თანმიმდევრობით, რომელშიც თქვენ დაწერეთ.

დაბლოკვის ზარი არის მხოლოდ ზარი ნებისმიერი სახის ფუნქციონირებისთვის, რომელიც იწვევს შესრულების შეჩერებას, რაც ნიშნავს ფუნქციის ზარს, სადაც აბონენტი არ განაახლებს შესრულებას, სანამ გამოძახებული ფუნქცია არ დასრულდება.

მაშ, რატომ არის ეს მნიშვნელოვანი?

იმ შემთხვევაში, როდესაც თქვენ დაწერეთ კოდი, რომელიც რეგულარულად უნდა შეასრულოს მრავალი ფუნქცია, როგორიცაა ტემპერატურის კითხვა, ღილაკის წაკითხვა და ეკრანის განახლება, თუ ეკრანის განახლების კოდი დაბლოკვის ზარი იქნება, თქვენი სისტემა არ რეაგირებს ღილაკზე დაჭერა და ტემპერატურის ცვლილებები, რადგან პროცესორი მთელ დროს ხარჯავს ელოდება ეკრანის განახლებას და არ წაიკითხავს ღილაკის სტატუსს ან უახლეს ტემპერატურას.

ჩემი მხრივ, მინდა შევქმნა MQTT WiFi- ს საშუალებით IoT დესკტოპის მოწყობილობა, რომელიც კითხულობს როგორც ადგილობრივ, ასევე დისტანციურ ტემპერატურას/ტენიანობას, გარე განათების დონეს, ბარომეტრულ წნევას, თვალყურს ადევნებს დროს, აჩვენებს ყველა ამ პარამეტრს LCD- ზე, შედიხართ uSD ბარათი რეალურ დროში, წაიკითხეთ ღილაკების შეყვანა, ჩაწერეთ გამომავალი LED- ები და აკონტროლეთ ჟესტები, რომ გააკონტროლონ საგნები ჩემს IoT ინფრასტრუქტურაში და ეს ყველაფერი კონტროლირებადი იყოს ESP8266-12– ით.

სამწუხაროდ, APDS9960 ბიბლიოთეკის მხოლოდ ორი წყარო ვიპოვე SparkFun და AdaFruit ბიბლიოთეკები, რომელთაგან ორივე ამოღებულია Avago– ს (ADPS9960 მწარმოებელი) პროგრამის კოდიდან და აქვს ზარი სახელწოდებით „readGesture“, რომელიც შეიცავს ცოტა ხანს (1) {}; მარყუჟი, რომელიც გამოიყენება ზემოხსენებულ პროექტში, იწვევს ESP8266-12E- ს გადატვირთვას, როდესაც ADPS9960 სენსორი გაჯერებული ხდება (ანუ. როდესაც ობიექტი სიახლოვეს რჩება, ან არის სხვა IR წყარო, რომელიც ანათებს სენსორს).

ამ ქცევის გადასაჭრელად, მე ავირჩიე ჟესტების დამუშავების გადატანა მეორე პროცესორზე, რომლითაც ESP8266-12E გახდა მთავარი მიკროკონტროლი და ეს სისტემა მონა, როგორც ეს მოცემულია სურათებში 1 და 2 ზემოთ, სისტემის მიმოხილვა და სისტემის კომპოზიციის დიაგრამები შესაბამისად რა სურათი 3 გვიჩვენებს პროტოტიპის სქემას.

იმისათვის, რომ შევზღუდო ცვლილებები, რომლებიც მჭირდებოდა ჩემს არსებულ კოდში, მე ასევე დავწერე შეფუთვის კლასი/ბიბლიოთეკა წარმოსახვით სახელწოდებით "APDS9960_NonBlocking".

რაც მოყვება არის დაბლოკვის ხსნარის დეტალური ახსნა.

რა ნაწილები მჭირდება?

თუ გსურთ შექმნათ I2C გადაწყვეტა, რომელიც მუშაობს APDS9960_NonBlocking ბიბლიოთეკასთან, დაგჭირდებათ შემდეგი ნაწილები.

  1. 1 off ATMega328P აქ
  2. 1 off PCF8574P აქ
  3. 6 off 10K რეზისტორების აქ
  4. 4 off 1K რეზისტორების აქ
  5. 1 ფასდაკლებით 1N914 დიოდი აქ
  6. 1 off PN2222 NPN ტრანზისტორი აქ
  7. 1 off 16MHz ბროლის აქ
  8. 2 off 0.1uF კონდენსატორები აქ
  9. 1 off 1000uF ელექტროლიტური კონდენსატორი აქ
  10. 1 off 10uF ელექტროლიტური კონდენსატორი აქ
  11. 2 off 22pF კონდენსატორები აქ

თუ გსურთ წაიკითხოთ ჟესტების სენსორის გამომავალი პარალელური ინტერფეისის საშუალებით, შეგიძლიათ ჩამოაგდოთ PCF8574P და სამი 10K რეზისტორი.

რა პროგრამული უზრუნველყოფა მჭირდება?

Arduino IDE 1.6.9

რა უნარები მჭირდება?

სისტემის დასაყენებლად გამოიყენეთ საწყისი კოდი (მოწოდებულია) და შექმენით საჭირო სქემა, თქვენ დაგჭირდებათ შემდეგი;

  • ელექტრონიკის მინიმალური ცოდნა,
  • არდუინოს ცოდნა და მისი IDE,
  • გაგება იმის შესახებ, თუ როგორ უნდა დაპროგრამდეს ჩაშენებული არდუინო (იხილეთ ინსტრუქციული 'პროგრამირება ATTiny85, ATTiny84 და ATMega328P: Arduino როგორც ISP')
  • გარკვეული მოთმინება.

გაშუქებული თემები

  • წრის მოკლე მიმოხილვა
  • მოკლე მიმოხილვა პროგრამული უზრუნველყოფის შესახებ
  • APDS9960 ჟესტების მგრძნობიარე მოწყობილობის ტესტირება
  • დასკვნა
  • ცნობები

ნაბიჯი 1: მიკროსქემის მიმოხილვა

მიკროსქემის მიმოხილვა
მიკროსქემის მიმოხილვა

წრე დაყოფილია ორ ნაწილად;

  • პირველი არის სერიული I2C პარალელური გარდაქმნა, რომელიც შესრულებულია რეზისტენტებით R8… 10 და IC1. აქ R8… R10 დააყენეთ I2C მისამართი 8 ბიტიანი I/O გაფართოების ჩიპისთვის IC1 და NXP PCF8574A. ამ მოწყობილობის მისამართების სწორი დიაპაზონი არის შესაბამისად 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- ს ავტომატურად დაპროგრამდეს U1 პულსის საშუალებით თანდართული FTDI მოწყობილობის DTR ხაზზე.
    • R5 და R6 არის I2C რეზისტორები APDS9960– ისთვის C6– ით, რომელიც უზრუნველყოფს ადგილობრივი მიწოდების სარკინიგზო დაშლას.
    • U1, C1, C2 და Q1 ქმნიან ჩამონტაჟებულ Arduino Uno– ს და მისი საათი შესაბამისად.
    • საბოლოოდ C3 და C4 უზრუნველყოფენ ადგილობრივი მიწოდების რკინიგზის დაშლას U1– ისთვის.

ნაბიჯი 2: პროგრამული უზრუნველყოფის მიმოხილვა

პროგრამული უზრუნველყოფის მიმოხილვა
პროგრამული უზრუნველყოფის მიმოხილვა
პროგრამული უზრუნველყოფის მიმოხილვა
პროგრამული უზრუნველყოფის მიმოხილვა
პროგრამული უზრუნველყოფის მიმოხილვა
პროგრამული უზრუნველყოფის მიმოხილვა

პრეამბულა

ამ კოდის წარმატებით შესადგენად დაგჭირდებათ შემდეგი დამატებითი ბიბლიოთეკები ჩაშენებული Arduino Uno U1- ის დასაპროგრამებლად;

SparkFun_APDS9960. სთ

  • ავტორი: სტივ ქუინი
  • მიზანი: ეს არის SparkFun APDS9960 სენსორის გამოტოვებული ვერსია jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library. მას აქვს რამოდენიმე მოდიფიკაცია გამართვის დასახმარებლად და აქვს სენსიბილიზებული დეტექტორი ყალბი გამომწვევის შესამცირებლად.
  • საიდან:

APDS9960_NonBlocking.h

  • ავტორი: სტივ ქუინი
  • დანიშნულება: უზრუნველყოფს სუფთა ინტერფეისს, რათა ჩაწეროთ APDS9960 ჟესტების სენსორის ეს არა ბლოკირება თქვენს Arduino კოდში.
  • საიდან:

იხილეთ შემდეგი ინსტრუქცია, თუ როგორ უნდა დაპროგრამდეს ჩადგმული Arduino Uno (ATMega328P) მიკროკონტროლერი, თუ არ იცით როგორ მიაღწიოთ ამას;

ATTINY85, ATTINY84 და ATMEGA328P პროგრამირება: ARDUINO AS ISP

ფუნქციური მიმოხილვა

ATMega328P ჩამონტაჟებული მონა მიკროკონტროლერი იკვლევს INT ხაზს ADPS9960– დან. როდესაც ეს ხაზი იკლებს მიკროკონტროლერი კითხულობს ADPS9960 რეგისტრებს და ადგენს არსებობდა თუ არა მოქმედი ჟესტი. თუ გამოვლენილია სწორი ჟესტი, კოდი ამ ჟესტისთვის 0x0… 0x6, 0xF მოთავსებულია B პორტში და 'nGestureAvailable' დაბალია.

როდესაც სამაგისტრო მოწყობილობა ხედავს, რომ 'nGestureAvailable' აქტიურია, ის კითხულობს მნიშვნელობას პორტში B, რის შედეგადაც დროებით დაბალია 'nGestureClear' მონაცემების მიღების დასადასტურებლად.

მონა მოწყობილობა შემდეგ უარყოფს „nGestureAvailable“მაღალს და წმენდს მონაცემებს პორტ B.– ზე ზემოთ. სურათი 5 გვიჩვენებს ლოგიკური ანალიზატორიდან ამოღებულ ეკრანს, სრული გამოვლენის/წაკითხვის ციკლის დროს.

კოდის მიმოხილვა

სურათი 1 დეტალურადაა აღწერილი, თუ როგორ ფუნქციონირებს პროგრამული უზრუნველყოფა U1 ჩამონტაჟებული მონა Arduino Uno, სურათ 2 -თან ერთად, როგორ ურთიერთქმედებს ორი ფონი/წინა პლანზე ამოცანები. სურათი 3 არის კოდის სეგმენტი, რომელიც ასახავს როგორ გამოვიყენოთ APDS9960_NonBlockinglibrary. სურათი 4 იძლევა რუქას Arduino Uno ციფრული ქინძისთავებისა და ფაქტობრივი აპარატურის ქინძისთავებს შორის ATMega328P.

ჩამონტაჟებული მონა მიკროკონტროლის გადატვირთვის შემდეგ იწყებს APDS9960- ს ჟესტების გამოვლენის საშუალებას მისცეს მისი INT გამომავალი და დააკონფიგურირებს მის I/O- ს, მიამაგრებს სერვისის შეწყვეტის რუტინას (ISR) 'GESTURE_CLEAR ()' ვექტორს INT0 (ციფრული პინი 2, აპარატურის IC pin 4), კონფიგურაცია დაცემის ზღვარზე. ეს ქმნის nGestureClear შეყვანას სამაგისტრო მოწყობილობიდან.

შეწყვეტის გამომავალი pin 'INT' APDS9960– დან უკავშირდება ციფრულ პინ 4 – ს, აპარატურის IC პინ 6, რომელიც კონფიგურირებულია როგორც შეყვანის U1.

"NGestureAvailable" სიგნალის ხაზი ციფრულ პინ 7-ზე, აპარატურის IC პინი 13 არის კონფიგურირებული როგორც გამომავალი და დაყენებულია მაღალი, არააქტიური (დემონსტრირებული).

საბოლოოდ პორტი B ბიტები 0… 3 შესაბამისად არის კონფიგურირებული როგორც გამომავალი და დაყენებულია დაბალ დონეზე. ეს აყალიბებს მონაცემებს, რომელიც წარმოადგენს ჟესტების სხვადასხვა ტიპს; არცერთი = 0x0, შეცდომა = 0xF, ზემოთ = 0x1, ქვემოთ = 0x2, მარცხნივ = 0x3, მარჯვნივ = 0x4, ახლოს = 0x5 და შორი = 0x6.

ფონური ამოცანა „მარყუჟი“არის დაგეგმილი, რომელიც მუდმივად აწარმოებს გამოკითხვას APDS9960– ის გამომავალი INT ციფრული პინ 4 – ის კითხვის საშუალებით.) 'with it while (1) {}; გაუთავებელი მარყუჟი.

თუ გამოვლენილია სწორი ჟესტი, ეს მნიშვნელობა იწერება პორტში B, გამოჩნდება "nGestureAvailable" გამომავალი და დადგენილია ლოგიკური სემფორი "bGestureAvailable", რაც ხელს უშლის შემდგომი ჟესტების შესვლას.

მას შემდეგ რაც ოსტატი ამოიცნობს აქტიურ 'nGestureAvailable' გამომავალს ის კითხულობს ამ ახალ მნიშვნელობას და pulses 'nGestureClear' აქტიური დაბალი. ეს ზღვარი იწვევს წინა პლანზე ამოცანის "ISR GESTURE_CLEAR ()" დაგეგმილ შეწყვეტას ფონური ამოცანის "მარყუჟის" შესრულების შეწყვეტაზე, პორტის B გაწმენდაზე, "bGestureAvailable" სემფორზე და "nGestureAvailable" გამომავალზე.

წინა ამოცანა "GESTURE_CLEAR ()" ახლა შეჩერებულია და ფონური ამოცანა "მარყუჟი" ხელახლა დაიგეგმა. 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_LCD_With_Arduino), რომელიც იძლევა უამრავ პრაქტიკულ რჩევას I2C– ის გამოყენების შესახებ.

I2C ინტერფეისის ტესტირება

ზემოთ მოყვანილი სურათები 1 და 2 გვიჩვენებს, თუ როგორ უნდა შეიქმნას და დაპროგრამდეს სისტემა I2C ინტერფეისისთვის. თქვენ ჯერ უნდა გადმოწეროთ და დააინსტალიროთ APDS9960_NonBlocking ბიბლიოთეკა. აქ

პარალელური ინტერფეისის ტესტირება

სურათები 3 და 4 დეტალურადაა იგივე პარალელური ინტერფეისისთვის

ნაბიჯი 4: დასკვნა

დასკვნა
დასკვნა

გენერალი

კოდი კარგად მუშაობს და ცნობს ჟესტებს საპასუხოდ ყოველგვარი ცრუ პოზიტივის გარეშე. ეს უკვე რამდენიმე კვირაა რაც მუშაობს, როგორც მონა მოწყობილობა ჩემს მომავალ პროექტში. მე შევეცადე მრავალი განსხვავებული წარუმატებლობის რეჟიმი (და ასევე ცნობისმოყვარე ქუინის საოჯახო მოგი), რასაც ადრე მოჰყვა ESP8266-12 გადატვირთვა, უარყოფითი ეფექტის გარეშე.

შესაძლო გაუმჯობესებები

  • აშკარა. ხელახლა ჩაწერეთ APDS9960 ჟესტების სენსორის ბიბლიოთეკა, რომ არ იყოს დაბლოკილი.

    ფაქტობრივად, მე დავუკავშირდი Broadcom- ს, რომელმაც ადგილობრივ დისტრიბუტორთან მიმიყვანა, რომელმაც დაუყოვნებლივ უგულებელყო ჩემი თხოვნა მხარდაჭერისთვის, მე უბრალოდ SparkFun ან AdaFruit არ ვარ. ასე რომ, ამას ალბათ ცოტა ხანი მოუწევს ლოდინი

  • გადაიტანეთ კოდი უფრო პატარა მონა მიკროკონტროლერში. ATMega328P– ის გამოყენება ერთი ამოცანისთვის ცოტა ზედმეტია. მიუხედავად იმისა, რომ მე თავდაპირველად შევხედე ATTiny84– ს, მოკლედ შევწყვიტე მისი გამოყენება, რადგან ვიგრძენი, რომ კოდის შედგენილი ზომა იყო სასაზღვრო ხაზის მორგება. დამატებით ზედნადებთან ერთად უნდა შეცვალოთ APDS9960 ბიბლიოთეკა სხვა I2C ბიბლიოთეკასთან სამუშაოდ.

ნაბიჯი 5: მითითებები

საჭიროა ჩაშენებული არდუინოს დაპროგრამება (ATMega328P - U1)

SparkFun_APDS9960. სთ

  • ავტორი: სტივ ქუინი
  • მიზანი: ეს არის SparkFun APDS9960 სენსორის გამოტოვებული ვერსია jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library. მას აქვს რამოდენიმე მოდიფიკაცია, რათა დაეხმაროს გამართვას და გააჩნია სენსიბილიზებული დეტექტორი, რათა შეამციროს ყალბი გამომწვევი.
  • საიდან:

საჭიროა ჩადოთ ეს დაბლოკვის ფუნქცია თქვენს არდუინოს კოდში და მიეცით დამუშავებული მაგალითები

APDS9960_NonBlocking.h

  • ავტორი: სტივ ქუინი
  • დანიშნულება: უზრუნველყოფს სუფთა ინტერფეისს, რათა ჩაწეროთ APDS9960 ჟესტების სენსორის ეს არა ბლოკირება თქვენს 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

გირჩევთ: