İlan

İnsanlar doğal olarak güneşin doğuşuyla uyanacak şekilde programlanmıştır; ne yazık ki modern yaşam keyfi bir saat tarafından belirlenir ve genellikle bizi doğal ışık olmadığında uyanmaya zorlar. Bugün, rahatsız edici bir gürültü yapma makinesine başvurmadan sizi yavaşça ve yavaşça uyandıracak bir gündoğumu çalar saat yapacağız.

Gün doğumu çalar saat yapmak sizin için biraz fazla ise, bu iPhone'a ve Android uygulamaları Daha İyi Uyumanıza Yardımcı Olmak İçin Bu Uygulamaları Kullanın [Android ve iOS]Telaşlı bir günden sonra yapabileceğiniz en iyi şey, yararlı miktarda uyku almaktır. Uykunun bir insan için gerçekten ne kadar önemli olduğunu kanıtlayan, gelişmekte olan her zaman yeni çalışmalar var ... Daha fazla oku tespit eden seni vücut hareketleriyle uyandırmak ne zaman Bir Uygulama Gerçekten Daha İyi Uyumanıza Yardımcı Olabilir mi?Her zaman biraz uyku deneyi yapan biriydim, hayatımın çoğunda titiz bir rüya günlüğü tuttum ve süreçte uyumak için olabildiğince çok çalıştım. Bir ... Daha fazla oku

instagram viewer
bu harika rüyadan çekilmemenizi sağlar, bunun yerine parlak ve tazelenmiş hissederek uyanırsınız - gerçekten işe yararlar.

Proje Taslağı

Projenin ana kısmı, yatağın etrafına yerleştirilen yaklaşık 5 metre LED şerit ışığı olacaktır. Bunlara, bazı MOSFET N transistörleri kullanılarak değiştirilen harici bir 12 volt besleme ile güç vereceğiz. Bu parçanın kurulumu, dinamik aydınlatma sistemi Bir Medya Merkezi İçin Kendi Dinamik Ortam Aydınlatmanızı OluşturunPC'nizde veya medya merkezinizde çok fazla film izliyorsanız, eminim ışık ikilemiyle karşı karşıyasınız; tüm ışıkları tamamen kapatır mısın? Onları tam bir patlamada mı tutuyorsun? Veya... Daha fazla oku Daha önce inşa ettim.

Zamanlama bir sorun olacak - bu bir prototip olduğundan, Arduino'yu her sıfırlandığında geri sayacak şekilde ayarlayacağım. Teorik olarak, her gün sadece bir veya iki saniye kaybetmeliyiz, ancak ideal olarak bunu daha güvenilir bir şekilde yapmak için bir “gerçek zamanlı saat” çipi dahil ederiz. Gün doğumu alarmı uyandırma saatinden 30 dakika önce başlayacak ve çıkış seviyesini% 100 parlaklığa ulaşana kadar yavaşça artıracaktır. bu bizi uyandırmak için yeterli olmalı, ancak vücudunuz alışana kadar normal çalar saatinizi kullanmaya devam etmek iyi bir fikirdir. o.

Ayrıca bu projeye, hareketi algılayan ve gizli bir düşük seviyeyi etkinleştiren bir gece lambası ekleyeceğim. 3 dakika zaman aşımı ile yatağın altında ışık, hem karım hem de ben uyanmak neden olacağı için LED ışıkları ayrı yukarı. Yatak altı aydınlatma ticari bir ana ünite olacak, bu yüzden onu açmak ve kapatmak için bir priz içine bir röle keseceğim. Hiçbir koşulda 110-240v AC şebeke gücü ile çalışmaktan memnun değilseniz (ve bu genellikle iyi bir kural), ardından 433 MHz kablosuz vericiyi anahtarlama soketlerine bağlayın. Raspberry Pi Arduino ev otomasyon projesi Raspberry Pi ve Arduino ile Ev Otomasyon RehberiEv otomasyonu pazarı, birbiriyle uyumlu olmayan ve kurulumu pahalı olan pahalı tüketici sistemleriyle doludur. Bir Raspberry Pi ve bir Arduino'nuz varsa, aynı şeyi ... Daha fazla oku .

