Akvaryum Sistemi


Giray ATASEVENÇevrim Dışı

Kayıt: 25/12/2008
İl: Ankara
Mesaj: 256
Giray ATASEVENÇevrim Dışı
Gönderim Zamanı: 18 Mart 2014 17:02
Öncelikle merhaba ben Giray 3 sınıf bir elektrik-elektronik mühendisliği öğrencisiyim  . Buraya bu konuyu açmamın sebebi yapmak istediğim ve üniversitedeki hocamdan aldığım bir proje hakkında sizlerden görüş,tavsiye ve düşüncelerinizi almak istememdir.
   Öncelikle size bu projeden bahsetmek isterim yapacağımız projede öncelikle su ısısını direk şebekeden alıp uygun ısıya getirerek akvaryuma boşaltmak bu sistemin içine birde dijital bir pH ölçer koymak istedim ancak arastırmam sonucunda bir dijital pH ölçer benim gibi bir öğrenci için pahalı kaçacağını düşündüm  akvaryuma aynı zamanda otomatik yemleme yapan bir motor ve saat ayarlı bir ışıklandırma yapmayı düşündüm. 
 Şimdi belki diceksiniz Bak Giraycım otomatik yemleme var niye kendini yoruyon git al  Üstad haklısın ancak bu bir proje tamamını benim yapmam lazım hazır birşey olmıyacak  Benim şahsi düşüncem şöyle suyu şebekeden bir bekleme tankına valfi aracılığıyla geçici bir tanka koymak daha sonra su sıcaklığını uygun hale getirmek için bir PIC ile kontrol eden bir elektronik aksam kurmak .Burada ısınan su paralel çalışan ancak aralarında zamanlama farkı olacak şekilde iki motor aracalığıyla akvaryuma su transfer etmek ve kirli suyu boşaltmak . Burada zaman farkının olmasının istememin tek sebebi hani akvaryum çok doludur şimdi benim hazır suyum direk dolu akvaryuma koymak sıkıntı çıkaracağından ilk önce suyu boşaltıp daha sonra doldurmak istememdir. Yemleme makinasında step motorlar kullanılıyormuş biraz araştırma yaptım ancak ben step motorları 1 ay sonra dersde işleyecekmişiz bunuda hocamdan öğrendim. Işık kontrolunde ise bir röle ve ne55 gibi basit şeyler kullanmak istiyorum açıkcası  zaten çok komplıke şeyler olursa işin içinden çıkamıyacakmışım gibi düşünüyorum  Abilerim,ablarım,kardeşlerim elimden geldiğince anlatmaya çalıştım hertürlü fikir görüşlere açığım şimdiden zahmet verip yazımı okuduğunuz için çok müteşekkirim..  (birde güneş enerjisine yönelik bir sistem düşünmüştüm akvaryum lambalarını günde 6 saat yakmayı planladığım için  bir güneş paneli ve jel akü ile akvaryum ışığını bedava getirmek gibi ancak fazla bir fizibilite yapmadım maliyetini bilemiyorum o yüzden o şimdilik bir köşede duruyor ) Saygılarımla Giray Ataseven

Üye imzalarını sadece giriş yapan üyelerimiz görebilir

evil_slckÇevrim Dışı

Kayıt: 01/02/2009
İl: Konya
Mesaj: 182
evil_slckÇevrim Dışı
Gönderim Zamanı: 18 Mart 2014 20:19
Yazdıklarınız konusunda çok bilgim yok. Sadece yemleme cihazına değineyim. Otomatik yemleme cihazını duvar saatinin mekanizmaları ile yapıyorlar. Kesimlerde malzemelerde iyi işçilik çıkartırsanız profesyonel gibi birşey olur. Nette bu konuyu araştırabilirsiniz.

Üye imzalarını sadece giriş yapan üyelerimiz görebilir

STARSMETÇevrim Dışı

Kayıt: 01/01/2011
İl: Ankara
Mesaj: 134
STARSMETÇevrim Dışı
Gönderim Zamanı: 19 Mart 2014 07:09
   Giray kerdeşim konu ilgimi çekti.sizin proje tamamen elektronik devre yapmanız ve programını yazarak otomatik olarak söylediğiniz işlemleri yaptırmak.proje alırken maliyet hesapları öğrenciler için çok önemli ama bu nedense hep projeyi hayata geçirme aşamasında gündeme geliyor.
   şema devre program sizin uzmanlaşacağınız ve bildiğiniz yada öğreneceğiniz konular.zaten hocalarınız sizden vermedikleri bir şey isteyemezler.
   anlattığınız projeyi gerçekleştirmek için küçük bir sistem düşünmenizi tavsiye ederim.çünkü küçük malzeme az maliyet getirir.ısıtıcı,motorlar,termometre,ph metre,gerekirse  birçok malzeme (dijital olmak zorunda) kullanacaksınız.yapacağınız devreyi saymıyorum.işiniz kolay değil ama yapılmayacak birşey de değil.
   Kolay gelsin az maliyetle bitirmeniz dileklerimle başarılar.
STARSMET2014-03-19 07:15:19

Üye imzalarını sadece giriş yapan üyelerimiz görebilir

Giray ATASEVENÇevrim Dışı

