Raspberry Pi 3 ile Birlikte 3??4 Membran Tu?? Tak??m?? Yard??m??yla Java dilinde bir??ok sens??r?? kontrol etme

Raspberry Pi 3???te Java dilini kullanarak yazaca????m??z uygulamada 3??4 Membran tu?? tak??m??n?? kullanarak ??e??itli sens??rleri okuyacak ve baz?? i??lemleri yaparak LCD ekran ??zerinde g??sterim sa??layaca????z. Devreyi kurmak i??in gerekli ara??lar

  • Raspberry Pi 3
  • Breadboard
  • GPIO Geni??leme Kart??
  • Di??i-Di??i Erkek-Erkek Di??i-Erkek jumper kablo
  • S??cakl??k ve Nem Sens??r??
  • I????k Sens??r??
  • Ultrasonic Mesafe Sens??r??
  • 2??16 LCD Ekran
  • 3??4 Membran Tu?? Tak??m??
  • Potansiyometre ve Kapa????
  • 2 adet diren??

2??16 LCD ekran??n breadboard???a nas??l ba??lanaca???? daha ??nceki yaz??m??zda belirtmi??tik. (http://fatihadak.com/?p=230)?? Geri kalan devrenin nas??l ba??lanaca???? a??a????daki ??ekilde verilmi??tir. Bu uygulamadaki ama?? belli g??revlerin tu?? tak??m?? ile Raspberry pi???e iletilmesi ve bu g??revlerde okunan de??erlerin LCD ekranda g??sterilmesi. Bu ??ekilde bilgisayara klavye ile m??dahale etmeden baz?? g??revleri ger??ekle??tirmi?? olaca????z. Bu uygulamada ger??ekle??tirecek i??lemler a??a????da verilmi??tir.

[1] ????letim Sistemi            (Cihazda kurulu olan i??letim sistemini g??sterir)

[2] Kullan??lan Bellek        (Cihazda o anda kullan??mda olan bellek miktar??n?? g??sterir)

[3] ????lemci S??cakl??????          (????lemcinin s??cakl??????n?? g??sterir)

[4] Tarih                               (Sistemin tarihini g??sterir)

[5] Saat                                (Sistemin saatini g??sterir)

[6] S??cakl??k                          (Oda s??cakl??????n?? g??sterir)

[7] Nem                               (Odadaki nem miktar??n?? y??zdelik olarak g??sterir)

[8] Oda I????k Durumu       (Oda ayd??nl??k m?? karanl??k m???)

[9] Mesafe                         (Mesafe ??l??en sens??rle en yak??n engele olan mesafeyi cm olarak verir)

[0] Ekran?? Temizle            (LCD ekrandaki yaz??lar?? siler)

[*] Otomatik / Manuel  (Herhangi bir tu??a ihtiya?? duyamadan yukar??daki komutlar?? belli aral??kla ??al????t??r??r.)

[#] Kapat                             (LCD ekran?? temizleyip uygulamay?? kapat??r.)

Yukar??daki komutlar yan??nda belirtilen say?? 3??4 tu?? tak??m??nda bas??larak ger??ekle??tirilmi?? olacakt??r.

Her??ey LCD ekranda g??sterilece??i i??in Ekran isminde bir s??n??f olu??turulmu??tur. Ekran s??n??f??, ekran hangi pinlerle Raspberry pi???ye ba??lanm????sa bu ayarlamalar?? yapar ve ba??lant??y?? kurar. Ekranda bir mesaj g??sterilmek istendi??inde Goster metodu ??a??r??lmal??d??r. Bu metot 4 parametre almaktad??r. ??lk iki parametre LCD ekranda g??sterilecek mesajlar?? belirtir. 3. Parametre e??er mesaj ortalanmak isteniyorsa true olarak girilmelidir. 4. Parametre ise mesaj yaz??lmadan ??nce LCD temizlenmesini sa??lar.

public class Ekran {
public final int EkranSatir1 = 0;
public final int EkranSatir2 = 1;
public final String BosSTR = " "; //16 karakterli bo?? string
final GpioController gpio = GpioFactory.getInstance();
final GpioLcdDisplay lcd = new GpioLcdDisplay(2,    // LCD Sat??r Say??s??
                                              16,       // LCD S??tun Say??s??
                                                RaspiPin.GPIO_06,  // LCD RS pini
                                                RaspiPin.GPIO_05,  // LCD E pini
                                                RaspiPin.GPIO_04,  // LCD D4 Veri Biti
                                                RaspiPin.GPIO_00,  // LCD D5 Veri Biti
                                                RaspiPin.GPIO_01,  // LCD D6 Veri Biti
                                                RaspiPin.GPIO_03); // LCD D7 Veri Biti 

public void Goster(String str1Mesaj, String str2Mesaj,boolean ortala ,boolean temizle){
    try{
        if(temizle) lcd.clear();

        Thread.sleep(100);
        String str1Bos="",str2Bos="";

        if(ortala){
            str1Bos = Bosluk(str1Mesaj);
            str2Bos = Bosluk(str2Mesaj);
        }
        lcd.write(EkranSatir1,str1Bos + str1Mesaj + str1Bos);
        Thread.sleep(100);
        lcd.write(EkranSatir2,str2Bos + str2Mesaj + str2Bos);
        Thread.sleep(500);
    }
    catch(Exception e){

    }
}

private String Bosluk(String mesaj){
    int bosluk = (16-mesaj.length())/2;
    return BosSTR.substring(0, bosluk);
}
public void Clear(){
    try{
    lcd.clear();
    Thread.sleep(500);
    }
    catch(Exception e){

    }
}
public void Close(){
    try{
        lcd.clear();
        Thread.sleep(500);
    }
    catch(Exception e){

    }
    gpio.shutdown();
}
}

[1] ????letim Sistemi Birinci se??ene??e bas??ld??????nda Raspberry pi???ye kurulu olan i??letim sistemi ekranda g??sterilir. d.Goster(???Isletim Sistemi???, SystemInfo.getOsName(),true,true);

[2] Kullan??lan Bellek ??kinci se??enekte o anda ne kadarl??k bellek kullan??m?? oldu??unu y??zdelik olarak g??sterir. d.Goster(???Bellek Kullanimi???, ???% ???+String.valueOf(((SystemInfo.getMemoryUsed()/1024/1024)*100)/927),true,false);

[3] ????lemci S??cakl?????? ??????nc?? se??enekte i??lemcinin o andaki s??cakl??????n?? ekranda g??sterir. d.Goster(???Islemci Sicaklik???, String.valueOf(SystemInfo.getCpuTemperature()) + ??? C???,true,false);

[4] Tarih Sistemin tarihini formata uygun olarak g??sterir. d.Goster(???Tarih???, sdff.format(call.getTime()),true,true);

[5] Saat Sistemin saatini formata uygun olarak g??sterir. d.Goster(???Saat???, sdf.format(cal.getTime()),true,false);

[6] S??cakl??k Odan??n s??cakl??????n?? ekranda g??sterir.

[7] Nem Odadaki nem miktar??n?? y??zdelik olarak g??sterir. 6 ve 7 se??enekler i??in a??a????daki Java s??n??f?? kullan??lm????t??r. Bu s??n??f yine Python kodunu kullanarak derece ve nem de??erlerini al??r. Java dilinde Python kodu ??al????t??r??lm????t??r. Burada komutlar??n ilki hangi Python versiyonu y??kl?? ise onu belirtmek gerekir. python -V komutu ile bilgisayarda hangi Python versiyonunun kurulu oldu??u g??r??lebilir. Python kodunda birka?? sat??rla s??cakl??k ve nem de??erleri kolayca al??nabilir. Burada sens??r ??zerindeki veri pininin hangi GPIO pinine ba??l?? oldu??u kod i??erisinde verilmelidir. Bu ??rnekte GPIO4???e ba??l?? oldu??u i??in 4 de??eri verilmi??tir. 11 de??eri ise sens??r??n modelini ifade eder.

public class SicaklikveNem {

	private String pythonYol;
	String[] komutlar;
	Runtime rt;

	public SicaklikveNem(){
		pythonYol = new File("").getAbsolutePath()+"/src/mebrantus/Sicaklik.py";

		komutlar = new String[2];

		komutlar[0] = "python3";
		komutlar[1] = pythonYol;
		rt = Runtime.getRuntime();
	}

	@Override
	public String toString() {
		try{
			Process pr = rt.exec(komutlar);
			BufferedReader bfr = new BufferedReader(new InputStreamReader(pr.getInputStream()));

			String satir;

			if((satir = bfr.readLine()) != null){

				String []ifadeler = satir.split(";");

				String nem = "Nem : "+ifadeler[0];
				String sicaklik = "Sic: "+ifadeler[1];

				return nem + sicaklik;

			}
			else return "Okuma Hatas??!";
		}
		catch(IOException ex){
			return "Okuma Hatas??!";
		}
	}
	public String[] toStr(){
		try{
			Process pr = rt.exec(komutlar);
			BufferedReader bfr = new BufferedReader(new InputStreamReader(pr.getInputStream()));
			String satir;
			if((satir = bfr.readLine()) != null){
				String []ifadeler = satir.split(";");
				return ifadeler;
			}
			else throw new IllegalStateException("Okuma Hatas??!");
		}
		catch(IOException ex){
			throw new IllegalStateException("Okuma Hatas??!");
		}
	}
}
import Adafruit_DHT

nem, sicaklik = Adafruit_DHT.read_retry(11, 4)
print("{};{}".format(nem, sicaklik))

[8] Oda I????k Durumu

Odan??n ayd??nl??k veya karanl??k oldu??u ??????k sens??r?? yard??m??yla bulunmaktad??r. Burada da sens??r veri pini GPIO21. Pine ba??lanm????t??r.

Gpio.pinMode (21, Gpio.INPUT) ;

if (Gpio.digitalRead(21) == 0){	
	d.Goster("Oda Isik Durumu", "Aydinlik",true,true);
}	
else{
	d.Goster("Oda Isik Durumu", "Karanlik",true,true);
}

[9] Mesafe

Ultrasonic mesafe sens??r?? yard??m??yla sens??re en yak??n engele olan mesafe cm olarak ekranda g??sterilmektedir. Bu i??lem i??in Uzaklik isminde bir s??n??f yaz??lm????t??r. Buradaki mant??k sens??rden ultrasonic ses dalgas?? g??nderilir en yak??n engele ??arpan ses dalgas?? tekrar sens??re geri d??ner. Bu arada ge??en zaman kod yard??m??yla kaydedilir ve mesafe hesaplan??r.

public class Uzaklik {
	//GPIO Pins
	private GpioPinDigitalOutput sensorTriggerPin ;
	private GpioPinDigitalInput sensorEchoPin ;
	final GpioController gpio = GpioFactory.getInstance();

	public Uzaklik(){
		sensorTriggerPin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_28); // Trigger pin as OUTPUT
		sensorEchoPin = gpio.provisionDigitalInputPin(RaspiPin.GPIO_23,PinPullResistance.PULL_UP); // Echo pin as INPUT
	}
	public double calculate() throws InterruptedException{
		try {
			sensorTriggerPin.high();
			Thread.sleep((long) 0.01);
			sensorTriggerPin.low();

			while(sensorEchoPin.isLow()){

			}
			long baslangicZaman= System.nanoTime();
			while(sensorEchoPin.isHigh()){

			}
			long bitisZaman= System.nanoTime();
			return ((((bitisZaman-baslangicZaman)/1e3)/2) / 29.1);
		}
		catch (InterruptedException e){
			e.printStackTrace();
		}

		return -1;
	}	
}

Yukar??da anlat??lan bu i??lemleri kontrol eden s??n??f a??a????da verilmi??tir.

public class TusTakimi {
	private List listener = new ArrayList();
	public static final String KEY = "key";
	public char basilanTus;
	private static final char keypad[][] = { { '1', '2', '3' },
											 { '4', '5', '6' },
											 { '7', '8', '9' },
											 { '*', '0', '#' } };

	private final GpioController theGpio = GpioFactory.getInstance();

	private static final Pin PIN_1_IN = RaspiPin.GPIO_11;
	private static final Pin PIN_2_IN = RaspiPin.GPIO_10;
	private static final Pin PIN_3_IN = RaspiPin.GPIO_14;
	private static final Pin PIN_4_IN = RaspiPin.GPIO_02;
	private static final Pin PIN_5_OUT = RaspiPin.GPIO_13;
	private static final Pin PIN_6_OUT = RaspiPin.GPIO_12;
	private static final Pin PIN_7_OUT = RaspiPin.GPIO_16;

	private final GpioPinDigitalInput thePin1 = theGpio.provisionDigitalInputPin(PIN_1_IN, PinPullResistance.PULL_UP);
	private final GpioPinDigitalInput thePin2 = theGpio.provisionDigitalInputPin(PIN_2_IN, PinPullResistance.PULL_UP);
	private final GpioPinDigitalInput thePin3 = theGpio.provisionDigitalInputPin(PIN_3_IN, PinPullResistance.PULL_UP);
	private final GpioPinDigitalInput thePin4 = theGpio.provisionDigitalInputPin(PIN_4_IN, PinPullResistance.PULL_UP);
	private final GpioPinDigitalOutput thePin5 = theGpio.provisionDigitalOutputPin(PIN_5_OUT);
	private final GpioPinDigitalOutput thePin6 = theGpio.provisionDigitalOutputPin(PIN_6_OUT);
	private final GpioPinDigitalOutput thePin7 = theGpio.provisionDigitalOutputPin(PIN_7_OUT);
	private final GpioPinDigitalOutput theOutputs[] = { thePin5, thePin6,thePin7};

	private GpioPinDigitalInput theInput;
	private int theLin;
	private int theCol;
	public TusTakimi(){
		basilanTus='-';
		initListeners();
	}

	private void initListeners() {

	thePin1.addListener(new GpioPinListenerDigital() {

	@Override
	public void handleGpioPinDigitalStateChangeEvent(

		final GpioPinDigitalStateChangeEvent aEvent) {

		if (aEvent.getState() == PinState.LOW) {

		theInput = thePin1;

		theLin = 1;

		findOutput();

		}

		}

	});

	thePin2.addListener(new GpioPinListenerDigital() {
	
	@Override
	public void handleGpioPinDigitalStateChangeEvent(

	final GpioPinDigitalStateChangeEvent aEvent) {

	if (aEvent.getState() == PinState.LOW) {
		theInput = thePin2;
		theLin = 2;

		findOutput();
	}

	}

	});

	thePin3.addListener(new GpioPinListenerDigital() {

	@Override


	public void handleGpioPinDigitalStateChangeEvent(


	final GpioPinDigitalStateChangeEvent aEvent) {

	if (aEvent.getState() == PinState.LOW) {

	theInput = thePin3;
	theLin = 3;
	findOutput();
	}
	}
	});


	thePin4.addListener(new GpioPinListenerDigital() {


	@Override
	public void handleGpioPinDigitalStateChangeEvent(
	final GpioPinDigitalStateChangeEvent aEvent) {
		if (aEvent.getState() == PinState.LOW) {
			theInput = thePin4;
			theLin = 4;
			findOutput();
		}
	}
	});
	}

	private void findOutput() {
		for (int myO = 0; myO < theOutputs.length; myO++) {
		for (final GpioPinDigitalOutput myTheOutput : theOutputs) {
		myTheOutput.high();
	}
	theOutputs[myO].low();
	if (theInput.isLow()) {

		theCol = myO;
		checkPins();
		try {
			Thread.sleep(200);
		} 
		catch (InterruptedException e) {

		}
		break;
	}


	}
	for (final GpioPinDigitalOutput myTheOutput : theOutputs) {
		myTheOutput.low();
	}
	}

	private synchronized void checkPins() {
		notifyListeners(this, KEY, this.basilanTus,
		this.basilanTus = keypad[theLin - 1][theCol]);
	}

	private void notifyListeners(Object object, String property, char oldValue,char newValue) {
		for (PropertyChangeListener name : listener) {
			name.propertyChange(new PropertyChangeEvent(this, property,oldValue, newValue));
		}
	}

	public void addChangeListener(PropertyChangeListener newListener) {
		listener.add(newListener);
	}
}

Tasarlanan devreden resimler

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir