Konuyu Değerlendir
  • 0 Oy - 0 Ortalama
  • 1
  • 2
  • 3
  • 4
  • 5
ARDUİNO KONTROLLÜ ANDROİD TABANLI FATURA HESAPLAMA PROJESİ VE YAPIMI
#1
ARDUİNO KONTROLLÜ ANDROİD TABANLI FATURA HESAPLAMA PROJESİ VE YAPIMI

ÖZET
Android tabanlı telefonlar ile kablosuz röle kontrol kartı, elektronik kart , rölelerin
olacağı bir kart ve android tabanlı bir uygulamadan oluşacaktır. Android telefon uygulaması
ile kontrol kartına istenilen zamanda bluetooth aracılığı ile bağlanılabilecek ve android
uygulama eğer bağlantı başarılı ise ilk bağlantıda o andaki aktif röleleri otomatik olarak
arayüzde gösterecektir. Kontrol kartının üzerindeki vaviyen anahtar yardımıyla ilgili çıkış manuel olarak da kontrol edilebilecektir.
DS1302 saat devresi yardımıyla gerçek zamanlı tarih ve saat bilgisi okunmuştur.Bu sayede 25 W lambamızın açık kalma süresi ve faturaya etkisi hesaplanmıştır. Gerekli bilgiler 16*2 LCD üzerinden izlenmiştir.Projemiz temel olarak 25W lambanın fatura maliyetini hesaplama üzerine gerçekleştirilmiştir.
Proje bitiminde kart odadaki ADI anahtarın yerine VAVIYEN anahtar  değitirilmesiyle montajı gerçekleşmiştir.

[img=351x0]http://i2.wp.com/mekatronizm.com/wp-content/uploads/2016/03/9.jpg?resize=351%2C446[/img] [img=259x0]http://i1.wp.com/mekatronizm.com/wp-content/uploads/2016/03/10.jpg?resize=259%2C447[/img]
GİRİŞ VE AMAÇ
Giriş
EAGLE  Professional programı schematic ( şema çizim ) ve board ( baskı devre çizim ) alt programları olmak üzere iki programdan oluşur. Schematic elektronik devre çizim işlemini
Gerçekleştiririz..Çizilen devreler board programına aktarılarak baskı devresi, 3 boyutlu devre elemanı görünüşü çizimleri otomatik olarak baskı devre çizimi gerçekleştirilir. Kullanacağımız mikrodenetliyici  Ardunio Nano’dur.Derleyici olarak Ardunio 1.6.7 programını kullanacağız. Bu programın kütüphanesi çok geniş ve açık kaynak kodlu olduğundan bu derleyiciyi ve mikrodenetleyiciyi tercih ettim. Android arayüzünü geliştirmek için MIT üniversitesinin geliştirmiş olduğu AppInventor programından faydalanıldı. Bu program puzzle mantığıyla çalışmaktadır. Detaylarını aşağıda anlatılacaktır.
 
Amaç
Bu projenin amacı, birçok elektrik – elekronik cihazın android tabanlı mobil cihazlarla
bluetooth aracılığıyla rölelerin kontaklarını kontrol ederek ilgili cihazın kontrolünü
sağlamaktır ve 25 w lık bir lambanın kullanım süresinin fatura karşılığını izlemektir. Aşağıda çalışmasını gösteren video bulunmaktadır.