Kayıt: 25/12/2008
İl: Ankara
Mesaj: 256
Giray ATASEVENÇevrim Dışı
Gönderim Zamanı: 19 Mart 2014 11:58
Evet Ahmet abi biraz öyle oluyor çünkü bu projeler sadece bizim bölümde laboratuvar derslerinin ağır olduğu zamanlar veriliyor bu da 3. sınıfa denk geliyor şuan bir fizibilite yapıyorum ancak maliyet hakkında dediğiniz gibi tam bir net değer yok elimde . Teşekkür ederim 

valfi 70-80 TL
 
1 KANAL 5V RÖLE KARTI
Fiyat : 2,20 USD + KDV 
5,78 TL Kdv Dahil

PIC18F4520 I/P
Fiyat : 4,40 USD + KDV 
11,56 TL Kdv Dahil
 
Linix Mikro Step Motor
 
Linix Mikro Step Motor
Fiyat : 50,00 TL + KDV 
59,00 TL Kdv Dahil

Direnç,kondansatör,transistör,buton,PCB kart vb ekipman max 18 TL

LM2576 HVT-ADJ (SIMPLE SWIT...
Fiyat : 2,00 USD + KDV 
5,25 TL Kdv Dahil

Bir akvaryum ikinci el buldum bir tane :) 25 TL Bekleme tankı olarak evdeki bir boş damacanayı kullancam

Su akışı için kafa motorları 15tl*2=30 tl
 toplam 227.43 TL
tahmini sonuç ama 10 aşağı 5 yukarı bu fiyata bedel olacak 

Üye imzalarını sadece giriş yapan üyelerimiz görebilir

STARSMETÇevrim Dışı

Kayıt: 01/01/2011
İl: Ankara
Mesaj: 134
STARSMETÇevrim Dışı
Gönderim Zamanı: 19 Mart 2014 22:20
   bu arada sana digital termometre ki 2 tane lazım,onun yerine mikroişlemcin zaten olacak 2 tane lm 35 yada ds18b20 sensörlerini kullan.biraz daha araştırırsan step motor sürücü entegreleri kullanabilirsin.transistörler seni uğraştırır.bu şekilde maliyetin düşecektir.kolay gelsin.

Üye imzalarını sadece giriş yapan üyelerimiz görebilir

Giray ATASEVENÇevrim Dışı

Kayıt: 25/12/2008
İl: Ankara
Mesaj: 256
Giray ATASEVENÇevrim Dışı
Gönderim Zamanı: 19 Mart 2014 22:29
çok teşekkür ederim Ahmet abi verdiğin bilgiler için 

Üye imzalarını sadece giriş yapan üyelerimiz görebilir

yazgunesiÇevrim Dışı

Özel Üye
Kayıt: 31/03/2011
İl: Çanakkale
Mesaj: 331
yazgunesiÇevrim Dışı
Özel Üye
Gönderim Zamanı: 23 Mart 2014 01:06
Bu konu ile alakalı benzer şekilde bir çok paylaşımlar yapıldı ve sitemizde de çeşitli örnekler mevcuttur.. Kolay gelsin ne diyeyim.. :-)

Eğer çok gelişmiş bir proje yapmak isterisen, kullanacağın PİC programı çok büyük olur, Pic16f*** serisi zayıf gelir Pic18*** serisinden kullanman lazım.. Bana PİC programlama az geliyor çok fazlasını isterim dersen, arduino kullanman lazım..

Bu arada ben elektronikten pek anlamam, ama balıklar için iki dakikada devreleri hemen yakarım.


Akvaryum otomasyonu ile ilgili linkler :

http://www.akvaryum.com/forum/akvaryum_%28pic%29_control_sistemi_k314608.asp

http://www.akvaryum.com/forum/otomatik_hava_motoru_kontrolu_k389967_sn1.asp

http://www.akvaryum.com/forum/akvaryum_otomasyonu_%28isi-isik-havalandirma%29_k597462.asp

http://www.akvaryum.com/forum/sogutma_projem_resimli_yapim_asamalari_k163991_sn1.asp

http://www.akvaryum.com/forum/full_kontrol_aquamatic_fc914_k121823.asp

http://www.akvaryum.com/forum/ogrenci_isi_otomatik_yemleme_sistemi__k415234_sn1.asp

http://www.teknomerkez.net/sayfa.php?git=628

http://320volt.com/akvaryum-kontrol-otomasyon-pic16f877-hi-tech-picc/

http://elektrobilim.org/forum/pic-uygulamalari/7268-akvaryum-kontrol-projesi-oneri-ve-yardimlariniz.html

http://www.picproje.org/index.php?topic=31163.0

http://www.elektrotekno.com/about57694.html

http://proelectronic.wordpress.com/2011/11/04/akvaryum-otomasyonu/

http://www.elektrotekno.com/about21051.html

http://www.next.gr/microcontrollers/pic/aquarium-auto-controller-using-pic18f4520-l6873.html

http://forums.netduino.com/index.php?/topic/7586-my-aquarium-controller-led-lighting-controller/

http://alan-parekh.com/projects/fish-tank-lights-and-temperature-sensor/

http://www.pcbheaven.com/circuitpages/PIC_Thermometer_and_Thermostat/

http://compudoc97.com/SWNDIY3.html

http://www.reefprojects.com/wiki/Main_Page

