Arduino ile Akış Sensörünün Kullanılması
Arduino ile Akış Sensörünün Kullanılması
Birkaç Dikkat Edilmesi Gereken Noktalar:
Bu sensörü takmaktan atlamak için bir projede kullanıldığında göz önünde bulundurulması gereken birkaç nokta var.
• Bunlar dakikada 1 litreden az veya dakikada 30 litreden fazla bir akışı izleyemez.
• Sensör maksimum 2.0MPa (290 PSI) değerine sahiptir.
Nasıl Çalışır:
Sensörün kendisi çok basittir; Su aktığında akan küçük bir sineklik tekerleği vardır. Sineklik tekerleğindeki bir mıknatıs, her devirle çıkış telinden anlık bir nabız gönderen bir salon etki sensörünü tetikler. Litre başına 450 darbenin olduğunu bilerek, zaman içinde akış hızını veya geçen toplam hacmi veya her ikisini birden belirleyebiliriz!
Gerekli Parçalar:Bu eğitici birkaç ortak kısım gerektirecektir:
Bu derste tam boyutlu Arduino Montaj Plakalarımızdan birini de kullandık . Montaj plakası Arduino’nuzu ve breadboard’unuzu yan yana düzgünce sabit tutar ve daha organize bir prototip oluşturulmasına izin verir! |
ŞematikBu kullanışlı küçük şema, her şeyi nasıl bağlayacağımızı gösteriyor. Biraz bunaltıcı görünüyorsa endişelenmeyin, bu adım adım ilerleyeceğiz! |
Adım 2 – Sensörün Kablo DemetiBu özel sensör, bir konnektör ile tamamlanmış güzel bir uzun kablo demetine sahiptir. Bağlayıcının etrafını döşememize rağmen, bu sensörü bağlayıcısına bağlamak için Erkek / Erkek Prototipleme Tellerimizi kullanabiliriz. Alternatif olarak, herhangi bir uzun 0.100 ″ pitch breadboard uyumlu başlık pimleri de kullanılabilir. Telleri görsel olarak takip etmek çok daha kolay olduğu için bu yöntemi seçtik. Koşumun kendisi Kırmızı, Sarı ve Siyah tellere sahiptir. Ürün sayfasından kırmızı telin bir güç kablosu olduğunu, sarı telin sensörün çıkış teli olduğunu ve siyah telin bir toprak olduğunu biliyoruz . |
Adım 5 – Son BağlantıEklemek için son bir telimiz var – bu, çekme direncini ve sensör çıkışını Arduino’nun dijital girişine bağlar. Bu örnekte bir kesme pimi kullanacağız, bu yüzden Arduino Uno’da iğne 2’yi kullanmamız gerekecek. Farklı bir Arduino kullanıyorsanız lütfen hangi iğnelerin mevcut olduğunu görmek için bu tabloya bakın! |
|
Adım 7 – Kodun BaşlatılmasıŞimdi bağlantıyı bitirdik, bazı kodları yazmaya başlamamız gerekiyor. Arduino IDE kullanıyor olacağız, bu https://www.arduino.cc/en/Main/Software adresinden edinilebilir. “Dosya” ya tıklayarak ve “Örnekler / Temel / BareMinimum” ı seçerek bulunan “BareMinimum” çizimiyle başlayacağız. Bu taslak, Kurulum ve Döngü fonksiyonlarını içerdiği için harika bir başlangıç noktasıdır – gerisini biz yazacağız! |
Adım 8 – Sensör Nasıl Okunmalı?Bu algılayıcının, her defledir ve her dönüşün, 2.25mL akışkanın sensörü geçmesi için Arduino pimine (2) bir nabız çıkışı vereceğini biliyoruz, böylece debiyi hesaplamak, sadece devir / dakika olarak saymakla ilgilidir. 2.25mL ile çarpılıyor. Yani, bir Arduino ile RPM saymanın en iyi yolu nedir? Bu durumda kesme pimi çok faydalı olacaktır. Kesmeler çok uygun bir isme sahiptir – bir sinyalin alındığı anda bir görev gerçekleştirmenize (bir kod parçası çalıştırmanıza) izin verir, yani bir sensörden nabız saymaya çalıştığınızda harikadırlar. Kesmeleri kullanmak çok kolay – buna izin verelim! |
Adım 9 – Kodu YazmaIDE’de bulunan BareMinimum Sketch ile başlıyoruz, şöyle bir şeye benzemeliyiz: void setup () { // kurulum kodunu buraya bir kez çalıştırmak için buraya yerleştirin: } void loop () { // Ana kodunuzu tekrar tekrar çalıştırmak için buraya koyun: } Yani önce değerleri tutmak için bazı değişkenlere ihtiyacımız olacak: int flowPin = 2; // Bu Arduino'nun giriş pini çift akışlı; // Bu, hesaplamayı amaçladığımız değerdir. uçucu int sayımı; // Bu tamsayı, kesme işlemi sırasında doğru şekilde güncellendiğinden emin olmak için uçucu olarak ayarlanmalıdır. void setup () { // kurulum kodunu buraya bir kez çalıştırmak için buraya yerleştirin: } void loop () { // Ana kodunuzu tekrar tekrar çalıştırmak için buraya koyun: } Uçucu tamsayı “saymak”, test ettiğimiz her saniyede nabız sayısını sakladığımız yer kadar önemlidir. Uçucu kısım, birçoğunuz için yeni olabilir ve Değişim Servisleri Rutininde değişken güncellemelerin doğru bir şekilde yapılmasını sağlar. Bunun yanı sıra, başka bir tamsayı gibi davranır. Bir darbe alındığında her bir zaman artmasını isteyeceğiz, bu da, bir darbe alındığında kesintinin çalışacağı yeni bir fonksiyon yaratmamız gerektiği anlamına gelir: int flowPin = 2; // Bu Arduino'nun giriş pini çift akışlı; // Bu, hesaplamayı amaçladığımız değerdir. uçucu int sayımı; // Bu tamsayı, kesme işlemi sırasında doğru şekilde güncellendiğinden emin olmak için uçucu olarak ayarlanmalıdır. void setup () { // kurulum kodunu buraya bir kez çalıştırmak için buraya yerleştirin: } void loop () { // Ana kodunuzu tekrar tekrar çalıştırmak için buraya koyun: } boşluk Akışı () { ++ saymak; // Bu fonksiyon her çağrıldığında, "say" değerini 1 artır } Değişkeni takip eden “++”, program her zaman bu satırı çalıştığında, o değişkene 1 ekleyecektir – saymak için harika! Interrupt işlevi “Flow” fonksiyonunu çağırıyor, bu yüzden devam edelim ve interrupt’ı kodun kurulum bölümüne ekleyelim: int flowPin = 2; // Bu Arduino'nun giriş pini çift akışlı; // Bu, hesaplamayı amaçladığımız değerdir. uçucu int sayımı; // Bu tamsayı, kesme işlemi sırasında doğru şekilde güncellendiğinden emin olmak için uçucu olarak ayarlanmalıdır. void setup () { // kurulum kodunu buraya bir kez çalıştırmak için buraya yerleştirin: pinMode (flowPin, INPUT); // Pimi bir giriş olarak ayarlar attachInterrupt (0, Akış, RISING); // "Flow" işlevini çalıştırmak için Interrupt 0'ı (Arduino Uno'daki pin 2) yapılandırır } void loop () { // Ana kodunuzu tekrar tekrar çalıştırmak için buraya koyun: } boşluk Akışı () { ++ saymak; // Bu fonksiyon her çağrıldığında, "say" değerini 1 artır } Bu yüzden son ufaklık biraz daha fazla açıklama gerektirebilir: Açık olması gereken ilk şey Arduino Uno pin 2’de Interrupt 0’dır, bu yüzden eklediğimiz her iki kod satırı Arduino’daki aynı fiziksel pime atıfta bulunmaktadır. Temel olarak, iğnenin kesme işlemini başlatmadan önce bir giriş olarak ayarlanması gerekir. Bir sonraki satırda, “attachInterrupt” kullanarak kesmeyi konfigüre ediyoruz. Bu çizginin nasıl çalıştığını daha iyi göstermek için şunu düşünün: attachInterrupt (interrupt numarası, tetiklendiğinde çalıştırmak istediğiniz işlev, tetikleyici olarak ne koymak istediğiniz). Bu yüzden, pim düşükten yükseğe doğru (sensörden bir darbe geldiğinde) geçiş yaparken “Flow” u tetiklemek için interrupt 0 kullanıyoruz. Tetikleyicilerin tam listesi Arduino Öğrenim Merkezi’nde mevcuttur. Döngüde sürekli olarak çalışacak ana kodu yazmaya başlama zamanı: int flowPin = 2; // Bu Arduino'nun giriş pini çift akışlı; // Bu, hesaplamayı amaçladığımız değerdir. uçucu int sayımı; // Bu tamsayı, kesme işlemi sırasında doğru şekilde güncellendiğinden emin olmak için uçucu olarak ayarlanmalıdır. void setup () { // kurulum kodunu buraya bir kez çalıştırmak için buraya yerleştirin: pinMode (flowPin, INPUT); // Pimi bir giriş olarak ayarlar attachInterrupt (0, Akış, RISING); // "Flow" işlevini çalıştırmak için Interrupt 0'ı (Arduino Uno'daki pin 2) yapılandırır } void loop () { // Ana kodunuzu tekrar tekrar çalıştırmak için buraya koyun: sayısı = 0; // Sayacı sıfırlayın, tekrar 0'dan saymaya başlarız kesmeler (); // Arduino üzerinde kesintileri etkinleştirir gecikme (1000); // 1 saniye bekleyin noInterrupts (); // Arduino'daki kesintileri devre dışı bırak } boşluk Akışı () { ++ saymak; // Bu fonksiyon her çağrıldığında, "say" değerini 1 artır } Tamam, oraya yarım yol. Döngü tekrar tekrar çalıştığı için başlangıçta “sayım” değişkenimizi 0’a sıfırlamalıyız, son döngüden gelen darbelerin sayısını ileriye taşımak istemiyoruz. Bir sonraki satır kesintileri mümkün kılar, yani şimdi sensörün kaç tane puls gönderdiğine karar vermeye başlıyoruz. Aşağıdaki satırda, darbelerin sayılmasına zaman vermek için 1000 ms (1 Saniye) kodunu geciktiririz ve son satırda sayımın kesilmesi için kesintileri devre dışı bırakırız. Kesme işleminden önce sensörden gelen darbeler yok sayılır ve devre dışı bırakıldıktan sonra bu kodla 1 saniyelik bir süre boyunca çok hassas bir şekilde puls sayılır. Saniyedeki bakliyat sayısını daha yararlı bir ölçü birimine dönüştürmek için biraz matematik yapalım: int flowPin = 2; // Bu Arduino'nun giriş pini çift akışlı; // Bu, hesaplamayı amaçladığımız değerdir. uçucu int sayımı; // Bu tamsayı, kesme işlemi sırasında doğru şekilde güncellendiğinden emin olmak için uçucu olarak ayarlanmalıdır. void setup () { // kurulum kodunu buraya bir kez çalıştırmak için buraya yerleştirin: pinMode (flowPin, INPUT); // Pimi bir giriş olarak ayarlar attachInterrupt (0, Akış, RISING); // "Flow" işlevini çalıştırmak için Interrupt 0'ı (Arduino Uno'daki pin 2) yapılandırır } void loop () { // Ana kodunuzu tekrar tekrar çalıştırmak için buraya koyun: sayısı = 0; // Sayacı sıfırlayın, tekrar 0'dan saymaya başlarız kesmeler (); // Arduino üzerinde kesintileri etkinleştirir gecikme (1000); // 1 saniye bekleyin noInterrupts (); // Arduino'daki kesintileri devre dışı bırak // Matematiği başlat flowRate = (sayı * 2.25); // Son saniyedeki sayımları sayın ve 2.25mL ile çarpın flowRate = flowRate * 60; // Dakikaları dakikalara dönüştürerek size mL / Minute verir flowRate = flowRate / 1000; // Litre / Dakika dönüştürür, size Litre / Dakika verir } boşluk Akışı () { ++ saymak; // Bu fonksiyon her çağrıldığında, "say" değerini 1 artır } Son 3 satır sadece bir birim dönüştü. Yani flowRate = Litre / Dakika… Mükemmel! Şimdi sadece Seri’ye yazmamız gerekiyor, böylece verileri görebiliyoruz: int flowPin = 2; // Bu Arduino'nun giriş pini çift akışlı; // Bu, hesaplamayı amaçladığımız değerdir. uçucu int sayımı; // Bu tamsayı, kesme işlemi sırasında doğru şekilde güncellendiğinden emin olmak için uçucu olarak ayarlanmalıdır. void setup () { // kurulum kodunu buraya bir kez çalıştırmak için buraya yerleştirin: pinMode (flowPin, INPUT); // Pimi bir giriş olarak ayarlar attachInterrupt (0, Akış, RISING); // "Flow" işlevini çalıştırmak için Interrupt 0'ı (Arduino Uno'daki pin 2) yapılandırır Serial.begin (9600); // Seriyi Başlat } void loop () { // Ana kodunuzu tekrar tekrar çalıştırmak için buraya koyun: sayısı = 0; // Sayacı sıfırlayın, tekrar 0'dan saymaya başlarız kesmeler (); // Arduino üzerinde kesintileri etkinleştirir gecikme (1000); // 1 saniye bekleyin noInterrupts (); // Arduino'daki kesintileri devre dışı bırak // Matematiği başlat flowRate = (sayı * 2.25); // Son saniyedeki sayımları sayın ve 2.25mL ile çarpın flowRate = flowRate * 60; // Dakikaları dakikalara dönüştürerek size mL / Minute verir flowRate = flowRate / 1000; // Litre / Dakika dönüştürür, size Litre / Dakika verir Serial.println (akış hızı); // Değişken flowRate'i Seriye yazdır } boşluk Akışı () { ++ saymak; // Bu fonksiyon her çağrıldığında, "say" değerini 1 artır } Kurulumda, Seri bağlantıyı, varsayılan hız olan 9600 Baud hızında başlatıyoruz. Döngünün alt kısmında, matematikimizin sonucunu içeren Seri bağlantıda bir satır yazdırıyoruz. Hepsi tamam! |