Arduinoyu uyutmak ve uykudan uyandırmak

Herkese merhaba, Öncelikle ne istediğimden bahsedeyim : –> sistem uyku modunda çalışmaya başlasın. –> dış kesme verildiğinde (bir buton vasıtasıyla digital 2 int 0 ) uykudan uyansın ve diğer butonlardan komut bekleyene kadar birşey yapmasın. –> diğer butonlardan herhangi birine basılırsa ilgili işlemi gerçekleştirsin. 1 2saniye bekledikten sonra tekrar kendini uykuya alsın –> tekrar bir işlem yapılabilmesi için tekrardan digital 2 ye basılsın uykudan uyanılsın ve buton beklensin Bu şekilde bir döngüsü olan basit bir program yazabilir misiniz? (örneğin 3 led, 3buton,1dış kesme buton, sleep kütüphanesi ve dış kesme içeren bir örnek kod) ilgilenene şimdiden teşekkürler.

Merhaba; bu konuda benim de bi sorum olacaktı. Uyku modundaki arduinoyu sensördeki değişiklik uyandırabilir mi? Mesela; toprak nemi ölçerken nem seviyesinde bi değişiklik olmadığı durumda uyusun, nem oranı eşik değerin altına düştüğünde de uyanıp röleyi açıp sulama yapsın. İç kesmeler(Watch Dog Timer) bu tasarım için uygun değil. sistem sürekli açık kaldığında 9v’luk piller 2.5 saat anca dayanabiliyor.

merhaba ilk açılan konuyu kaçırmışız cevap verememişiz ama genel olarak low power ıle ılgılı şu yazıyı buraya koyayım ne yapılması gerektiği ile ilgili ipuçlarını bulabilirsiniz. http://www.home-automation-community.com/arduino-low-power-how-to-run-atmega328p-for-a-year-on-coin-cell-battery/ ve sleep ile ilgili açıklamalar http://playground.arduino.cc/Learning/ArduinoSleepCode

saido, bir pin tanımlayıp nem seviyesi düşünce tetiklenmesi için bişiler yapılabilir mi bilmiyorum. Yani uyku modu ve kesmelerle hiç deneme yapmadım. Fakat mantık yürütürsek şöyle bişey yapabiliriz. 1-Senin için nem ve nemsizlik arasındaki ciddi oranı bulman gerek. 2- diyelim 1 saatte bir sulanırsa nem oranı iyi. hesabın böyle diyelim. 3-arduinoyu satte sadece bir kere uyandırıp ya sulama yaptırıp tekrar bir saat uyutabilirsin ya da nem oranını ölçtürürsün ona göre sulatırsın. ya da; 10 dakikada bir uyanıp nem kontrol yapması ve eğer gerekli ise sılanması.

Biraz mah’i yüksek bir pil buldum bu da 10 saat kadar çalıştı ve bitti. Kablosuz sensör ağlarının en önemli özelliklerinden biri de güç tasarrufu. 10 saatte pil değiştirdikten sonra pek bir anlamı olmuyor sistemin. Eğer sadece nem değeri istenilen seviyenin altına düştüğü anda çalışsa diğer durumlarda uyusa harika olacak. Belki günde bir kez sulama yapacak o da 5 dk. sürse yaklaşık 120 gün gider. Biraz araştırdım ama pek de açıklayıcı bir örnek bulamadım. Anladığım kadarıyla wdt ile maksimum 8 saniye uyutabiliyoruz. O da günde 19 saat uyuyup 5 saat çalışması anlamına geliyor(bir örnekte görmüştüm). günde 5 saat çalışırsa pil 2 gün gidecek. Ne yapmak lazım bilmiyorum. Bu konunun tüm tasarımlarımız için çok önemli olduğunu düşünüyorum, o yüzden konuyla ilgili olan arkadaşlardan destek bekliyorum.

dış kesme yöntemiyle arduinoyu uyutabiliyoruz. yani şu butona basılırsa uyusun yapabiliyoruz. nem sensöründen gelen datayı butona basılmış gibi yorumlattırabilirsen istediğini yapabilirsin. benim projemde de başlangıçta arduino uyusun sonra mesafe sensöründe belirlediğim değerin altına düşünce çalışmaya başlasın diye tasarlamıştım ama uyuyan bir daha uyanmadı :slight_smile:

:slight_smile: Ben de sensörden gelen bilgiye göre uyansın istiyorum ama hiç sensörlü örnek bulamadım. Genelde fiziksel olarak uyandırmadan bahsediliyor buton vs. gibi

sensör ile buton arasında ne fark var. sensör sürücü devre yi tetikler, devre de buton görevi görür

tabii ki fark yok önemli olan dış kesme bacağına istenilen zamanda veya şartta veri gönderebilmek.

arduino pinlerine hiç birşey bağlı değilken sadece 13 nolu pindeki ledi yakıp söndüren bir uygulama çalıştığında pil ne kadar dayanıyor. deneme şansınız oldumu