http://www.marineaquariumsa.com/anything-diy-related/26372-arduino-powered-aquarium-controller-project.html

http://www.masa.asn.au/phpBB3/viewtopic.php?t=190763

http://www.nano-reef.com/topic/196161-reefbuddy-diy-aquarium-controller-89/

http://www.plantedtank.net/forums/showthread.php?p=3051946

http://www.masa.asn.au/phpBB3/viewtopic.php?t=216544&p=997116

http://www.reefcentral.com/forums/showthread.php?t=1987110

http://www.ultimatereef.net/forums/showthread.php?t=657458
yazgunesi2014-03-23 01:41:19

Üye imzalarını sadece giriş yapan üyelerimiz görebilir

Giray ATASEVENÇevrim Dışı

Kayıt: 25/12/2008
İl: Ankara
Mesaj: 256
Giray ATASEVENÇevrim Dışı
Gönderim Zamanı: 23 Mart 2014 17:53
Cengiz abi zaten ben şuan PİC18F452 görüyorum okulda yani çok sıkıntı olursa o kadar hocamız var gidip danışırız artık şunu ,bunu nasıl yapmak konusunda  Arduino biliyorum ancak hiç kullanmadım şuan yapacağım projede çok komplike olmamasını istiyorum bir tür prototip hazırlayıp sistemin ana akış olarak çalışması yeterli olacaktır daha sonrasında ise çok ciddi bir sistem yani daha gelişmiş bir versiyonu için uğraşabilirim  Bu arada verdiğiniz bilgiler için teşekkür ederim 

Üye imzalarını sadece giriş yapan üyelerimiz görebilir

sekozzyÇevrim Dışı

Kayıt: 20/05/2012
İl: Bursa
Mesaj: 122
sekozzyÇevrim Dışı
Gönderim Zamanı: 23 Mart 2014 18:57
Woow Cengiz beyin paylaşımları tam da hayalimi süsleyen otomasyon sistemleri ve hepsi 1 çatı altında. kısacası harika...

Üye imzalarını sadece giriş yapan üyelerimiz görebilir

Giray ATASEVENÇevrim Dışı

Kayıt: 25/12/2008
İl: Ankara
Mesaj: 256
Giray ATASEVENÇevrim Dışı
Gönderim Zamanı: 25 Mart 2014 22:16
Benim birde şöyle bir sorum olacak açıkcası rölelerle hiç uğraşmadım şuana kadar ve yaptığıım araştırmalar neticesinde piyasada oldukça fazla röle türü var acaba benim bu ışıklandırmayı yapmam için en uygun model olarak hangi röleyi kullanmam cazip olur 

Üye imzalarını sadece giriş yapan üyelerimiz görebilir

doganiÇevrim Dışı

Kayıt: 10/11/2013
İl: Istanbul
Mesaj: 40
doganiÇevrim Dışı
Gönderim Zamanı: 28 Mart 2014 19:42
Eğer sadece projenin özelliğinden dolayı ise bilemem ama akvaryum ortamı için ısıtma sisteminiz bence yanlış olur.

Su sıcaklığı akvaryum içerisinde kaybolur. Giren suyun sıcaklığı çok büyük önem arz etmez. O durumda akvaryum sıcaklığının ne şekilde düşeceğini hesaplayamazsanız (dış sıcaklık, birim zamanda ısı kaybı miktarı, vs gibi bir çok değişken etkiler ki çok zor bir yöntem) akvaryum sıcaklığını sabitlemek için çok daha karışık bir sistem yapmanız gerekir ki basit bir şekilde hesaplayacak bir sistem bence yapılamaz.

En mantıklısı su sıcaklığını akvaryum içerisinde sabitlemek bence...

Üye imzalarını sadece giriş yapan üyelerimiz görebilir

Giray ATASEVENÇevrim Dışı

Kayıt: 25/12/2008
İl: Ankara
Mesaj: 256
Giray ATASEVENÇevrim Dışı
Gönderim Zamanı: 28 Mart 2014 22:28
[QUOTE=dogani]Eğer sadece projenin özelliğinden dolayı ise bilemem ama akvaryum ortamı için ısıtma sisteminiz bence yanlış olur.

Su sıcaklığı akvaryum içerisinde kaybolur. Giren suyun sıcaklığı çok büyük önem arz etmez. O durumda akvaryum sıcaklığının ne şekilde düşeceğini hesaplayamazsanız (dış sıcaklık, birim zamanda ısı kaybı miktarı, vs gibi bir çok değişken etkiler ki çok zor bir yöntem) akvaryum sıcaklığını sabitlemek için çok daha karışık bir sistem yapmanız gerekir ki basit bir şekilde hesaplayacak bir sistem bence yapılamaz.

En mantıklısı su sıcaklığını akvaryum içerisinde sabitlemek bence...
[/QUOTE] Doğan bey ben onu şöyle izah ediyim size suyu ana hatta valfi aracılığıyla aldım daha sonra bir bekleme tankında su sıcaklığı yaptığımız ısıtıcı ile 26 celciusa sabitlendiği an bir motor tarafından akvaryuma aktardım bu yol içerisinde hortum uzunluğu ve ortam sıcaklığı suyun sıcaklığını en fazla 2-3 celcius etkiler yani su sisteme girdiği anda ısısı sabit kalcak zaten 