GENEL BİLGİLER
DONANIM
Rölenin Çalışma Prensibi
[img=380x0]http://i2.wp.com/mekatronizm.com/wp-content/uploads/2016/03/1-1.jpg?resize=380%2C246[/img]
Küçük değerli bir akımın oluşturduğu elektromanyetik alan ile yüksek güçte veya
akımda çalışan bir alıcıyı anahtarlayabilmek için bir ya da daha fazla anahtar grubunu kontrol
eden elemana röle denir. Röleler elektromıknatıs, palet ve kontaklar olmak üzere üç kısımdan
oluşur.
Elektromıknatıs, demir nüve ve üzerine sarılmış bobinden meydana gelir. Röle bobinleri hem doğru ve hem de alternatif akımda çalışır. Bobin doğru akıma bağlanacak ise demir nüve bir parçadan yapılır.
Demir nüvenin ön yüzüne plastikten yapılmış bir pul konur. Bu pul, bobin akımı
kesildikten sonra artık mıknatısıyet nedeniyle paletin demir nüveye yapışık kalmasını önler.
Bobini alternatif akıma bağlanacak rölelerin demir nüveleri sac paketinden yapılır.
Demir nüvenin ön yüzünde açılan oyuğa bakırdan yapılmış bir halka geçirilir. Bu bakır
halka konmazsa alternatif alan nedeniyle palet titreşim yapar. Kontaklar açılıp kapanır ve röle gürültülü çalışır.
Yukarıdaki şekilde görülen röle, 5 adet terminal içermektedir. Bu termniallerden ikisi
röle bobininin besleme uçlarıdır. Bu uçlara genellikle DC gerilim bağlanır. Eskiden AC
gerilim içeren (ve muhtemelen eski tesislerde hala kullanımda olan) röleler vardı ancak
güvenlik için yeni rölelerin çoğu düşük gerilimli DC ile çalışır. DC besleme gerilimi
genellikle 12 V veya 24 V olarak uygulanır.
Geri kalan 3 terminal kontaklara bağlıdır. Rölenin çeşidine ve markasına göre değişmekle birlikte, yukarıdaki rölede bulunan üç kontak terminalinden birisi genel (common) uç, birisi normalde açık (NO normally open) ve diğeri normalde kapalı (NC, normally closed)
ismi verilen uçlardır. Bu uçlar, besleme geriliminden daha yüksek değerli akımları iletmek
veya kesmek için kullanılır.
Rölede hangi uçların besleme ve hangi uçların terminal ucu olduğunu belirlemek için
çeşitli yöntemler vardır. Yeni bir rölede bu uçlar, röle üzerinde resmedilmiştir. Eğer eski bir
röle ise ve üzerindeki resimler, kabartmalar herhangi bir nedenle silinmişse katalogdan
bakılmalıdır. Eğer katalog da yoksa basit bir avometre ile uçlar belirlenebilir. Avometrenin
‘ohm’ kademesinde bobin uçları belirli ve sabit bir direnç değeri göstermelidir. Bobin uçları
belirlendikten sonra avometre ‘buzzer’ kademesine alınır ve NO ve NC uçları bulunur.
Avometrenin bir probu ortak uca temas etmek üzere, diğer prob NO ucunda sinyal vermemeli, NC ucunda ise sinyal vermelidir.
Bluetooth Modülü Haberleşme Protokolü
Kablo bağlantısını ortadan kaldıran kısa mesafe radyo frekansı(RF) teknolojisinin
adıdır. Bluetooth bilgisayar, çevre birimleri, ve diğer cihazların birbirleri ile kablo bağlantısı
olmadan görüş doğrultusu dışında bile olsalar haberleşmelerine olanak sağlar. Bluetooth
teknolojisi 2.4 ghz ISM frekans bandında çalışmakta olup, ses ve veri iletimi yapabilmektedir.
24 MBPS’ye kadar veri aktarabilen bluetooth destekli cihazların etkin olduğu mesafe yaklaşık
10 ile 100 metredir.
Araba kullanırken rahat konusmanın yanında güvenli sürüş imkânıda sağlayan araç
kitleri ile yolculuk yaparken konforlu bir şekilde iletişim kurulabiliyor.
Telefona hiç dokunmadan konuşma imkânı Bluetooth ürünlerinin en önemli özelliği. Markası
ne olursa olsun yeni telefonda Bluetooth özelliği olması yeterli. Telefondaki uyumluluk
garantisi sayesinde, telefon değiştiğinde araç kitinide değiştirmek gerekmiyor.Bluetooth araç
kitleri aracın bir yerine zarar vermeden monte edilerek aracın müzik sistemine entegre oluyor,
veya montaj gerektirmesizin aracın çakmak prizine takılarak hemen kullanılıp araçtan araca
kolayca taşınabiliyor.
Bluetooth ve kızılötesi ile kablosuz aktarımın yanı sıra kablosuz ağ desteği de sunan
avuç içi bilgisayarlar(PDA), aynı zamanda cep telefonu olarak da kullanılabiliyor. Bunun için
satılan CF-Sim adaptörlerini kullanabileceğiniz gibi, kızılötesi ve bluetooth üzerinden de cep
telefonu ile iletişim kurabilirsiniz. Ayrıca bu şekilde GPRS bağlantısı da kurmanız mümkün.
Eğer çalıştığınız bölgede kablosuz bir ağ varsa, PDA ile bu ağa girebilir ve bu ağdaki interneti
paylaşabilirsiniz.
Bluetooth İç Yapısı
Uygulamamızda kullandığımız modül wavesen firmasının üretmiş olduğu HC-06
modülüdür. Bu modülün beslemesi 3.3v ‘tur.Tx ve Rx uçları TTL seviyede gerilime
dayanıklıdır. Modül mikrodenetleyici ile seri haberleşme teknolojisini kullanıyor.
Mikrodenetleyicinin Rx ucunu modülün Tx ucuna ,Tx ucunu da bodülün Rx ucuna bağlandığı
zaman ve beslemelerde verilirse artık bu modül kullanmaya hazırdır. Modülün harici bir
anten girişi mevcut değildir.
Bluetooth Haberleşme Protokolü
Bluetooth günümüzde çok yaygın bir şekilde ve hayatımızın her alanında
kullanılmaktadır. Bunalara birkaç örnek verecek olursak ;
İki bluetooth modülün haberleşmesi için birisinin slave(host) diğerinin master olarak
ayarlanması gereklidir. Bizim projemizde kontrol kartının üzerindeki bluetooth slave ‘dir.
Slave modüller kendi başlarına bir cihaza bağlanamazlar. Ancak başka cihazlardan gelen
bağlantı isteklerini alır ve izin verebilirler.
Tüm ayarlamalar yapıldıktan sonra artık 8bit(1 Byte) ‘lık veriler gönderilir veya alınır.
Artık tek yapılması gereken bu verilerin mikrodenetleyici katında yorumlanmasıdır.
 