Parça Listesi ve Şematik

  • Arduino
  • RGB LED şerit ışıkları seti
  • 12 volt güç kaynağı
  • 3 x MOSFET N transistör (STP16NF06FP tipini kullanıyorum)
  • Röle ve güç soketi veya kablosuz kontrollü soketler ve uygun verici
  • Gece lambası seçiminiz (fişli normal şebeke iyi)
  • PIR hareket sensörü (HC-SR501) veya bir SC-04 sonar (etkili değil)
  • Işık sensörü
  • Proje kodu - ancak her şeyi nasıl özelleştireceğinizi anladığınızdan emin olmak için okumaya devam edin.

İşte tam şematik.

doğumu alarm devre

Bir Röleyi Bağlama

Not: RGB ışıklarını gece lambası olarak da kullanmak istiyorsanız bu bölümü atlayın - bu özellikle ayrı bir elektrikle çalışan ışığı açmak içindir.

Şebeke elektriğini değiştirmek için rölenizin voltaj için sınıflandırılması gerekir - 110V veya 240V AC nerede yaşadığınıza ve geçiş yapacağınız toplam amper değerinden daha fazlasına bağlı olarak. Bu sensör paketinden kullandığım (feragatname: bu benim dükkanım) dır-dir 250VAC / 10A, bu yüzden güvende olmalıyız. Rölelerde bir com fişe gelen canlı kabloya bağlanması gereken genellikle merkezdeki bağlantı noktası; daha sonra soket canlı terminalini HAYIR (Normalde açık). Bir prize takılıyken bunu yapmamanızı söylememe gerek yok, yoksa öleceksiniz. Şebeke elektriğiyle uğraşmaktan korkuyorsanız, bunun yerine kablosuz anahtarlamalı prizler kullanın.

aktarma kablo

Toprak ve nötr kablolar doğrudan sokete gitmeli ve röleye temas etmemelidir. ABD'de bir toprak hattınız olmayabilir. Bölgenizdeki kabloların renk kodlamasını bilmek sizin sorumluluğunuzdadır. - Aksi takdirde evinize normal bir soket bağlayamazsanız veya bir fişi yeniden bağlayamazsanız, bir röleyi prize yerleştirmeyi denemeyin!

Test etmek için röle sinyal pimini 12'ye bağlayın, ardından varsayılan olarak 13 değil, pim 12 üzerinde çalışmak üzere değiştirilmiş basit bir yanıp sönme programı çalıştırın. Soketiniz birkaç saniyede bir açılıp kapanmalıdır. Pin 13'ü kullanmamamın nedeni, yükleme işlemi sırasında yerleşik LED'in seri etkinliği göstermek için hızlı bir şekilde art arda patlaması ve rölenin de etkinleştirilmesine neden olmasıdır.

Doğru Zamanlama

Zamanlama ve saat fonksiyonları, bir ağ bağlantısına veya özel Gerçek Zamanlı Saat (bunlar, ana Arduino'nun gücü olmadığında bile saati devam ettirmek için kendi pillerini içerir). Maliyetleri düşük tutmak için hile yapacağım. Arduino'nun geri sayımına başlaması için bir başlangıç ​​zamanı kodlayacağım; bu nedenle zamanlamalar bu başlangıç ​​zamanına göreli olacaktır. Her 24 saatte bir saat sıfırlanacaktır. Aşağıdaki saat fonksiyon kodu, global değişkenlerin currentMillis ve currentMinutes her gün doğrudur. Arduino her 45 günde bir birkaç saniyeden fazla kaybetmemelidir; bununla birlikte, bu kodlanmış zamanlama stili, bir elektrik kesintisi veya kazara sıfırlamanın her şeyi kıracağı için oldukça sınırlıdır, bu nedenle bu kesinlikle geliştirilebilecek bir alandır. Zamanlama senkronize olmazsa, Arduino'yu ayarladığınız başlangıç ​​saatinde sıfırlamanız yeterlidir.

Kodun anlaşılması kolay olmalıdır.

void clock () {if (millis ()> = previousMillis + 86400000) {// tam bir gün geçti, saati sıfırlayın; previousMillis + = 86400000; } currentMillis = millis () - previousMillis; // bu currentMillis'imizi her gün aynı tutar currentMinutes = (currentMillis / 1000) / 60; }

Gece Işığı Fonksiyonu

Ana döngüleri farklı işlevlere ayırdım, böylece okunması ve kaldırılması veya ayarlanması daha kolay. gece lambası() işlevi yalnızca Arduino'nun sıfırlandığı saatler arasında (muhtemelen bunu yatmadan önce ya da etrafında, karanlıkta yapacağınızı varsayıyorum) ve gün doğumu alarmının başlamasına kadar çalışır. Başlangıçta ışığa bağlı bir direnç kullanmaya çalışmıştım, ancak mavi ışığa (gece lambası için kullandığım renk oluyor) çok hassas değiller ve doğru kalibre etmek zor. Zaten saati kullanmak daha mantıklı. Küresel olanı kullanacağız currentMinutes her gün sıfırlanan değişken.

Daha önce hiç kullanmadıysanız PIR sensörü biraz ilginç olabilir, ancak kablolamak zor değildir - bulacaksınız VCC, GND, ve DIŞARI arkada açıkça etiketlenmiş. Siz de iki değişken direnç vardır; etiketli bir RX menzili belirler (yaklaşık 7 m'ye kadar) ve başka bir etiketli TX gecikmeyi belirler. Gecikme en düşük ayarda 5 saniyedir (saat yönünün tersine tamamen) ve herhangi bir anlık hareketin sensörden en az 5 saniye “açık” durumunu tetikleyeceği anlamına gelir. Bununla birlikte, aktif durumlar arasındaki gecikmeyi de belirler - bu nedenle 5 saniye geçerse ve hareket yoksa algılandığında, sensör hareket sırasında bile en az 5 saniye düşük bir sinyal gönderir dönem. Gecikmeyi yaklaşık 30 saniyede çok yüksek ayarladıysanız, sensör kırılmış gibi görünebilir.

pir-sensör

Yalnız uyuyorsanız ve hem gündoğumu alarmı hem de gece lambası için aynı RGB şerit ışıklarını kullanmamanız durumunda, kodu yeterince kolayca ayarlayabilmeniz gerekir.

void nightlight () {// Sadece sıfırlama saatleri -> gündoğumu arasında çalışın. if (currentMinutes 

Gündoğumu Alarmı

Basit olması için, derin sarı gün doğumu için 255,255,0 RGB renk değerini kullanacağım - bu şekilde her iki renk kanalındaki artış aynı olacaktır. Sizi çok erken uyandığını görürseniz, koyu kırmızı ile başlamayı ve sarı veya beyaza doğru solmayı düşünün. Sadece doğrusal olarak kullandığım rampa - parlaklık değerleri için daha doğal bir eğri kullanarak araştırma yapmak isteyebilirsiniz.

İşlev basittir - ışığın her saniyede ne kadar artırılması gerektiği, böylece 30 dakikalık bir süreden sonra tam parlaklıkta olması gerekir; daha sonra güneşin doğuşunu ancak birkaç saniye ile çarpar. Zaten tam parlaklık durumundaysa, hazır olduğunuzdan emin olmak için 10 dakika daha açık kalır (ve hala hazır değilseniz, muhtemelen bir yedek alarmınız olmalıdır).

void sunrisealarm () {// 30 dakikalık süre boyunca her saniye renk değerini şu şekilde arttırmalıdır: float artışı = (float) 255 / (30 * 60); // kırmızı 255, yeşil 255 (currentMinutes> = minutesUntilSunrise) {// gündoğumu başlarsa bize tam parlaklık sarı verir! float currentVal = (float) ((currentMillis / 1000) - (dakikaUntilSunrise * 60)) * artış; Serial.print ("Gündoğumu için geçerli değer:"); Serial.println (currentVal); // rampa yukarıdayken, (currentVal <255) {analogWrite (RED, currentVal); analogWrite (YEŞİL, currentVal); } else if (currentMinutes - minutesUntilSunrise <40) {// tam parlaklığa ulaştığımızda, ışıkları 10 dakika daha uzun süre açık tutun analogYorum (RED, 255); analogyaz (YEŞİL, 255); } else {// ondan sonra, onları analog durumuna geri döndürüyoruz (RED, 0); analogWrite (YEŞİL, 0); } } }

Tuzaklar ve Gelecekteki Yükseltmeler

Bunu son birkaç haftadır kullanıyorum ve gerçekten daha ferah ve iyi hissetmek için uyanmaya yardımcı oluyor; gece lambası da gerçekten iyi çalışıyor. Yine de mükemmel değil, bu yüzden iş ve inşaat sırasında öğrenilen derslere ihtiyaç duyan birkaç şey var.

doğumu alarm

Bu projeyi yaparken, büyük sayılarla ilgili birçok sorunla karşılaştım, bu nedenle kodu değiştirmeyi planlıyorsanız lütfen bunu aklınızda bulundurun. C dilinde, Değişkenlerinizi yazmak çok önemlidir - bir sayı her zaman sadece bir sayı değildir. Örneğin, imzasız uzun Değişkenler milisaniye hakkında konuşurken ele aldığımız gibi süper büyük sayıları saklamak için kullanılmalıdır, ancak 60.000 kadar küçük bir sayı bile normal bir tamsayı olarak saklanamaz (imzasız bir int 68.000'e kadar kabul edilebilir olurdu). Önemli olan, Değişken tiplerinizi okuyun büyük sayılar kullanırken ve garip hatalar bulursanız, bunun nedeni büyük olasılıkla değişkenlerinizden birinin yeterli biti olmamasıdır!

Ayrıca, çok düşük parlaklık voltajı sızıntıları ile ilgili bir sorun buldum. digitalWrite (KIRMIZI, 0) sinyal yayılıyor - resmi denetleyicilerle iyi çalıştıkları için şeritlerdeki donanım sorunu olduğunu düşünmüyorum. Birisi aşağıda resmedilen bu sorunu çözebilirse, çok minnettar olurum. Dirençleri aşağı indirmeyi ve Arduino pinlerinden çıkış voltajını sınırlamayı denedim. Aslında gerektiğinde LED şeridine voltaj sağlamak için basit bir güç anahtarlama devresi eklemem gerekebilir; veya hatalı MOSFET'ler olabilir.

ışık kaçağı

Gelecekte çalışmak için, bir IR alıcısı eklemeyi ve orijinal denetleyicinin bazı özelliklerini - en azından renkleri genel kullanım ışığı olarak değiştirme yeteneği, şu anda bu proje şeridi özel bir geceye dönüştürüyor Işık. 30 dakikalık bir otomatik zaman aşımı işlevi bile ekleyebilirim.

Bunu denediniz, iyileştirmeler yaptınız veya başka fikirleriniz mi var? Yorumlarda bana bildirin!

James Yapay Zeka alanında lisans derecesine sahiptir ve CompTIA A + ve Network + sertifikalıdır. MakeUseOf'un baş geliştiricisi ve boş zamanlarını VR paintball ve boardgames oynayarak geçiriyor. Çocukluğundan beri bilgisayar yapıyor.