Üye imzalarını sadece giriş yapan üyelerimiz görebilir

Giray ATASEVENÇevrim Dışı

Kayıt: 25/12/2008
İl: Ankara
Mesaj: 256
Giray ATASEVENÇevrim Dışı
Gönderim Zamanı: 28 Haziran 2014 00:03

PROJE RAPORU

 

 

-ÖN BİLGİ-

1-) AKVARYUM TARİHİ

Arkeolojik kazıntılar bize balıkların, ırmak ve göl kenarında yaşayan insanlarla deniz kıyısında yerleşmiş kabileler için prehistorik zamandan beri önemli bir besin kaynağı olduğunu göstermektedir. Sığ-yüzücü balıklar kaba mızrak ve sopalarla, derin-yüzücü balıklar ise ağlarla avlanmaktaydı. Eski Mısır'la birlikte balıkların yanlızca besin kaynağı olarak değil, akvaryumcular açısından için önemli olan süslü özellikleri için de yetiştirildiklerini görüyoruz.

Mısırlılar besin kaynağı olarak tilapia türlerini, güzellikleri için ise kutsal olduğuna inandıkları mormyrid'leri besliyorlardı. 

Avrupa'nın japon balıklarıyla tanışması nedense biraz gecikmiş ve bu balıklar İngiltereye ancak 17. yüzyılda, 1691 civarında gelmiştir. İzleyen yüzyıllar içinde ise süs olarak kullanılan gölcük ve göllere yayılmıştır. Birleşik Devletlere ise 1859 tarihli 'Suyun Altındaki Yaşam' adlı kitabından kısa bir süre önce ulaştığı sanılmaktadır.

Bu arada, 19 yüzyılın ortalarından itibaren balık beslemek ve dolayısıyla akvaryumculuk Avrupa'da ciddi bir uğraş halini almaya başlamıştır. 1853'te Londra Zooloji Derneği, içinde su bitkileri ve balıklar bulunan 'Dengeli Akvaryum' kavramını yaratmak için uğraşan Philips Gosse'nin desteği ile bir gösteri akvaryumu kurmuş ve bunu, 1859 Paris ve 1864 Hamburg'da açılan başka akvaryumlar izlemiştir. Bu tarihten hemen sonra Alman akvaryum meraklıları, süs balıkları üretmeye başlamış ve Birleşik Devletlere yönelik olarak bugünde süren ticari bir faaliyetin ilk adımlarını atmıştır.

             Gosse'nin dengeli akvaryum kavramı, bugün bilinen anlamdaki balık besleme anlayışının gelişmesini büyük ölçüde etkilemiştir. İlk akvaryum örneklerinin pek çoğunda çevredeki ırmak ve kaya göletlerinden yakalanan balıklar ağırlanmaktaydı. Bunlar tek bir yaşam ortamına ait ya da biotop - tek bir yaşam ortamına dayalı - ılıman akvaryumlardı. Hava aktarımının gelişmesi ile dünyadaki egzotik balıkların tümünü besleme olanağı doğmuş ve böylece de karışık akvaryum kavramı gelişmiştir.

 

 

2-)AKVARYUMUN İDEALLİĞİ

                İdeal bir akvaryum suyu dinlenmiş su olması gerekmektedir. Çeşme suyundan doldurulmuş kaynak suyu hem klor açısından hem de ağır metaller açısından zengindir. Bu da balıklarda deri zayıflamasına, hastalıklara sebep olmaktadır. Akvaryuma koyacağınız su 48 saat üstü açık bir kapta bekletilmelidir. Bu işlem sonucunda suyun içindeki balıklar için zararlı olan klor uçacaktır. Bunu piyasada satılan klor giderici ilaçlarla da sağlayabilirsiniz.

Aynı zamanda satılan ilaçlar yardımıyla bu suyun içindeki ağır metalleri nötr hale getirmeniz gerekmektedir. Besleyeceğiniz balık çeşidine göre de akvaryum sıcaklığını ayarlamanız gerekmektedir. Genel olarak akvaryum balıkları 20-26 °C arası sıcaklıkta yaşarlar. Yine de hangi balık beslenecekse ısı ona göre ayarlanması gerekmektedir. Özel durumlar haricinde (hastalık, bazı balıklarda üreme, vs…) ısı sabit tutulmalıdır. Bunun içinde yine piyasada satılan çok çeşitli ısıtıcılardan alınabilir.

Bu şartlar sağlandıktan sonra akvaryum balık için idealliğe kavuşmuş olacaktır. Balığın yaşamını sürdürebilmesi için zaman içinde kirlenen akvaryumun temizlenmesi gerekmektedir. Bu temizlik yine beslenecek balığa göre değişmektedir. Yukarıdaki işlemleri her seferde yapmak yorucu ve masraflıdır.

 

 

-PROJENİN AMACI-

                Projemizde yukarıda suyun idealliği için anlatılan bu işlemlerin tekrarına gerek duymaksızın suyu filtreleyerek temizlemeyi hedefledik. Amacımız suyun sadece temizlenmesi değil suyun sıcaklığının kimyasal yapısının bozulmadan su ilavesi olmaksızın suyun temizlenmesini sağlamak.

 

-PROJENİN ÖNEMİ VE ÇALIŞMASI-

