451
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
452
Projeler / 6. PIR Sensör Kontrollü Çakar Lamba Uygulaması
« : 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.
453
Motor kontrol uygulamaları / 6. Joystick Modül İle DC Motor Hız Kontrolü
« : 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:
Kod: [Seç]
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.
454
Projeler / 5. Sobadan kalorifer yapalım
« : 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:
Arduino kodlarımız:
Bu kodlarla arduinomuzu programlıyoruz. İhtiyaç halinde arduino dosyasını konu ekinden indirebilirsiniz.
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.
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.
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.
Kod: [Seç]
// 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.
Kod: [Seç]
// 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.
455
Arduino Öğreniyorum / Arduino kontrollü sobadan kalorifer yapımı çalışmaları başladı
« : 20 Eylül 2015, 01:53:38 »
Çalışmalar devam etmekte. Çalışmalar tammalandığında ayrıntılarıyla paylaşacağım.
456
Motor kontrol uygulamaları / 5. 6 Sargılı Doğrusal Motorun Arduino İle Çalıştırılması
« : 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:
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ı
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:
Kod: [Seç]
// 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ı
457
Arduino Genel / 10. Arduino Interrupt (Kesinti) İşlemleri
« : 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 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.
Ş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:
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.
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.
458
Arduino Genel / 20. Arduino dijital çıkışları lojik sıfır olduğunda çıkışı aktif yapmak
« : 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:
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:
Her iki bağlantı ve yazılımda da devremiz aynı işlevi yerine getirmektedir.
İhtiyaç olması halinde konuya ait dosyalar konu ekinde mevcuttur.
Bu şemaya ait yazılım:
Kod: [Seç]
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:
Kod: [Seç]
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.
459
Robot uygulamaları / 3. 2 eksen XY Joystick Modül ile servo kontrolü
« : 13 Eylül 2015, 04:49:10 »
Bu dersimizde 2 eksen XY Joystick Modül ile 2 adet servo motoru kontrol edeceğiz.
Fritzing çizimi:
Fritzing çizimini konu ekinden indirebilirsiniz.
Arduino kodlarımız:
Arduino dosyasını konu ekinden indirebilirsiniz.
Fritzing çizimi:
Fritzing çizimini konu ekinden indirebilirsiniz.
Arduino kodlarımız:
Arduino dosyasını konu ekinden indirebilirsiniz.
Kod: [Seç]
#include <Servo.h>
const int servo1 = 3; // first servo
const int servo2 = 10; // second servo
const int joyH = 3; // L/R Parallax Thumbstick
const int joyV = 4; // U/D Parallax Thumbstick
int servoVal; // variable to read the value from the analog pin
Servo myservo1; // create servo object to control a servo
Servo myservo2; // create servo object to control a servo
void setup() {
// Servo
myservo1.attach(servo1); // attaches the servo
myservo2.attach(servo2); // attaches the servo
// Inizialize Serial
Serial.begin(9600);
}
void loop(){
// Display Joystick values using the serial monitor
outputJoystick();
// Read the horizontal joystick value (value between 0 and 1023)
servoVal = analogRead(joyH);
servoVal = map(servoVal, 0, 1023, 0, 180); // scale it to use it with the servo (result between 0 and 180)
myservo2.write(servoVal); // sets the servo position according to the scaled value
// Read the horizontal joystick value (value between 0 and 1023)
servoVal = analogRead(joyV);
servoVal = map(servoVal, 0, 1023, 180, 0); // scale it to use it with the servo (result between 70 and 180)
myservo1.write(servoVal); // sets the servo position according to the scaled value
delay(30); // waits for the servo to get there
}
/**
* Display joystick values
*/
void outputJoystick(){
Serial.print(analogRead(joyH));
Serial.print ("---");
Serial.print(analogRead(joyV));
Serial.println ("----------------");
}
460
2015 - 2016 Öğretim yılı / Toplu yıllık planlar (Elektrik Elektronik Teknolojisi) 2015 2016
« : 08 Eylül 2015, 01:10:19 »
Haberşme Temelleri (perşembe gününe göre)
Haberleşme Cihazları (perşembe gününe göre)
Alarm ve Geçiş Kontrol Sistemleri (Salı gününe göre)
Mobil sistemler 4 saat cuma gününe göre
Dijital elektronik 4 saatcuma gününe göre
Endüstriyel Kontrol Sistemleri (Seçmeli 4 saat)
Elektrik elektronik ölçme (eml)
Elektrik elektronik ölçme (tl)
Mikrodenetleyiciler
Alıntı çalıntı değildir. Emek vardır. Konu ekinden indirebilirsiniz.
Haberleşme Cihazları (perşembe gününe göre)
Alarm ve Geçiş Kontrol Sistemleri (Salı gününe göre)
Mobil sistemler 4 saat cuma gününe göre
Dijital elektronik 4 saatcuma gününe göre
Endüstriyel Kontrol Sistemleri (Seçmeli 4 saat)
Elektrik elektronik ölçme (eml)
Elektrik elektronik ölçme (tl)
Mikrodenetleyiciler
Alıntı çalıntı değildir. Emek vardır. Konu ekinden indirebilirsiniz.
461
Projeler / 4. 2 Eksen Arduino Shild Güneş Paneli
« : 04 Eylül 2015, 21:11:29 »
Bu dersimizde güneş panelinden mümkün olabilen maksimum seviyede enerji alabilmek için güneş panelini otomatik olarak güneşe yönlendiren platform yapmayı öğreneceğiz. Güneş konumunu değiştirdikçe platformumuz güneşin konumunu takip edecektir. Paltformun üzerine bir güneş pili yerleştirilmiştir. Güneş pili de bir bataryayı şarz etmektedir. Bu şekilde gündüzleri bataryamızı maksimum seviyede şarz edip, geceleri bataryamızdan enerji alabiliriz.
Güneşin pozisyonunu tespit edebilmek için sistemde 4 adet ldr (foto direnç) kullanmıştır. Bunlardan ikisi yatay kontrol, diğer ikisi dikey kontrol içindir. Her bir ldrye devre şemasında görüldüğü şekilde birer tane 10klık direnç seri bağlanmıştır. Bu bağlantı sayesinde arduinonun analog A0, A1, A2 ve A3 girişlerine güneşin pozisyonuna göre yaklaşık 0 volt ile yaklaşık 5 volt arasında birbirinden farklı gerilimler düşer. Hangi ldr daha fazla ışık alıyorsa o ldrye ait analog girişte diğer analog girişlere nazaran daha fazla gerilim düşümü olacaktır. Arduino programımız sayesinde analog girişlere düşen gerilimler değerlendirilerek servolara sağa ya da sola dönmeleri için sinyal yollanır. A0 ve A1 girişlerindeki gerilimler yatay kontrolü, A2 ve A3 girişlerindeki gerilimler ise dikey kontrolü sağlayacaktır. Servoların harekete geçmesiyle ldrlerin üzerine düşen ışık şiddetleri eşitlendiğinde ldrlerin üzerine düşen dolayısıyla A0 ve A1 (yatay kontrol) pinleri ile A2 ve A3 (dikey kontrol) pinlerine düşen gerilimler birbirine eşit olacaktır. Yani A0 gerilimi = A1 gerilimi ve A2 gerilimi = A3 gerilimi olana kadar servolar hareket edecek ve platformun güneşe göre uygun pozisyon alması sağlanacaktır.
Malzeme listesi:
Arduino uno
Pan tilt servo motor montaj kiti
Bakırlı pertinaks
Baskı devre malzemeleri
4 adet 10 k direnç
4 adet ldr
2 adet servo
Güneş pili
Batarya
Bilgisayar
Bağlantı iletkenleri
El ve güç aletleri
Muhtelif vida ve civatalar
ISIS çizimi
ISIS çizimini konu ekinden indirebilirsiniz.
Arduino Shild ARES çizimi
Ares dosyasını konu ekinden indirebilirsiniz.
Fritzing çizimi:
Fritzing dosyasını konu ekinden indirebilirsiniz.
Arduino kodlarımız:
Arduino kodlarına ait dosyayı konu ekinden indirebilirsiniz.
Güneşin pozisyonunu tespit edebilmek için sistemde 4 adet ldr (foto direnç) kullanmıştır. Bunlardan ikisi yatay kontrol, diğer ikisi dikey kontrol içindir. Her bir ldrye devre şemasında görüldüğü şekilde birer tane 10klık direnç seri bağlanmıştır. Bu bağlantı sayesinde arduinonun analog A0, A1, A2 ve A3 girişlerine güneşin pozisyonuna göre yaklaşık 0 volt ile yaklaşık 5 volt arasında birbirinden farklı gerilimler düşer. Hangi ldr daha fazla ışık alıyorsa o ldrye ait analog girişte diğer analog girişlere nazaran daha fazla gerilim düşümü olacaktır. Arduino programımız sayesinde analog girişlere düşen gerilimler değerlendirilerek servolara sağa ya da sola dönmeleri için sinyal yollanır. A0 ve A1 girişlerindeki gerilimler yatay kontrolü, A2 ve A3 girişlerindeki gerilimler ise dikey kontrolü sağlayacaktır. Servoların harekete geçmesiyle ldrlerin üzerine düşen ışık şiddetleri eşitlendiğinde ldrlerin üzerine düşen dolayısıyla A0 ve A1 (yatay kontrol) pinleri ile A2 ve A3 (dikey kontrol) pinlerine düşen gerilimler birbirine eşit olacaktır. Yani A0 gerilimi = A1 gerilimi ve A2 gerilimi = A3 gerilimi olana kadar servolar hareket edecek ve platformun güneşe göre uygun pozisyon alması sağlanacaktır.
Malzeme listesi:
Arduino uno
Pan tilt servo motor montaj kiti
Bakırlı pertinaks
Baskı devre malzemeleri
4 adet 10 k direnç
4 adet ldr
2 adet servo
Güneş pili
Batarya
Bilgisayar
Bağlantı iletkenleri
El ve güç aletleri
Muhtelif vida ve civatalar
ISIS çizimi
ISIS çizimini konu ekinden indirebilirsiniz.
Arduino Shild ARES çizimi
Ares dosyasını konu ekinden indirebilirsiniz.
Fritzing çizimi:
Fritzing dosyasını konu ekinden indirebilirsiniz.
Arduino kodlarımız:
Arduino kodlarına ait dosyayı konu ekinden indirebilirsiniz.
Kod: [Seç]
#include <Servo.h>
Servo yatay;
int pos = 90; // Başlama pozisyonu
int sens1 = A0; // LRD 1 pin
int sens2 = A1; //LDR 2 pin
int tolerance = 2;
Servo dikey;
int pos2 = 90; // Başlama pozisyonu
int sens3 = A2; // LRD 3 pin
int sens4 = A3; //LDR 4 pin
int tolerance2 = 2;
void setup()
{
yatay.attach(9); // Dijital 9 pini yatay servoya bağlanacak
dikey.attach(10); // Dijital 10 pini dikey servoya bağlanacak
pinMode(sens1, INPUT);
pinMode(sens2, INPUT);
pinMode(sens3, INPUT);
pinMode(sens4, INPUT);
yatay.write(pos);
dikey.write(pos2);
delay(2000); // a 2 seconds delay while we position the solar panel
}
void loop()
{
int val1 = analogRead(sens1); // sensor 1 oku
int val2 = analogRead(sens2); // sensor 2 oku
int val3 = analogRead(sens3); // sensor 3 oku
int val4 = analogRead(sens4); // sensor 4 oku
if((abs(val1 - val2) <= tolerance) || (abs(val2 - val1) <= tolerance)) {
} else {
if(val1 > val2)
{
pos = --pos;
}
if(val1 < val2)
{
pos = ++pos;
}
}
if(pos > 180) { pos = 180; }
if(pos < 0) { pos = 0; }
yatay.write(pos);
delay(60);
if((abs(val3 - val4) <= tolerance2) || (abs(val4 - val3) <= tolerance2)) {
} else {
if(val3 > val4)
{
pos2 = --pos2;
}
if(val3 < val4)
{
pos2 = ++pos2;
}
}
if(pos2 > 180) { pos2 = 180; }
if(pos2 < 0) { pos2 = 0; }
dikey.write(pos2);
delay(60);
}
462
Projeler / 3. Mause ile 2 eksen kontrol
« : 26 Ağustos 2015, 22:35:13 »
Bu dersimizde bir platformu mause ile 2 eksen (sağ - sol ve yukarı - aşağı) hareket ettirmeyi öğreneceğiz. Platforma ben örnek olarak bir kaç tane led bağladım. Led yerine kamera ya da projektör gibi başka metaryeller bağlayarak bu metaryalleri 2 eksen kontrol edebilirsiniz. PC arayüzü olarak processingi kullanacağız. İhtiyaç duyulması halinde konuya ait dosyaları konu ekinden indirebilirsiniz.
Malzeme listesi:
Arduino uno
2 adet servo motor
Pan tilt servo motor montaj kiti
DC güç kaynağı (Pil ya daadaptör 6 Volt)
Bağlantı kaboları
Deney bordu
Fritzing çizimi:
Arduino kodlarımız:
Processing kodlarımız:
Malzeme listesi:
Arduino uno
2 adet servo motor
Pan tilt servo motor montaj kiti
DC güç kaynağı (Pil ya daadaptör 6 Volt)
Bağlantı kaboları
Deney bordu
Fritzing çizimi:
Arduino kodlarımız:
Kod: [Seç]
#include <Servo.h>
Servo yservo; Servo xservo; // servos for x and y
//set initial values for x and y
int ypos = 0;
int xpos= 0;
void setup(){
xservo.attach(14); //(analog pin 0) for the x servo
yservo.attach(15); //(analog pin 1) for the y server
Serial.begin(19200); // 19200 is the rate of communication
Serial.println("Rolling"); // some output for debug purposes.
}
void loop() {
static int v = 0; // value to be sent to the servo (0-180)
if ( Serial.available()) {
char ch = Serial.read(); // read in a character from the serial port and assign to ch
switch(ch) { // switch based on the value of ch
case '0'...'9': // if it's numeric
v = v * 10 + ch - '0';
/*
so if the chars sent are 45x (turn x servo to 45 degs)..
v is the value we want to send to the servo and it is currently 0
The first char (ch) is 4 so
0*10 = 0 + 4 - 0 = 4;
Second char is 4;
4*10 = 40 + 5 = 45 - 0 = 45;
Third char is not a number(0-9) so we drop through...
*/
break;
case 'x': // if it's x
/*
....and land here
where we send the value of v which is now 45 to the x servo
and then reset v to 0
*/
xservo.write(v);
v = 0;
break;
case 'y':
yservo.write(v);
v = 0;
break;
}
}
}
Processing kodlarımız:
Kod: [Seç]
import processing.serial.*;
int xpos=90; // set x servo's value to mid point (0-180);
int ypos=90; // and the same here
Serial port; // The serial port we will be using
void setup()
{
size(360, 360);
frameRate(100);
println(Serial.list()); // List COM-ports
//select second com-port from the list (COM3 for my device)
// You will want to change the [1] to select the correct device
// Remember the list starts at [0] for the first option.
port = new Serial(this, Serial.list()[0], 19200);
}
void draw()
{
fill(175);
rect(0,0,360,360);
fill(255,0,0); //rgb value so RED
rect(180, 175, mouseX-180, 10); //xpos, ypos, width, height
fill(0,255,0); // and GREEN
rect(175, 180, 10, mouseY-180);
update(mouseX, mouseY);
}
void update(int x, int y)
{
//Calculate servo postion from mouseX
xpos= x/2;
ypos = y/2;
//Output the servo position ( from 0 to 180)
port.write(xpos+"x");
port.write(ypos+"y");
}
463
Arduino Öğreniyorum / Ynt: Balık yemleme
« : 19 Ağustos 2015, 01:10:36 »
Merhaba şuradaki linkte daha basit malzemelerle ve daha kolay yapılan bir örnek mevcut.
Arduino ile yapmak daha kolay olacaktır. Neticede arduino da içerisinde pic bulunduran bir karttır.
Arduino ile yapmak daha kolay olacaktır. Neticede arduino da içerisinde pic bulunduran bir karttır.
464
Arduino Genel / 11. DHT11 Sıcaklık ve nem sensörünün arduino ile kullanımı
« : 11 Ağustos 2015, 21:26:47 »
Aşağıdaki resimdeki gibi bağlantıları yaptıktan sonra aşağıdaki bağlantılardan indirebileceğiniz dht11 kütüphanesini yüklüyoruz. (dht11 klasörünü Arduino>libraries klasörüne kopyalıyoruz.) Kütüphane klasörünü konu ekinden indirebilirsiniz.
Arduino kodlarımız:
Bu yazı arduinoturkiye.com sitesinden alınmıştır.
Arduino kodlarımız:
Kod: [Seç]
// Arduinoturkiye.com DHT11 Test Programı
// Yazar: Joseph Dattilo (Virtuabotix LLC) - Version 0.4.5 (11/11/11)
// Düzenleme: İsmail BUÇGÜN
#include <dht11.h> // dht11 kütüphanesini ekliyoruz.
#define DHT11PIN 2 // DHT11PIN olarak Dijital 2"yi belirliyoruz.
dht11 DHT11;
void setup()
{
Serial.begin(9600); // Seri iletişimi başlatıyoruz.
Serial.println("Arduinoturkiye.com DHT11 Test Programi");
}
void loop()
{
// Bir satır boşluk bırakıyoruz serial monitörde.
Serial.println();
// Sensörün okunup okunmadığını konrol ediyoruz.
// chk 0 ise sorunsuz okunuyor demektir. Sorun yaşarsanız
// chk değerini serial monitörde yazdırıp kontrol edebilirsiniz.
int chk = DHT11.read(DHT11PIN);
// Sensörden gelen verileri serial monitörde yazdırıyoruz.
Serial.print("Nem (%): ");
Serial.println((float)DHT11.humidity, 2);
Serial.print("Sicaklik (Celcius): ");
Serial.println((float)DHT11.temperature, 2);
Serial.print("Sicaklik (Fahrenheit): ");
Serial.println(DHT11.fahrenheit(), 2);
Serial.print("Sicaklik (Kelvin): ");
Serial.println(DHT11.kelvin(), 2);
// Çiğ Oluşma Noktası, Dew Point
Serial.print("Cig Olusma Noktasi: ");
Serial.println(DHT11.dewPoint(), 2);
// 2 saniye bekliyoruz. 2 saniyede bir veriler ekrana yazdırılacak.
delay(2000);
}
Bu yazı arduinoturkiye.com sitesinden alınmıştır.
465
Motor kontrol uygulamaları / 4. Servo motorun 2'şer derece aralıklarla 10 - 180 derece açısal kontrolü
« : 11 Ağustos 2015, 19:44:34 »
Bu dersimizde birservo motoru 180 dereceden başlayarak 2'şer derece aralıklarla 180 derece ile 10 derece arasında konumlandırmayı öğreneceğiz. Servo, aldığı her konumda 50 ms bekleyecek, 180 derece konumuna geldiğinde ise 1 saniye bekleyip kaldığı yerden sonsuza dek 10 derece ile 180 derece arasında çift rakamlı tüm açısal değerleri alacaktır.
Fritzing çizimi:
Çizime ait dosyayı konu ekinden indirebilirsiniz.
Arduino kodlarımız:
Arduino dosyasınıkonu ekinden indirebilirsiniz.
Fritzing çizimi:
Çizime ait dosyayı konu ekinden indirebilirsiniz.
Arduino kodlarımız:
Arduino dosyasınıkonu ekinden indirebilirsiniz.
Kod: [Seç]
/* servo motor kontrolü www.temrinlerim.org */
#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(11); // servo 11 nolu pin kontrol edecektir
}
void loop() {
myservo.write(180);
delay(1000);
myservo.write(178);
delay(50);
myservo.write(176);
delay(50);
myservo.write(174);
delay(50);
myservo.write(172);
delay(50);
myservo.write(170);
delay(50);
myservo.write(168);
delay(50);
myservo.write(166);
delay(50);
myservo.write(164);
delay(50);
myservo.write(162);
delay(50);
myservo.write(160);
delay(50);
myservo.write(158);
delay(50);
myservo.write(156);
delay(50);
myservo.write(154);
delay(50);
myservo.write(152);
delay(50);
myservo.write(150);
delay(50);
myservo.write(148);
delay(50);
myservo.write(146);
delay(50);
myservo.write(144);
delay(50);
myservo.write(142);
delay(50);
myservo.write(140);
delay(50);
myservo.write(138);
delay(50);
myservo.write(136);
delay(50);
myservo.write(134);
delay(50);
myservo.write(132);
delay(50);
myservo.write(130);
delay(50);
myservo.write(128);
delay(50);
myservo.write(126);
delay(50);
myservo.write(124);
delay(50);
myservo.write(122);
delay(50);
myservo.write(120);
delay(50);
myservo.write(118);
delay(50);
myservo.write(116);
delay(50);
myservo.write(114);
delay(50);
myservo.write(112);
delay(50);
myservo.write(110);
delay(50);
myservo.write(108);
delay(50);
myservo.write(106);
delay(50);
myservo.write(104);
delay(50);
myservo.write(102);
delay(50);
myservo.write(100);
delay(50);
myservo.write(98);
delay(50);
myservo.write(96);
delay(50);
myservo.write(94);
delay(50);
myservo.write(92);
delay(50);
myservo.write(90);
delay(50);
myservo.write(88);
delay(50);
myservo.write(86);
delay(50);
myservo.write(84);
delay(50);
myservo.write(82);
delay(50);
myservo.write(80);
delay(50);
myservo.write(78);
delay(50);
myservo.write(76);
delay(50);
myservo.write(74);
delay(50);
myservo.write(72);
delay(50);
myservo.write(70);
delay(50);
myservo.write(68);
delay(50);
myservo.write(66);
delay(50);
myservo.write(64);
delay(50);
myservo.write(62);
delay(50);
myservo.write(60);
delay(50);
myservo.write(58);
delay(50);
myservo.write(56);
delay(50);
myservo.write(54);
delay(50);
myservo.write(52);
delay(50);
myservo.write(50);
delay(50);
myservo.write(48);
delay(50);
myservo.write(46);
delay(50);
myservo.write(44);
delay(50);
myservo.write(42);
delay(50);
myservo.write(40);
delay(50);
myservo.write(38);
delay(50);
myservo.write(36);
delay(50);
myservo.write(34);
delay(50);
myservo.write(32);
delay(50);
myservo.write(30);
delay(50);
myservo.write(28);
delay(50);
myservo.write(26);
delay(50);
myservo.write(24);
delay(50);
myservo.write(22);
delay(50);
myservo.write(20);
delay(50);
myservo.write(18);
delay(50);
myservo.write(16);
delay(50);
myservo.write(14);
delay(50);
myservo.write(12);
delay(50);
myservo.write(10);
delay(50);
}