Ardunio Nano
Arduino Nano, Atmega328 ( sürüm 3.X kartlarda) veya Atmega168 ( sürüm 2.X kartlarda ) tabanlı, ‘breadboard’lara kolayca takılabilen küçük bir geliştirme kartıdır. Arduino Nano üzerinde 14 dijital IO (6’sı PWM çıkışı olarak kullanılabilen) ve 8 analog giriş mevcuttur. Saat frekansı 16 MHz’dir.  Arduino Duemilanove kartı ile yaklaşık aynı fonksiyonel yapıya sahiptir fakat boyutlar ve tasarım itibarı ile farklılık gösterir. Kart üzerinde DC enerji girişi için bir jack bulunmaz. Ayrıca standart bir USB kablo yerine mini-B kablo ile çalışır.
USB kablosu karta aynı zamanda enerji de sağlar ve kartın enerjilendiğinin bir göstergesi olarak mavi bir LED yanar. Kart için enerji, 6-20 VDC regüleli olmayan bir kaynaktan veya 5 VDC regüleli bir kaynaktan sağlanabilir. Kart USB üzerinden beslenmezse USB haberleşmeyi sağlayan FTDI çipi akım çekmez. Yani kart harici bir kaynaktan beslenirken FTDI çipi tarafından sağlanan 3.3 VDC çıkış mevcut değildir.
 
Giriş-Çıkış Pinleri (I/O)
Arduino Nano kartı üzerindeki 14 dijital pin pinMode(), digitalWrite() veya digitalRead() fonksiyonları kullanılarak giriş veya çıkış olarak kullanılabilir.Logic HIGH 5 volta karşılık gelir. Her pin 20-50 Kohm’luk bir pull-up direncine sahiptir. Ayrıca her pin için sink veya source akımı aynı olup 40 mA’dir. Bunun yanında bazı pinler belirli fonksiyonları yerine getirirler:
Seri haberleşme: pin 0(RX), pin1 (TX) TTL seri veriyi gönderip almak için kullanılan pinlerdir.
Harici kesme (interrupt): pin 2 ve pin 3, logic level low’da, düşen veya yükselen kenarda kesme tetiklemesi algılayabilme yeteneğine sahiptir. attachInterrupt() fonksiyonu kesme özelliğini kullanırken faydalı olacaktır.
PWM çıkışları:pin 3, 5, 6, 9, 10 ve 11. pin. Belirtilen pinler analogWrite() foksiyonu yardımıyla PWM’li sinyal çıkışı sağlarlar.
SPI haberleşme:pin 10 (SS), pin 11 (MOSI), pin 12 (MISO), pin 13 (CSK). SPI kütüphanesi ile birlikte belirtilen pinler üzerinde SPI haberleşme sağlanır.
LED 13: genel amaçlı bir LED’dir. Dijital pin 9 low veya high düzeylerine çekilerek bu LED yakılıp söndürülebilr.
Analog Giriş: 8 analog giriş pinine sahiptir.  Bu pinlerin her biri 10 bit çözünürlüğe sahiptir. Default olarak giriş sinyalinin tepe-tepe değeri, ground değerinden 5 volt değerine kadardır. Fakat AREF pinini ve  analogReference() fonksiyonunu kullanılarak sinyal üst sınırını değiştirmek mümkündür. 6. ve 7. pinler dijital IO olarak kullanılamaz
TWI: pin 4 (SDA) ve pin 5 (SCL) . Wire kütüphanesi ile TWI haberleşmeyi destekler.
AREF: Analog girişler için referans voltaj değeridir.
RESET: mikrodenetleyiciyi resetlemek için kullanılan pindir. Aktif LOW olarak çalışır.
Ayrıca, Arduino pinleri ile  ATmega 328 portları arasındaki mapping için  burayı ziyaret edebilirsiniz.
[img=731x0]http://i2.wp.com/mekatronizm.com/wp-content/uploads/2016/03/2-1.jpg?resize=800%2C368[/img]
Haberleşme 
Arduino Nano, bir bilgisayar veya farkılı bir Arduino kartı veyahut da diğer bir mikrodenetleyici kartı ile haberleşmek için gerekli donanıma sahiptir. Ayrıca Atmega328 mikrodenetleyicisi TWI ve SPI haberleşmeyi desteklemektedir. Dijital pinler RX ve TX aracılığıyla UART TTL (5v) haberleşme sağlanabilmektedir. ATmega328 entegresi bu seri iletişimi USB üzerinden sağlar ve bilgisayarda çalışan yazılıma bir virtual com port olarak görünür. ATmega328 entegresi standart USB sürücülerini kullanmaktadır, dışarıdan bir sürücüye gerek yoktur.
Arduino yazılımı, text verileri karta göndermenize ve karttan gelen text verileri alıp görüntülemenize imkan sağlayan “serial monitor” adı verilen bir bir görünütleme aracına (pencere) sahiptir. Bu ve benzeri haberleşmelerde RX ve TX LEDleri yanıp söncektir.
SoftwareSerial adlı kütüphane Arduino Nano kartının herhangi iki dijital pininin (biri RX diğeri TX işlevi görecek şekilde),  seri haberleşme kurmasına imkan sağlar.  SPI kütüphane ve detaylar için diğer belgeleridaha kolay bir haberleşme sağlamak için inceleyebilirsiniz.
 
