İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
Satın almak biraz zahmetli olsa da (çünkü birçok internet mağazasında mevcut değil), STM32 L432KC'yi tartışmayı gerekli buluyorum. Bu çip, ULTRA DÜŞÜK GÜÇ olduğundan özel ilgiyi hak ediyor. Ancak STM32'ye sahip olmayanlar için bu projede Arduino Uno ile değiştirilebilir. Bunu yapmak için, Kesme girişinin pinini değiştirmeniz yeterlidir.
Ardından STM32 L432KC ve bir kızılötesi sensör kullanarak bir RPM ölçer oluşturalım. Aynı program rüzgar hızını ölçmek için de kullanılabilir. Bu mikro denetleyicinin düşük güç özelliği, IOT için mükemmeldir.
Adım 1: Modüller
Bugünkü projemiz için Kızılötesi Modülün yanı sıra 8 haneli MAX7219CWG'yi kullanıyoruz.
2. Adım: STM32 NÜKLEO-L432KC
3. Adım: Gösteri
Montajımızda STM32, 8 haneli ekran ve darbe girişi var. Kızılötesi kartta bir fototransistör ve beyaz bir şeritten sıçrayarak ışığı yakalayan bir LED bulunur. Bu bant bir tekerleğe bağlıdır ve her dönüşte STM32 kesintisi tarafından yakalanacak bir darbe üretecektir.
Montajda, bant okuma sinyalinin gürültüsünün STM32'ye ulaşmasını önlemek için kullanılan bir diyot ve bir kondansatörümüz var, bu da açık ve kapalı yorumlamasını sağlayacak.
Gösteri, projemizi ve Minipa sayacını (her ikisi de çalışır durumda) gösterir.
Adım 4: Montaj
Adım 5: Program
Kızılötesi modülün her "dönüşte" STM32 L432KC'de bir kesinti tetikleyeceği bir program yapacağız ve ekranda RPM'yi görüntülemek için hesaplamalar yapacağız.
Adım 6: Kitaplıklar
Aşağıdaki "DigitLedDisplay" kitaplığını ekleyin.
Basitçe "Çizim >> Kitaplıkları Dahil Et >> Kitaplıkları Yönet …" seçeneğine erişin.
7. Adım: Kaynak Kodu
Kitaplıklar ve Değişkenler
DigitLedDisplay kitaplığını içeren kaynak kodunu başlatalım. Görüntüleme nesnesini göstereceğiz. Kesinti pinini 12 olacak şekilde ayarladım. Ayrıca herhangi bir çarpışma sorunu yaşamamak için hem RPM sayacı hem de süre için volatile bir operatör giriyorum.
/* DigitLedDisplay Kitaplığını Dahil Et */#include "DigitLedDisplay.h" /* Görüntülemek için Arduino Pin 7 - DIN, 6 - CS, 5 - CLK */ //DigitLedDisplay ld = DigitLedDisplay(7, 6, 5); //arduino DigitLedDisplay ld = DigitLedDisplay(4, 2, 3); //STM32 L432KC int pin = 12; //pino de interrupção (módulo IR) uçucu işaretsiz int rpm; //contador de rpm volatile imzasız uzun timeold; //tempo
Kurmak
Setup'ta görüntüleme işlemini yapılandırıyoruz, ayrıca kesintiyi Rising olarak yapılandırıyoruz.
geçersiz kurulum() {Serial.begin(115200); /* Parlaklığı min:1, max:15 olarak ayarla */ ld.setBright(10); /* Rakam sayısını ayarla */ ld.setDigitLimit(8); ld.printDigit(0); AttachInterrupt(dijitalPinToInterrupt(pin), interruptPin, RISING); devir = 0; timeold = millis(); }
Döngü
Son olarak ekranın güncellenmesi için 1 dakikada 1 aralığı belirliyoruz. Ekranı temizledikten sonra RPM'yi yazdırıyoruz. Kesmenin çağıracağı işlevi gerçekleştiriyoruz. RPM ve güncelleme süresini hesaplıyoruz.
geçersiz döngü() {gecikme(1000); ld.clear(); ld.printDigit(rpm); } void interruptPin() { rpm = 60*1000/(millis() - zaman aşımı); timeold = millis(); }
8. Adım: Dosyalar
Dosyaları indirin:
BEN HAYIR