Bu özellik size üyenin attığı tüm iletileri gösterme olanağı sağlayacaktır . Not sadece size izin verilen bölümlerdeki iletilerini görebilirsiniz
Mesajlar - Hasan ERTÜRK
Sayfa: 1 ... 28 29 [30] 31 32 ... 45
436
« : 18 Ekim 2015, 04:34:44 »
  Bu devre istek üzerine yapılmıştır. Devreye ait dosyalar konu ekinde mevcuttur. Arduino kodları: int potansiyometrePin = A0; int led1Pin = 1; int led2Pin = 2; int led3Pin = 3; int led4Pin = 4; int led5Pin = 5; int led6Pin = 6; int led7Pin = 7; int led8Pin = 8; int led9Pin = 9; int led10Pin = 10; int led11Pin = 11; int led12Pin = 12; int led13Pin = 13; int led14Pin = 14; int led15Pin = 15; int led16Pin = 16; int led17Pin = 17; int led18Pin = 18; int led19Pin = 19; int led20Pin = 20; int sensorValue = 0; void setup() { pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(led3Pin, OUTPUT); pinMode(led4Pin, OUTPUT); pinMode(led5Pin, OUTPUT); pinMode(led6Pin, OUTPUT); pinMode(led7Pin, OUTPUT); pinMode(led8Pin, OUTPUT); pinMode(led9Pin, OUTPUT); pinMode(led10Pin, OUTPUT); pinMode(led11Pin, OUTPUT); pinMode(led12Pin, OUTPUT); pinMode(led13Pin, OUTPUT); pinMode(led14Pin, OUTPUT); pinMode(led15Pin, OUTPUT); pinMode(led16Pin, OUTPUT); pinMode(led17Pin, OUTPUT); pinMode(led18Pin, OUTPUT); pinMode(led19Pin, OUTPUT); pinMode(led20Pin, OUTPUT); sensorValue = analogRead(potansiyometrePin); delay(2000); digitalWrite(led1Pin, HIGH); delay(sensorValue); digitalWrite(led2Pin, HIGH); delay(sensorValue); digitalWrite(led3Pin, HIGH); delay(sensorValue); digitalWrite(led4Pin, HIGH); delay(sensorValue); digitalWrite(led5Pin, HIGH); delay(sensorValue); digitalWrite(led6Pin, HIGH); delay(sensorValue); digitalWrite(led7Pin, HIGH); delay(sensorValue); digitalWrite(led8Pin, HIGH); delay(sensorValue); digitalWrite(led9Pin, HIGH); delay(sensorValue); digitalWrite(led10Pin, HIGH); delay(sensorValue); digitalWrite(led11Pin, HIGH); delay(sensorValue); digitalWrite(led12Pin, HIGH); delay(sensorValue); digitalWrite(led13Pin, HIGH); delay(sensorValue); digitalWrite(led14Pin, HIGH); delay(sensorValue); digitalWrite(led15Pin, HIGH); delay(sensorValue); digitalWrite(led16Pin, HIGH); delay(sensorValue); digitalWrite(led17Pin, HIGH); delay(sensorValue); digitalWrite(led18Pin, HIGH); delay(sensorValue); digitalWrite(led19Pin, HIGH); delay(sensorValue); digitalWrite(led20Pin, HIGH); delay(sensorValue); } void loop() { }