DS1302 Entegresi
[img=443x0]http://i2.wp.com/mekatronizm.com/wp-content/uploads/2016/03/3-1.jpg?resize=443%2C238[/img]
DS1302 entegresini gerçek zamanlı zaman ve tarih değerlerini almak için kullandık.Böylelikle istenilen zamanlarda lamba ayarlanarak açılıp kapatılması sağlanmıştır.
 
 
Özellikler:
Saniye, Dakika, Saat, Ayın günleri, Ay, Haftanın günleri ve Yıl(artık yıl dahil) sayabilme,2100 yılına kadar geçerli,31×8 bit pil batarya destekli RAM,Düşük pin gerekesinimi için seri bağlantı,2.0V – 5.5V çalışma gerilimi,2V’ta 300nA’den düşük akım tüketimi,Saat bilgisi yada RAM okuma/yazma için tekli veya çoklu byte(Burst Mode) veri transferi,8-Pin DIP yada 8-Pin SO SMD paket seçeneği,Basit 3-hat seri arayüz,TTL uyumlul(Vcc=5V),-40°C – +85°C Endüstriyel çalışma sıcaklığı(Opsiyonel)
DS1302 entegresi içerisinde gerçek zamanlı saat/takvim ve 31 Byte statik RAM bulundurur. Gerçek zaman saati saniye, dakika, saat, ayın günü, ay, haftanın günü ve yıl bilgilerini içerir. DS1302 entegresi RTC gerekli zamanlamalarını harici olarak bağlanan 32.768 kHz kristal ile hassas bir şekilde sağlar. Aynı zamanda DS1302 harici olarak pil ile beslendiği için kullanıldığı sistemin enerjisi kesilse dahil kendi içinde çalışmaya devam edip saat/tarih ve RAM bilgilerini saklar DS1302 entegresi haberleşmek için basit senkron haberleşme kullanır.
Haberleşmek için sadece 3 pin gereklidir. Bu pinler CE(Chip Enable/Çip Yetki), I/O(Input/Output-Giriş/Çıkış) ve SCLK(Serial Clock/Seri Saat İşareti) pinleridir. Bu pinler sayesinde denetleyicimizi DS1302 entegresi ile haberleştirebilir saat, tarih bilgilerini okuyup yazabiliriz.
 
2*16 LCD
Projemizde Lcd yi ekranında fatura,kullanım süresi,saat,tarih gibi parametreleri görüntülemekte kullandık.
LCD : Nematik sıvı kristaller, LCD lerin yapılmasını mümkün kılan sıvı kristal fazıdır. LCD lerin yapılabilmesi için ışık polarize edilebilmeli, sıvı kristaller polarize edilmiş ışığı geçirebilmeli, sıvı kristallerin molekül dizilimi elektrik akımı ile değiştirilebilmeli ve elektriği ileten bir yapıya sahip olunmalıdır.
 
