Rf Alıcı Verici 16f877A-16f628A Step-hcs04-lcd

Rf akıcı verici ile haberleşen 16f628A verici kısmı 16f877A alıcı picleri kullanılarak haberleşmesi sağlanmıştır.Alıcının görevi 60cm uxunluğunda bulunan su kabını alıcıdan gelen bilgiye göre doldurmasıdır.Doluluk oranını hcsr-04 ile ölçerken musluk açma kapatma olayını step motor sayesinde yapmaktadır. Yazılım C dilinde yazılmıştır.

.

Vericide 3 adet buton bulunmaktadır.

1.Buton Dolum oranın azaltır. %100 %75 %50 %25

2.Buton Dolum oranın arttırır  %25 &50 %75 %100

3.Buton Step motoru devreye sokar.

Anlaşılacağı üzere değerler yüzde cinsinden 25 şer olarak artar ve azalır.

 

 

ALICI

 

#include <sudolumu.h> //su dolumu adında dosya oluşturuldu

#fuses xt,nowrt,nowdt,nobrownout,nolvp,nocpd,nodebug,noprotect,noput

#use delay(clock=4000000)

#use rs232(baud=600, xmit=PIN_B2, rcv=PIN_B1) // 3 satır sigorata ve kristal ayarıdır.

#include <lcd.c> // lcd kütüphane ilave edilidi

#use fast_io(B)  //  b portu step için ayarlandı

 

int8 check;     check adında değişken tanımlandı

unsigned int16 e, distance; // mesafe sensörü için distance adında değişken tanımlandı

