Raspberry Pi 3 Kullanarak Su Sıcaklığına Göre Fan Çalıştırma

Kurulacak olan bu düzenekte aşağıdaki ekipmanlar gerekmektedir.

  • Raspberry Pi 3
  • Transistör
  • Su Sıcaklık Sensörü
  • Mini Breadboard
  • Fan
  • Direnç
  • 2 adet Erkek Erkek Jumper
  • 5 Adet Dişi Erkek Jumper
  • 1 Bardak Su

Yapılacak olan Java uygulamasında Pi4J kütüphanesi kullanılacaktır. Bunların nasıl kurulacağı http://fatihadak.com/?p=203 yazısında anlatılmaktadır. Su sıcaklığını ölçen sensör 40 dereceyi geçtiğinde fan devreye girecek ve suyu soğutacaktır. Tabi burada örnek uygulama yapıldığı için basit bir fan kullanılmıştır. Yoksa 12v’luk büyük fanlar da DC DC dönüştürücü yardımıyla bağlanıp gerçek anlamda bir soğutma gerçekleştirilebilir. Tasarlanacak devre aşağıda verilmiştir.

Sensöre giden kısımda bir direnç ve fana giden kısımda ise transistör kullanılması gerekmektedir. Kod yazma aşamasına geçilirse. NetBeans’ta proje oluşturup ilk önce Su sıcaklığını elde eden sınıf yazılır. Bu kodun çalışabilmesi için Raspberry Pi konfigürasyonundan, arayüzlere gelinip, I2C ve 1-Wire arayüzleri aktif yapılması gerekmektedir. Ayrıca bunlarla ilgili Pi4J kütüphaneleri de eklendikten sonra sıcaklık ölçülebilir. getTemp fonksiyonu basitçe bu işi yapmaktadır. Fahrenhayt olarak sıcaklığın elde edilebileceği hazır fonksiyonlarda bulunmaktadır.

01
02
package susicaklik;
03
 
04
import com.pi4j.component.temperature.TemperatureSensor;
05
import com.pi4j.io.w1.W1Master;
06
 
07
/**
08
*
09
* @author M. Fatih ADAK
10
*/
11
public class SuSicaklik {
12
public double getTemp(){
13
// Kodun çalışabilmesi için Raspberry Pi konfigürasyonundan arayüzlerden I2C ve 1-Wire enable olması gerekiyor.
14
W1Master w1master = new W1Master();
15
// Başka bağlı sensör olmadığı için ilkini getir.
16
TemperatureSensor device = w1master.getDevices(TemperatureSensor.class).get(0);
17
 
18
return device.getTemperature();
19
}
20
}
21

Fanı açıp kapamayı sağlayacak sınıf aşağıdaki gibi yazılabilir. Pin üzerinden low veya high bilgisi gönderilerek akım verilir veya kesilir. Fakat bu işlemi transistör olmadan gerçekleştiremezsiniz. Aşağıda Fan sınıfının yapıcı fonksiyonunda pin bilgisi getirilmekte burada transistöre low veya high bilgisini hangi pin gönderecekse onun numarası yazılmalıdır. Bu çalışmada GPIO_01’e bağlandığı için aşağıda o şekilde numarası yazılmıştır. Fan’a akım gönderilebilmesi için low metodu çağrılmalıdır. High metodu çağrıldığında fan kapanacaktır.

01
02
package susicaklik;
03
 
04
import com.pi4j.io.gpio.*;
05
import com.pi4j.util.CommandArgumentParser;
06
 
07
/**
08
*
09
* @author M. Fatih ADAK
10
*/
11
public class Fan {
12
final GpioController gpio;
13
Pin pin;
14
GpioPinDigitalOutput cikti;
15
 
16
public Fan(){
17
gpio = GpioFactory.getInstance();
18
pin = CommandArgumentParser.getPin(
19
RaspiPin.class,
20
RaspiPin.GPIO_01); // Pin Numarası
21
cikti = gpio.provisionDigitalOutputPin(pin, "FAN", PinState.HIGH);
22
}
23
 
24
public void Ac(){
25
cikti.low();
26
}
27
 
28
public void Kapat(){
29
cikti.high();
30
}
31
}
32

Programın çalıştırılması için aşağıdaki program isimli ana sınıf yazılmıştır. Program sonsuz bir döngü içerisinde 10 saniyede bir suyun sıcaklığını kontrol etmektedir. Su sıcaklığı 40 dereceyi geçtiği gibi fanı açmakta 40 derece ve altına düştüğünde fanı kapatmaktadır. Her ölçtüğü su sıcaklık değerini de ekrana yazmaktadır.

01
02
package susicaklik;
03
 
04
/**
05
*
06
* @author M. Fatih ADAK
07
*/
08
public class Program {
09
 
10
/**
11
* @param args the command line arguments
12
*/
13
public static void main(String[] args) {
14
SuSicaklik suSicaklik = new SuSicaklik();
15
Fan fan = new Fan();
16
 
17
try{
18
while(true){
19
double susicaklik = suSicaklik.getTemp();
20
System.out.println("Su Sıcaklık: "+susicaklik);
21
if(susicaklik > 40){
22
// Fanı aç
23
fan.Ac();
24
}
25
else{
26
fan.Kapat();
27
}
28
// 10 saniye bekle
29
Thread.sleep(10000);
30
}
31
}
32
catch(Exception ex){
33
System.out.println("Hata");
34
}
35
}
36
 
37
}
38

Devrenin görüntülerine aşağıdan ulaşılabilir.


Bir Cevap Yazın