Vaviyen Anahtar
Bir lambayı veya bir grup lambayı (alıcıyı) iki ayrı yerden aynı zamanda veya farklı zamanlarda yakıp söndüren anahtar çeşididir. Bir tesis için iki anahtar kullanılır. Üç adet bağlantı ucuna sahiptir. Birinci anahtarın orta uçu faz iletkenine, diğer anahtarın orta ucu lambaya bağlanır. Her iki anahtar arasına iki adet iletken çekilerek diğer uçlara bağlanır. Çift girişli uzun koridorların giriş ve çıkışlarına, iki katlı yerlerin merdiven arası aydınlatması, iki odanın aynı balkona açılması durumunda kullanılır.
[img=441x0]http://i1.wp.com/mekatronizm.com/wp-content/uploads/2016/03/4-1.jpg?resize=441%2C146[/img]
Faz anahtarın orta ucu ve diğer basılı kontaktan, diğer anahtarın basılı kontağından orta uca geçerek lambaya ulaşır. Lambaya nötr direk bağlı olduğu için fazda anahtarlardan geldiğinde lamba yanar. Anahtarların herhangi birine basıldığında lamba söner.
Projemizde röle ve vaviyen anahtar iki vaviyen bağlanır gibi bağlanmıştır. Hem manuel hem otomatik kontrolü bu sayede gerçekleştirilmiştir.
DEVRE TASARIMI
1-Şematik Tasarım
[img=731x0]http://i2.wp.com/mekatronizm.com/wp-content/uploads/2016/03/5-1.jpg?resize=860%2C499[/img]
Projemizin montajı için baskı devre tasarımı yapılması gerekiyordu.İlk olarak board için şematik tasarımı gerçekleştirildi.Tasarımı EAGLE Professional adlı tasarım devresinde gerçekleştirildi. Şematik devreye bakıldığı zaman fazla kablolamanın olmadığını görmekteyiz. İlişkili kablolar arasına isimlendime bağlantıları atılarak arka planda otomatikmen bağlantısının yapılması sağlanmıştır.Ardunio 13 pin ile NPN transistör tetiklenmekte ve röle aktif hale getirilmektedir. Rölenin com bacağı yön değiştirerel Vaviyen anahtar üzerinden devreyi tamamlamaktadır.Rölenin kontaklarının ark yapmasını önlemek için hızlı ters diyot bağlantısı yapıldı.Bluetooth modülünün Tx bacağı 3.3 volt ile çalıştığı için 2.2 k ve 1k ile gerilim bölücü yapıldı.Ardunio D8,D7,D6 Bacaklarına RGB led bağlantısı yaparak seri iletişimden sinyal geldiği zaman farklı renkte ledlerin yanması gerçekleştirildi.D11 ve D10 bacakları bluetooth Tx ve Rx bacaklarına bağlantısı yapıldı.
 
2- Board Tasarım
[img=520x0]http://i0.wp.com/mekatronizm.com/wp-content/uploads/2016/03/6-1.jpg?resize=520%2C546[/img]
 
YAZILIM
1-Android Yazılım
Android için yazılım geliştirmek için bir kaç tane uygulama mevcuttur. Bunlardan en
çok bilineni Eclipse isimli programdır. Bu programın hem ücretsiz oluşu hemde kullanışlı
oluşu onu tercihlerde genelde bir numaraya çıkarmaktadır. Birkaç yıldır MİT Üniversitesinin
geliştirmiş olduğu AppInventor adlı online yazılım geliştirme ortamı sesini duyurmaya
başlamış durmda. Eclipse kadar her donanıma hakim olmasada basit uygulamalar için çok
kullanışlı bir yazılım geliştirme ortamını kullanıcılara sunmaktadır. Bizde AppInventor isimli
yazılım geliştrme ortamını projemizde kullandık.
AppInventor ortamını kullanmak için JAVA jdk ‘nın bilgisayarımızda kurulu olması
gerekmektedir. Artık AppInventor ‘i kullanmaya başlayabiliriz.
http://beta.appinventor2.mit.edu adresine giriyoruz ve gmail hesabımızla giriş
yapıyoruz.
2-Uygulama Tasarım Alanı
[img=305x0]http://i2.wp.com/mekatronizm.com/wp-content/uploads/2016/03/7.jpg?resize=305%2C523[/img]
 