void main(){  // programa başlandı

 

char a=0;

int deger =0;

int hiz=10;

int i=0;

int dolu=0;

int b=0;

int dolum=1;

int acildi=0;

 

int kap=0;

// yukardaki satırlar program için gerekli değişkenlerdir.

output_a(0);

set_tris_b(2);                                   // Configure RB1 as input

lcd_init();                                      // Initialize LCD module

setup_timer_1 (T1_INTERNAL | T1_DIV_BY_2);       // Configure Timer1 module

set_timer1(0);                                   // Reset Timer1

output_high(pin_b3); //calisma göstergesi olan led

lcd_init();  // lcd çalıştırıldı

 

printf(lcd_putc,”\fUMUT KALAYCIOGLU\n HASAN TURAN”); // lcd ye yazı yazılıdı

 

output_high(pin_a2);

output_high(pin_a3);

output_high(pin_a4);  // 3 adet led ilave edildi

 

while(1)   // sonsuz döngü başladı

{

 

if(getc()==’X’)    // vericiden X gelirse işleme başlanacak

{

a=getc();    // vericiden X ile beraber gönderilen değer okunup a değişkenine kayıt edildi

 

}

 

if(a==’A’)   // a değişkeni A ise { } arasında kalan işlemi yapacak

{

 

deger=deger+1;     // değer değişkenini 1 arttır.

if (deger<25)  // değer 25 de küçük ise dolu değişkenini 25 yap

{

dolu=25;

}

if (deger<50 && deger>25)

{

dolu=50;

}

if (deger<75 && deger>50)

{

dolu=75;

}

 

if (deger<100 && deger>75)

{

dolu=100;

}

output_high(pin_a2);   // arttırma butonuna basılırsa a2 de bulunan ledi yak

output_low(pin_a3);

output_low(pin_a4);

printf(lcd_putc,”\fORAN AYARLANIYOR\n+SU AYARI / %d”, dolu); // lcd ekranına yazı yaz

//delay_ms(100);

}

else  if(a==’B’)   // a değişkeni B ise

{

 

deger=deger-1;    // değer 1 azaltıldı

 

if (deger<25)

{

dolu=25;

}

if (deger<50 && deger>25)

{

dolu=50;

}

if (deger<75 && deger>50)

{

dolu=75;

}

 

if (deger<100 && deger>75)

{

dolu=100;

}

output_low(pin_a2);

output_high(pin_a3);

output_low(pin_a4);

printf(lcd_putc,”\fORAN AYARLANIYOR\n-SU AYARI / %d”, dolu);

//delay_ms(100);

 

}

 

else if(a==’C’)   // a değişkeni C ise

{

 

check = 0;

e = 0;

output_high(PIN_A0);

delay_us(10);

output_low(PIN_A0);

// buradan başlayıp aşağıya kadar olan yazılımlar mesafe sensörü içindir.

set_timer1(0);                                 // Reset Timer1

while(!input(PIN_A1) && (get_timer1() < 1000));

if(get_timer1() > 990)

check = 1;                                   // Timeout error

set_timer1(0);                                 // Reset Timer1

while(input(PIN_A1) && (i < 25000))

e = get_timer1();                            // Store Timer1 value in i

 

distance = e/58;                             // Calculate the distance

// buraya kadar olan lar mesafes sensörü için yazıldı

 

 

if (distance <15)   // mesafe 15 den küçük ise

{

kap=100;  // kap değişkenini 100 yap

}

if (distance<30 && distance>15)

{

kap=75;

}

if (distance<45 && distance>30)

{

kap=50;

}

 

if (distance<60 && distance>45)

{

kap=25;

}

if (distance >60)

{

kap=0;

}

 

 

 

 

 

if (kap>=dolu)  // kap dolu dan büyük ve eişt ise {} arasını yap

{

 

printf(lcd_putc,”\fSU DOLUMU TAMAM \n SU AYARI / %d”, dolu);

if (acildi ==1) // eğer vana açılmış ise

{

for(int d = 0; d < 120; d++)    // step motor vanayı kapatır

{

dolum=1;

// 1000

output_low(pin_c5);

output_low(pin_c7);

output_low(pin_c6);

output_high(pin_c4);

delay_ms(hiz);

 

// 1100

output_low(pin_c5);

output_low(pin_c7);

output_high(pin_c6);

output_high(pin_c4);

delay_ms(hiz);

 

// 0100

output_low(pin_c5);

output_low(pin_c7);

output_high(pin_c6);

output_low(pin_c4);

delay_ms(hiz);

 

// 0110

output_low(pin_c5);

output_high(pin_c7);

output_high(pin_c6);

output_low(pin_c4);

delay_ms(hiz);

 

// 0010

output_low(pin_c5);

output_high(pin_c7);

output_low(pin_c6);

output_low(pin_c4);

delay_ms(hiz);

 

// 0011

output_high(pin_c5);

output_high(pin_c7);

output_low(pin_c6);

output_low(pin_c4);

delay_ms(hiz);

 

// 0001

output_high(pin_c5);

output_low(pin_c7);

output_low(pin_c6);

output_low(pin_c4);

delay_ms(hiz);

 

// 1001

output_high(pin_c5);

output_low(pin_c7);

output_low(pin_c6);

output_high(pin_c4);

delay_ms(hiz);

 

output_low(pin_c4);

output_low(pin_c5);

output_low(pin_c6);

output_high(pin_c7);

delay_ms(hiz);

 

// 1100

output_low(pin_c4);

output_low(pin_c5);

output_high(pin_c6);

output_high(pin_c7);

delay_ms(hiz);

 

// 0100

output_low(pin_c4);

output_low(pin_c5);

output_high(pin_c6);

output_low(pin_c7);

delay_ms(hiz);

 

// 0110

output_low(pin_c4);

output_high(pin_c5);

output_high(pin_c6);

output_low(pin_c7);

delay_ms(hiz);

 

// 0010

output_low(pin_c4);

output_high(pin_c5);

output_low(pin_c6);

output_low(pin_c7);

delay_ms(hiz);

 

// 0011

output_high(pin_c4);

output_high(pin_c5);

output_low(pin_c6);

output_low(pin_c7);

delay_ms(hiz);

 

// 0001

output_high(pin_c4);

output_low(pin_c5);

output_low(pin_c6);

output_low(pin_c7);

delay_ms(hiz);

 

// 1001

output_high(pin_c4);

output_low(pin_c5);

output_low(pin_c6);

output_high(pin_c7);   // yukarıya kadar olan yazılım step motoru hareket etttirir.

delay_ms(hiz); // step motorun çalışma hız ayarı

acildi=0;

}

}

delay_ms(2000);

}

 

while (kap<dolu)

{

 

 

check = 0;

e = 0;

output_high(PIN_A0);

delay_us(10);

output_low(PIN_A0);

set_timer1(0);                                 // Reset Timer1

while(!input(PIN_A1) && (get_timer1() < 1000));

if(get_timer1() > 990)

check = 1;                                   // Timeout error

set_timer1(0);                                 // Reset Timer1

while(input(PIN_A1) && (i < 25000))

e = get_timer1();                            // Store Timer1 value in i

 

distance = e/58;                             // Calculate the distance

 

 

 

if (distance <15)

{

kap=100;

}

if (distance<30 && distance>15)

{

kap=75;

}

if (distance<45 && distance>30)

{

kap=50;

}

 

if (distance<60 && distance>45)

{

kap=25;

}

if (distance >60)

{

kap=0;

}

 

 

 

printf(lcd_putc,”\fSU DOLUYOR/ %d”, kap);

printf(lcd_putc,”\n SU AYARI  / %d”, dolu);

 

delay_ms(200);

 

 

//—————————–

if (dolum == 1)  // su dolumu için step motor vanayı açar

{

for(int d = 0; d < 120; d++)

{

acildi=1;   // step motorun vanayı açtığını anlamak için acildi değişkeni 1 yapılır. Vanayı kapatma işleminde buraki değere göre işlem yapılır. Vana hiç açılmamış ise kapatmaya gerek yoktur.

// 0001

output_high(pin_c5);

output_low(pin_c7);

output_low(pin_c6);

output_low(pin_c4);

delay_ms(hiz);

 

// 0011

output_high(pin_c5);

output_high(pin_c7);

output_low(pin_c6);

output_low(pin_c4);

delay_ms(hiz);

 

// 0010

output_low(pin_c5);

output_high(pin_c7);

output_low(pin_c6);

output_low(pin_c4);

delay_ms(hiz);

 

// 0110

output_low(pin_c5);

output_high(pin_c7);

output_high(pin_c6);

output_low(pin_c4);

delay_ms(hiz);

 

// 0100

output_low(pin_c5);

output_low(pin_c7);

output_high(pin_c6);

output_low(pin_c4);

delay_ms(hiz);

 

// 1100

output_low(pin_c5);

output_low(pin_c7);

output_high(pin_c6);

output_high(pin_c4);

delay_ms(hiz);

 

// 1000

output_low(pin_c5);

output_low(pin_c7);

output_low(pin_c6);

output_high(pin_c4);

delay_ms(hiz);

 

// 1001

output_high(pin_c5);

output_low(pin_c7);

output_low(pin_c6);

output_high(pin_c4);

delay_ms(hiz);

// yukarıya kadar olan kısım step motoru çalıştırı vanayı açar

}

dolum=0;

}

 

}

}

 

else if(a==’D’)  // a değişkeni D ise yani  vericiden hiçbir tuşa basılmmamış ise

{

check = 0;

e = 0;

output_high(PIN_A0);

delay_us(10);

output_low(PIN_A0);

set_timer1(0);                                 // Reset Timer1

while(!input(PIN_A1) && (get_timer1() < 1000));

if(get_timer1() > 990)

check = 1;                                   // Timeout error

set_timer1(0);                                 // Reset Timer1

while(input(PIN_A1) && (i < 25000))

e = get_timer1();                            // Store Timer1 value in i

 

distance = e/58;                             // Calculate the distance

// buraya kadar mesafe ölümü yapılır

 

 

if (distance <15)

{

kap=100;

}

if (distance<30 && distance>15)

{

kap=75;

}

if (distance<45 && distance>30)

{

kap=50;

}

 

if (distance<60 && distance>45)

{

kap=25;

}

if (distance >60)

{

kap=0;

}

 

//  printf(lcd_putc,”\f%3Lu”, kap);

printf(lcd_putc,”\fKAP DOLULUK/ %d”, kap);

printf(lcd_putc,”\n SU AYARI  / %d”, dolu);

output_low(pin_a2);

output_low(pin_a3);

output_low(pin_a4);

delay_ms(100);

}

 

}

 

 

}

