Ac dimmer ışığın sabit yanma sorunu

Batıkan

Yeni Üye
Katılım
12 Aralık 2024
Mesajlar
7
Selamlar herkese, Üniversite projem olarak ac dimmer devresi istendi. Devreyi kurdum ancak ışığım sabit yanıyor ışığı dimming yapamıyorum zero cross algılama yapıyor pot çalışıyor
hintli ac dimmer.jpg
ac hintli.png

Kod:
#define ZC_PIN 2   // Zero Crossing algılayıcı pini (D2)

#define TRIAC_PIN 4 // TRIAC tetikleme pini (D4)

volatile int zero_cross_detected = 0; // Zero Crossing algılandığını işaret eden bayrak

int dimming_value = 128; // Dimming seviyesi (0-255 arasında)



void zero_cross() {

  zero_cross_detected = 1; // Zero Crossing algılandı

}



void setup() {

  pinMode(ZC_PIN, INPUT_PULLUP); // Zero Crossing pini giriş olarak ayarlandı

  pinMode(TRIAC_PIN, OUTPUT);    // TRIAC pini çıkış olarak ayarlandı

  attachInterrupt(digitalPinToInterrupt(ZC_PIN), zero_cross, FALLING); // Zero Crossing tetiklenince kesme çağrılır

  Serial.begin(9600);            // Seri haberleşmeyi başlat

}



void loop() {

  // Dimmer değerini test etmek için manuel ayar

  dimming_value = 50; // 50 ile 150 arasında bir değer deneyin



  if (zero_cross_detected == 1) { // Zero Crossing algılandıysa

    zero_cross_detected = 0;      // Bayrağı sıfırla

    delayMicroseconds(dimming_value * 75); // Dimming süresine göre bekle (75µs çarpanı hassas ayar için)

    digitalWrite(TRIAC_PIN, HIGH); // TRIAC'ı tetikle

    delayMicroseconds(10);         // TRIAC'ı tetiklemek için kısa bir süre bekle

    digitalWrite(TRIAC_PIN, LOW);  // TRIAC'ı kapat

  }



  // Seri monitörde dimming seviyesini yazdır

  Serial.print("Dimming Value: ");

  Serial.println(dimming_value);

}
 
Son düzenleme:
Foruma hoş geldin! Program kodunu "Kod" bloğu içine alırsan daha anlaşılır olur.

1736197562714.png
 
ilk gördüğüm hata main loop içinde serial printler. bu yazdırmalar baud rate hızına göre epey vakit alır ve sistemin kararsız çalışmasına sebep olabilir. ilk zero cross yakaladıktan sonra bekledin, triacı açtın ve serial printlere gittin 9600 baud için her bir karakter için yazdırma süresi 104*9 = 936 usec, düze hesap 1 ms dersek 16 karakter yazdırdığında 16 ms orada bekleyecek. senin bir yarım alternansın zaten 10 ms bir sonraki zero cross detect edilemeyecek sonra gene seri yazdırmaya girecek ve bir sonraki alternansı da kaçıracak. yani işlemci vaktinin %99 kısmını serial printler içinde oyalanarak geçirecek.
 
Devrenin bağlantıları çok net görünmüyor. Sorun donanımsal ise muhtemelen triac ın T1 ve T2 bağlantıları ters olabilir .
 
ilk gördüğüm hata main loop içinde serial printler. bu yazdırmalar baud rate hızına göre epey vakit alır ve sistemin kararsız çalışmasına sebep olabilir. ilk zero cross yakaladıktan sonra bekledin, triacı açtın ve serial printlere gittin 9600 baud için her bir karakter için yazdırma süresi 104*9 = 936 usec, düze hesap 1 ms dersek 16 karakter yazdırdığında 16 ms orada bekleyecek. senin bir yarım alternansın zaten 10 ms bir sonraki zero cross detect edilemeyecek sonra gene seri yazdırmaya girecek ve bir sonraki alternansı da kaçıracak. yani işlemci vaktinin %99 kısmını serial printler içinde oyalanarak geçirecek.
Değerli vaktinizi ayırdığınız için teşekkür ederim. Bu kod da devrenin yapım sayfasında devre için paylaşılan kod. Bununla da dimming işlemi yapılamıyor
Kod:
int LAMP = 4;


int dim_val=0;


void setup()


{


  pinMode(LAMP, OUTPUT);


  attachInterrupt(digitalPinToInterrupt(2), zero_cross, CHANGE);


}


void zero_cross()


{


  int dimming_time = (200*dim_val);


  delayMicroseconds(dimming_time); 


  digitalWrite(LAMP, HIGH);


  delayMicroseconds(10);


  digitalWrite(LAMP, LOW);


}


 


void loop()


{


    int data=analogRead(A0);


    int data1 = map(data, 0, 1023,10,49);


    dim_val=data1;


}
 
Peki lambayı tamamen söndürebiliyor musun? Koddaki gecikmelerin lambayı tam güçte açmanı engellemesi lazım, oysa lamba hep açık oluyor. Triak bir sebepten kesime gitmiyor olabilir mi?
 
bence önce şöyle bir kod yaz. lambayı 2 saniye açık tut, 2 saniye kapalı. bu şekilde dönsün bakalım triac gerçekten on-off yapıyor mu.
ardından da sıfır geçişleri doğru yakalayıp yakalamadığını test edersin. örneğin her 50 adet sıfır geçiş yakaladığında bir ledi yak ve söndür böylece eğer hiç geçiş kaçırmıyorsan saniyede 1 yanıp sönen bir led elde etmelisin.
 
Tamamen de sönmüyor hocam sabit şiddette yanık kalıyor lamba
Daha önceki mesajımda yine belirtmiştim. Bağlantı net görünmediği için kesin emin olunamıyor. Triac malzemenin (T1-T2 (A1-A2, M1-M2) uçları rastgele bağlanamaz. Muhtemelen bu uçlar ters. Gate uçundan hiçbir tetikleme yapmazsanız zaten hiç iletime geçmemesi gerekli. Ama sizin durumunuzda triac direkt iletimde. İlk önce donanım olarak çalıştığından emin oluması gerekli. Uçlar ters ise zaten mcu ile kontrol edemezsiniz.
 

Forum istatistikleri

Konular
7,181
Mesajlar
121,886
Üyeler
2,906
Son üye
Rebi

Son kaynaklar

Son profil mesajları

Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
Back
Top