Resimde çalışma alanı görüntülenmektedir. Burada uygulamanın görsel arayüzü tasarlanır. Gerekli komponentler eklenerek ve gerekli değişken isimleri burada tanımlanarak uygulamanın arayüzü oluşturulur.Resimin en altında Nonvisible components altında arayüzde gözükmeyen ancak uygulamanın yazılım arayüzünde kullanılacak kütüphaneler görüntülenmektedir.Calculate tuşu ile fatura hesaplama işlemi yapılmaktadır.
 
3-Uyguluma Block Tasarım Alanı
[img=731x0]http://i0.wp.com/mekatronizm.com/wp-content/uploads/2016/03/8.jpg?resize=860%2C336[/img]
App Inventor programı block arayüzünde izlenen adımlar ;

  • BeforePicking kısmı ile ilk önce çevrede bulunan açık bluetooth aygıtları telefon listesinde listelenir.

  • AfterPicking ile bluetooth aygıt seçim işlemi yapılmaktadır.

  • Clocktimer1 ile bluetooth aygıtına bağlanılma bağlantı durumuna göre sırasında label da Connected veya Not Connected text yazıları görülmektedir.

  • Button3 İle ses komut dosyası aktif edilmektedir.

  • Button 5 e basıldığında 1 , Button 4 e basıldığında 2 ve Button 3 e basıldığında 3 sayıları Ardunio Nanoya gönderilmektedir.

  • SpeechRecognizer ile ses komutları yardımıyla Aç parametresinde 1 ,Kapa paramatresinde 2, Hesapla parametresiyle 3 sayıları Ardunio ya gönderilmektedir.
5-Ardunio Yazılım

Kod:
#include <LiquidCrystal.h> // LCD için kütüphane eklendi

#include <DS1302.h> // DS1302 saat modülü kütüphanesi eklendi

#include <SoftwareSerial.h> // Yazılım Serial haberleşmesi kütüphanesi eklendi.

SoftwareSerial mySerial(10,11); // Ardunıo RX, TX bacakları

DS1302 rtc(4,3,2); // RTC Modülün Arduinoda bağlanacağı pinler tanımlanmıştır.

LiquidCrystal lcd(14, 15, 16, 17, 18, 19); // Lcd için 6 adet ardunio analog pini digital olarak tanıtıldı.

int role = 12; // röle com bacağı için ardunio d12 pini int olarak tanıtıldı.

byte serialA; // Android programında 1,2,3 byte tipinde veri alacağımızdan dolayı byte tipinde bir değişken tanımlandı

float fatura; // fatura hesabının sonucu için değişken tanımlandı

float birim_fiyat=0.44; // tüm vergiler dahil 1kw enerjinin birim fiyatı 0.44 tl değeri tanımlandı

float farkCH,farkCD,farkCS,sure,surec,faturam; // açma ve kapama arasındaki sürelerinin farkları için float değişkenler tanımlandı

int a,b,c,CSH,CDK,CSS,i=0,x=0,fark; // açma ve kapama zamanlarını yakalamak için değişkenler tanımlandı.

Time t; // time tipinde bir structure yapısı t parametresine tanımlandı



void setup() // başlangıç ayarları

{

Serial.begin(9600); // serial haberleşme boudrate hızı tanımlandı

mySerial.begin(9600);// sofwareserial haberleşme boudrate hızı tanımlandı

lcd.begin(16,2); // 16 karakter 2 satır LCD tanımlandı // lcd satır ve sütünları başlangıç olarak ayarlandı

rtc.setDOW(THURSDAY); // Gün set edildi // DS1302 modulu başlangıç referans günü set edildi.

rtc.setTime(22, 26 , 0); // Saat set edildi. Not 3v saat pilinin enerji kesiminde devreye girmesi için ve enerji kesilse dahi saymaya devam etmesi için set.dow , set.time ve set.date fonksiyonlaını // ile oasif hale getirip tekrar yükleyiniz.

rtc.setDate(17 ,3 , 2016); // Tarih set edildi

pinMode(role, OUTPUT); // role değişkeni çıkış olarak tanımlandı

pinMode(6, OUTPUT); // 6 numaralı çıkış RGB led için çıkış olarak tanımlandı

pinMode(7, OUTPUT); // 7 numaralı çıkış RGB led için çıkış olarak tanımlandı

}