437
« : 17 Ekim 2015, 14:52:34 »
438
« : 15 Ekim 2015, 23:22:22 »
Konuya ait video ve resimler eklenmiştir.
439
« : 11 Ekim 2015, 18:12:13 »
Bu dersimizde arduino ve PIR (hareket) sensörü kullanarak alarm devresi yapmayı öğreneceğiz. PIRsensörü hareket algıladığında isteğe bağlı olarak bir lambayı yakacağız ya da bir sirenin çalmasını sağlayacağız. Sistem aynı zamanda da programda belirlediğimiz bir telefon numarasını otomatik ararayarak daha önce kaydettiğimiz bir sesi dinletecektir. Ses kayıt modülünün kullanımı:Kayıt modülüne besleme gerilimi uygulandıktan sonra REC butonu basılır ve telefon açıldığında açıldığında dinletilmek istenen ses kayıt edilir. Modül maksimum 10 saniyelik bir ses kaydını alabilmektedir. REC butonu bırakıldığında kayıt işlemi tamamlanmış olur. Ses kaydınındevamlı dinlenebilmesi için kayıt modülü üzerindeki kısa devre elemanı aşağıdaki resimde görüldüğü şekilde P-E konumunda olmalıdır.      ISIS Devre şeması ARES Baskı devresi Malzeme listesi: Arduino kodları:int hareket_sensoru=A0; // A0 GİRİŞİNE HAREKET SENSÖRÜ İSMİ VERİLDİ int lamba_rolesi=0; // D0 ÇIKIŞINA LAMBA RÖLESİ ADI VERİLDİ int telefon_rolesi=1; // D1 ÇIKIŞINA TELEFON RÖLESİ ADI VERİLDİ int ses_rolesi=2; // D2 ÇIKIŞINA SES RÖLESİ ADI VERİLDİ int hareket_sensoru_durum=0; void setup() { pinMode(hareket_sensoru, INPUT); // A0 PİNİ GİRİŞ YAPILDI pinMode(lamba_rolesi, OUTPUT); // D0 PİNİ ÇIKIŞ YAPILDI pinMode(telefon_rolesi, OUTPUT); // D1 PİNİ ÇIKIŞ YAPILDI pinMode(ses_rolesi, OUTPUT); // D2 PİNİ ÇIKIŞ YAPILDI }
void loop() { // HAREKET ALGILANDI İSE ŞUNLARI YAP BAŞLADI if (digitalRead(hareket_sensoru) == HIGH) // HAREKET ALGILANDI İSE ŞUNLARI YAP { hareket_sensoru_durum= digitalRead(A0); // A0 GİRİŞİNDEKİ LOJİK SEVİYEYİ OKU digitalWrite(0, hareket_sensoru_durum); // OKUNAN LOJİK SEVİYEYİ D0 ÇIKIŞINA AKTAR digitalWrite(1, HIGH); // TELEFON AÇILDI delay(2000); // 0 ÇEVİR BAŞLADI digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(500); // 0 ÇEVİR BİTTİ
// 5 ÇEVİR BAŞLADI digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(500); // 5 ÇEVİR BİTTİ
// 4 ÇEVİR BAŞLADI digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(500); // 4 ÇEVİR digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(500);
// 3 ÇEVİR digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(500); // 4 ÇEVİR BİTTİ
// 4 ÇEVİR BAŞLADI digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(500); // 4 ÇEVİR BİTTİ
// 2 ÇEVİR BAŞLADI digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(500); // 2 ÇEVİR BİTTİ // 0 ÇEVİR BAŞLADI digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50);
digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(500); // 0 ÇEVİR BİTTİ
// 1 ÇEVİR BAŞLADI digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(500); // 1 ÇEVİR BİTTİ // 3 ÇEVİR BAŞLADI digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(500); // 3 ÇEVİR BİTTİ
// 8 ÇEVİR BAŞLADI digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(50);
digitalWrite(1, LOW); delay(50); digitalWrite(1, HIGH); delay(500); // 8 ÇEVİR BİTTİ // SES GÖNDERİLİYOR digitalWrite(2, HIGH); delay(30000); digitalWrite(2, LOW); // SES KAPATILDI digitalWrite(1, LOW); // TELEFON KAPANDI digitalWrite(0, LOW); // LAMBA SÖNDÜRÜLDÜ } // HAREKET ALGILANDI İSE ŞUNLARI YAP BİTTİ }
440
« : 10 Ekim 2015, 20:49:03 »
Hareket sensörünün incelenmesi konulu temrin sayfasını konu ekinden indirebilirsiniz. Temrin içeriğini indirmeden tarayıcınızda görüntülemek için buraya tıklayınız.
441
« : 08 Ekim 2015, 23:52:48 »
      Bu proje Akçaabat İMKB Anadolu Lisesi Coğrafya Dersi Öğretmeni Ömer AYGÜN ve öğrencileri tarafından düşünülmüş ve uygulamaya konulmuştur. Projeye Trabzon ve Mesleki Teknik Anadolu Lisesi Elektronik Öğretmeni Hasan ERTÜRK teknik destek vermiş ve sistemin prototip maketi hazırlanmıştır. Araç kullanırken fren yapmak gerektiğinde durumu algılayıp ayağımızı gazdan çekip frene basana kadar 0,7 saniye kadar zaman geçer. Bu durumda saatte 100 km ile giden bir aracı kullanan bir sürücü fren yapana kadar araç yaklaşık 20 metre daha yol alır. O halde aracın 20 metre önünde bir engel varsa daha frene basmaya bile fırsat kalmadan araç engele çarpacaktır. Yani burada saniyeler hatta milisaniyeler bile çok önem arz etmekte. Burada ortaya çıkan bir sorun var. O da şu: Vites değişirken gazdan ayağımızı çektiğimizde stop lambalarının yanmaması gerek. Bu nedenle tasarım yaparken debriyaj pedalının pozisyonunu da dikkate almak gerekecek. Şimdi gelelim konumuza. Bu gibi durumlarda arkadan gelen araçlar bizim fren yaptığımızı aracımızın stop lambalarının yanmasından fark etmekte. Özellikle ani duruşlarda arkadan gelen araç sürücülerini daha çabuk uyarabilmek için ayağımızı gazdan çektiğimiz anda daha frene henüz basamamışken uyarabilirsek hem onlar hem de bizim için çok önemli olabilecek milisaniyeleri kazanmış oluruz. Sistemimiz ayağımızı frenden çektiğimiz anda stop lambalarının yanmasını sağlayacak. Şimdi tasarım aşamasına geçelim. Öncelikle aşağıdaki tabloda görüldüğü gibi debriyaj, fren ve gaz pedallarının alması muhtemel 8 senaryo için stop lambası, tekerlek ve fren tertibatının göstereceği tepkileri belirleyelim.  Kontrol devremizi arduino ile yapacağız. Şimdi sıra geldi yukarıdaki senaryolara uygun olarak ardiuno programını yazmaya. Arduino kodlarımız:
int gaz_pedali=A5; // A5 GİRİŞİNE FREN PEDALI İSMİ VERİLDİ
int fren_pedali=A0; // A0 GİRİŞİNE FREN PEDALI ADI VERİLDİ
int debriyaj=A4; // A4 GİRİŞİNE DEBRİYAJ ADI VERİLDİ
int stop_lambasi=0; // D0 ÇIKIŞINA STOP LAMBASI ADI VERİLDİ
int motor=5; // MOTORA DİJİTAL 5 PİNİNDEN ENERJİ VERİLECEK
int hiz; // HIZ TANIMLAMASI
int fren_pedali_durum=0;
#include <Servo.h> // SERVO KÜTÜPHANESİ EKLENDİ
const int pot=A0; // SERVO KONTROL PİNİ
Servo tekerlek; // SERVONUN ADI
int potdurum=0;
int pos = 0;
void setup()
{
pinMode(fren_pedali, INPUT); // A0 PİNİ GİRİŞ YAPILDI
pinMode(gaz_pedali, INPUT); // A5 PİNİ GİRİŞ YAPILDI
pinMode(debriyaj, INPUT); // A4 PİNİ GİRİŞ YAPILDI
pinMode(stop_lambasi, OUTPUT); // D0 PİNİ ÇIKIŞ YAPILDI
tekerlek.attach(13); // SERVONUN BAĞLANACAĞI PİN
}
void loop()
{
// MOTOR HIZI AYARI BURADA BAŞLADI
hiz= analogRead(gaz_pedali); // GAZ PEDALINDAKİ VOLTAJI OKU
hiz= map(hiz, 0, 550, 255, 0); // OKUNAN 5 VOLT İLE 0 VOLT ARASINDAKİ VOLTAJI HIZA DÖNÜŞTÜR
analogWrite(motor, hiz); // HESAPLANAN HIZI MOTORA AKTAR
delay(10); // 10 ms BEKLE
// MOTOR HIZI AYARI BURADA BİTTİ
// STOP LAMBASI PEDALI KOMUTLARI BURADA BAŞLADI
fren_pedali_durum= digitalRead(A0); // A0 GİRİŞİNDEKİ LOJİK SEVİYEYİ OKU
digitalWrite(0, !fren_pedali_durum); // OKUNAN LOJİK SEVİYENİN TERSİNİ D0 ÇIKIŞINA AKTAR (DEVRE ONA GÖRE DİZAYN EDİLDİ)
// STOP LAMBASI PEDALI KOMUTLARI BURADA BİTTİ
// DEBRİYAJ, GAZ VE FREN PEDALLARI BASILI DEĞİLSE FREN LAMBASINI FLASH YAP BURADA BAŞLADI
if (digitalRead(fren_pedali) == HIGH && digitalRead(gaz_pedali) == HIGH && digitalRead(debriyaj) == HIGH )
{
digitalWrite(0, HIGH);
delay(20);
digitalWrite(0, LOW);
delay(20);
}
// DEBRİYAJ, GAZ VE FREN FREN PEDALLARI BASILI DEĞİLSE FREN LAMBASINI FLASH YAP BURADA BİTTİ
// FREN TERTİBATI KODLARI BAŞLADI
potdurum=analogRead(pot);
pos= map(potdurum,1023,0,180,55); // FREN PEDALINDAN DEĞER OKUYUP DÖNME AÇISINI ORANLADIK
{
tekerlek.write(pos); // YUKARIDA ORANLADIĞIMIZ DEĞERİ SERVOYA GÖNDERDİK
}
// FREN TERTİBATI KODLARI BİTTİ
}
Projeye ait dosyaları konu ekinden indirebilirsiniz. Proje istek halinde her marka vemodel araca 1000 TL ücretle tasarımcı tarafından uygulanmaktadır.
442
« : 03 Ekim 2015, 16:40:03 »
443
« : 03 Ekim 2015, 16:39:25 »
444
« : 26 Eylül 2015, 21:22:01 »
Bu dersimizde PIR sensör kontrollü çakar lamba uygulaması yaparken PIR sensör ve röle modülünün de nasıl kullanılacağını öğreneceğiz. Soru:Sistemde hareket algılamak üzere 1 adet PIR sensör ve 2 adet lamba bulunmaktadır. PIR sensör hareket algıladığında birinci lamba 250'şer ms aralıklarla 3 defa yanıp sönerken, ikinci lambanın sönük kalması ve birinci lamba 3 kere flash çaktıktan sonra ikinci lambanın 3 kere 250 ms aralıklarla yanıp sönerken birinci lambanın sönük kalması istenmektedir. Bu senarya 6 kere tekrarlanacak ve ortaamdaki hareketlilik sona erdiyse sistem duracaktır. Hareketlilik devam ediyorsa yukarıdaki senarya tekrar uygulamaya sokulacaktır. Çözüm:Öncelikle bizden ne istendiğinin net bir şekilde anlaşılması için söz konusu senaryoya ait akış diyagramını hazırlayalım. Daha sonra oluşturduğumuz bu akış diyagramından program yazarken faydalanacağız. Bu akış diyagramına göre yazılması gereken program şu şekilde olacaktır:
int pir_sensor_cikisi=A0; // A0 PİNİNE pir_sensor_cikisi ADI VERİLDİ
int lamba=0; // D0 PİNİNE lamba ADI VERİLDİ
int lamba2=1; // D1 PİNİNE lamba2 ADI VERİLDİ
void setup()
{
pinMode(pir_sensor_cikisi, INPUT); // A0 PİNİ PIR SENSÖRÜNÜ BAĞLAMA AMACIYLA GİRİŞ YAPILDI
pinMode(lamba, OUTPUT); // D0 PİNİ BİRİNCİ LAMBAYI BAĞLAMA AMACIYLA ÇIKIŞ YAPILDI
pinMode(lamba2, OUTPUT); // D1 PİNİ İKİNCİ LAMBAYI BAĞLAMA AMACIYLA ÇIKIŞ YAPILDI
}
void loop()
{
// DİKKAT RÖLE SHILD LOW AKTİF ÇALIŞMAKTADIR
if (digitalRead(pir_sensor_cikisi) == HIGH ) // PIR SENSOR ÇIKIŞI AKTİF İSE
{
for (int yak_sondur = 1; yak_sondur <= 6; yak_sondur ++)
{
digitalWrite(lamba, LOW); // BİRİNCİ LAMBAYI YAK
digitalWrite(lamba2, HIGH); // İKİNCİ LAMBAYI SÖNDÜR
delay(250); // 250ms BEKLE
digitalWrite(lamba, HIGH); // BİRİNCİ LAMBAYI SÖNDÜR
digitalWrite(lamba2, HIGH); // İKİNCİ LAMBAYI SÖNDÜR
delay(250); // 250ms BEKLE
digitalWrite(lamba, LOW); // BİRİNCİ LAMBAYI YAK
digitalWrite(lamba2, HIGH); // İKİNCİ LAMBAYI SÖNDÜR
delay(250); // 250ms BEKLE
digitalWrite(lamba, HIGH); // BİRİNCİ LAMBAYI SÖNDÜR
digitalWrite(lamba2, HIGH); // İKİNCİ LAMBAYI SÖNDÜR
delay(250); // 250ms BEKLE
digitalWrite(lamba, LOW); // BİRİNCİ LAMBAYI YAK
digitalWrite(lamba2, HIGH); // İKİNCİ LAMBAYI SÖNDÜR
delay(250); // 250ms BEKLE
digitalWrite(lamba, HIGH); // BİRİNCİ LAMBAYI SÖNDÜR
digitalWrite(lamba2, HIGH); // İKİNCİ LAMBAYI SÖNDÜR
delay(250); // 250ms BEKLE
digitalWrite(lamba, HIGH); // BİRİNCİ LAMBAYI SÖNDÜR
digitalWrite(lamba2, LOW); // İKİNCİ LAMBAYI YAK
delay(250); // 250ms BEKLE
digitalWrite(lamba, HIGH); // BİRİNCİ LAMBAYI SÖNDÜR
digitalWrite(lamba2, HIGH); // İKİNCİ LAMBAYI SÖNDÜR
delay(250); // 250ms BEKLE
digitalWrite(lamba, HIGH); // BİRİNCİ LAMBAYI SÖNDÜR
digitalWrite(lamba2, LOW); // İKİNCİ LAMBAYI YAK
delay(250); // 250ms BEKLE
digitalWrite(lamba, HIGH); // BİRİNCİ LAMBAYI SÖNDÜR
digitalWrite(lamba2, HIGH); // İKİNCİ LAMBAYI SÖNDÜR
delay(250); // 250ms BEKLE
digitalWrite(lamba, HIGH); // BİRİNCİ LAMBAYI SÖNDÜR
digitalWrite(lamba2, LOW); // İKİNCİ LAMBAYI YAK
delay(250); // 250ms BEKLE
digitalWrite(lamba, HIGH); // BİRİNCİ LAMBAYI SÖNDÜR
digitalWrite(lamba2, HIGH); // İKİNCİ LAMBAYI SÖNDÜR
delay(250); // 250ms BEKLE
}
}
else
{
digitalWrite(lamba, HIGH); // BİRİNCİ LAMBAYI SÖNDÜR
digitalWrite(lamba2, HIGH); // İKİNCİ LAMBAYI SÖNDÜR
delay(250); // 250ms BEKLE
}
}
   PIR sensörünün Vcc pini arduinonun 5V pinine ve ya 3,5Volt pinine PIR sensörünün GND pini arduinonun GND pinine PIR sensörünün OUT pini arduinonun A0 pinine Röle modülünün Vcc pini arduinonun 5V pinine Röle modülünün GND pini arduinonun GND pinine Röle modülünün IN1 pini arduinonun D0 pinine Röle modülünün IN2 pini arduinonun D1 pinine bağlanmalıdır. Ayrıca röle modülünün RL1 ve RL2 çıkışlarına birer lamba bağlanır. Nasıl bağlanacağını bilmeyenler sorabilirler.Yanlış bağlantı yapılması durumunda devrede kullanılan malzemelerin zarar görmesi muhtemeldir.
445
« : 24 Eylül 2015, 13:29:39 »
 Bu dersimizde ileride yapacağımız bazı uygulamalarda da lazım olacak olan joystick ile dc motor hız ayarının yapılmasını öğreneceğiz. Devrenin çalışma prensibi:Arduinomuzun analog 5. girişe Joystick modülünün Y çıkışı bağlanmıştır. Aslında Joystick modül 2 adet potansiyometreden ibarettir. Joysticke müdahale edilmediğinde içindeki her iki potansiyometre orta konumdadır. Potansiyometrelerin birer uçları +VCC'ye,diğer uçları da GND'ye bağlandığında orta uçlarında 5 voltun yarısı olan 2,5 volt görünür. O halde Joystick kolunu aşağıya doğru indirdiğimizde analog 5. girişe giden orta uçtaki gerilim 2,5 Volt ile 0 Volt arasında değişim gösterir. Bu değişim de arduino içindeki program tarafından değerlendirilerek dijital 5. çıkışta dc motoru sürecek olan pwm sinyalini elde etmiş oluruz. Değişken bir pwm sinyali de motoru da değişik hızlarda dönmesini sağlar. Arduino kodlarımız:int gaz_pedali=A5; // GAZ PEDALI ANALOG 5 PİNİNE BAĞLANACAK int motor=5; // MOTORA DİJİTAL 5 PİNİNDEN ENERJİ VERİLECEK int hiz; // HIZ TANIMLAMASI
void setup() { }
void loop() { // MOTOR HIZI AYARI BURADA BAŞLADI hiz= analogRead(gaz_pedali); // GAZ PEDALINDAKİ VOLTAJI OKU hiz= map(hiz, 511, 0, 0, 255); // OKUNAN 5 VOLT İLE 0 VOLT ARASINDAKİ VOLTAJI HIZA DÖNÜŞTÜR analogWrite(motor, hiz); // HESAPLANAN HIZI MOTORA AKTAR delay(10); // 10 ms BEKLE // MOTOR HIZI AYARI BURADA BİTTİ } ISIS devre şeması:Devre şemasına ait dosyakonu ekinde mevcuttur.
446
« : 21 Eylül 2015, 06:22:27 »
Bu dersimizde kömür sobasını kalorifer olarak kullanmayı öğreneceğiz. Yapacağımız sistemin özellikleri:1. Sistemin çalışması ve güvenlik tedbirleri arduino ile kontrol edilmektedir. 2. Sistemin elektrik kesilmelerine karşı güvenlik tertibatı mevcut olup, elektrik kesintisi durumunda kesintisiz güç kaynağı ile beslenmektedir. 3. Sistemde suyun aşırı ısınması durumunda suyun buhar basıncı oluşturması önlenmiş böylece kazanın patlama riskinin önüne geçilmiştir. Alışıla gelmiş sistemlerde suyun aşırı ısınması sonucunda buhar basıncı oluşmakta ve bu basınçlı buhar bazı güvenlik tedbirleriyle dışarıya atılmaktadır. Oysa ki bu sistemde kesinlikle buhar basıncı oluşmamaktadır ve daha güvenlidir. 4. Kazan suyunun her hangi bir nedenle eksilmesi durumunda sistem bir selenoid valfi açarak şehir şebekesinden otomatik olarak su takviyesi yapmaktadır. 5. Yapılan gözlemlerde kazanda ısınan suyun 5 dakikada en son peteğe ulaştığı gözlenmiştir. Yapılan denemeler neticesinde su pompasının 5'şer dakika aralıklarla çalıştırılıp durdurulmasıyla peteklerin daha fazla ısındığı gözlendi. Bu nedenle arduino programı pompayı 5'şerdakika aralıklarla çalıştırıp durduracak şekilde hazırlanmıştır. 6. Sistem 100 metrekarelik bir dairede denenmiş ve peteklerin üzerindeki maksimum sıcaklık 70 derece olarak ölçülmüştür. 7. Sistem 1 KASIM - 20 MAYIS aralığında çalıştırılmış olup 2 ton kömür tüketmiştir. 8. Sistem; suyun eksik olması, suyun takviyesinin yapıldığı, pompanın çalıştığı ya da durduğu gibi olası periyotlar lcd ekranda görüntülenmekte olup kullanıcıyı bilgilendirmektedir. 9. Sistem deneme yanılma yoluyla bu halini almıştır. Tuğlalı soba yerine kovalı soba kullanılması durumunda sistemin daha verimli çalışacağı kanaati oluşmuş olup bu durumda üst kazan kullanmaya gerek yoktur. 10. Sistem bu haliyle 100 metrekarelik dairedeki 8 metrelik peteği besleyebilmiştir. 11. İsteğe bağlı olarak petek sıcaklığı lcd displayde görüntülenebilmektedir. Malzeme ve araç gereç listesi:1. 2 tabaka sac 2. Yemek kazanı (36 litre) 3. Kesintisiz güç kaynağı 4. Kömür sobası 5. Arduino uno 6. 16 x 2 lcd shild 7. BC 238 transistör 8. BC 307 transistör 9. Devirdaim pompası 10. Selenoid valf | 11. Led (2 adet) 12. 470R direnç (2 adet) 13. 1N4148 diyot (2 adet) 14. 5Volt röle (2 adet) 15. 100nF kondansatör 16. Köprü diyot 17. 220/9Volt 4 watt trafo 18. 1M direnç 19. Muhtelif iletkenler, kablolar 20. Born vidası (2 adet) | 21. Kutu 22. Kablo kanalı 23. Lehimleme araç ve gereçleri 24. Baskı devre araç ve gereçleri 25. El ve güç aletleri 26. LM35 | Arduino kodlarımız:Bu kodlarla arduinomuzu programlıyoruz. İhtiyaç halinde arduino dosyasını konu ekinden indirebilirsiniz. // TASARIM: HASANA ERTURK TRABZON MESLEKI VE TEKNIK ANADOLU LISESI 2015 EYLUL
// ALT PROGRAM SU EKSİK OLDUGUNDA POMPAYI DURDUR BASLADI void su_kes() { digitalWrite(0, HIGH); } // ALT PROGRAM SU EKSİK OLDUGUNDA POMPAYI DURDUR BITTI
// LIKID KRISTAL KUTUPHANESİ EKLENIYOR #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int lcd_key = 0; int adc_key_in = 0; #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 // LIKID KRISTAL KUTUPHANESİ EKLENMESI TAMAMLANDI
int sensor=1; const int sensorpini = 13; // 13 NOLU PIN SENSOR PINIDIR int sensor_durum = 0; int SicaklikPin = 5; // LM35 sensöre bağlı pin (Analog 0) int OkunanDeger; // Analog 0'dan okunacak değer (0-1023) LM35'in vereceğı en büyük okuma değeri 1V=205 olacak. int Sicaklik; //
// PIN TANIMLAMALARI BURADA BASLADI void setup() { lcd.begin(16, 2); lcd.setCursor(0,0); lcd.print("temrinlerim.org"); // ACILISTA LCDDE OKUNACAK YAZI pinMode(0, OUTPUT); // 0 NOLU PIN SELONOIDI KONTROL EDER pinMode(1, OUTPUT); // 1 NOLU PIN POMPAYI KONTROL EDER pinMode(2,INPUT); // INTERPUT KESME ISLEMI GİRİSİ pinMode(13,INPUT); // 13 NOLU PIN SENSOR GIRIS PINIDIR attachInterrupt(0, su_kes, RISING); // 2 NOLU PIN LOJIK 1 OLDUGUNDA KESMEYI DEVREYE SOKAR su_kes FONKSIYONU CALISMAYA BASLAR } // PIN TANIMLAMALARI BURADA BITTI
// ANA PROGRAM BURADA BASLADI void loop() { sensor_durum = digitalRead(sensorpini); if (sensor_durum == HIGH) { sensor = digitalRead(13); // 13 NOLU PINDEKI LOJIK SEVİYEYI OKU digitalWrite(0, sensor); // 13 NOLU PINDEKI LOJIK SEVİYE NE İSE 0 NOLU PINE AKTAR digitalWrite(1, sensor); // 13 NOLU PINDEKI LOJIK SEVİYE NE İSE 1 NOLU PINE AKTAR lcd.clear(); // LCD TEMIZLE OkunanDeger = analogRead(SicaklikPin); Sicaklik = map (OkunanDeger, 0, 205, 0, 100); //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("PETEK: "); // ILK SATIRA PETEK: YAZILDI lcd.print(Sicaklik); // DEVAMINA HESAPLANAN SICAKLIK YAZILDI lcd.print(" DERECE"); // DEVAMINA SICAKLIK BİRİMİ YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("POMPA CALISIYOR"); // IKINCI SATIRA POMPA START YAZILDI delay(60000); // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)
lcd.clear(); // LCD TEMIZLE OkunanDeger = analogRead(SicaklikPin); Sicaklik = map (OkunanDeger, 0, 205, 0, 100); //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("PETEK: "); // ILK SATIRA PETEK: YAZILDI lcd.print(Sicaklik); // DEVAMINA HESAPLANAN SICAKLIK YAZILDI lcd.print(" DERECE"); // DEVAMINA SICAKLIK BİRİMİ YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("POMPA CALISIYOR"); // IKINCI SATIRA POMPA START YAZILDI delay(60000); // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)
lcd.clear(); // LCD TEMIZLE OkunanDeger = analogRead(SicaklikPin); Sicaklik = map (OkunanDeger, 0, 205, 0, 100); //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("PETEK: "); // ILK SATIRA PETEK: YAZILDI lcd.print(Sicaklik); // DEVAMINA HESAPLANAN SICAKLIK YAZILDI lcd.print(" DERECE"); // DEVAMINA SICAKLIK BİRİMİ YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("POMPA CALISIYOR"); // IKINCI SATIRA POMPA START YAZILDI delay(60000); // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)
lcd.clear(); // LCD TEMIZLE OkunanDeger = analogRead(SicaklikPin); Sicaklik = map (OkunanDeger, 0, 205, 0, 100); //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("PETEK: "); // ILK SATIRA PETEK: YAZILDI lcd.print(Sicaklik); // DEVAMINA HESAPLANAN SICAKLIK YAZILDI lcd.print(" DERECE"); // DEVAMINA SICAKLIK BİRİMİ YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("POMPA CALISIYOR"); // IKINCI SATIRA POMPA START YAZILDI delay(60000); // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)
lcd.clear(); // LCD TEMIZLE OkunanDeger = analogRead(SicaklikPin); Sicaklik = map (OkunanDeger, 0, 205, 0, 100); //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("PETEK: "); // ILK SATIRA PETEK: YAZILDI lcd.print(Sicaklik); // DEVAMINA HESAPLANAN SICAKLIK YAZILDI lcd.print(" DERECE"); // DEVAMINA SICAKLIK BİRİMİ YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("POMPA CALISIYOR"); // IKINCI SATIRA POMPA START YAZILDI delay(60000); // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)
lcd.clear(); // LCD TEMIZLE OkunanDeger = analogRead(SicaklikPin); Sicaklik = map (OkunanDeger, 0, 205, 0, 100); //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("PETEK: "); // ILK SATIRA PETEK: YAZILDI lcd.print(Sicaklik); // DEVAMINA HESAPLANAN SICAKLIK YAZILDI lcd.print(" DERECE"); // DEVAMINA SICAKLIK BİRİMİ YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("POMPA CALISIYOR"); // IKINCI SATIRA POMPA START YAZILDI delay(60000); // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)
lcd.clear(); // LCD TEMIZLE OkunanDeger = analogRead(SicaklikPin); Sicaklik = map (OkunanDeger, 0, 205, 0, 100); //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("PETEK: "); // ILK SATIRA PETEK: YAZILDI lcd.print(Sicaklik); // DEVAMINA HESAPLANAN SICAKLIK YAZILDI lcd.print(" DERECE"); // DEVAMINA SICAKLIK BİRİMİ YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("POMPA CALISIYOR"); // IKINCI SATIRA POMPA START YAZILDI delay(60000); // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)
lcd.clear(); // LCD TEMIZLE OkunanDeger = analogRead(SicaklikPin); Sicaklik = map (OkunanDeger, 0, 205, 0, 100); //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("PETEK: "); // ILK SATIRA PETEK: YAZILDI lcd.print(Sicaklik); // DEVAMINA HESAPLANAN SICAKLIK YAZILDI lcd.print(" DERECE"); // DEVAMINA SICAKLIK BİRİMİ YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("POMPA CALISIYOR"); // IKINCI SATIRA POMPA START YAZILDI delay(60000); // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)
lcd.clear(); // LCD TEMIZLE OkunanDeger = analogRead(SicaklikPin); Sicaklik = map (OkunanDeger, 0, 205, 0, 100); //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("PETEK: "); // ILK SATIRA PETEK: YAZILDI lcd.print(Sicaklik); // DEVAMINA HESAPLANAN SICAKLIK YAZILDI lcd.print(" DERECE"); // DEVAMINA SICAKLIK BİRİMİ YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("POMPA CALISIYOR"); // IKINCI SATIRA POMPA START YAZILDI delay(60000); // 1 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER)
digitalWrite(1, LOW); // POMPA DURDU lcd.clear(); // LCD TEMIZLE OkunanDeger = analogRead(SicaklikPin); Sicaklik = map (OkunanDeger, 0, 205, 0, 100); //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("PETEK: "); // ILK SATIRA PETEK: YAZILDI lcd.print(Sicaklik); // DEVAMINA HESAPLANAN SICAKLIK YAZILDI lcd.print(" DERECE"); // DEVAMINA SICAKLIK BİRİMİ YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("POMPA DURDU"); // IKINCI SATIRA POMPA STOP YAZILDI delay(300000); // 5 DAKIKA BEKLE (BU SURE SU ISINIRKEN POMPANIN DEVREDEN CIKACAGI SUREYI BELIRLER } else { delay(500); // 500 ms BEKLE lcd.clear(); // LCD TEMIZLE digitalWrite(0, LOW); // 0 NOLU CIKIS LOJIK 0 OLDU SELONOID ACTI SU ALMA ISLEMI GERCEKLESIYOR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("SU NOKSAN"); // ILK SATIRA SU NOKSAN YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("SU TAMAMLANIYOR"); // IKINCI SATIRA SU TAMAMLANIYOR YAZILDI } } // ANA PROGRAM BURADA BITTI
Devre şeması:ISIS ve hex dosyasını konu ekinden indirebilirsiniz. Baskı devremiz:ARES dosyasını konu ekinden indirebilirsiniz. Montaj aşamaları:                      Montajı tamamlanmış kartın test edilmesi:Test işlemi sırasında 5'şer dakikalık gecikmeler 3 saniye yapılmıştır. Buraya kadar olan işlem basamakları tamamlandığında elektronik kartımız kullanıma hazır hale gelmiş oluyor. Displeyde SU SOGUDU ve SU ISINDI şeklinde bilgilendirmeler görüntülenmekte. Bu ifadelerin yerine isteğe bağlı olarak petek suyu sıcaklığını gösterebiliriz. Bunun için programda ve devre şemasında bazı değişiklikler yapmamız gerekmekte. Devreye LM35 ısı sönsörünü aşağıdaki şemada gösterildiği şekilde ekliyoruz ve mevcut programımızı değiştiriyoruz. // TASARIM: HASANA ERTURK TRABZON MESLEKI VE TEKNIK ANADOLU LISESI 2015 EYLUL
// ALT PROGRAM SU EKSİK OLDUGUNDA POMPAYI DURDUR BASLADI void su_kes() { digitalWrite(0, HIGH); } // ALT PROGRAM SU EKSİK OLDUGUNDA POMPAYI DURDUR BITTI
// LIKID KRISTAL KUTUPHANESİ EKLENIYOR #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int lcd_key = 0; int adc_key_in = 0; #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 // LIKID KRISTAL KUTUPHANESİ EKLENMESI TAMAMLANDI
int sensor=1; const int sensorpini = 13; // 13 NOLU PIN SENSOR PINIDIR int sensor_durum = 0; int SicaklikPin = 5; // LM35 sensöre bağlı pin (Analog 0) int OkunanDeger; // Analog 0'dan okunacak değer (0-1023) LM35'in vereceğı en büyük okuma değeri 1V=205 olacak. int Sicaklik; //
// PIN TANIMLAMALARI BURADA BASLADI void setup() { lcd.begin(16, 2); lcd.setCursor(0,0); lcd.print("temrinlerim.org"); // ACILISTA LCDDE OKUNACAK YAZI pinMode(0, OUTPUT); // 0 NOLU PIN SELONOIDI KONTROL EDER pinMode(1, OUTPUT); // 1 NOLU PIN POMPAYI KONTROL EDER pinMode(2,INPUT); // INTERPUT KESME ISLEMI GİRİSİ pinMode(13,INPUT); // 13 NOLU PIN SENSOR GIRIS PINIDIR attachInterrupt(0, su_kes, RISING); // 2 NOLU PIN LOJIK 1 OLDUGUNDA KESMEYI DEVREYE SOKAR su_kes FONKSIYONU CALISMAYA BASLAR } // PIN TANIMLAMALARI BURADA BITTI
// ANA PROGRAM BURADA BASLADI void loop() { sensor_durum = digitalRead(sensorpini); if (sensor_durum == HIGH) { sensor = digitalRead(13); // 13 NOLU PINDEKI LOJIK SEVİYEYI OKU digitalWrite(0, sensor); // 13 NOLU PINDEKI LOJIK SEVİYE NE İSE 0 NOLU PINE AKTAR digitalWrite(1, sensor); // 13 NOLU PINDEKI LOJIK SEVİYE NE İSE 1 NOLU PINE AKTAR lcd.clear(); // LCD TEMIZLE OkunanDeger = analogRead(SicaklikPin); Sicaklik = map (OkunanDeger, 0, 205, 0, 100); //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("PETEK: "); // ILK SATIRA PETEK: YAZILDI lcd.print(Sicaklik); // DEVAMINA HESAPLANAN SICAKLIK YAZILDI lcd.print(" DERECE"); // DEVAMINA SICAKLIK BİRİMİ YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("POMPA CALISIYOR"); // IKINCI SATIRA POMPA START YAZILDI delay(3000000); // 5 DAKIKA BEKLE (BU SURE POMPANIN DEVREDE KALACAGI SUREYI BELIRLER) lcd.clear(); // LCD TEMIZLE OkunanDeger = analogRead(SicaklikPin); Sicaklik = map (OkunanDeger, 0, 205, 0, 100); //ANALOG 5'INCI PINDE OKUNANA VOLTAJI DERECEYE DONUSTURUR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("PETEK: "); // ILK SATIRA PETEK: YAZILDI lcd.print(Sicaklik); // DEVAMINA HESAPLANAN SICAKLIK YAZILDI lcd.print(" DERECE"); // DEVAMINA SICAKLIK BİRİMİ YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("POMPA DURDU"); // IKINCI SATIRA POMPA STOP YAZILDI delay(3000000); // 5 DAKIKA BEKLE (BU SURE SU ISINIRKEN POMPANIN DEVREDEN CIKACAGI SUREYI BELIRLER } else { delay(500); // 500 ms BEKLE lcd.clear(); // LCD TEMIZLE digitalWrite(0, LOW); // 0 NOLU CIKIS LOJIK 0 OLDU SELONOID ACTI SU ALMA ISLEMI GERCEKLESIYOR lcd.setCursor(0,0); // ILK SATIRA YAZ lcd.print("SU NOKSAN"); // ILK SATIRA SU NOKSAN YAZILDI lcd.setCursor(0,1); // IKINCI SATIRA YAZ lcd.print("SU TAMAMLANIYOR"); // IKINCI SATIRA SU TAMAMLANIYOR YAZILDI } } // ANA PROGRAM BURADA BITTI
   Mekanik aksam ve su tesisatı       Yukarıda şeilde verilen ölçülerde kömür sobasının tuğlasının etrafına 14 litrelik bir alt kazan yaptırılır. Üst kazan 36 litredir. Yine yukarıda verilen ölçülerde bir boru yaptırılır. Sistem üst kazandaki su eksildiğinde selenoid valfi devreye sokarak suyun şehir şebekesinden otomatik olarak tamamlanmasını sağlar. Isınan suyun izlediği yol:1. Isınan su şekilde 1 ile gösterilen noktadan üst kazandan devir daim pompasına 2. Devir daim pompasından peteklere 3. Petekleri dolaşan su borunun 2 ile gösterilen noktasına 4. Borunun 3 nolu noktasından alt kazanın 4 nolu girişine 5. Alt kazanın 5 nolu çıkışından üst kazanın 6 nolu girişine gider ve bu durum devir daim pompası çalıştığı sürece sonsuza dek devam eder.
447
« : 20 Eylül 2015, 01:53:38 »
448
« : 19 Eylül 2015, 14:53:59 »
Bir başka forumda ihtiyaç hasıl olmuştu. O nedenle hazırladım. Paylaşıyorum. 6 sargılı doğrusal motora ait arduino programı. Motorda toplamda 6 sargı mevcut. Sargılar şu düzende enerji alacak: Toplamda bu 6 sargıya ait 12 çıkış ve bu çıkışlara ait 12 klemens mevcut. Klemenslere sırasıyla şu polariteleri alıyor. Klemens 1 = + Klemens 2 = + Klemens 7 = - Klemens 8 = - Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır) Klemens 2 = + Klemens 3 = + Klemens 8 = - Klemens 9 = - Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır) Klemens 3 = + Klemens 4 = + Klemens 9 = - Klemens 10 = - Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır) Klemens 4 = + Klemens 5 = + Klemens 10 = - Klemens 11 = - Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır) Klemens 5 = + Klemens 6 = + Klemens 11 = - Klemens 12 = - Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır) Klemens 6 = + Klemens 7 = + Klemens 12 = - Klemens 1 = - Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır) Klemens 7 = + Klemens 8 = + Klemens 1 = - Klemens 2 = - Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır) Klemens 8 = + Klemens 9 = + Klemens 2= - Klemens 3 = - Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır) Klemens 9 = + Klemens 10 = + Klemens 3 = - Klemens 4 = - Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır) Klemens 10= + Klemens 11 = + Klemens 4 = - Klemens 5 = - Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır) Klemens 11 = + Klemens 12 = + Klemens 5 = - Klemens 6 = - Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır) Klemens 12= + Klemens 1 = + Klemens 6 = - Klemens 7 = - Bekle .....ms (Periyot arttıkça frekans küçülür dolayısıyla da hız da azalır) Buradan sonra başlangıca dönüyor. Bu senaryoya göre 1. ve 7 klemensler 1. sargıya 2. ve 8. klemesler 2. sargıya 3. ve 9. klemesler 3. sargıya 4. ve 10. klemensler 4. sargıya 5. ve 11. klemensler 5. sargıya 6. ve 12. klemensler ise 6. sargıya enerji sağlar. Yine bu senaryoya göre mikrodenetleyici (arduino) programımız şöyle olacaktır: // DIJITAL CIKIS PIN TANIMLAMALARI BASLADI int CIKIS1 = 1; // DİJİTAL 1 PİNİ int CIKIS2 = 2; // DİJİTAL 2 PİNİ int CIKIS3 = 3; // DİJİTAL 3 PİNİ int CIKIS4 = 4; // DİJİTAL 4 PİNİ int CIKIS5 = 5; // DİJİTAL 5 PİNİ int CIKIS6 = 6; // DİJİTAL 6 PİNİ int CIKIS7 = 7; // DİJİTAL 7 PİNİ int CIKIS8 = 8; // DİJİTAL 8 PİNİ int CIKIS9 = 9; // DİJİTAL 9 PİNİ int CIKIS10 = 10; // DİJİTAL 10 PİNİ int CIKIS11 = 11; // DİJİTAL 11 PİNİ int CIKIS12 = 12; // DİJİTAL 12 PİNİ // DIJITAL CIKIS PIN TANIMLAMALARI BITTI
// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELİRTİLMESİ BURADA BAŞLADI void setup() { pinMode(CIKIS1, OUTPUT); // DİJİTAL 1 PİNİ ÇIKIŞ YAPILDI pinMode(CIKIS2, OUTPUT); // DİJİTAL 3 PİNİ ÇIKIŞ YAPILDI pinMode(CIKIS3, OUTPUT); // DİJİTAL 3 PİNİ ÇIKIŞ YAPILDI pinMode(CIKIS4, OUTPUT); // DİJİTAL 4 PİNİ ÇIKIŞ YAPILDI pinMode(CIKIS5, OUTPUT); // DİJİTAL 5 PİNİ ÇIKIŞ YAPILDI pinMode(CIKIS6, OUTPUT); // DİJİTAL 6 PİNİ ÇIKIŞ YAPILDI pinMode(CIKIS7, OUTPUT); // DİJİTAL 7 PİNİ ÇIKIŞ YAPILDI pinMode(CIKIS8, OUTPUT); // DİJİTAL 8 PİNİ ÇIKIŞ YAPILDI pinMode(CIKIS9, OUTPUT); // DİJİTAL 9 PİNİ ÇIKIŞ YAPILDI pinMode(CIKIS10, OUTPUT); // DİJİTAL 10 PİNİ ÇIKIŞ YAPILDI pinMode(CIKIS11, OUTPUT); // DİJİTAL 11 PİNİ ÇIKIŞ YAPILDI pinMode(CIKIS12, OUTPUT); // DİJİTAL 12 PİNİ ÇIKIŞ YAPILDI } // DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELİRTİLMESİ BURADA BITTI
// ANA PROGRAM BURADA BASLADI void loop() { digitalWrite(CIKIS1, HIGH); digitalWrite(CIKIS2, HIGH); digitalWrite(CIKIS7, LOW); digitalWrite(CIKIS8, LOW); delay(1000); // 1s BEKLE digitalWrite(CIKIS1, LOW); digitalWrite(CIKIS2, LOW);
digitalWrite(CIKIS2, HIGH); digitalWrite(CIKIS3, HIGH); digitalWrite(CIKIS8, LOW); digitalWrite(CIKIS9, LOW); delay(1000); // 1s BEKLE digitalWrite(CIKIS2, LOW); digitalWrite(CIKIS3, LOW);
digitalWrite(CIKIS3, HIGH); digitalWrite(CIKIS4, HIGH); digitalWrite(CIKIS9, LOW); digitalWrite(CIKIS10, LOW); delay(1000); // 1s BEKLE digitalWrite(CIKIS3, LOW); digitalWrite(CIKIS4, LOW);
digitalWrite(CIKIS4, HIGH); digitalWrite(CIKIS5, HIGH); digitalWrite(CIKIS10, LOW); digitalWrite(CIKIS11, LOW); delay(1000); // 1s BEKLE digitalWrite(CIKIS4, LOW); digitalWrite(CIKIS5, LOW);
digitalWrite(CIKIS5, HIGH); digitalWrite(CIKIS6, HIGH); digitalWrite(CIKIS11, LOW); digitalWrite(CIKIS12, LOW); delay(1000); // 1s BEKLE digitalWrite(CIKIS5, LOW); digitalWrite(CIKIS6, LOW);
digitalWrite(CIKIS6, HIGH); digitalWrite(CIKIS7, HIGH); digitalWrite(CIKIS12, LOW); digitalWrite(CIKIS1, LOW); delay(1000); // 1s BEKLE digitalWrite(CIKIS6, LOW); digitalWrite(CIKIS7, LOW);
digitalWrite(CIKIS7, HIGH); digitalWrite(CIKIS8, HIGH); digitalWrite(CIKIS1, LOW); digitalWrite(CIKIS2, LOW); delay(1000); // 1s BEKLE digitalWrite(CIKIS7, LOW); digitalWrite(CIKIS8, LOW);
digitalWrite(CIKIS8, HIGH); digitalWrite(CIKIS9, HIGH); digitalWrite(CIKIS2, LOW); digitalWrite(CIKIS3, LOW); delay(1000); // 1s BEKLE digitalWrite(CIKIS8, LOW); digitalWrite(CIKIS9, LOW);
digitalWrite(CIKIS9, HIGH); digitalWrite(CIKIS10, HIGH); digitalWrite(CIKIS3, LOW); digitalWrite(CIKIS4, LOW); delay(1000); // 1s BEKLE digitalWrite(CIKIS9, LOW); digitalWrite(CIKIS10, LOW);
digitalWrite(CIKIS10, HIGH); digitalWrite(CIKIS11, HIGH); digitalWrite(CIKIS4, LOW); digitalWrite(CIKIS5, LOW); delay(1000); // 1s BEKLE digitalWrite(CIKIS10, LOW); digitalWrite(CIKIS11, LOW);
digitalWrite(CIKIS11, HIGH); digitalWrite(CIKIS12, HIGH); digitalWrite(CIKIS5, LOW); digitalWrite(CIKIS6, LOW); delay(1000); // 1s BEKLE digitalWrite(CIKIS11, LOW); digitalWrite(CIKIS12, LOW);
digitalWrite(CIKIS12, HIGH); digitalWrite(CIKIS1, HIGH); digitalWrite(CIKIS6, LOW); digitalWrite(CIKIS7, LOW); delay(1000); // 1s BEKLE digitalWrite(CIKIS12, LOW); digitalWrite(CIKIS1, LOW); } // ANA PROGRAM BURADA BITTI
Sarı ve kırmızı ledler ters paralel bağlanmıştır. Kırmızı yandığında sargı klememnslerinde doğru polarize, sarı yandığında ters polarize vardır. Sargı klemenslerine güç transistörleri ile tamponlanmalıdır. Devre bu haliyle sargıları sürmek için yeterli değildir. Konu ekinde devreye ait ilgili program dosyaları mevcuttur. ISIS Devre Şeması
449
« : 18 Eylül 2015, 12:54:26 »
Bugünkü dersimizde arduino bir programı yürütürken yürümekte olan programı duraklatıp araya başka bir program sıkıştırmasını öğreneceğiz. Araya sıkıştırdığımız program komutları yerine getirildiğinde ana program kaldığı yerden devam edecektir. ANA PROGRAM AKIŞ DİYAGRAMI