Yapılan proje sonunda kirlenen su aynı koşullarda temizlenecek, herhangi bir işlem sürecinden geçirilmeden tekrar balık koşullarına uygun bir şekilde akvaryuma boşaltılacak. Yapılan işlem sürecinde günde 3 defa 3 er tekrardan 8 saat ara ile sistem çalışacak su temizliği sağlanacaktır. Akvaryumdan kafa motoru ile çekilen su filtre aşamasında şu yolları izleyecektir.(Filtre aşaması değiştirilebilir.)

1-) Su önce elyaftan çekilip kaba pisliği temizlenecektir.

2-) Biyolojik filtrelemeye yardımcı olarak mavi süngerden geçecektir.

3-)Suyu sertleştirmesi için mercan kırığından geçecektir.

4-)son olarak da biobalden geçerek su temizlenecektir.

Temizlenen su pompası ile tekrardan akvaryuma aktarılarak akvaryum temizliği sağlanmış olacaktır.

 

 

 

 

                Bu proje kapsamında picimizin kodları C18 dilinde programlayarak derlemiş bulunmaktayız. Devremizde zaman entegresi olan DS1302 de kullanılmaktadır. Saat lcd ekran üzerinde yazılacak zamanı geldiğinde su çekildiği veya suyun verildiği işlem sonunda da suyun temizlendiği yazılacaktır. DS1302 BIOS pili ile beslenen bir entegre olmaktadır. Elektrik gittiğinde de entegre zaman saymasına devam etmektedir. Tekrar elektrik geldiğinde işlem kaldığı yerden devam etmektedir.

 

 

-KULLANILAN MALZEMELER-

1-)DS 1302

DS1302 entegresi mikro denetleyicilerle kullanılan bünyesinde tarih ve zaman bilgilerini barındıran entegredir. Entegre 2100 yılına kadar olan tarih bilgilerinin tamamını belleğinde kayıt altına tutar. DS1302 kristal bağlantısı bildiğimiz kristaller ile çalışmaz. Kullanmamız gereken kristal 32.768 KHz’ lik bir kristaldir. Bunu piyasadan satın alabiliriz gerekirse kendimizde oluşturabiliriz. 1. Bacaktan(Vcc2) stabil 2-5V arası beslenebilir yada 8. Bacaktan(Vcc1) saat piliyle besleyebilir. Bu picin çalışmadığı zamanda bile ds1302 nin arka planda hatasız zamanı saymasını sağlar. Bizim devremizde picimizin her zaman çalışma garantisi olmadığı için 8. Bacaktan besleme vereceğiz.

2-) PİC 18F452

Bacak Yapısı:

                PIC18F452 mikrodenetleyicisinde A,B,C,D ve E olmak üzere beş farklı port bulunmaktadır. Tüm portlar digital giriş / çıkış olarak kullanılabilir. 


* A portu 6 giriş/çıkışa sahiptir ve dijital giriş çıkış olarak kullanılabilir.
* B portu 8 giriş/çıkışa sahiptir. Bu portun 0,1,2,3,4 nolu pinleri harici kesme girişi olarak kullanılabilir.
* C portu 8 giriş/çıkışa sahiptir. Pwm, capture/compare, bilgisayar ile seri iletişim kurma gibi işlevleri vardır.
* D portu 8 giriş/çıkışa sahiptir. Paralel slave port ile mikroişlemci portu olarak kullanılabilir.
* E portu 3 giriş/çıkışa sahiptir. Analog/dijital çevirici olarak kullanılabilir.

 

Genel Özellikleri:

* 40 Mhz’ye kadar işlemci saat hızı
* 75 Adet komut
* Tüm komutlar 1 çevrim (cycle) sürer (4 komut hariç:call,goto,btfss ve incfsz komutları 2 çevrim)
* 18 kaynaktan kesme yapılabilir.
* 8 bitlik data yolu vardır. 
* Enerji verildiğinde sistemi resetleme özelliği (Power-on Reset)
* Power-up Zamanlayıcı (Power-up-Timer PWRT)
* Osilatör başlatma zamanlayıcısı (Osilatör Start-up Timer)
* Özel tip zamanlayıcı (Watch-dog Timer), devre içi RC osilatör
* Hata ayıklamada kullanılanabilecek modül (devre içi Debugger)
* Programlanabilen kod koruma
* Enerji tasarrufu için uyku (SLEEP) modu
* Program kodunun güvenliğini sağlayabilme
* Seçimli osilatör özellikleri: 4X Phase Lock Loop (birincil osilatör), İkincil osilatör (32 kHz) clock girişi
* Sadece 5 V giriş ile devre içi seri programlanabilir.
* 2 pinle programlanabilir.
* Düşük güç tüketimi, yüksek hızlı FLASH/EEPROM teknolojisi
* Tamamen statik dizayn
* 2,0 V ile 5,0 V arasında değişen geniş işletim aralığına sahiptir.
* Kaynak akımı 25 mA dir.

3-) 16*2 LCD DİSPLAY

+5V ile çalışmaktadır.

·         Back Lighting özelliğine sahiptir.

·         LCD arka fon ışığı olmadan 4mA akım çekmektedir.

·         Boyutları 80x36x9.4mm'dir

·         Çalışma sıcaklığı -20 ile +70 derece arasıdır.

 

 

 

