Arduino kullanarak otomatik su doldurma projesi
Yeryüzünün yaklaşık% 71'i suyla kaplıdır, ancak ne yazık ki sadece% 2,5'i içme suyudur. Nüfus, kirlilik ve iklim değişikliği ile birlikte, 2025 yılına kadar çok yıllık su sıkıntısı yaşayacağımız tahmin edilmektedir. Bir yandan, ülkeler ve nehir sularını paylaşmak için devletler arasında çok küçük anlaşmazlıklar var, öte yandan insanlar ihmalimiz nedeniyle çok fazla içme suyu tükettik.
İlk seferde büyük görünmeyebilir, ama eğer musluğunuz her saniyede bir damla su damlasa, bir galon su harcamanız için sadece beş saat sürecektir, bu da ortalama bir insan için iki kişi için yeterli su olmalıdır. günler. Peki bunu durdurmak için ne yapılabilir? Her zaman olduğu gibi, bunun cevabı, teknolojideki gelişmeyle ilgilidir. Tüm manuel muslukları, kendiliğinden açılan ve kendi kendine kapanan akıllı bir cihazla değiştirirsek, suyu sadece elimizden tasarruf etmemize değil, aynı zamanda daha sağlıklı bir yaşam tarzımıza sahip oluruz. Bu nedenle bu projede, Arduino ve bir camın yakınına yerleştirildiğinde size otomatik olarak su verebilen bir Solenoid valf kullanarak Otomatik Su Verme Makinesi kuracağız . Kulağa hoş geliyor! O zaman bir tane inşa edelim ...
MALZEMELER
- Selenoid vana
- Arduino Uno (herhangi bir versiyon)
- HCSR04 - Ultrasonik Sensör
- IRF540 MOSFET
- 1k ve 10k Direnç
- maketler
- Telleri Bağlamak
ÇALIŞMA SİSTEMİ
Otomatik Su Sebili'nin arkasındaki konsept çok basittir. Camın dağıtıcıdan önce yerleştirilip yerleştirilmeyeceğini kontrol etmek için HCSR04 Ultrasonik Sensör kullanacağız. Su akışını kontrol etmek için bir solenoid valf kullanılacaktır; bu, enerjilenirken suyun akacağı ve enerjisiz hale getirildiği zaman suyun durdurulacağıdır. Bu yüzden her zaman bir nesnenin musluğun yakınına konup konmadığını kontrol eden bir Arduino programı yazacağız, eğer solenoid açılacaksa ve nesne kaldırılıncaya kadar bekleyelim, nesne kaldırıldığında solenoid otomatik olarak kapanacaktır. su temini. Arduino ile Ultrasonik sensör kullanma hakkında daha fazla bilgi edinin .
Bu projede kullanılan solenoid valf, maksimum akım derecesi 1,2A ve sürekli akım derecesi 700mA olan bir 12V valfidir . Valf açıldığında, valfi açık tutmak için yaklaşık 700mA tüketir. Bir Arduino'nun 5V ile çalışan bir Geliştirme panosu olduğunu biliyoruz ve bu nedenle Solenoidin açılıp kapanması için bir anahtarlama sürücü devresineihtiyacımız var .
u projede kullanılan anahtarlama aygıtı IRF540N N-Kanal MOSFET'idir . Pin 1'den 3 pinli Gate, Source ve Drain'e sahiptir. Devre şemasında gösterildiği gibi, solenoidin pozitif terminali Arduino'nun Vin pini ile güçlendirilir. Çünkü Arduino'ya güç vermek için 12V adaptör kullanacağız ve böylece Vin pin Solenoidi kontrol etmek için kullanılabilecek 12V çıkışını verecektir. Solenoidin negatif terminali MOSFET'in Kaynak ve Boşaltma pimleri aracılığıyla toprağa bağlanır. Böylece solenoid sadece MOSFET açık olduğunda çalıştırılacaktır.
MOSFET'in kapı pimi, açmak veya kapatmak için kullanılır. Kapı pimi topraklanmışsa ve bir kapı voltajı uygulandığında açılacaktır. Kapı pimine gerilim uygulanmadığında MOSFET'i kapalı tutmak için, kapı pimi 10k'luk bir dirençle toprağa çekilir. Arduino pimi 12 MOSFET'i açmak veya kapatmak için kullanılır, böylece D12 pimi 1K'lik bir dirençle kapı pimine bağlanır. Bu 1K direnç mevcut sınırlama amacı için kullanılır.
Ultrasonik Sensör +5 ve Arduino zemin pimleri tarafından desteklenmektedir. Yankı ve Tetikleme pimi pimi 8 ve sırasıyla iğne 9'a bağlanır. Arduinoyu, bir nesne tespit edildiğinde mesafeyi ölçmek ve MOSFET'i açmak için Ultrasonik sensörü kullanacak şekilde programlayabiliriz. Bütün devre basittir ve bu nedenle bir breadboard üstünde kolayca inşa edilebilir. Bağlantıları yaptıktan sonra benimki böyle bir şeye benziyordu.
Arduino Programlanması
Bu proje için, önündeki nesnenin mesafesini ölçmek için HCSR-04 Ultrasonik sensörü kullanan bir program yazmamız gerekiyor. Mesafe 10 cm'den az olduğunda MOSFET'i açmalıyız ve MOSFET'i kapatmamız gerekiyor. MOSFET'in açık veya kapalı durumda olduğundan emin olabilmemiz için, pim 13'e bağlı kart LED'i de kullanacağız ve MOSFET ile birlikte değiştireceğiz. Tüm program aynı şeyi bu sayfanın sonunda verilmiştir. Hemen aşağıda programı küçük anlamlı parçacıklara ayırarak açıkladım.
Program makro tanımı ile başlar . Biz tetiği ve yankı pimini Ultrasonik sensör ve MOSFET kapısı pimini ve Arduino için I / O olarak LED. Bu yüzden hangi pinlerin bağlanacağını belirledik. Donanımımızda Echo ve Trigger pinlerini sırasıyla 8 ve 9 inci dijital pinlere bağladık . Daha sonra MOSFET pimi pim 12'ye bağlanır ve onboard LED'i varsayılan olarak pim 13'e bağlanır. Aşağıdakileri aynı satırları kullanarak tanımlarız.
#define trigger 9 #define echo 8 #define LED 13 #define MOSFET 12
İçinde kurulum fonksiyonu biz girdi ve çıktı hangi hangi pimleri beyan . Donanımımızda sadece Ultrasonik (ABD) sensörün Yankı pimi giriş pini ve geri kalanların tümü çıkış pimleridir. Bu yüzden aşağıda gösterildiği gibi belirtmek için Arduino'nun pinMode işlevini kullanıyoruz
pinMode(trigger,OUTPUT); pinMode(echo,INPUT); pinMode(LED,OUTPUT); pinMode(MOSFET,OUTPUT);
Ana döngü işlevinin içinde measure_distance () adında bir işlev çağırıyoruz . Bu işlev , nesnenin önündeki mesafeyi ölçmek için ABD sensörünü kullanır ve değeri " mesafe" değişkenine günceller . ABD sensörünü kullanarak mesafeyi ölçmek için tetik pimi önce iki mikro saniye boyunca düşük tutulmalı ve daha sonra on mikrosaniye yüksek tutularak tekrar iki mikro saniye boyunca düşük tutulmalıdır. Bu, ultrasonik sinyallerin sonik bir patlamasını, önündeki nesnenin yansıyacağı havaya gönderecek ve yankı pimi, yansıyan sinyalleri alacaktır. Ardından, sensörün önündeki nesnenin mesafesini hesaplamak için alınan zamanı kullanırız. Daha fazla bilmek istiyorsanızArduino ile HC-SR04 Ultrasonik sensör arayüzü nasıl yapılır , bağlantıyı okuyun. Mesafeyi hesaplayan program aşağıda verilmiştir.
digitalWrite(trigger,LOW); delayMicroseconds(2); digitalWrite(trigger,HIGH); delayMicroseconds(10); digitalWrite(trigger,LOW); delayMicroseconds(2); time=pulseIn(echo,HIGH);
distance=time*340/20000;
Mesafesi hesaplanır sonra, gereken mesafenin değerini karşılaştırmak basit kullanarak eğer deyimi ve değer 10 cm'den daha kısa aşağıdaki içinde, yüksek gitmek için MOSFET yapmak ve LED ise başka gitmeye biz MOSFET yapmak açıklamada ve LED düşük. Aynısını yapmak için program aşağıda gösterilmiştir.
if(distance<10) { digitalWrite(LED,HIGH);digitalWrite(MOSFET,HIGH); } else { digitalWrite(LED,LOW);digitalWrite(MOSFET,LOW);
Bağlantıları devrede gösterildiği gibi yapın ve verilen programı Arduino kartınıza yükleyin. Solenoid vanayı su girişine bağlamak için basit bir düzenleme yapın ve 12V adaptörünü kullanarak Arduino kartının DC jakına kadar gücü açın. Yerleşik LED'in kapalı olduğundan emin olun, bu da Solenoidin de kapalı olmasını sağlar. Projeyi göstermek için yaptığım kurulum aşağıda gösterilmiştir.
Gördüğünüz gibi, ultrasonik sensörü solenoid valfın hemen altına yerleştirdim, böylece cam / tumbler solenoidin altına yerleştirildiğinde ultrasonik sensörün tam karşısına gelir. Bu nesne ultrasonik sensör ve MOSFET tarafından algılanır ve LED ile birlikte yanar ve solenoidin açılmasını ve suyun aşağı akmasını sağlar.
Uyarı: Farklı Solenoid değerleri farklı çalışma voltajına ve akım derecesine sahiptir, solenoidin 12V üzerinde çalıştığından ve maksimum 1,5A'dan fazla tüketmediğinden emin olun.
Arduino program kodu:
#define trigger 9
#define echo 8
#define LED 13
#define MOSFET 12
#define echo 8
#define LED 13
#define MOSFET 12
float time=0,distance=0;
void setup()
{
Serial.begin(9600);
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
pinMode(LED,OUTPUT);
pinMode(MOSFET,OUTPUT);
pinMode(echo,INPUT);
pinMode(LED,OUTPUT);
pinMode(MOSFET,OUTPUT);
delay(2000);
}
void loop()
{
measure_distance();
}
void loop()
{
measure_distance();
if(distance<10)
{
digitalWrite(LED,HIGH);digitalWrite(MOSFET,HIGH);
}
else
{
digitalWrite(LED,LOW);digitalWrite(MOSFET,LOW);
}
{
digitalWrite(LED,HIGH);digitalWrite(MOSFET,HIGH);
}
else
{
digitalWrite(LED,LOW);digitalWrite(MOSFET,LOW);
}
delay(500);
}
}
void measure_distance()
{
digitalWrite(trigger,LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
delayMicroseconds(2);
time=pulseIn(echo,HIGH);
distance=time*340/20000;
}
{
digitalWrite(trigger,LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
delayMicroseconds(2);
time=pulseIn(echo,HIGH);
distance=time*340/20000;
}
Anlatım çok karışık daha anlaşılır olabilir.
YanıtlaSil