Arduino Kesintileri: 5 Adım

Arduino Kesintileri: 5 Adım

İçindekiler:

Anonim

Kesmeler

Bu, Arduino kodunuz için kesintilerin uygulanmasına ilişkin bir rehberdir. Kesintiler hakkında birçok iyi bilgi var, ancak bu kılavuz Arduino'nuzu küçük güç tüketimi ile çalıştırma serisinin bir parçası. Ve biz küçük demek istiyoruz. Uygulamaya bağlı olarak yıllarca süren operasyonlardan bahsediyoruz…. Düğme pili üzerinde. Gelecekteki gömülü ya da Nesnelerin İnterneti projelerinizi oluşturmak için bilmeniz gereken şeyler budur. Açıkçası, bir Arduino'nun israfını ne kadar güç harcadığı çok saçma. Bu kılavuz serisindeki çeşitli püf noktalarını kullanarak, güç tüketimini 1000 kattan daha fazla azaltabileceksiniz! Kulağa ilginç mi geliyor? O zaman bu sizin için bir rehber! Bu kılavuzdan hoşlanıyorsanız veya kendi projemizde kesintileri nasıl uyguladığımızı görmek istiyorsanız, şu adresteki web sitemize göz atın:

doteverything.co/

Neden Kesintilere İhtiyacım Var?

Cevap basit, gerçekten. Kesintilere ihtiyacınız var çünkü kesinti olmadan Arduino'nuzu uyku moduna geçiremez ve tekrar uyanmasını bekleyemezsiniz (genel olarak. Sınırlı durumlarda kesintisiz uykudan uyanmanın yolları vardır). Ve eğer uyuyamazsanız, yaz ortasında su vadisinde bulunan Ölüm Vadisi'nden geçen bir maratoncu gibi güç kaynağınız olacak. Uyku modu çok, çok az güç tüketir… ancak kurulum için özel çaba gerektirir. Bilmeniz gereken ilk şey, kesintilerden yararlanmak için kodunuzu nasıl yazacağınızdır, o zaman daha güçlü teknikleri kullanabilirsiniz.

Kesinti nedir?

Bir kesinti birkaç şeydir. Ancak, özünde, özel bir eylem gerçekleştiğinde çağrılan bir kod parçası. Hangi özel eylem? Temel olarak, belirli bir pimin voltajı değiştiğinde. Duemilanove / UNO'da kalifiye olabilen sadece 2 tane iğne var. Fakat gördüğünüz gibi, bu çok geniş bir gereksinimdir. Bu pimlerdeki voltajı değiştirmek için her şeyi kullanabilirsiniz. Bir düğme ile kullanıcı girişi olabilir, bir sensör gibi çevresel bir cihaz olabilir, başka bir mikroçip olabilir, hatta bir dahili zamanlayıcı olabilir. Kesintileri kullanmaya başlamak için yapmanız gereken ilk şey, uygulamanızın harici elektriksel bir tetikleyici olacak şekilde nasıl dönüştürülebileceğini bulmaktır. Genellikle Arduino'nuza arabirim eklemek istediğiniz diğer aygıtlar dikkatinizi çekmek için kesmeler kullanır. Arduino Projenize Bluetooth Nasıl Eklenir, daha önceki talimatımız, harici bir cihaza bu şekilde arabirim kurmanın mükemmel bir örneğidir.

Bu rehber, yangın söndürme için örnek bir devrenin nasıl bağlanacağını gösterecektir. Sonra bazı örnek kodlar vereceğiz. Umarım nasıl yapıldığını gördükten sonra, projenize nasıl bir kesinti uygulayacağınızı bulmak için doğru zihin çerçevesine girersiniz.

Güç Tüketimi umrunda değil. Hala kesintilere ihtiyacım var mı?

Evet! İşlemciyi uykuya sokmayı planlamıyor olsanız bile, kesintilere ihtiyacınız olabilir! Zamanlamaya bağlı bir uygulamanız varsa, kesintiler önemlidir. Bu, her x milisaniyede bir gerçekleşmesi gereken bir işlem yapmanız veya harici bir etkinlik gerçekleştikten hemen sonra gerçekleşmesi gereken bir işlem yapmanız gerektiği anlamına gelebilir. Arduino programcılığının temellerini biliyorsanız, işleminizi gerçekleştirmenin zamanının geldiğini kontrol etmek için neden bir süre döngüsü kullanamayacağınızı merak ediyor olabilirsiniz. Tipik çözüm, while döngüsünün pimin durumunu olabildiğince hızlı bir şekilde “yoklamasını” sağlamaktır. Bu yöntem genellikle işe yarar, ancak güvenilmez. Bir düğmeye basmak için oy kullanıyorsanız, ancak düğme halini tekrar kontrol etmek için çevreye gelmeden önce düğmeye basılır ve serbest bırakılırsa ne olur? Düğmeye basmayı kaçıracaksınız. Sensörden gelen bir sinyal gibi çok hızlı bir olay arıyorsanız ne olur? Sürekli olarak anket yapmak zorunda kalacaksınız ve programınız kritik olayı kaçırmaktan korktuğu için başka bir şey yapamaz. Ancak kesintilerde, olayı yakalamanız% 100 garantilidir. Bir kesme kullanmak aynı zamanda durumu sürekli olarak koruyan hesaplama gücünü kontrol etmekten ve süre döngüsünün diğer görevlerine daha hızlı ulaşmasını sağlamaktan kurtarır.

Gereçler:

Adım 1: Devreye Genel Bakış

İlk kesintinizi oluşturmak için inşa etmeniz gereken devre:

… Veya en azından inşa etmeniz gereken devre. Neyse ki çoğu Arduino anakartı hali hazırda bu konfigürasyonda yerleşik olarak LED ve rezistöre sahip. Yazılımda etkinleştirilebilirler. Ne yazık ki, yalnızca yerleşik işlevselliği kullanmak size olan bitenleri göstermiyor! Bu şemayı incelemek ve ne yaptığını anlamak için zaman ayırmaya değer. Bu kesin devrenin Arduino'da yerleşik olması, bunun ne kadar önemli olduğu konusunda size önemli bir ipucu vermelidir.

