Bir Düyməni Arduinoya Bağlayarkən Təmas Sıçramasından Necə Qurtulmaq Olar

Mündəricat:

Bir Düyməni Arduinoya Bağlayarkən Təmas Sıçramasından Necə Qurtulmaq Olar
Bir Düyməni Arduinoya Bağlayarkən Təmas Sıçramasından Necə Qurtulmaq Olar

Video: Bir Düyməni Arduinoya Bağlayarkən Təmas Sıçramasından Necə Qurtulmaq Olar

Video: Bir Düyməni Arduinoya Bağlayarkən Təmas Sıçramasından Necə Qurtulmaq Olar
Video: Arduino Nano and Sabertooth driver motor v2.0 Servo Library 2024, Aprel
Anonim

Artıq bir düyməni Arduinoya bağlamağa baxdıq və "sıçrayan" əlaqələr mövzusuna toxunduq. Bu, təkrarlanan düymələrə basmağa səbəb olan və düymə vurmalarını proqramlı şəkildə idarə etməyi çətinləşdirən çox cansıxıcı bir fenomendir. Əlaqə sıçrayışından necə qurtulacağımız barədə danışaq.

Sıçrama effekti ilə əlaqə saxlayın
Sıçrama effekti ilə əlaqə saxlayın

Zəruri

  • - Arduino;
  • - həssas düymə;
  • - nominal dəyəri 10 kOhm olan müqavimət;
  • - İşıq yayan diod;
  • - birləşdirici tellər.

Təlimat

Addım 1

Kontakt sıçrayış mexaniki açarlar, düymələr, keçid açarları və rölelərdə yaygın bir fenomendir. Kontaktların ümumiyyətlə elastikliyə sahib olan metallardan və ərintilərdən hazırlandığına görə fiziki olaraq bağlandıqda dərhal etibarlı bir əlaqə qurmurlar. Qısa müddət ərzində təmaslar bir neçə dəfə bağlanır və bir-birini dəf edir. Nəticədə, elektrik cərəyanı dərhal deyil, ardıcıl eniş-yoxuşdan sonra sabit bir vəziyyət alır. Bu keçici effektin müddəti təmas materialından, ölçüsündən və dizaynından asılıdır. Təsvir, toxunma düyməsinin kontaktları bağlandıqda tipik bir oscillogram göstərir. Sabit vəziyyətə keçid anından etibarən vaxtın bir neçə milisaniyə olduğu görülə bilər. Buna "sıçrayış" deyilir.

Bu təsir işıqlandırma, mühərriklər və ya digər ətalət sensorları və cihazlarını idarə etmək üçün elektrik dövrələrində nəzərə çarpmır. Ancaq məlumatların sürətli bir oxunması və işlənməsi olduğu dövrlərdə (frekansların "sıçrayış" impulsları ilə eyni qaydada və ya daha yüksək olduğu) bu bir problemdir. Xüsusilə 16 MHz-də işləyən Arduino UNO, 0-dan 1-ə keçid əvəzinə bir və sıfır ardıcıllığını qəbul edərək kontakt sıçrayışını tutmaqda əladır.

Bir düyməni basarkən sıçrayışla əlaqə saxlayın
Bir düyməni basarkən sıçrayışla əlaqə saxlayın

Addım 2

Kontakt sıçrayışın dövrənin düzgün işləməsinə necə təsir göstərdiyini görək. Aşağı açılan bir müqavimət dövrü istifadə edərək saat düyməsini Arduinoya bağlayaq. Düyməni basaraq LED-i yandıracağıq və düymə yenidən basılana qədər yanacağıq. Aydınlıq üçün, xarici bir LED-i rəqəmsal pin 13-ə bağlayırıq, baxmayaraq quraşdırılmış birindən imtina edilə bilər.

Bir çəkmə müqavimət dövrü istifadə edərək bir düyməni Arduinoya bağlamaq
Bir çəkmə müqavimət dövrü istifadə edərək bir düyməni Arduinoya bağlamaq

Addım 3

Bu vəzifəni yerinə yetirmək üçün ağla gələn ilk şey:

