Arduino ile ileri geri yıldız üçgen çalıştırma

bolubeyi

Profesyonel Üye
Katılım
27 Eyl 2008
Mesajlar
1,666
Puanları
421
Yaş
54
Konum
Trabzon

arduino124.png


Bu dersimizde arduino ile 3 fazlı asenkron motoru ileri geri yıldız üçgen çalıştırmayı öğreneceğiz.

Senaryo:
Bir adet 3 fazlı asenkron motor arduino ile ileri geri yıldız üçgen çalıştırılacak.

Sol butonuna basıldığında motor 0 ila 30 saniye arasında istediğimiz bir süre sola doğru yıldız bağlantıda yol alacak ve ayarlanan sürenin sonunda üçgen bağlantıya geçip durdurma butonuna basılana dek çalışmaya devam edecek.

Sağ butonuna basıldığında motor 0 ila 30 saniye arasında istediğimiz bir süre sağa doğru yıldız bağlantıda yol alacak ve ayarlanan sürenin sonunda üçgen bağlantıya geçip durdurma butonuna basılana dek çalışmaya devam edecek.

Her hangi bir anda durdurma butonuna basılırsa motor duracak.

Motor her hangi bir yöne dönerken diğer yöne döndürmek için öncelikle motorun durdurulması ve sonrasında diğer yöne döndürülmesi esastır. Motor dönerken sol ya da sağa dönme butonlarına basılması durumunda butonlar işlev görmeyecek.

Sol ya da sağa dönüş başlatma butonu ile beraber durdurma butonuna da basılması durumunda devre stop aktif olarak çalışacaktır.

Motorun kalkınma anında yıldız çalışacağı süre bir potansiyometre ile ayarlanabilir olacak ve ayarlanan busüre lcd ekranda görüntülenecektir.

Motor sola ya da sağa dönerken hangi yöne hangi bağlantıda dönmekte olduğu lcd ekranda yazılı ve görsel olarak görüntülenecektir.

Evet senaryomuz bu şekilde. İhtiyaç halinde güç devresinde değişiklik yapılmadan senaryoda değişiklik yapılabilir.

Fritzing devre şeması:
Fritzing dosyasını konu ekinden indirebilirsiniz. Devre şemasına kontaktörleri sürecek olan 4 adet röle dahil edilmemiştir. Kontaktör bobinleri arduinonun dijital 3, 4, 5 ve 6. çıkışlarına bağlanacak olan transistörler ile birer röle üzerinden beslenecektir.

arduino125.png



ISIS devre şeması:
ISIS dosyasını ve isis simülasyonu için hex dosyasını konu ekinden indirebilirsiniz. ISIS çizimine LCD dahil edilmemiştir.

ezgif-2-72cfe9d522.jpg


ISIS simülasyonu:

Kumanda ve güç devresinin birleştirilmiş şeması (LCD hariç)

ezgif-2-425560f581.jpg


LCD ilearduino arasındaki bağlantı:
arduino119.png


Arduino kodları:
Kod:
// GİRİŞLER
int ileri_butonu=A1; // A1 girişine ileri_butonu adı verildi. Bu girişe ileri başlatma butonu bağlanacak.
int geri_butonu=A2; // A2 girişine geri_butonu adı verildi. Bu girişe ileri geri butonu bağlanacak.
int durdurma_butonu=2; // D2 girişine durdur_butonu adı verildi. Bu girişe ileri durdurma butonu bağlanacak.
int potansiyometrePin = A0; // A0 GİRİŞİNE YILDIZ BAĞLANTI ÇALIŞMA SÜRESİNİ AYARLAMAK İÇİN POTANSİYOMETRE BAĞLANACAK
int sensorValue = 0; 
// GİRİŞLER BİTTİ

