İçindekiler:

5 Telli Dirençli Dokunmatik Sensör: 10 Adım
5 Telli Dirençli Dokunmatik Sensör: 10 Adım

Video: 5 Telli Dirençli Dokunmatik Sensör: 10 Adım

Video: 5 Telli Dirençli Dokunmatik Sensör: 10 Adım
Video: Arduino Dersleri #10 Touch (Dokunma) Sensör Uygulaması (Tek Dokunuşla Servo Motor Kontrolü) 2024, Temmuz
Anonim
5 Telli Dirençli Dokunmatik Sensör
5 Telli Dirençli Dokunmatik Sensör

Merhaba Merhaba!

Bu sitede çalışmayalı uzun zaman oldu ve görünüşe göre çok şey değişti! Sonunda başka bir proje için direksiyonun başına geçmeye hazırım ve sanırım bazı şeyleri kendim değiştirmenin zamanı geldi!

Bir süredir aklımda 271828'in Plate and Ball'una dayanan bir proje vardı, ancak bitmeden sensörler ve kontrol teorisi hakkında öğrenmem gereken çok şey var. Bir iki şey öğrendiğim sürece sizi de yanımda götürebilirim diye düşündüm!

Bu amaçla, bu öğreticiler için hedefim, daha parlak öğreticilerimle projenin kendisi için bir rekor arasında bir tür melez olacak. Her bir eğitim, bu yolculukta bir adım olacak ve kod geliştirme (tamamlanmış kod yerine) ve yol boyunca attığım yanlış adımlar gibi geçmişte üzerinde durduğum ayrıntıları içerecek.

Bu yeni proje için çok heyecanlıyım ve ne kadar iyi çalıştığını görmek beni çok mutlu etti!

Bugün sadece bir DP-32 ile çalışan basit bir 5 Telli dokunmatik panel alacağız.

Başlayalım!

Adım 1: İhtiyacınız Olan Şeyler

Neye ihtiyacınız olacak
Neye ihtiyacınız olacak

Bu öğretici, tek bir sensörün çalışmasını sağlamakla ilgili olduğundan, bir mikro denetleyici ve dokunmatik panelin ötesinde ihtiyaç duyacağınız fazla bir şey yoktur.

  • Bir mikrodenetleyici.

    DP32'mi yerleşik bir breadboard ile kullanıyorum çünkü prototiplemeyi inanılmaz derecede basit kılıyor

  • Çeşitli teller ve kablolar.

    Dokunmatik panelin yerleşik şerit kablosunu kullanabilirdim, ancak koparsa tüm panel işe yaramaz. Bunun yerine, yerleşik kablo üzerindeki stresi azaltmak için 6 telli bir kablo kullanıyorum

  • Titiz 5 telli dirençli dokunmatik panel!

    4 telli dirençli bir dokunmatik panelim vardı, ancak bunun için olan şerit kablo koptu

Ve bu kadar!

Adım 2: 5 kablolu Dirençli Dokunmatik Panel Nedir?

5 telli Dirençli Dokunmatik Panel Nedir?
5 telli Dirençli Dokunmatik Panel Nedir?
5 telli Dirençli Dokunmatik Panel Nedir?
5 telli Dirençli Dokunmatik Panel Nedir?
5 telli Dirençli Dokunmatik Panel Nedir?
5 telli Dirençli Dokunmatik Panel Nedir?

4 telli dokunmatik panel eğitimimi okuduysanız, dirençli dokunmatik sensör hakkında genel fikir sahibi olacaksınız, ancak 5 telli paneller ve 4 telli paneller biraz farklı çalışır.

Bu paneli beğendim çünkü tüm tel izlerini görebiliyorsun, bu da neyin ne yaptığını görmeyi kolaylaştırıyor. İlk resimde her izi farklı renklendirdim. Muhtemelen dört telin (pembe, sarı, turuncu ve mor) her birinin dört köşeden birine gittiğini görebilirsiniz. Ortadaki kablo (kırmızı) esnek sensör paneline gider.

İkinci resimde, dört kablodan ikisini (sağ üst ve sağ alt) yüksek voltaja (kırmızı ile gösterilmiştir), diğer ikisini (sol üst ve sol alt) düşük voltaja ayarladık. voltaj (mavi renkle gösterilmiştir). Bu, tüm panel boyunca bir voltaj gradyanı oluşturur. Bu durumda, gradyan X ekseni boyunca ilerler, dolayısıyla daha yüksek bir voltaj X ekseni boyunca daha yüksek bir konumu temsil eder.

Parmağımızı panele dokunduğumuzda, bu, X ekseni gradyanı boyunca bir yere bağlanan esnek sensörü bastırır. Mikrodenetleyicimizdeki voltaj sensörleri bu voltajı algılayabilir ve parmağınızın X ekseninde nereye dokunduğunu size söyleyebilir!

Üçüncü resimde, Y ekseni boyunca algılamamızı sağlamak için konfigürasyonun nasıl değiştiğini görebilirsiniz. Bu sayede parmağımızın 2 boyutlu uzayda nereye dokunduğunu anlayabiliriz!

Adım 3: Kablolama

kablolama
kablolama
kablolama
kablolama

Yukarıdaki resimlerde muhtemelen görebileceğiniz gibi, dört köşemi de kendi dijital çıkış pinlerine bağladım. Bu, onları ayrı ayrı yüksek veya düşük olarak ayarlamama izin verecek. Sensör pinim bir analog giriş pinine bağlanıyor. 4 telli bir dokunmatik ekranın aksine 5 telli dokunmatik ekranın güzel yanı, yalnızca bir analog pime ihtiyacınız varken, 4 telli bir dokunmatik ekranın 2 telli olması gerekir.

Kablolamanız elbette farklı olabilir, ancak kablolamam aşağıdaki gibidir:

Analog 0 (pin 6) Sensöre (orta pin) bağlanır

Dijital 3, Sağ Üste (en üstteki pin) bağlanır

Dijital 2, Sol Üste bağlanır (en üstteki ikinci pin)

Dijital 1, Alt-Sol'a bağlanır (ikinci en alttaki pin)

Dijital 0, Sağ Alt'a bağlanır (en alttaki pin)

Mikrodenetleyici ile panel arasında gitmek için 6 telli bir kablo kullandığımı tekrar belirtmekte fayda var. Bu kablonun üst pimini bağlanmadan bıraktım.

Adım 4: Yazılım Geliştirme

Yazılım geliştirme
Yazılım geliştirme

Geçmişte, kullanmanız için genellikle tamamlanmış bir yazılım dosyasını bırakırdım, belki de her şeyin ne yaptığını kısaca gözden geçirerek. Bunu sevmiyorum. Bu dizinin geliştirilmekte olan projelerle ilgili olmasını istiyorum ve bu amaçla bu yazılımın gerçek gelişimini baştan sona dahil edeceğim.

Her zamanki gibi, Digilent çekirdeği ile Arduino IDE'yi kullanacağım. Her bölüm, bir kod dosyası, ekran görüntüsü, ayrıca eklemelerin bir açıklamasını ve neyi başarmaya çalıştığımızı içerecektir.

Şimdilik, Örnekler klasöründe bulacağınız ile tamamen aynı, basit bir gecikme tarzı yanıp sönme programı ile başlıyorum. Yazdığım o uzun başlığı okursanız, bu süreçteki her adımın programı nihai hedefimize yaklaştıracak şekilde değiştireceğini göreceksiniz.

Adım 5: Durum Makinesi Yanıp Sönme

Durum Makinesi Yanıp Sönme
Durum Makinesi Yanıp Sönme

İlk hamlem, yanıp sönme işlevini "gecikme ()" temelli bir işlevden bir durum makinesine değiştirmek.