4-) 5V’LUK RÖLE

                Röle, elektromanyetik çalışan bir devre elemanıdır. Yani üzerinden akım geçtiği zaman çalışan devre elemanıdır. Röle; Bobin, Palet ve Kontak olmak üzere üç bölümden meydana gelir. Bobin kısmı rölenin giriş kısmıdır. Palet ve kontak kısmının bobin ile herhangi bir elektriksel bağlantısı yoktur.

                "Röle", başka bir elektrik devresinin açılıp kapanmasını sağlayan bir elektriksel anahtardır. Bu anahtar bir elektromıknatıs tarafından kontrol edilir. 1835'te Joseph Henry tarafından icat edilmiştir.

                Rölenin kontakları normalde açık ("Normally Open - NO"), normalde kapalı ("Normally Closed - NC") veya kontakta değişen cinsten olabilir.

                Röleler transistör görevi gibi görürler örneğin basit bir 3 bacaklı rölede akım verdiğiniz zaman şasedeki kol diğer taraftaki akımı açar yani kontrol için kullanılabilir.

Yalnızca transistörlerden bir farkları vardır:direnç ile kulanmak gerekmez. Bobin iki kontağı mıknatısladığı zaman rölenin bir kontağı açılır bir kontağı kapanır.

                Röleler düşük akımlar ile çalışan elektromanyetik bir anahtardır. Üzerinde bulunan elektromanyetik bobine rölenin türüne uygun olarak bir gerilim uygulandığında bobin mıknatıs özelliği kazanır ve karşısında duran metal bir paleti kendine doğru çekerek bir veya daha fazla kontağı birbirine irtibatlayarak bir anahtar görevi yapar.

 

 

 

 

-KODLAR-

akvaryum.c

#include <p18f452.h>                   //PİC'imizin kütüphanesi                                                                           

#include <xlcd.h>                           //LCD komutlarının kütüphanesi

#include <math.h>                        //matematik komutları kütüphanesi

#include <delays.h>                      //Bekleme komutunun kütüphanesini

#include <timers.h>                      //timer kütüphanesi

#include <stdlib.h>                        //değişken değer dönüşüm kütüphanesi

#include "ds1302.h"                                                                                    

#include "Delay.h"                                                                                       

#pragma config OSC = XT, PWRT = ON, WDT = OFF, LVP = OFF, DEBUG = OFF                                                                  //stanndart tanımlamalar

#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF,CP3 = OFF, CPB = OFF, CPD = OFF

#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF, WRTB = OFF,WRTC = OFF, WRTD = OFF

#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF, EBTRB = OFF

  void putrsXLCD(const rom char *buffer)//putrsXLCD komutunu kullanabilmek için gerekli fonksiyon tanımlandı

 

      while(*buffer)                  // Write data to LCD up to null

         {

                 while(BusyXLCD());      // Wait while LCD is busy

                 WriteDataXLCD(*buffer); // Write character to LCD

                 buffer++;               // Increment buffer

         }

         return;

 }

//kullanılan değişkenler tanımlandı

unsigned char veri1,saniye,saat,dakika;

unsigned int sn,dk,sa,tut;

char yazi;

int deger1;

void DelayFor18TCY(void)                                                                                                                                       

{

                Nop();Nop();Nop();

                Nop();Nop();Nop();

                Nop();Nop();Nop();

                Nop();Nop();Nop();

}

void DelayPORXLCD(void)

{

                Delay1KTCYx(60);

                return;

}

void bekle (void)             //bekle isminde bir fonksiyon tanımladım ve program içerisinde gerek oldukça çağırdım                                                                                                                          

{

                Delay10KTCYx(50);                         //500000*4/4MHz=0.5sn bekle

                return;

}

void ds1302verial(){

saat=get_hr();  // saat degıskenıne ds1302'den saat bilgisini al

dakika=get_min();// dakika degıskenıne ds1302'den dakika bilgisini al

veri1=saniye;// veri 1 degıskenıne ds1302'den saniye bilgisini al

saniye=get_sec();// saniye degıskenıne ds1302'den saniye bilgisini al

  }

void main(void)                                                                                                                                                                           