// ÇIKIŞLAR
int ileri_kontaktoru=3; // D3 çıkışına ileri_kontaktoru adı verildi. Bu çıkışa ileri yön kontaktörünü süren röle bağlanacak.
int geri_kontaktoru=4; // D4 çıkışına geri_kontaktoru adı verildi. Bu çıkışa geri yön kontaktörünü süren röle bağlanacak.
int yildiz_kontaktoru=5; // D5 çıkışına yildiz_kontaktoru adı verildi. Bu çıkışa yıldız bağlantı kontaktörünü süren röle bağlanacak.
int ucgen_kontaktoru=6; // D6 çıkışına ucgen_kontaktoru adı verildi. Bu çıkışa üçgen bağlantı kontaktörünü süren röle bağlanacak.
// ÇIKIŞLAR BİTTİ

// GÖRSEL KODLARI BURADA BAŞLADI
#include <LCD5110_Basic.h> // LCD kütüphanesi eklendi
extern uint8_t SmallFont[];
LCD5110 myGLCD(8,9,10,11,12); // CD pinlerinin hangi Arduino pinlerine bağlı olduğunu belirtiyoruz
extern uint8_t sol[]; // Sol ikon projeye dahil edildi
extern uint8_t sag[]; // Sağ ikon projeye dahil edildi
extern uint8_t yildiz[]; // Yıldız ikon projeye dahil edildi
extern uint8_t ucgen[]; // Üçgen ikon projeye dahil edildi
extern uint8_t saat[]; // Saat ikon projeye dahil edildi
// GÖRSEL KODLARI BURADA BİTTİ

void setup() 
{
pinMode(ileri_butonu, INPUT); // A1 PİNİ GİRİŞ YAPILDI
pinMode(geri_butonu, INPUT); // A2 PİNİ GİRİŞ YAPILDI
pinMode(durdurma_butonu, INPUT); // A0 PİNİ GİRİŞ YAPILDI
pinMode(ileri_kontaktoru, OUTPUT); // D1 PİNİ ÇIKIŞ YAPILDI
pinMode(geri_kontaktoru, OUTPUT); // D2 PİNİ ÇIKIŞ YAPILDI
pinMode(yildiz_kontaktoru, OUTPUT); // D3 PİNİ ÇIKIŞ YAPILDI
pinMode(ucgen_kontaktoru, OUTPUT); // D4 PİNİ ÇIKIŞ YAPILDI
pinMode(durdurma_butonu, INPUT); // D2 PİNİ GİRİŞ YAPILDI
attachInterrupt(0, pasif, RISING); // 2 NOLU PİN LOJİK 1 İSE PASİF KOMUTLARINA GİT 
pinMode(7, OUTPUT); // LCD ekranın arkaplan aydınlatmasına giden pini çıkış olarak ayarlıyoruz
digitalWrite(7,HIGH); // Ekrana aydınlatıldı
myGLCD.InitLCD(); // Ekranı başlatıldı
myGLCD.setContrast(70); //0 ila 127 arası bir değer verilebilir
}

void pasif() 
{
// TÜM ÇIKIŞLARI PASİF YAP BAŞLADI
digitalWrite(ileri_kontaktoru, LOW); // İLERİ YÖN KONTAKTÖRÜNÜN ENERJİSİ KESİLDİ
digitalWrite(geri_kontaktoru, LOW); // GERİ YÖN KONTAKTÖRÜNÜN ENERJİSİ KESİLDİ
digitalWrite(yildiz_kontaktoru, LOW); // YILDIZ KONTAKTÖRÜNÜN ENERJİSİ KESİLDİ
digitalWrite(ucgen_kontaktoru, LOW);  // ÜÇGEN YÖN KONTAKTÖRÜNÜN ENERJİSİ KESİLDİ
asm volatile ("jmp 0"); // ARDUINO RESETLENDİ
// TÜM ÇIKIŞLARI PASİF YAP BİTTİ
}