İfadeleri değiştirmeye alışkın olmayanlar için, if ifadesine benzer şekilde çalışır. Bu (turuncu kutuda) "durum" değişkenimizi (0'dan başlayan) test eder. Ardından mevcut durumumuz için duruma atlar. Durum 0 ve 2'nin LED'i açıp kapatmaktan (sırasıyla) sorumlu olduğunu, durum 1 ve 3'ün ise anahtarlar arasında beklemekten sorumlu olduğunu göreceksiniz.

Adım 6: Düğmenin Yanıp Sönmesi

Düğme Yanıp Sönme
Düğme Yanıp Sönme
Düğme Yanıp Sönme
Düğme Yanıp Sönme
Düğme Yanıp Sönme
Düğme Yanıp Sönme

Ardından, ışığın yanıp sönmesi için düğmenin kullanılmasını istedim. Bunu aşırı karmaşık hale getirmek yerine, tüm durumları birer birer aşağı kaydırdım (durum 0, durum 1 olur, vb.). Bunu yaparken çıkış durumlarını ve durumun kendisini artırmaya dikkat edin (bkz. resim 3).

İkinci "bekle" durumunu da sildim. Bu, düğmenin ışığı bir saniye boyunca açacağı ve kapandıktan hemen sonra düğmeye tekrar basabileceğiniz anlamına gelir.

Bu sistemin düğmeyi bizim için otomatik olarak devre dışı bıraktığını belirtmekte fayda var, çünkü düğmenin döngüyü tekrar tetikleyebileceği 0 durumuna dönmeden önce LED'in kapanmasını beklememiz gerekiyor.

Adım 7: Seri İletişim

Seri iletişim
Seri iletişim
Seri iletişim
Seri iletişim

Bu güncelleme çok küçük. Tek yapmak istediğim Seri bağlantı kurmak ve mesaj göndermekti. İlk resimde setup() fonksiyonunda Serial başlattığımı görebilirsiniz. Durum makinemizin içinde, bilgisayara seri olarak basit mesajlar gönderecek olan durum 1 ve 3'e satırlar ekledim.

Adım 8: Koordinatları Okuma

Koordinatları Okuma
Koordinatları Okuma
Koordinatları Okuma
Koordinatları Okuma
Koordinatları Okuma
Koordinatları Okuma
Koordinatları Okuma
Koordinatları Okuma

Son adımın kolay olması iyi, çünkü bu bir sersemlikti.

Başlamak için, hem dokunmatik panel hem de düğmemiz için bazı özel zaman değişkenleri dahil olmak üzere dokunmatik panelimiz için değişkenler ekledim. Nedenini birazdan göreceksiniz.

Durum makinesini tamamen yeniden yazdım. Koda bakmak biraz kafa karıştırıcı, bu yüzden ne yapıldığını göstermesi gereken bir blok diyagram ekledim.

Dikkat edilmesi gerekenler: Şimdi üç "bekleme" adımı var. Dokunmatik panelin her bir konfigürasyonu için, bir ölçüm yapmadan önce voltajların yerleşmesini sağlamak için bir tane ve bir tane de düğmeye doğru şekilde geri dönmesi için zaman tanıyın. Bu bekleme adımları, hem butona hem de dokunmatik panele kendi zaman değişkenlerini vermek istememin nedenidir.

Not: DEBOUNCE_TIME sabiti biraz düşük olabilir. Arttırmaktan çekinmeyin.

9. Adım: Temizleme

Temizlemek
Temizlemek
Temizlemek
Temizlemek
Temizlemek
Temizlemek

Bu proje için kodun son versiyonuna ulaştık!

Başlangıç olarak, geçen süreyi hesaplamak için loop_diff() adında bir fonksiyon ekledim. DP32'nin dahili saati işaretsiz bir uzundur ve son derece düşük bir ihtimal olsa da, bu kodun çalışma zamanı sırasında saatin bir ara dönme olasılığı vardır*. Bu durumda, btn_time veya panel_time'da kaydedilen zamandan sadece mevcut zamanı çıkarmak bize garip bir şey verecektir, bu yüzden döngülerin ne zaman oluştuğunu tespit etmek ve buna göre davranmak için loop_diff() yazdım.

Ayrıca küçük bir temizlik yaptım. Artık kullanılmayan "state_time" değişkenini kaldırdım. LED_BUILTIN etiketinden (Arduino standardıdır) PIN_LED1 etiketine (chipKit ve DP32 için standarttır) geçtim. Ayrıca, Seri aracılığıyla verilerimizi çok daha temiz hale getiren, süreci başlatma ve bitirmeyle ilgili tüm mesajları Seri aracılığıyla kaldırdım.

*Matematiği yıllar önce yaptım ve millis() işlevi için değişken döngüye girmeden önce bir haftalık sabit çalışma süresi gibi bir şey alacağını düşünüyorum.

Adım 10: Son Düşünceler

Son düşünceler
Son düşünceler

Ve bu kadar!

Takip ettiyseniz, artık mikrodenetleyicinize bağlı çalışan bir dokunmatik paneliniz olmalıdır! Bu küçük bir projeydi ama daha büyük bir projenin parçası. 271828'in Plate and Ball'u gibi bir şey üzerinde çalışıyorum ve bunun gerçekleşmesi için daha çok yolum var. Sizi tüm süreç boyunca götürmeye çalışacağım ve her parça kendi küçük projesi olmalı.

Bu benim için bir öğrenme süreci, bu yüzden düşüncelerinizi ve önerilerinizi aşağıdaki yorumlarda bırakmaktan çekinmeyin.

Teşekkürler, bir dahaki sefere görüşürüz!

Önerilen: