myservo.attach(10); Bunu setup’a koyacaksın çünkü sadece bir kere çalışması gerekiyor. attachInterrupt(1, ServoCalistir, FALLING); Arduinodaki kısıtlamalardan dolayı bu çalışmayabilir. Şu şekilde dene (dijital pin 2 ya da 3 olmalı) attachInterrupt(digitalPinToInterrupt(3), ServoCalistir, LOW); Arduino dokümanında kesme içinde delay ve millis çalışmaz diyor. Bu da başka bir kısıtlama. Onun yerine bir libc fonksiyonu olan _delay_ms kullanabilirsin. En tepeye şunu ekle. #include Sonra da delay yerine; _delay_ms(3000); Bunun da bazı kısıtlamaları var ama oraya girmeyelim şimdi. ![]()
Teşekkürler akşam deneyim.
sonucu paylasirim
selam okoman bey sleep_cpu yu dediğiniz gibi kaldırdım yoksa kod çalışmadı. amenofis emeğiniz için tekrar teşekkürler. şöyle bir durum var kodu dediğiniz şekle getirdim. _delay_ms(3000); satırını sensör algılarkende kullanıyor yani cisim gördükten 3 saniye sonra servo 180 derece yapıyor ve öyle kalıyor. reset butonuna basınca servo 0 konuma dönüyor. delay kaldırınca sensör ve servo anında tepki veriyor ama dediğim gibi 180 derecede kalıyor
pardon bu arada servo 180 derece degil 90 derece dönüyor.
kodda servo açılarını değiştirmeme rağmen çalışmada hiçbirşey farketmiyor
İşlemci uyanıp kesmeye gidiyor mu? Gidiyorsa verdiğim kodlar çalışıyor demektir. Hatayı servo kodunda arayacaksın.
işlemci uyanıp kesmeye gidiyor. Kesme ve ardından ‘‘servo çalıştır’’ altındaki döngü gerçekleşmiyor. servo kütüphanesiyle uyku ve kesme birşekilde uyumsuz çalışıyor. yine de emeğiniz için teşekkür ederim. redüktörlü bir dc motor kullanarak farklı bir kod ve uygulamayla hedefe ulaşmaya çalışacağım.
Selam arduino’yu 2 transistör ile açıp işi yaptırdiktan sonra kapatabilirmiyiz. Güç tasarrufu adına kullanışlı olurmu acaba. Sensordeki degisimle 1nci transistör iletime gececek arduinoya güç verecek arduino çalisinca pinlerden birine bagli 2nci transistor iletime gececek ve arduino burdan enerjilenmeye devam edecek ayni anda servoyu 180 derece yapacak 3 saniye bekleyip servoyu 0 derce yapacak ve 2nci transistörü kapatacak boylece arduino enerjisi kesilecek. Bu uygulanabilir mi uygulanirsa mosfet mi kullanmak lazim kondansatör kullanmamizda gerekecek gibi degerini nasil hesaplamaliyim cevaplariniz icin simdiden teşekkürler.
Deneyebilirsin. Tek transistor diger transistoru surmek icin kullanman gerekecek sanirim. Her sensorde olmayabilir yeteri kadar uzun sure sensor cikis verebilecekmi. Sensorde calismak icin akim ceker.
Sensör Mz80 dusunuyorum. En fazla 2 saniye çikis verecegini saniyorum. Sizce mosfet daha mi mantikli birde atmegayi 4 adet kalem pille çıplak çalistirabilirmiyim tam dolu pil 1.65 x 4 = 6.6v civari yapiyor. Yada baska bir oneriniz olur mu
Transistörün kaçak akımı atmega çipinin uykuda çektiği akımdan daha fazla olur diye tahmin ediyorum. Datasheetteki bilgiye göre en derin uykudaki akımı 100 Na. Sensör 5v ile çalışıyormuş. Bence en iyi yöntem 3 tane kalem pili 5v DC çeviriciye bağlamak. Böylece zamanla pillerin gerilimi düşsede çıkış gerilimi sabit kalır. Arduinoya da direkt bağla, regulatörleri pas geç. MZ80 sensörü, önünde cisim olduğu sürece çıkış 0 veriyor gibi görünüyor. O halde buradan kesmeye gidebilmek için PCINT pinlerinden birine bağlayıp FALLING_EDGE olarak ayarlamak gerekir. Daha önce LOW demiştik ama yanlış olmuş. Programdaki sıkıntı bundan kaynaklanıyor olabilir.
düşük güç tüketimi için önce güç katını tasarlamanız lazım. dcdc konvertorle hem buck hem boost ozelliği olması gerekir ayrıca sensorunuz low power değil hele kalem pil bu proje için hiç de ıyı değil 1 adet 2amperlik bir 18650 lion endustriyel pille projenızı yapın yada powerbank kullanın en kolayı
include < LowPower.h> include < avr/sleep.h> include < Servo.h> include < util/delay.h> Servo myservo; int sensor = 3; int sensordurum; void ServoCalistir() { myservo.write(150); //_delay_ms(3000); myservo.write(0); } void setup() { myservo.attach(10); attachInterrupt(digitalPinToInterrupt(3),ServoCalistir,FALLING); sleep_bod_disable(); set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sei(); sleep_cpu(); } void loop() { myservo.write(150); _delay_ms(3000); myservo.write(0); _delay_ms(2000); sleep_bod_disable(); set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sei(); sleep_cpu(); }
selam bu kod şuanda çalışıyor. mikrodenetleyiciyi 2 kapasitör ve osilatörle direk 5v uygulayarak çalıştırıyorum. toplamda 6ma akım çekiyor. bunun 2ma ini mz80 sensör çekiyor. 4ma servo ve atmega çekiyor. servo çalıştığında 260ma lere çıkıp geri düşüyor 5-6 ma akımda sabitleniyor
sanırım kodda kesmeyi devre dışı bırakmadığımız için olsa gerek sensör algılama yapıp servo 150 dereceye dönüyor ve 3 saniye bekleme süresinde tekrar algılama yaptığında tekrar 0 a dönüyor yani tekrar kesmeye gidiyor ![]()
ölçümleri paylaşayım. kesme ve uyku kullanılmadan aynı sensör ve servo ile bekleme akımı 21ma yani uyku ve kesme kullanılarak pil ömrü teorik olarak 3 katına çıkmış oldu çünkü henüz pille deneme şansım olmadı. yalnız uyku ve kesmede delay satırı stabil çalışmayı engelliyor diye düşünüyorum. sensör düzensiz algılama yaparsa 150 derecede takılıyor bazen 10 ar derecelik hareketler yapıyor