{

TRISB=0x00;

TRISC=0x00;

TRISD=0b11111100;

PORTC=0;

PORTD=0;

OpenXLCD(FOUR_BIT & LINES_5X7);                    //lcd 4bit modda ve 5x7 çözünürlükte çalıştırıldı

WriteCmdXLCD( CURSOR_OFF & BLINK_OFF);  // imleci ve cursorü kapat

OpenTimer2(TIMER_INT_ON &T0_PS_1_16&T2_POST_1_16 );               //timer2 zamanlayıcımızı tanımladık

while(BusyXLCD());                             //LCD hazır olana kadar bekle

WriteCmdXLCD(0x01);                     //Ekranı temizle ve kursörü başa getir komutu gönderiliyor

while(BusyXLCD());                           //LCD hazır olana kadar bekle

 

while(1)

{

ds1302verial();                                 //ds1302 den zaman verisini oku

deger1=fmod(dakika, 10 );         //her 10 dk da bir temizleme yapması için 1 ler basamağı deger1 e atanıyor

if(deger1==0)                                   //eğer 10. dk dolmuş ise alt işlemleri yap

{

                PORTDbits.RD0=1;          //su çekme motorunu/rölesini aktif et

                while(BusyXLCD());                  //LCD hazır olana kadar bekle

                WriteCmdXLCD(0xC0);                 //lcd nin alt satırına geç

                putrsXLCD("K.SU CEKILIYOR");  //ekrana yazıyı yaz

                bekle();                                                                                                            

}

else if(deger1==1)                                         //11. dk da alt işlemleri yap

{

                PORTD=0;                                          //su çekme motorunu durdur

                PORTDbits.RD1=1;                          //se verme motorunu/rölesini aktif et

                while(BusyXLCD());                         //LCD hazır olana kadar bekle

                WriteCmdXLCD(0xC0);                                 //lcd nin alt satırına geç

                putrsXLCD("T.SU VERILIYOR");                 //ekrana yazıyı yaz

                bekle();

}

else if(deger1==2)                         //12. dk da alt işlemleri yap                                                                                                     

{

                PORTD=0;                           //motorları durdur

                while(BusyXLCD());                  //LCD hazır olana kadar bekle

                WriteCmdXLCD(0xC0);                 //lcd nin alt satırına geç

                putrsXLCD("SU TEMIZLENDI");  //ekrana yazıyı yaz

                bekle();

}                                                             //diğer dk larda sadece lcd de zamanı yaz

                while(BusyXLCD());         //LCD hazır olana kadar bekle

                WriteCmdXLCD(0xC0);  //lcd nin alt satırına geç

                putrsXLCD(" ");                //ekranın 2. satırını temizle

 

if(PORTDbits.RD6)

  {

   while(PORTDbits.RD6);             // eger portd0 teki butona baslırse donguye gir

   saat++;                                             //sati 1 arttır

   if(saat==24) {                                 // eger saat 24'se yeni saat 0

    saat=0;

                                               }

   write_ds1302(0x84,get_bcd(saat)); //ds1302'den saat bilgisi ıcın gerekli veriyi gonder

  }

if(PORTDbits.RD7)                          // eger portd1 teki butona baslırse donguye gir

  {

   while(PORTDbits.RD7);             //butona basma bırakılınca donguye gir

   saat--;                                                // saati 1 azalt

   if(saat==0)                                      // eger saat 0'sa yeni saat 24

   { saat=24;}

 

   write_ds1302(0x84,get_bcd(saat)); //ds1302'den saat bilgisi ıcın gerekli veriyi gonder

  }

 

 

if(PORTDbits.RD4)          // eger portd2 teki butona baslırse donguye gir

  {

   while(PORTDbits.RD4);//butona basma bırakılınca donguye gir

   dakika++;

   if(dakika==60)                //eger dakika 60'sa yeni dakikayı 0 yap

    {dakika=0;  }  

   write_ds1302(0x82,get_bcd(dakika));   //ds1302'den dakika bilgisi ıcın gerekli veriyi gonder

  }

 

if(PORTDbits.RD5)          // eger portd3 teki butona baslırse donguye gir

  {

   while(PORTDbits.RD5);//butona basma bırakılınca donguye gir

   if(dakika==0)                 // eger dakika 0'sa dakikayı 60 yap

    dakika=60;   

   dakika--;                          //dakikayı 1 azalt

   write_ds1302(0x82,get_bcd(dakika));  //ds1302'den dakika bilgisi ıcın gerekli veriyi gonder

  }

 

if(saniye!=veri1)              // eger saniye veriye esit degılse donguye gir

 {

//lm35'den veri okuyup adc ile convert etme ve saniye,dakika,saat bilgilerini ekrana basma fonksiyonu

    WriteCmdXLCD(0x01);     //Ekranı temizle ve kursörü başa getir komutu gönderiliyor

    while(BusyXLCD());

    putcXLCD(saat/10+48);putcXLCD(saat%10+48);//Saati ekrana yazdırma

    putcXLCD(58);              //":" nın ASCI kodu

    putcXLCD(dakika/10+48);putcXLCD(dakika%10+48);//dakikayı ekrana yazdırma

    putcXLCD(58);              //":" nın ASCI kodu

    putcXLCD(saniye/10+48);putcXLCD(saniye%10+48); //saniyeyi ekrana yazdırma  

 }

}

CloseTimer2();

}

 

Delay.c

 

#include "Delay.h"

#if __18CXX

    void DelayMs(unsigned short int ms)

    {

        unsigned char i;

        while(ms--)

        { i=4;

                 while(i--)

            { Delay10us(25);   }

        }

    }

    void DelayUs(unsigned short int us) //word tipi

    {

        while(us--) //us degiskeni sifir olana kadar say, yani sifir olmadıgi surece say

        {

            Delay1TCY();

        }

    }

#endif

ds1302.c

 

#include "ds1302.h"

#if defined (__18CXX)

 #include "Delay.h"

#endif

void iki_mikro_saniye(void)

{

    #if defined (__18CXX)

        DelayUs(2);

    #elif defined (__XC8)

        __delay_us(2);

    #endif

}

void write_byte(unsigned char Byte)

{

    unsigned char i;

    TRIS_IO=0;

    for(i=0;i<=7;++i)

    {

        IO=Byte&0x01;

        Byte>>=1;       

        SCLK=1;

        SCLK=0;

    }

}

void write_ds1302(unsigned char Byte,unsigned char Data)