- düymənin əvvəlki vəziyyətini xatırlayın;

- mövcud vəziyyətlə müqayisə etmək;

- vəziyyət dəyişibsə, LED vəziyyətini dəyişdiririk.

Belə bir eskiz yazaq və Arduino yaddaşına yükləyək.

Dövrə açıldıqda, kontakt sıçrayışının təsiri dərhal görünür. LED-in düyməni basdıqdan dərhal sonra yanmadığı və ya yanaraq sonra söndüyü və ya düyməni basdıqdan dərhal sonra sönməməsi, ancaq açıq qalması ilə özünü göstərir. Ümumiyyətlə, dövrə sabit işləmir. Və LED-i açan bir tapşırıq üçün bu o qədər də vacib deyilsə, digər, daha ciddi tapşırıqlar üçün bu sadəcə qəbuledilməzdir.

Kontakt sıçrayışını nəzərə almadan işləmə düyməsini basaraq eskiz
Kontakt sıçrayışını nəzərə almadan işləmə düyməsini basaraq eskiz

Addım 4

Vəziyyəti düzəltməyə çalışacağıq. Kontakt sıçrayışının kontakt bağlandıqdan sonra bir neçə milisaniyə ərzində baş verdiyini bilirik. Düymənin vəziyyətini dəyişdirdikdən sonra 5 saniyə gözləyək. Bir adam üçün bu vaxt demək olar ki, bir anlıqdır və bir şəxsin bir düyməsini basmaq ümumiyyətlə daha uzun çəkir - bir neçə on milisaniyə. Və Arduino bu qədər qısa müddətdə əla işləyir və bu 5 saniyə bir düyməyə basaraq kontaktların sıçrayışını kəsməyə imkan verəcəkdir.

Bu eskizdə, girişin () düyməsini əvvəlki vəziyyətinə gətirdiyimiz debounce () prosedurunu (ingilis dilində "sıçrama" sadəcə "sıçrayış", "de" prefiksi əks proses deməkdir) elan edəcəyik. Bir düyməyə basma 5 msn-dən çox davam edirsə, bu, həqiqətən bir basışdır.

Mətbuatı aşkar edərək, LED vəziyyətini dəyişdiririk.

Eskizi Arduino lövhəsinə yükləyin. İndi hər şey daha yaxşıdır! Düymə uğursuz işləyir, basıldıqda, LED vəziyyəti istədiyimiz kimi dəyişir.

Kontakt sıçrayışını nəzərə alaraq bir düyməni basaraq işləmə eskizi
Kontakt sıçrayışını nəzərə alaraq bir düyməni basaraq işləmə eskizi

Addım 5

Bənzər funksionallıq Bounce2 kitabxanası kimi xüsusi kitabxanalar tərəfindən təmin edilir."Mənbələr" bölməsindəki linkdən və ya https://github.com/thomasfredericks/Bounce2 veb saytından yükləyə bilərsiniz. Kitabxananı quraşdırmaq üçün Arduino inkişaf mühitinin kitabxanalar qovluğuna yerləşdirin və IDE-ni yenidən başladın.

"Bounce2" kitabxanasında aşağıdakı üsullar var:

Sıçrama () - "Sıçrama" obyektinin başlanması;

boşluq intervalı (ms) - gecikmə vaxtını milisaniyələrlə təyin edir;

boş yerə qoşma (pin nömrəsi) - düymənin bağlı olduğu pimi təyin edir;

int update () - obyekti yeniləyir və pin vəziyyəti dəyişmişsə true, əks halda false verir;

int read () - pinin yeni vəziyyətini oxuyur.

Kitabxanadan istifadə edərək eskizimizi yenidən yazaq. Düymənin keçmiş vəziyyətini indiki ilə xatırlaya və müqayisə edə bilərsiniz, ancaq alqoritmi sadələşdirək. Düyməyə basıldıqda, presləri sayacağıq və hər tək basış LED-i açacaq və hər cüt basaraq da sönəcək. Bu eskiz qısa, oxunması asan və istifadəsi asan görünür.

Tövsiyə: