MicroPython ve Thonny IDE Kullanan ESP32 ile PIR Hareket Sensörü

Micropython Ve Thonny Ide Kullanan Esp32 Ile Pir Hareket Sensoru



ESP32, farklı sensörleri kontrol etmek ve okumak için birden fazla harici cihazı arayüzleyebilir. PIR veya hareket sensörü, ESP32 kullanarak belirli bir PIR sensörü aralığındaki hareketi algılamak için ESP32 ile arayüz kurabileceğimiz örneklerden biridir.

ESP32'yi PIR sensörüyle arayüzlemeye başlamadan önce, kesmelerin nasıl çalıştığını ve bunları ESP32'de nasıl okuyacağımızı ve ele alacağımızı bilmeliyiz. PIR'ın ESP32 ile çalışmasına ayrıntılı olarak değinelim.

İşte bu makalenin içeriği:







1: Kesintiler Nedir?



1.1: ESP32'deki Pinleri Keser



2: ESP32'de Kesme Çağırma – MicroPython





3: PIR Sensörünü ESP32 ile Arayüzleme – MicroPython

3.1: PIR Hareket Sensörü (HC-SR501)



3.2: Pin çıkışı HC-SR501

3.3: Kod

3.4: Çıktı

1: Kesintiler Nedir?

ESP32 programlamasında meydana gelen olayların çoğu sıralı olarak çalışır, bu da kodun satır satır yürütülmesi anlamına gelir. Sıralı kod yürütme sırasında çalışması gerekmeyen olayları işlemek ve kontrol etmek için Kesintiler kullanılmış.

Örneğin, herhangi bir özel olay meydana geldiğinde veya mikrodenetleyicinin dijital pinlerine bir tetik sinyali verildiğinde belirli bir görevi yürütmek istiyorsak kesme kullanırız.

Kesinti ile ESP32 giriş pininin dijital durumunu sürekli olarak kontrol etmemize gerek kalmaz. Bir kesinti meydana geldiğinde, işlemci ana programı durdurur ve ISR olarak bilinen yeni bir işlev çağrılır ( Kesinti Servis Rutini ). Bu ISR işlev bundan sonra oluşan kesmeyi işler ve ana programa geri döner ve onu çalıştırmaya başlar. ISR'nin örneklerinden biri, hareket algılandığında bir kesinti oluşturan PIR hareket sensörüdür.

1.1: ESP32'deki Pinleri Keser

Dokunmatik sensör veya basmalı düğme gibi herhangi bir donanım modülü, harici veya donanım kesintisine neden olabilir. Dokunma kesintileri, ESP32 pinlerinde bir dokunma algılandığında gerçekleşir veya bir tuşa veya basmalı düğmeye basıldığında da GPIO kesintisi kullanılabilir.

Bu yazıda, ESP32 ile PIR sensörü kullanılarak hareket algılandığında bir kesmeyi tetikleyeceğiz.

Genellikle gelen 6 SPI entegre pimi dışında neredeyse tüm GPIO pinleri 36 ESP32 kartının pin versiyonu, kesme çağrısı amacıyla kullanılamaz. Bu nedenle, harici kesmeyi almak için ESP32'de kullanılabilecek pinler şunlardır:

2: MicroPython Kullanarak ESP32'de Kesinti Çağırma

MicroPython kodunu kullanarak bir ESP32 kartını PIR sensörlü programlamak için. Bir kesme fonksiyonu tanımlamamız gerekiyor. Aşağıda, ESP32 kartı için bir kesinti tanımlamaya yardımcı olan bazı basit adımlar verilmiştir.

Adım 1: Kesinti işleme işlevini başlatın: Kesme işleme fonksiyonu, hızlı bir şekilde çalışabilmesi ve mümkün olan en kısa sürede ana programa dönebilmesi için kolay bir şekilde tanımlanmalıdır. Bu, çağrıldığında kodun içindeki herhangi bir yere erişilebilmesi için global bir değişken tanımlayarak yapılabilir.

Burada PIR sensörü olması durumunda GPIO pinini kullanacağız. küresel değişken. Kesme işlevi, bir pini argüman olarak alacak ve kesme fonksiyonunun oluşmasına neden olan GPIO pinini tanımlayacaktır.

def tanıtıcı_kesme ( toplu iğne ) :

Adım 2: Kesinti için GPIO pinini ayarlayın: GPIO pininin değerini elde etmek için, onu kullanarak girdi alacak bir nesne yaratmamız gerekiyor. Pin.IN pin sınıfımızdaki ikinci argüman olarak. Bunu başka herhangi bir adla yeniden adlandırabiliriz.

toplu iğne = Toplu iğne ( 13 , Toplu iğne. İÇİNDE )

Adım 3: irq() yöntemini kullanarak PIR sensörü için GPIO pinine kesme ekleyin:

Aşağıdaki komutu kullanarak kesmeyi daha önce tanımladığımız bir pime ayarlayabiliriz.

köprü. ırk ( tetiklemek = Toplu iğne. IRQ_YÜKSELEN , işleyici = işleme_kesme )

bu irq() kesmeyi pime eklemek için kullanılan yöntem. irq() iki farklı argümanı kabul eder:

  • Tetiklemek
  • işleyici

tetiklemek: Bu argüman, tetikleme modunu açıklar. Aşağıda üç mod bulunmaktadır:

  • Pin.IRQ_FALLING: Bir pin YÜKSEK'ten DÜŞÜK'e geçtiğinde, bir kesme başlatılır.
  • Pin.IRQ_RISING: Pin LOW'dan HIGH'a geçtiğinde bir kesme başlatılır.
  • Pin.IRQ_FALLING|Pin.IRQ_RISING: Bir pim durumunu değiştirdiğinde kesmeyi tetikleyin. Her iki pin de YÜKSEK veya DÜŞÜK'e gider.

işleyici: Bu işlev, bir kesme tetiklendiğinde çağrılır.

3: PIR Sensörü ile ESP32 Arayüzü

MicroPython kullanarak ESP32 ile kesme kavramlarını ele aldığımız gibi şimdi de PIR sensörünü ESP32 ile arayüzleyeceğiz. Burada kullanacağız Pin.IRQ_RISING PIR sensörü için MicroPython kodundaki mod, çünkü PIR sensörü her hareket algıladığında bir LED'i tetiklemek istiyoruz. Bu LED ayarlanan süre boyunca AÇIK kalacak, ardından KAPALI konuma gelecektir.

Aşağıdaki bileşenler gerekli olacaktır:

  • ESP32 geliştirme kartı
  • PIR hareket sensörü (HC-SR501)
  • 220 Ohm direnç
  • jumper telleri
  • Breadboard
  • NEDEN OLMUŞ

Şematik ESP32'li PIR sensörü için:

ESP32'nin PIR sensörlü pin konfigürasyonu:

  Tablo Açıklama otomatik olarak oluşturuldu

3.1: PIR Hareket Sensörü (HC-SR501)

PIR kısaltmasıdır Pasif Kızılötesi sensörler . Çevresindeki ısı miktarını algılayacak birlikte kullanılan iki piroelektrik sensör. Bu piroelektrik sensörlerin her ikisi de arka arkaya uzanır ve bir nesne menzillerine girdiğinde, ısı enerjisindeki bir değişiklik veya bu iki sensör arasındaki sinyal farkı, PIR sensör çıkışının DÜŞÜK olmasına neden olur. PIR çıkış pimi DÜŞÜK olduğunda, yürütmek için belirli bir talimat ayarlayabiliriz (LED yanıp söner).

  Diyagram Açıklaması otomatik olarak oluşturuldu

PIR sensörünün özellikleri aşağıdadır:

  • Hassasiyet, projenin konumuna bağlı olarak ayarlanabilir (fare veya yaprak hareketini algılama gibi)
  • PIR sensörü, bir nesneyi ne kadar süreyle algılayacağına göre ayarlanabilir
  • Ev güvenlik alarmlarında ve diğer termal tabanlı hareket algılama uygulamalarında yaygın olarak kullanılır.