| Bir arduino programı pic ve plc programları gibi alt alta yazılan komutlardan oluşur. Arduino çalışmaya başladığında ilk komuttan itibaren tüm komutlar yukarıdan aşağıya doğru sırayla çalıştırılır. Arduinoya bağlı sensör, buton, röle kontakları gibi çevresel birimlerden gelen verilersürekli kontrol edildiğinden program son komuta geldiğinde tekrar başa döner ve bir döngü halinde sürekli çalışır.
Örneğin bir yürüyen ışık için yandaki gibi bir akış diyagramı söz konusudur. Yandaki akış diyagramında görüldüğü gibi program tüm komutları yukarıdan aşağıya sırayla çalıştırmak ve en alttaki komutu uyguladıktan sonra tekrar başa dönüp bu işlemi sonsuz bir döngü haline getirmekten ibarettir.
Akış diyagramına ait arduino kodlarımız:
// DIJITAL CIKIS PIN TANIMLAMALARI BASLADI
int birinci_led = 1;
int ikinci_led = 2;
int ucuncu_led = 3;
// DIJITAL CIKIS PIN TANIMLAMALARI BITTI
// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELİRTİLMESİ BURADA BAŞLADI
void setup()
{
pinMode(birinci_led, OUTPUT); // DİJİTAL 1 PİNİNE 1. LED BAĞLANACAK
pinMode(ikinci_led, OUTPUT); // DİJİTAL 2 PİNİNE 2. LED BAĞLANACAK
pinMode(ucuncu_led, OUTPUT); // DİJİTAL 3 PİNİNE 3. LED BAĞLANACAK
}
// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELİRTİLMESİ BURADA BITTI
// ANA PROGRAM BURADA BASLADI
void loop() {
digitalWrite(birinci_led, HIGH); // DİJİTAL 1 PİNİNDEKİ LED YAKILDI
delay(500); // 500 ms BEKLE
digitalWrite(birinci_led, LOW); // DİJİTAL 1 PİNİNDEKİ LED SÖNDÜRÜLDÜ
digitalWrite(ikinci_led, HIGH); // DİJİTAL 2 PİNİNDEKİ LED YAKILDI
delay(500); // 500 ms BEKLE
digitalWrite(ikinci_led, LOW); // DİJİTAL 2 PİNİNDEKİ LED SÖNDÜRÜLDÜ
digitalWrite(ucuncu_led, HIGH); // DİJİTAL 3 PİNİNDEKİ LED YAKILDI
delay(500); // 500 ms BEKLE
digitalWrite(ucuncu_led, LOW); // DİJİTAL 3 PİNİNDEKİ LED SÖNDÜRÜLDÜ
}
// ANA PROGRAM BURADA BITTI
| Ana programa ait montajı yapılmış devre Ana programa ait fritzing çizimi Ana programa ait isis çizimi Ana programa ait çalışma videosu:Ana programa ait isis simülasyonu videosu:Arduinonun belli bir pinine gelen sinyalle belli bir fonksiyonun ya da önceden belirlenmiş bir alt programın çalıştırılmasını sağlamak için attachInterrupt komutu kullanılır. Kullandığımız arduinonun sürümüne göre dijital pinlerden bazıları attachInterrupt pini olarak da işlev görür. Aşağıdaki tabloda farklı arduino modellerine göre kullanılabilir attachInterrupt pinleri listelenmiştir.
KART |
INTO |
INT1 |
INT2 |
INT3 |
INT4 |
INT5 |
Uno, Nano, Mini |
PIN2 |
PIN3 |
|
|
|
|
Mega, Mega2560, MegaADK |
PIN2 |
PIN3 |
PIN18 |
PIN19 |
PIN20 |
PIN21 |
Micro, Leonardo |
PIN0 |
PIN1 |
PIN2 |
PIN3 |
PIN7 |
|
Zero |
DİJİTAL 4 PİNİ HARİÇ TÜM DİJİTAL PİNLER |
Due |
TÜM DİJİTAL PİNLER |
Şimdi program çalışırken programın her hangi bir aşamasında dijital 2. pine bağlı olan butona basıldığında 4., 5. ve 6. ledlerin yanmasını, dijital 3. pine bağlı olan butona basıldığında 4., 5. ve 6. ledlerin sönmesini isteyelim. Burada yapacağımız işleme interrupt (kesinti) denir. Arduino unonun dijital2 ve dijital3 pinleri (INT0 ve INT1) kesme komutu pinleridir. Yukarıdaki programda bu pinlere led bağlamıştık. Bu pinleri kullanabilmemiz için aşağıdaki şemada görüldüğü gibi 1., 2., ve 3. pinlerdeki ledleri 4., 5. ve 6. pinlere taşıyoruz. 7., 8. ve 9. pinlere de sırasıyla 4., 5. ve 6. ledleri bağlayacağız. INT0 ve INT1 girişlerine de birer adet buton bağlayıp programımızı hazırladığımız devre şemasına uygun olarak düzenleyeceğiz. Ana programa ek program eklenmiş devreye ait isis çizimi Ana programa ek program eklenmiş devreye ait fritzing çizimi Bitmiş devreye ait video:Bitmiş devreye ait isis simülasyonu:Bitmiş devreye ait program:
// DIJITAL CIKIS PIN TANIMLAMALARI BASLADI
int birinci_led = 4;
int ikinci_led = 5;
int ucuncu_led = 6;
int dorduncu_led = 7;
int besinci_led = 8;
int altinci_led = 9;
// DIJITAL CIKIS PIN TANIMLAMALARI BITTI
// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELİRTİLMESİ BURADA BAŞLADI
void setup()
{
pinMode(birinci_led, OUTPUT); // DİJİTAL 4 PİNİNE 1. LED BAĞLANACAK
pinMode(ikinci_led, OUTPUT); // DİJİTAL 5 PİNİNE 2. LED BAĞLANACAK
pinMode(ucuncu_led, OUTPUT); // DİJİTAL 6 PİNİNE 3. LED BAĞLANACAK
pinMode(dorduncu_led, OUTPUT); // DİJİTAL 7 PİNİNE 4. LED BAĞLANACAK
pinMode(besinci_led, OUTPUT); // DİJİTAL 8 PİNİNE 5. LED BAĞLANACAK
pinMode(altinci_led, OUTPUT); // DİJİTAL 9 PİNİNE 6. LED BAĞLANACAK
pinMode(2, INPUT); // DİJİTAL 4 PİNİNE 1. LED BAĞLANACAK
pinMode(3, INPUT); // DİJİTAL 5 PİNİNE 2. LED BAĞLANACAK
attachInterrupt(0, kesme, RISING); // INT0 pini (dijital2 pini) 1 yapılırsa program kesme isimli fonksiyonu yürütür.
attachInterrupt(1, kesme2, RISING); // INT1 pini (dijital3 pini) 1 yapılırsa program kesme2 isimli fonksiyonu yürütür.
}
// DIJITAL GIRIS / CIKISLARIN CIKIS MI YOKSA GIRIS MI OLDUKLARININ BELİRTİLMESİ BURADA BITTI
// ANA PROGRAM BURADA BASLADI
void loop() {
digitalWrite(birinci_led, HIGH); // DİJİTAL 4 PİNİNDEKİ LED YAKILDI
delay(2000); // 500 ms BEKLE
digitalWrite(birinci_led, LOW); // DİJİTAL 4 PİNİNDEKİ LED SÖNDÜRÜLDÜ
digitalWrite(ikinci_led, HIGH); // DİJİTAL 5 PİNİNDEKİ LED YAKILDI
delay(2000); // 500 ms BEKLE
digitalWrite(ikinci_led, LOW); // DİJİTAL 5 PİNİNDEKİ LED SÖNDÜRÜLDÜ
digitalWrite(ucuncu_led, HIGH); // DİJİTAL 6 PİNİNDEKİ LED YAKILDI
delay(2000); // 500 ms BEKLE
digitalWrite(ucuncu_led, LOW); // DİJİTAL 6 PİNİNDEKİ LED SÖNDÜRÜLDÜ
}
// ANA PROGRAM BURADA BITTI
void kesme()
{
digitalWrite(dorduncu_led, HIGH); // DİJİTAL 4 PİNİNDEKİ LED YAKILDI
digitalWrite(besinci_led, HIGH); // DİJİTAL 5 PİNİNDEKİ LED YAKILDI
digitalWrite(altinci_led, HIGH); // DİJİTAL 6 PİNİNDEKİ LED YAKILDI
}
void kesme2()
{
digitalWrite(dorduncu_led, LOW); // DİJİTAL 4 PİNİNDEKİ LED SÖNDÜRÜLDÜ
digitalWrite(besinci_led, LOW); // DİJİTAL 5 PİNİNDEKİ LED SÖNDÜRÜLDÜ
digitalWrite(altinci_led, LOW); // DİJİTAL 6 PİNİNDEKİ LED SÖNDÜRÜLDÜ
}
Böylece bir program yürütülürken araya başka bir programı sıkıştırıp her iki programı da yürütmüş olduk.
450
« : 17 Eylül 2015, 00:36:40 »
Bu dersimizde arduino çıkışları lojik sıfır olduğunda çıkışı aktif yapmayı öğreneceğiz. Buna neden gerek var derseniz açıklayalım. Normal şartlarda arduino çıkışları lojik 1 (5Volt) olduğunda çıkışına aaşağıdaki şekilde görüldüğü gibi bir led bağlarız. Çıkış lojik 1 olduğunda led yanar, çıkış lojik 0 olduğunda ise led sönecektir. Bu şemaya ait yazılım:void setup() { pinMode(13, INPUT); // DİJİTAL 0 PİNİNE BUTON BAĞLANACAK pinMode(0, OUTPUT); // DİJİTAL 13 PİNİNE LED BAĞLANACAK } int sensor=1; void loop() { sensor = digitalRead(13); // BUTONDAKİ LOJİK SEVİYEYİ OKU digitalWrite(0, sensor); // BUTONDAKİ SEVİYEYİ ÇIKIŞA AKTAR } Buraya kadar her şey normal. Ancak dikkat ederseniz arduinoya ilk defa besleme gerilimi uygulandığında ya da arduino resetlendiğinde arduino çıkışları istem dışı 1 saniye gibi çok kısa bir sürelojik 1 seviyesini almakta ve sonra kendiliğinden normale dönmekte. Bu durum eğitim ortamlarında bir sorun olarak görünmese de özellikle ticari ve endüstriyel kullanımlarda büyük güvenlik risklerine ve hesapta olmayan donanımsal arızalara neden olabilir. Bunun önüne geçebilmek devre şemasında ve yazılımda aşağıdaki örnekte görüldüğü gibi bir değişiklik yaparak arduino çıkışları lojik 0 olduğunda çıkış almamız gerekir. Belki bu problemi çözmek için yazılımsal ya da donanımsal başka çözümler de vardır. Ancak şu an benim bilgim dahilinde değil. Eğer ki daha bir çözüm yolu öğrenirsem yine bu konu altından çözümüpaylaşırım. Bu bağlantıya ait yazılım:void setup() { pinMode(13, INPUT); // DİJİTAL 0 PİNİNE BUTON BAĞLANACAK pinMode(0, OUTPUT); // DİJİTAL 13 PİNİNE LED BAĞLANACAK } int sensor=1; void loop() { sensor = digitalRead(13); // BUTONDAKİ LOJİK SEVİYEYİ OKU digitalWrite(0, !sensor); // BUTONDAKİ SEVİYEYİ ÇIKIŞA AKTAR } Her iki bağlantı ve yazılımda da devremiz aynı işlevi yerine getirmektedir. İhtiyaç olması halinde konuya ait dosyalar konu ekinde mevcuttur.
Sayfa: 1 ... 28 29 [30] 31 32 ... 45
|