VERİCİ

 

#include <mainveri.h>

 

#fuses INTRC_IO, NOMCLR, NOPROTECT, NOWDT, NOLVP

#use delay(clock=4000000)

//#include <lcd.c>

#use rs232(baud=600, xmit=PIN_B2, rcv=PIN_B1)  //  alıcı vericinin pin numaraları belirlendi

 

void main(){

output_high(pin_b3); //calisma gostergesi

while(1){

if(input(pin_b4)==1 && input(pin_b5)==0 && input(pin_b6)==0 ){ // b4 de bulunan butona basılırsa

putc(‘X’);

putc(‘A’);   // vericiye X ve A bilgisini gönder

}

if(input(pin_b4)==0 && input(pin_b5)==1 && input(pin_b6)==0 ){ // b5 de bulunan butona basılırsa

putc(‘X’);

putc(‘B’); // vericiye X ve B bilgisini gönder

//delay_ms(100);

 

}

if(input(pin_b4)==0 && input(pin_b5)==0 && input(pin_b6)==1 ){ // 64 de bulunan butona basılırsa

putc(‘X’);

putc(‘C’);   // vericiye X ve C bilgisini gönder

//      delay_ms(100);

 

}

 

if(input(pin_b4)==0 && input(pin_b5)==0 && input(pin_b6)==0 ){ //  butonlara basılmaz ise

putc(‘X’);

putc(‘D’);  // vericiye X ve d bilgisini gönder

//      delay_ms(100);

 

}

}

}

Sosyal Medyada Paylaş Facebook Twitter Google+

Etiketler: , , , , ,
Eklenme Tarihi: 1 Ocak 2018

Konu hakkında yorumunuzu yazın

HOŞ GELDİNİZ

Youtube kanalıma Abone Olabilirsiniz.