Სარჩევი:
- ნაბიჯი 1: მიკროსქემის მიმოხილვა
- ნაბიჯი 2: პროგრამული უზრუნველყოფის მიმოხილვა
- ნაბიჯი 3: არა დაბლოკვის APDS9960 ჟესტების შემმოწმებელი მოწყობილობის ტესტირება
- ნაბიჯი 4: დასკვნა
- ნაბიჯი 5: მითითებები
ვიდეო: არა დაბლოკვის APDS9960 ჟესტების სენსორის განხორციელება: 5 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:19
პრეამბულა
ეს ინსტრუქცია დეტალურად აღწერს, თუ როგორ უნდა შექმნათ 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 off ATMega328P აქ
- 1 off PCF8574P აქ
- 6 off 10K რეზისტორების აქ
- 4 off 1K რეზისტორების აქ
- 1 ფასდაკლებით 1N914 დიოდი აქ
- 1 off PN2222 NPN ტრანზისტორი აქ
- 1 off 16MHz ბროლის აქ
- 2 off 0.1uF კონდენსატორები აქ
- 1 off 1000uF ელექტროლიტური კონდენსატორი აქ
- 1 off 10uF ელექტროლიტური კონდენსატორი აქ
- 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 მოდული მოწოდებულია +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
გირჩევთ:
გააკეთეთ მარტივი უსასრულობის სარკის კუბი - არა 3D ბეჭდვა და არა პროგრამირება: 15 ნაბიჯი (სურათებით)
გააკეთეთ მარტივი უსასრულობის სარკის კუბი | არა 3D ბეჭდვა და არა პროგრამირება: ყველას მოსწონს კარგი უსასრულობის კუბი, მაგრამ ისინი ისე გამოიყურებიან, როგორც ძნელი გასაკეთებელი. ჩემი მიზანი ამ ინსტრუქციულ პროგრამაში არის გაჩვენოთ ნაბიჯ-ნაბიჯ თუ როგორ უნდა გააკეთოთ ეს. არა მხოლოდ ეს, არამედ იმ მითითებებით, რასაც მე გაძლევთ, თქვენ შეძლებთ გააკეთოთ ერთი
როგორ გამოვიყენოთ APDS9960 ჟესტების სენსორი არდუინოსთან ერთად: 7 ნაბიჯი
როგორ გამოვიყენოთ APDS9960 ჟესტების სენსორი Arduino– სთან ერთად: ამ გაკვეთილში ჩვენ ვისწავლით თუ როგორ გამოვიყენოთ APDS9960 ჟესტების სენსორი Arduino– სთან ერთად Visuino პროგრამული უზრუნველყოფის გამოყენებით OLED ეკრანზე ხელის მითითებების გამოსახატავად. ნახეთ ვიდეო
KB-IDE: დაბლოკვის პროგრამა ESP32 დაფისთვის: 5 ნაბიჯი
KB-IDE: დაბლოკვის პროგრამა ESP32 დაფისთვის: 2019 წლის 15 ივნისს, MakerAsia იწყებს KB-IDE, ახალი IDE for ESP-IDF და Arduino IDE (ESP32 Core). KB-IDE არის სამმაგი რეჟიმი პროგრამირების IDE IoT დაფებისთვის. ამჟამად მხარს უჭერს ESP32 დაფებს. მომხმარებლებს შეუძლიათ პროგრამირება ბლოკის რეჟიმში (ვიზუალური პროგრამირება) და კოდი
მარტივი განხორციელება UI -- OLED ეკრანი ჯოისტიკით და ღილაკებით: 6 ნაბიჯი
მარტივი განხორციელება UI || OLED ეკრანი ჯოისტიკით და ღილაკებით: ამ მოდულს აქვს OLED დისპლეი ორი ღილაკით, 5 გზის ჯოისტიკით და 3 ღერძიანი ამაჩქარებელი. ეს სასარგებლოა პროექტის UI შექმნისას. ჰეი, რა ხდება ბიჭებო? აქარში აქ CETech– დან. დღეს ჩვენ ვაპირებთ შევხედოთ ყოვლისმომცველ მოდულს, რომელიც
მარტივია WiFI კონტროლის განხორციელება თქვენს სახლში: 5 ნაბიჯი
მარტივია თქვენს სახლში WiFI კონტროლის განხორციელება: ESP-01S არის იაფი და მარტივი უკაბელო გადაწყვეტა. სხვა სენსორებთან და გამტარებელთან ერთად, დისტანციური მონიტორინგი და კონტროლი მოხერხებულად შეიძლება განხორციელდეს. ამ პროექტში მე ვაპირებ ავაშენო ჭკვიანი გადამრთველი, რომელიც გააკონტროლებს გულშემატკივარს ESP-01S Rela