Bu devrenin en önemli kısmı, + 5V'a bağlı 20k dirençtir. Buna çekme direnci denir. Direnç + 5V yerine GND'ye bağlanmış olsaydı, aşağı çekme direnci olarak adlandırılırdı (Arduino'da aşağı çekme dirençleri bulunmuyor, harici olarak eklemelisiniz). Çekme direnci normalde + 5V'da bağlandığı pimi tutar. Tek başına bırakıldığında, pin her zaman YÜKSEK okuyacaktır. Pimi doğrudan GND'ye bağlarsanız (örneğin, düğmeyi kapatarak), pim 0V'a indirilir ve DÜŞÜK olarak okunur. Açılmamış olsaydık, anlamlı bir şey yapma düğmesini alamazdık. Herhangi bir Arduino pimi, pinMode (pin #, INPUT_PULLUP) belirtilerek dahili olarak + 5V'a bağlanabilir. Çekme sadece pim bir giriş olarak yapılandırıldığında anlamlıdır. Açılır pencereler hakkında daha fazla bilgi için DigitalPins sayfasını inceleyin.

INTERRUPT_PIN, Arduino UNO'nuzda (veya diğer 328p tabanlı Arduino'da) 2 veya 3 numaralı pinlere gitmelidir. Diğer Arduinos için, kesme yeteneğine sahip bir pin bulmak için bu sayfayı kontrol edin. Kod örneğimizde bunu pin 2'ye bağlayacağız. ANY_PIN'e bağlı LED basit bir devredir. Arduino'da zaten pime 13 bağlı bir LED vardır, bu yüzden bunu kullanacağız ancak devreyi farklı bir pim üzerinde kendi LED'inizle değiştirmekte özgür hissedeceğiz. Arduino LED'inin yanında “L” var.

Düğmeler genellikle 4 pime sahiptir - genellikle iki pim yalnızca düğmenin aynı tarafındaki diğer pime içten bağlanır. Düğmeye basarsanız ve hiçbir şey olmuyorsa, devreyi, düğmeye her basıldığında bağlanan pimlerin üzerinden değil, düğmeye basıldığında bağlanan pimlerin üzerinden gerçekten bağladığınızdan emin olun.

Adım 2: Gerçek Kablolama

Bütün bunlar göz önünde bulundurularak, dahili Arduino pullup'larını ve yerleşik LED'i kullanmak istiyorsanız, burada gerçekten bağlamanız gereken süper basit devre var.

Adım 3: Kod

Burada görülmeye değer birkaç şey var. En ilginç olanı, kesmeyi yapılandırdığımız satır 10'dur. attachInterrupt () 3 bağımsız değişken alır. Birincisi, kesme numarası, pin numarası değil. Bunun için endişelenmenize gerek yok, her zaman digitalPinToInterrupt (Pin #) kullandığınızdan emin olun, otomatik olarak çevrilecektir. Unutmayın, yalnızca belirli pimler kesme pimlerine çevrilebilir. İkinci argüman, kesme tetiklendiğinde kodunuzun atlama yapmasını istediğiniz işlevin adıdır. Bu işlevin 21 satırında nasıl tanımlandığını görebilirsiniz.

AttachInterrupt () işlevinin üçüncü argümanı bu durumda FALLING anahtar sözcüğüdür. Bu, pim 2'deki voltaj YÜKSEK'ten DÜŞÜK seviyeye geçtiğinde kesmenin tetikleneceği anlamına gelir. Voltaj DÜŞÜK'ten YÜKSEK'e geçtiğinde tetiklenecek olan YÜKSELTME'yi de belirleyebilirsiniz; veya voltaj her iki yönde de değiştiğinde tetikleyebilecek olan CHANGE'i kullanabilirsiniz. Devremizde, butona basıldığında, voltaj yüksek seviyeden aşağıya doğru gidecektir ve buton serbest bırakıldığında, yüksek seviyeden aşağıya doğru gidecektir. Düğmeye her basışta kodu iki kez tetiklemek istemeyiz; bu nedenle YÜKSELTME veya YANMA'yı seçeriz. Başvurunuz farklı bir şey için çağrı yapabilir.

Denemek

Kodu yüklerseniz, Seri İzleyiciyi ateşleyin ve LED'in tam olarak istediğimiz gibi davranmadığını fark edeceğiniz düğmeyi tıklayın. Düğmeye her basışta LED'in açılıp kapanmasını istiyoruz. Ancak, sizin için, düğmeye her bastığınızda birkaç kez yanıp sönme olasılığı artar. Bu olur çünkü düğmeler mükemmel değildir. Parmağınız düğmeye basıyor olabilir, ancak mikroskobik seviyeye bakarsanız, düğme tamamen kapanmadan önce temaslardan birkaç kez zıplıyordur. Her sıçrama bir kesmeyi tetikleyecektir. Sistemimiz o kadar kesin ve o kadar hassastır ki, yeni bir problem ortaya çıkardık! Bunu düzeltmek için, kesinti tespitini daha az hassas hale getirmek için ayrılma olarak bilinen bir rutin kullanıyoruz.

4. Adım: Örnek

İşte çırptığım bir tane. Mükemmel değil, kesinlikle daha iyi yollar var, ancak düğmeleri kullanmaya başlamanız için yeterli olmalı.

Temel fikir millis () işlevini kullanarak düğmeye en son basıldığında günlüğe kaydetmektir. (Millis () işlevi, çizim çalışmaya başladığından beri kaç milisaniyenin geçtiğini gösterir). Önceki kesme tetikleyicisi geçerli olandan önce 200 milisaniyeden daha az bir süre önce gerçekleştiyse, düğmenin zıplaması muhtemeldir, bu nedenle herhangi bir işlem yapılmaz. Aksi takdirde, her şey normal olur. Bir Kesme işlevinde değiştirmek istediğiniz tüm değişkenler, geçici ve ana döngü değer üzerinde asla aynı fikirde olmayacak şekilde geçici olarak bildirilmelidir.

Adım 5: Sırada Ne Var?

Bu kadar! Düğmeye her tıkladığınızda LED'in durumu değişmelidir. Artık bir çalışma kesintiniz var. Kesintileri projenize dahil etmenin yollarını hayal etmek size kalmış. Gördüğünüz gibi, zamanlama ve hesaplama gücü önemli olduğunda kesintiler çok önemlidir. Bir sonraki rehberde ATMega328p'nin ultra düşük güçte uyku moduna nasıl geçirileceğini ve bizi tekrar uyandırmak için yapılan kesintilere dayanmayı ele alacağız. O zamana kadar bize Instructables'ta abone olun ve www.doteverything.com adresindeki ürün sayfamızı inceleyin. Sizlere serin ve kullanışlı bulacağınızı umduğumuz bir İnternet İnternet cihazı olan Dot'u inşa ediyoruz ve bu kılavuzlar dizisi ile size donanımınızın kendi versiyonunu nasıl oluşturacağınızı tam olarak göstereceğiz!