ldr ile servo kontrol kodu
  • Arkadaşlar servoyu ldr ile çalıştıracak bir kod lazım...yardımcı olabilecek var mı?
  • Ne aşamadasın?
    LDR okuma yaptın mı?
    Tek bir servoyu sürme denemesi yaptın mı?
    Bunlardan sonra devam edelim
  • Açıkçası bu konuda 0 bilgiye sahibim. Sadece görsellere bakarak devreyi tamamladım. Deneme amaçlı bir kod yükledim. Saçma sapanda olsa çalışıyor ;))) şimdi bana servoyu gece-gündüz olarak çalıştıracak bir kod lazım.
  • Servo sabah olduğunda bir kapağı çekecek, hava karardığında ise kapatacak.. olay budur..
  • ldr değerlerini incele sence sabah olduğunu anlayacağın değerlerden itibaren servoyu çalıştırırsın.

    ldrdeğer=adcoku
    eğer ldrdeğer >500 ise servoyu çalıştır
  • #include <Servo.h> Servo myservo; const int ldr = A0; int val = 0; void setup() { myservo.attach(13); } void loop() { val = analogRead(ldr); val = map(val, 0, 180, 0, 1023); Serial.println(val); if (ldr > 300) { val = 0; } if (ldr > 800) { val = 180; } myservo.write(val); delay(10); } böyle bi şey oldu.. ışıkta iyi ama karanlıkta yeteri kadar kararlı değil ve gereken açıya da gelmiyor. ldr değerlerini değiştirmek pek işe yaramıyor. ldr ya da dirençten kaynaklanıyor olabilir mi?
  • adc değerini 100 kere oku ortalamasını al daha az hareketli olur.

    val = analogRead(ldr);

    for lu dongu basla
    bu kısmı 100 kere tekrarla
    val=(val+analogRead(ldr))/2;
    biraz bekle 1 ms
    for sonu

    kendı kodunu yazman ıcın boyle yazdım :)
  • Kararlı bir LDR elde edemedim. Her salise değer değişiyor. yani led göz kırpıyor. bunu çözmek için aklımca 60 kere okutup ortalamasını aldım. ama yine olmadı. int ldr_pin = A4; int ldr = 0; unsigned int ortalama = 0; void setup() { Serial.begin(9600); } void loop() { ortalama = 0; for(int i = 1; i <= 60; i ++) { int ldr = analogRead(ldr_pin); ortalama = ortalama+ldr; } ortalama = ortalama/60; Serial.println(ortalama); delay(1); }
  • Merhaba alttaki kodu bir deneyin ben değerleri 300 ve 500 ayarladım değiştirin ancak iki değer birbirine yakın olmasın 300 ile 301gibi olmasın arada bir miktar fark bırakın böylece göz kırpmaz

    Siteye kod eklenemiyor 403 hatası veriyor sürekli bu yüzden pastebin attım örnek kodu
    https://pastebin.com/embed_iframe/wWtnU7mW
  • Ldr den okunan değer tam 300 299 301 aralığında gezerken malesef kodunuz kararsız kalıyor. Yinede ilginize teşekkürler. Yokmu başka fikri ol an
  • boolean servodurum = false; bu tanimlamayı sayfa başında yaptın değil mi? loop içinde olmayacak yoksa bu kod çalışması gerekiyordu
    https://pastebin.com/embed_iframe/86LuQKW8
  • kod çalışıyor. sorun başka. kararsız çalışıyor. Şöyle Ki:

    LDR eşik değeri sınırda gezdiği için (devreye tam 300 de girsin. değer 299 300 301 gibi oynak olduğundan) sistem servoya gücü anlık verip verip kesiyor. bu durumdan ancak 5 dk sonra hava daha çok karardığında değer 300 ün çok üstüne çıktığında kurtulabiliyoruz.
  • direk ldr bağlamak yerine ldr yi bir opampla veya comparatorla bağlayıp arduino ile oyle bağlayın. opmpla ldr çalışma aralığını daha iyi kontrol edebilirsiniz sanırım
  • ÇÖZDÜM.
    LDR den gelen değerleri 2 şer sn lik aralıklara bölüp max değerini baz aldım. 3 basamaklı sayının son basamağını 0 a yuvaladım. max değerin düşmesini 5 sn geciktirdim. değerin max değere artmasını 2 sn geciktirdim. böylece aradaki 2 şerli 3 erli dalgalanmalar görmezden gelindi.
    sonuçta stabil bir LDR okuma elde ettim.
  • kalman filtresini de araştırın
  • Kalman filtresini araştırdım. bir sonraki adımı tahmin ederek sonuçları yumuşatıyor. daha stabil sonuçlar elde etmek için muhteşem bir sistem. Kenara yazdım. Teşekkürler.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.