void loop() 
{
    // YILDIZ ÇALIŞMA SÜRESİNİ EKRANDA GÖSTERME KODLARI BURADA BAŞLADI
    if (digitalRead(ileri_kontaktoru) == LOW && digitalRead(geri_kontaktoru) == LOW) 
   {
    myGLCD.clrScr(); //Ekranı temizliyoruz.
    myGLCD.drawBitmap(0, 0, saat, 30, 32); // saat resmi çizildi.
    myGLCD.setFont(SmallFont);
    myGLCD.print("YILDIZ", RIGHT, 0); 
    myGLCD.print("SURESI", RIGHT, 12);
    sensorValue=analogRead(A0);
    sensorValue=map(sensorValue,0,1023,0,30);
    extern uint8_t MediumNumbers[];
    myGLCD.setFont(MediumNumbers);
    myGLCD.printNumI(sensorValue, RIGHT, 20);    
    myGLCD.setFont(SmallFont);  
    myGLCD.print("SANIYE", RIGHT, 40);
    delay(75);
   }
   // YILDIZ ÇALIŞMA SÜRESİNİEKRANDA GÖSTERME KODLARI BURADA BİTTİ
   
   // İLERİ YÖN HAREKETİ BAŞLATMA KODLARI BAŞLADI
if (digitalRead(ileri_butonu) == HIGH  && digitalRead(durdurma_butonu) == LOW && digitalRead(geri_kontaktoru) == LOW && digitalRead(ileri_kontaktoru) == LOW) 
    { 
    //YILDIZ BAĞLANTI ÇALIŞMA KODLARI BURADA BAŞLADI
    myGLCD.clrScr(); //Ekranı temizliyoruz.
    myGLCD.drawBitmap(0, 0, sol, 24, 24); // sol resmi çizildi.
    myGLCD.drawBitmap(0, 24, yildiz, 24, 24); // yıldız resmi çizildi.
    myGLCD.setFont(SmallFont);
    myGLCD.print("SOLA DONUS", RIGHT, 12); 
    myGLCD.print("YILDIZ", RIGHT, 36);
    digitalWrite(ileri_kontaktoru, HIGH);
    digitalWrite(geri_kontaktoru, LOW);
    digitalWrite(yildiz_kontaktoru, HIGH);
    digitalWrite(ucgen_kontaktoru, LOW);
    sensorValue = analogRead(potansiyometrePin); // POTANSİYOMETREDEKİ DEĞER OKUNDU
    delay(sensorValue * 30); // YILDIZ BAĞLANTI İÇİN ÇALIŞMA SÜRESİNİ POT İLE AYARLAYINIZ 0-30 SANİYE
    //YILDIZ BAĞLANTI ÇALIŞMA KODLARI BURADA BİTTİ

    //ÜÇGEN BAĞLANTI ÇALIŞMA KODLARI BURADA BAŞLADI
    myGLCD.clrScr(); //Ekranı temizliyoruz.
    myGLCD.drawBitmap(0, 0, sol, 24, 24); // sol resmi çizildi.
    myGLCD.drawBitmap(0, 24, ucgen, 24, 24); // ucgen resmi çizildi.
    myGLCD.setFont(SmallFont);
    myGLCD.print("SOLA DONUS", RIGHT, 12); 
    myGLCD.print("UCGEN", RIGHT, 36);    
    digitalWrite(ileri_kontaktoru, HIGH);
    digitalWrite(geri_kontaktoru, LOW);
    digitalWrite(yildiz_kontaktoru, LOW);
    digitalWrite(ucgen_kontaktoru, HIGH); 
    //ÜÇGEN BAĞLANTI ÇALIŞMA KODLARI BURADA BİTTİ
   }
   // İLERİ YÖN HAREKETİ BAŞLATMA KODLARI BİTTİ

   // GERİ YÖN HAREKETİ BAŞLATMA KODLARI BAŞLADI
if (digitalRead(geri_butonu) == HIGH  && digitalRead(durdurma_butonu) == LOW && digitalRead(ileri_kontaktoru) == LOW && digitalRead(geri_kontaktoru) == LOW) 
   { 
    //YILDIZ BAĞLANTI ÇALIŞMA KODLARI BURADA BAŞLADI
    myGLCD.clrScr(); //Ekranı temizliyoruz.
    myGLCD.drawBitmap(0, 0, sag, 24, 24); // sag resmi çizildi.
    myGLCD.drawBitmap(0, 24, yildiz, 24, 24); // yıldız resmi çizildi.
    myGLCD.setFont(SmallFont);
    myGLCD.print("SAGA DONUS", RIGHT, 12); 
    myGLCD.print("YILDIZ", RIGHT, 36);    
    digitalWrite(ileri_kontaktoru, LOW);
    digitalWrite(geri_kontaktoru, HIGH);
    digitalWrite(yildiz_kontaktoru, HIGH);
    digitalWrite(ucgen_kontaktoru, LOW);
    sensorValue = analogRead(potansiyometrePin); // POTANSİYOMETREDEKİ DEĞER OKUNDU
    delay(sensorValue * 30); // YILDIZ BAĞLANTI İÇİN ÇALIŞMA SÜRESİNİ POT İLE AYARLAYINIZ 0-30 SANİYE
    //YILDIZ BAĞLANTI ÇALIŞMA KODLARI BURADA BİTTİ
   
    //ÜÇGEN BAĞLANTI ÇALIŞMA KODLARI BURADA BAŞLADI
    myGLCD.clrScr(); //Ekranı temizliyoruz.
    myGLCD.drawBitmap(0, 0, sag, 24, 24); // sağ resmi çizildi.
    myGLCD.drawBitmap(0, 24, ucgen, 24, 24); // ucgen resmi çizildi.
    myGLCD.setFont(SmallFont);
    myGLCD.print("SAGA DONUS", RIGHT, 12); 
    myGLCD.print("UCGEN", RIGHT, 36);    
    digitalWrite(ileri_kontaktoru, LOW);
    digitalWrite(geri_kontaktoru, HIGH);
    digitalWrite(yildiz_kontaktoru, LOW);
    digitalWrite(ucgen_kontaktoru, HIGH); 
    //ÜÇGEN BAĞLANTI ÇALIŞMA KODLARI BURADA BİTTİ
   }
   // GERİ YÖN HAREKETİ BAŞLATMA KODLARI BİTTİ
}