{

    RST=1;

    write_byte(Byte);

    write_byte(Data);

    RST=0;

}

unsigned char read_ds1302(unsigned char Byte)

{

    unsigned char i,Data;

    TRIS_SCLK=0;

    TRIS_RST=0;

    RST=1;

    write_byte(Byte);

    TRIS_IO=1;

    Data=0;

    for(i=0;i<=6;i++)

    {

        if(PORT_IO==1){Data+=0x80;}

        Data>>=1;       

        SCLK=1;

        iki_mikro_saniye();

        SCLK=0;

        iki_mikro_saniye();

    }

    RST=0;

    return(Data);

}

 

void ds1302_init(void)

{

    unsigned char j;

    TRIS_IO=0;   

    TRIS_SCLK=0;

    TRIS_RST=0;

    RST=0;

    iki_mikro_saniye();

    SCLK=0;

    iki_mikro_saniye();

    write_ds1302(0x8E,0);

    write_ds1302(0x90,0xA4);

    j=read_ds1302(0x81);

    if((j & 0x80)!=0)

    {

        write_ds1302(0x80,0);

    }

}

 

unsigned char get_bcd(unsigned char Data)

{

    unsigned char NibleH,NibleL;

    NibleH=Data/10;

    NibleL=Data-(NibleH*10);

    NibleH<<=4;

    return(NibleH|NibleL);

}

unsigned char rm_bcd(unsigned char Data)

{

    unsigned char i;

    i=Data;

    Data=((i>>4)&0x0F)*10;

    Data=Data+(i&0x0F);

    return(Data);

}

void set_datetime(unsigned char day,unsigned char mth,unsigned char year,unsigned char dow,unsigned char hr,unsigned char min, unsigned char sec)

{

    TRIS_SCLK=0;

    TRIS_RST=0;

    write_ds1302(0x86,get_bcd(day));

    write_ds1302(0x88,get_bcd(mth));

    write_ds1302(0x8c,get_bcd(year));

    write_ds1302(0x8a,get_bcd(dow));

    write_ds1302(0x84,get_bcd(hr));

    write_ds1302(0x82,get_bcd(min));

    write_ds1302(0x80,get_bcd(sec));

}

unsigned char get_day(void)

{

    return(rm_bcd(read_ds1302(0x87)));

}

unsigned char get_mth(void)

{

    return(rm_bcd(read_ds1302(0x89)));

}

unsigned char get_year(void)

{

    return(rm_bcd(read_ds1302(0x8D)));

}

unsigned char get_dow(void)

{

    return(rm_bcd(read_ds1302(0x8B)));

}

unsigned char get_hr(void)

{

    return(rm_bcd(read_ds1302(0x85)));

}

unsigned char get_min(void)

{

    return(rm_bcd(read_ds1302(0x83)));

}

unsigned char get_sec(void)

{

    return(rm_bcd(read_ds1302(0x81)));

}

void rtc_ram_write(unsigned char address, unsigned char data)

{ write_ds1302(address, data);}

unsigned char rtc_ram_read(unsigned char address)

{

    return(read_ds1302(address));

}

 

Delay.h

 

#if defined __18CXX

//    #include <p18f4685.h>

 #include <delays.h>

#endif

#define __DELAY_C

#define GetSystemClock()         (4000000ul)

#define GetInstructionClock()  (GetSystemClock()/4)

#if !defined(GetInstructionClock)

#error GetInstructionClock() tanimlamasi yapilmamis

#endif

#define Delay10us(us)                 Delay10TCYx(((GetInstructionClock()/1000000)*(us)))

#define Delay1TCY()             Nop()

#if __18CXX

    void DelayMs(unsigned short int ms);

    void DelayUs(unsigned short int us);

#endif

 

 

ds1302.h

#if defined __18CXX

    #include <p18f452.h>

    #include <delays.h>

 

#elif defined __XC8

    #include <pic18f4685.h>

    #include <xc.h> //bekleme fonksiyonlari  için

    #define _XTAL_FREQ 4000000 //Bekleme fonksiyonlarini  4mhz kristal için ayarlar

#endif

#define TRIS_RST    TRISCbits.TRISC0

#define TRIS_SCLK   TRISCbits.TRISC1

#define TRIS_IO     TRISCbits.TRISC2

#define PORT_IO     PORTCbits.RC2

#define RST         LATCbits.LATC0

#define SCLK        LATCbits.LATC1

#define IO          LATCbits.LATC2

void write_byte(unsigned char Byte);

void write_ds1302(unsigned char Byte,unsigned char Data);

unsigned char read_ds1302(unsigned char Byte);

void ds1302_init(void);

unsigned char get_bcd(unsigned char Data);

unsigned char rm_bcd(unsigned char Data);

void set_datetime(unsigned char day,unsigned char mth,unsigned char year,unsigned char dow,unsigned char hr,unsigned char min, unsigned char sec);

unsigned char get_day(void);

unsigned char get_mth(void);

unsigned char get_year(void);

unsigned char get_dow(void);

unsigned char get_hr(void);

unsigned char get_min(void);

unsigned char get_sec(void);

void rtc_ram_write(unsigned char address, unsigned char data);

unsigned char rtc_ram_read(unsigned char address);





Not:c18 dili ile proglandı pic18f452


Üye imzalarını sadece giriş yapan üyelerimiz görebilir