3.2: Pin çıkışı HC-SR501

PIR HC-SR501, üç pimle gelir. Bunlardan ikisi Vcc ve GND için güç pini, biri ise tetik sinyali için çıkış pinidir.

PIR sensör pimlerinin açıklaması aşağıdadır:

Toplu iğne İsim Tanım
1 Vcc Sensör için giriş pini ESP32 Vin Pinine Bağlayın
iki DIŞARI Sensör Çıkışı
3 GND Sensör GND'si

3.3: Kod

Şimdi ESP32'yi programlamak için verilen kodu Thonny IDE editörüne veya başka bir MicroPython IDE'ye yazın ve ESP32'ye yükleyin.

makine içe aktarma pininden
itibaren zaman uykuyu içe aktar
hareket = Yanlış
def tanıtıcı_kesme ( toplu iğne ) :
küresel hareket
hareket = Doğru
küresel kesme_pin
kesinti_pin = toplu iğne
neden olmuş = Toplu iğne ( 4 , Toplu iğne. DIŞARI )
köprü = Toplu iğne ( 13 , Toplu iğne. İÇİNDE )
köprü. ırk ( tetiklemek = Toplu iğne. IRQ_YÜKSELEN , işleyici = işleme_kesme )
süre Doğru :
eğer hareket :
Yazdır ( 'HAREKET ALGILANDI' )
neden olmuş. değer ( 1 )
uyumak ( 5 )
neden olmuş. değer ( 0 )
Yazdır ( 'HAREKET DURDU' )
hareket = Yanlış

İlk önce ithal ettik toplu iğne makine modülünden sınıf ve uyumak Gecikme ekleme yöntemi. Daha sonra isimle bir değişken yaratılır. hareket. Bu değişken, bir hareketin algılanıp algılanmadığını algılar.

Sonra bir fonksiyon oluşturduk. handle_interrupt. PIR sensörü her hareket algıladığında, bu işlev etkinleştirilecektir. Giriş parametresi olarak bir pin alır ve kesmenin gerçekleşmesine neden olan pini gösterir.

Basit bir ifadeyle, PIR hareketi her algıladığında, işleme_kesme hareket değişkenini true olarak ayarlayacak ve kesintinin gerçekleşmesine neden olan pimi saklayacaktır. Hatırlanması gereken bir şey her zaman beyan ediyor hareket değişken global olarak çünkü kod boyunca gerekli.

İleriye doğru, biri LED pinlerini depolamak için ve ikincisi GPIO pin 13'te PIR sensör çıkışını alacak iki pin nesnesi oluşturduk. Ayrıca tetik pinini içinde ilan ettik. YÜKSELEN mod.

İçinde döngü kodun bir parçası olarak, hareket değişkeninin değerini kontrol edecek, gerçek olduğunda LED ESP32'nin 4. pimine bağlı olarak yanacaktır. Hareket durduysa LED 5 saniye sonra KAPALI konuma geçer.

3.4: Çıktı

Çıkış bölümünde, nesnenin PIR sensörünün menzili dışında olduğunu görebiliriz, bu nedenle NEDEN OLMUŞ Çevrildi KAPALI .

Şimdi PIR sensörü LED'i tarafından algılanan hareket dönecek ÜZERİNDE için 5 saniye bundan sonra herhangi bir hareket algılanmazsa kalır KAPALI bir sonraki tetik alınana kadar.

Aşağıdaki çıktı şu şekilde gösterilir: kabuk/terminal Thonny IDE'de.

  Grafik kullanıcı arabirimi, metin, uygulama Açıklama otomatik olarak oluşturulur

Çözüm

ESP32'li bir PIR sensörü, farklı şeylerin hareketini algılamaya yardımcı olabilir. ESP32 ile MicroPython'daki kesme işlevini kullanarak, belirli bir GPIO pininde bir yanıtı tetikleyebiliriz. Değişiklik algılandığında kesme işlevi tetiklenecek ve bir LED yanacaktır.