Saat iconu kodları (saat.c isimli dosya içeriği):
Kod:
#include <avr/pgmspace.h>
const unsigned char saat [] PROGMEM={
0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 0xFC, 0x3C, 0x3C, 0x3C,
0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0x00, 0x00, 0x1F, 0x7F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
0xF8, 0xF8, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07,
0x0F, 0x1F, 0x1F, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x3F, 0x3F, 0x1F,
0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 
};

Sağ ikon kodları (sag.c isimli dosyanın içeriği):
Kod:
#include <avr/pgmspace.h>
const unsigned char sag [] PROGMEM={
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x83, 0xC7, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
};

Sol ikon kodları (sol.cisimli dosyanın içeriği):
Kod:
#include <avr/pgmspace.h>
const unsigned char sol [] PROGMEM={
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x3F,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
0xC7, 0xC3, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
};

Üçgen ikonu kodları (ucgen.c isimli dosyanın içeriği):
Kod:
#include <avr/pgmspace.h>
const unsigned char ucgen [] PROGMEM={
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xFC, 0xFE, 0xFC, 0xF0, 0xC0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0xFC,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x60, 0x78, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x78, 0x60, 0x00, 
};

Yıldız ikonu kodları (yildiz.c isimli dosyanın içeriği):
Kod:
#include <avr/pgmspace.h>
const unsigned char yildiz [] PROGMEM={
0x00, 0x00, 0x00, 0x00, 0x20, 0x30, 0x30, 0x78, 0x7C, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
0x78, 0x78, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFC, 0xF8, 0xF8, 0xF8, 0xF0,
0xE0, 0xC0, 0x01, 0x01, 0x03, 0x01, 0xC0, 0xE0, 0xE0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFE, 0x7E, 0x00,
0x00, 0x00, 0x00, 0x03, 0x07, 0x0F, 0x1F, 0x1F, 0x3F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x3F,
0x1F, 0x1F, 0x0F, 0x07, 0x03, 0x00, 0x00, 0x00, 
};
 

Ekli dosyalar

  • nokia_5110_kutuphanesi.zip
    371.7 KB · Görüntüleme: 2
  • ileri_geri_arduino.rar
    277.3 KB · Görüntüleme: 1

Forum istatistikleri

Konular
127,954
Mesajlar
913,889
Kullanıcılar
449,604
Son üye
baba pero

Yeni konular

Geri
Üst