void loop() {

lcd.setCursor(3, 0);

//3.Sütun 0.Satıra kursor ayarlandı

lcd.print(rtc.getDateStr()); //3.Sütun 0.Satıra tarih yazıldı

lcd.setCursor(0, 1); //0.Sütun 1.Satıra kursor ayarlandı

lcd.print(rtc.getTimeStr()); //0.Sütun 0.Satıra saat yazıldı

lcd.print(" "); // Saat ten sonra bir karakter boşluk verildi

lcd.print(rtc.getDOWStr()); //Gün yazıldı

t = rtc.getTime(); // t structure yapısına anlık zaman değerini okuyacağımız fonksiyon tanımlaması yapılmıştır.

serialA = mySerial.read(); // Android programdan gelecek bilgiyi okuyup daha önce byte tipinde tanımladığımız değişkene yazdırdık

if (serialA==1) { // eğer serialA 1 ise röle aktif edilmiştir lamba yanmıştır.Ayrıca rgb ledin yeşil ledi aktif olmuştur.

digitalWrite(role, HIGH);

digitalWrite(6, LOW);

digitalWrite(7, HIGH);

t = rtc.getTime(); // anlık okuyarak açılma&nbsp; süreleri int tipinde tanımladığımız değişkenlere yazılmıştır.

CSH=t.hour; // CSH değişkenine t.hour fonksiyonu ile anlık saat değeri alınmıştır

CDK=t.min; // CDK&nbsp; değişkenine anlık dakika değeri alınmıştır.

CSS=t.sec; // CSS değişkenine anlık saniye değeri alınmıştır.

i=1; // Calculate butonu için i değişkeni 1 yapıldı.

}

if (serialA==2) // eğer serialA 2 ise röle pasif edilmiştir lamba kapatılmıştır.Ayrıca rgb ledin mavi ledi aktif olmuştur.

{

digitalWrite(role, LOW);

digitalWrite(7, LOW);

digitalWrite(6, HIGH);

t = rtc.getTime(); // anlık okuyarak kapanma&nbsp; süreleri int tipinde tanımladığımız değişkenlere yazılmıştır.

a=t.hour;// a değişkenine t.hour fonksiyonu ile anlık saat değeri alınmıştır

b=t.min;//  değişkenine anlık dakika değeri alınmıştır.

c=t.sec;// c değişkenine anlık saniye değeri alınmıştır.

x=1;// Calculate butonu için x değişkeni 1 yapıldı.

}

if(i==1 && x==1 && serialA==3) // eğer açılma ve kapatılma işlemi yapıldıysa ve CLICK TO CALCULATE TUŞUNA BASILDIYSA

{

farkCH= a-CSH; // kapanma süresi ve açılma süresi arasındaki saat farkı

farkCD= b-CDK;// kapanma süresi ve açılma süresi arasındaki dakika farkı

farkCS= c-CSS;// kapanma süresi ve açılma süresi arasındaki dakika farkı

if(farkCD&gt;0 &&  farkCS>0) // eğer dakika ve saniye farkı 0 dan büyük ise ;

{

lcd.clear(); // lcd ekranında runtime zaman değerleri temizlendi

delay(5);

fatura=birim_fiyat*(farkCD/60)*(farkCS/3600)*25; // fatura değeri birim fiyat ve kullanılan toplam süre ile 25w lambanın watt değeri çarpıldı.

sure=(farkCD*60)*(farkCS); // kullanım süresi hesaplandı

surec=surec+sure; // şu ana kadar ne kadar kullanım yapıldıysa surec değişkeninin üzerine devamlı toplanarak ekrana yazılma işlemi yapıldı.

faturam=fatura+faturam; // şu ana kadar ne kadar fatura tuttuysa faturam değişkeninin üzerine devamlı toplanarak ekrana yazılma işlemi yapıldı.

lcd.setCursor(1,0); // lcd cursoru ayarlandı

lcd.print("25 W "); // 25w yazısı yazdırıldı

lcd.print(surec); // surec değikeni yazdırıldı.

lcd.print("s"); // sure degıskenının saniye cınsınden olduu belırtıldı

lcd.setCursor(0, 1); // bı satıra asagıya ayarlandı

lcd.print("Fatura ="); // fatura için text yazısı yazıldı

lcd.print(faturam); // faturam degıskenı ekrana yazdırıldı

lcd.print("Kr"); // fatura degerı kurus text yazısı faturam değişkenın yanına yazıldı

delay(4000); // &nbsp;4 sanıye kadar bekleme suresı koyuldu

i=0; // bu ıf döngüsünden çıkarken i ve x sıfırlandı

x=0;
}

if( farkCD==0 && farkCS>0) //eğer aynı dakıka içerisinde hesaplama tuşuna basıldıysa bu if döngüsüne girecektir. yani çalışma zamanı farkı 0-59 saniye ise ;

{

lcd.clear(); // lcd ekranında runtime zaman değerleri temizlendi

delay(5);

fatura=birim_fiyat*(farkCS/3600)*25;// fatura değeri birim fiyat ve kullanılan toplam süre ile 25w lambanın watt değeri çarpıldı.

sure=farkCS; // kullanım süresi hesaplandı

surec=surec+sure; // şu ana kadar ne kadar kullanım yapıldıysa surec değişkeninin üzerine devamlı toplanarak ekrana yazılma işlemi yapıldı.

faturam=fatura+faturam; // şu ana kadar ne kadar fatura tuttuysa faturam değişkeninin üzerine devamlı toplanarak ekrana yazılma işlemi yapıldı.

lcd.setCursor(1,0);// lcd cursoru ayarlandı

lcd.print("25 W "); // 25w yazısı yazdırıldı

lcd.print(surec);// surec değikeni yazdırıldı.

lcd.print("s"); // sure degıskenının saniye cınsınden olduu belırtıldı

lcd.setCursor(0, 1);// bı satıra asagıya ayarlandı

lcd.print("Fatura =");// fatura için text yazısı yazıldı

lcd.print(faturam);// faturam degıskenı ekrana yazdırıldı

lcd.print("Kr");// fatura degerı kurus text yazısı faturam değişkenın yanına yazıldı

delay(4000);//4 sanıye kadar bekleme suresı koyuldu

i=0;// bu ıf döngüsünden çıkarken i ve x sıfırlandı

x=0;
}

if( farkCD>0 && farkCS<0) // eğer saniye farkı az ama dakika farkı var ise , örneğin ; 0.58 saniye ile 1.35 arası

{

lcd.clear();// lcd ekranında runtime zaman değerleri temizlendi

delay(5);

fark=(farkCD*60)-farkCS;// kullanım süresi hesaplandı

fatura=birim_fiyat*(fark/3600)*25;// fatura değeri birim fiyat ve kullanılan toplam süre ile 25w lambanın watt değeri çarpıldı.

sure=fark;// fatura değeri birim fiyat ve kullanılan toplam süre ile 25w lambanın watt değeri çarpıldı.

surec=surec+sure;// şu ana kadar ne kadar kullanım yapıldıysa surec değişkeninin üzerine devamlı toplanarak ekrana yazılma işlemi yapıldı.

faturam=fatura+faturam;// şu ana kadar ne kadar fatura tuttuysa faturam değişkeninin üzerine devamlı toplanarak ekrana yazılma işlemi yapıldı.

lcd.setCursor(1,0);// lcd cursoru ayarlandı

lcd.print("25 W "); // 25w yazısı yazdırıldı

lcd.print(surec);// surec değikeni yazdırıldı.

lcd.print("s");// sure degıskenının saniye cınsınden olduu belırtıldı

lcd.setCursor(0, 1);// bı satıra asagıya ayarlandı

lcd.print("Fatura =");;// fatura için text yazısı yazıldı

lcd.print(faturam);// faturam degıskenı ekrana yazdırıldı

lcd.print("Kr");// fatura degerı kurus text yazısı faturam değişkenın yanına yazıldı

delay(4000);// 4 sanıye kadar bekleme suresı koyuldu

i=0;// bu ıf döngüsünden çıkarken i ve x sıfırlandı

x=0;

}

lcd.clear(); // lcd ekranında runtime zaman değerleri temizlendi

}

}





Proje Sahibi : Aytaç Macit
Bul
Alıntı


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  ARDUİNO VE MATLAB İLE MPU6050 KULLANIMI VE YÖNTEMLER Ken 0 211 19-05-2016, Saat: 09:57
Son Mesaj: Ken
  MIT APP INVERTOR & ARDUİNO İLE LED KONTROL ETME YÖNTEMİ Ken 0 125 19-05-2016, Saat: 09:55
Son Mesaj: Ken
  MIT APP INVERTOR VE ARDUİNO İLE SERVO MOTOR KONTROL ETME YÖNTEMİ Ken 0 131 19-05-2016, Saat: 09:53
Son Mesaj: Ken
  ARDUİNO İLE NOKİA 5110(PCD8544) GRAFİK LCD KULLANIMI VE GEREKLİ YÖNTEMLER Ken 0 198 19-05-2016, Saat: 09:52
Son Mesaj: Ken
  ARDUİNO KONTROLLÜ ÇİM SULAMA SİSTEMİ PROJESİ VE YÖNTEMLER Ken 0 146 19-05-2016, Saat: 09:51
Son Mesaj: Ken

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi
loading...