birde FTDI USB-Serial çipi 40ma akım çekiyormuş. FTDI USB-Serial çipi olmayan Pro Mini modelini denediniz mi.

birde not daha. her ne kadar uyku modu na alsanızda voltaj regülatörü akım çekiyormuş. bu yüzden direk 5 volt ile beslemek daha mantıklı olur. birde pro mini modelinin 3 volt modelleri var. frakansı düşük olduğu için daha az akım çekiyormuş

voltaj regulatoru yerıne dcdc smps modullerle beslemek gerekıyor yada 5v regulatorlerın çok düşük akım çeken modelerını araştırıp onunla değiştirmenız lazım bord uzerınde. datashhetlerdeki Quiescent current kısımlarına bakacaksınız. 1uA seviyelerının bıle altında olanı vardır. direk saatpili ıle çalıştıranlar var bu şekılde

Selam bende bu konuyla ilgili projemde sıkıntılar yaşıyorum. Bilgili arkadaşların arduinoyu daha dogrusu atmega çipi çıplak çalıştırma, uyku moduna alma, sensör yardımıyla dış kesme ile işi yaptırıp tekrar uyutmayla ilgili açıklayıcı bir yazı veya örnek yapabilseler konuyu daha iyi anlayıp projelerimizde versiyonlarını deneyebiliriz diye düşünüyorum. Okoman beyin paylaşımlarını inceledim güzel bilgiler var ama ben projeme uygulayamadım. Acemilikten olsa gerek :slight_smile: kewin diye birisinin videosu var baya detaylı video cekmiş ama ingilizce yok maalesef yani nerdeyse uyku ve kesmelerle ilgili yayınlanmıs her yazıyı okudum videoları defalarca izledim ama benim çipi bi uyutup uyandıramadım.

thewar Uyurken hangi donanımlar çalışacak? Çeşitli modları var bunun. Mesela idle modda sadece cpu stop ederken power down modda sadece wdt ve harici kesme çalışır. http://playground.arduino.cc/Learning/ArduinoSleepCode Buradaki örnek kodları denedin mi? Denediysen tam olarak neresi çalışmıyor?

include < Servo.h> Servo myservo; int sensor =2 ; int sensordurum; void setup() { myservo.attach(10); myservo.write(0); } void loop() { Serial.println(sensordurum); sensordurum = digitalRead(sensor); if(sensordurum == LOW) { myservo.write(180); delay(3000); myservo.write(0); }} amenofis öncelikle teşekkür ederim. sanırım işin mantığını kavrayamadığımdan olsa gerek verdiğiniz bağlantıdaki örnekleri derleyip arduinoya yükleyemedim. Power down modda dış kesme ile uyandırmak istiyorum. açıklama yazmadım ama koddan da anlaşılacağı gibi sensörden gelen hıgh bilgisi low olduğunda servo 180 derece yapıp 3 saniye bekleyip tekrar 0 konumuna geliyor sonra 10 saniye daha bekleyip tekrar uyumasını istiyorum. teşekkürler.

Sensörden gelen bilgi ne kadar süre LOW konumunda kalıyor? Kesmeden çıktıktan sonra LOW da kalmaya devam ederse aniden tekrar kesmeye gider. Bu yüzden mümkün olduğunca çabuk şekilde HIGH konumuna geri dönmesi gerekir. Eğer bunun için bir işlem yapılması gerekiyorsa bunu kesme fonksiyonunun en başında yapmalısın. Sensör girişi INT0 ya da INT1 pinine bağlanmalı. Yapılacak işlemleri kesme fonksiyonuna yazacağız. Yanlız kesme içinde delay kullanmak sıkıntılı bir durum. delay demek cpu’nun uyanık kalması ve sensörden yanıt alamamak demek. Verimli bir enerji yönetimi için delay yerine timer kullanılmalı. void ServoCalistir() { myservo.write(180); delay(3000); myservo.write(0); } void setup() { // … attachInterrupt(0, ServoCalistir, LOW); sleep_bod_disable(); set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sei(); } void loop() { sleep_cpu(); }

servo ve low power kütüphanelerini yüklememe rağmen ‘’ sleep_bod_disable’ was not declared in this scope ‘’ hata veriyor setup altındaki attachınterrupt satırı dışındaki bütün satırlar için bu hatayı veriyor.

include < LowPower.h> include < avr/sleep.h> include < Servo.h> Servo myservo; int sensor = 3; int sensordurum; void ServoCalistir() { myservo.attach(10); myservo.write(180); // delay(3000); myservo.write(0); } void setup() { attachInterrupt(1, ServoCalistir, FALLING); sleep_bod_disable(); set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sei(); } void loop() { sleep_cpu(); } bu kodu derledi attım fakat çalışmadı. bu arada sabah oldu. :slight_smile:

loop içindeki sleep_cpu hep kullanmak gerekıyormu emin değilim. belki setuptaki son satıra koysanız daha ıyı olur ve servoCalistir kodunun sonuna koysanız sleep_cpu daha ıyı olur. yada kalsın :slight_smile: