Arduino Gece Lambası ve Gündoğumu Alarmı Projesi

  • Brian Curtis
  • 0
  • 2025
  • 281
reklâm

İnsanlar doğal olarak güneşin doğuşuyla uyanacak şekilde programlanmıştır; ne yazık ki modern yaşam, doğal bir ışık olmadığında bizi uyandırmaya zorlayan, keyfi bir saat tarafından belirlenir. Bugün, saldırgan bir gürültü yapan makineye 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 ve Android uygulamalarına göz atın Daha iyi uyumak için Bu Uygulamaları Kullanın [Android ve iOS] Daha iyi uyumak için Bu Uygulamaları Kullanın [Android ve iOS] Yoğun bir olaydan sonra gün, yapabileceğiniz en iyi şey, faydalı miktarda uyku almaktır. Uykunun gerçekte ne kadar önemli olduğunu kanıtlayan, iyileşen… vücut hareketleriyle sizi en iyi ne zaman uyandıranı saptayan yeni bir uygulama vardır. Bir Uygulama Gerçekten Daha İyi Uyumanıza Yardımcı Olabilir mi? Bir Uygulama Gerçekten Daha İyi Uyumanıza Yardımcı Olabilir mi? Ben her zaman bir uyku deneycisiydim, hayatım boyunca büyük bir titiz rüya günlüğü tuttum ve bu süreçte uyumak için elimden geldiğince çalıştım. Bir… vardır, bu muhteşem rüyadan uzak durmamanızı sağlamak yerine, uyanık ve tazelenmiş hissi uyandırın - gerçekten işe yarıyorlar.

Proje taslağı

Projenin ana kısmı, yatağın etrafına döşenen 5 metrelik bir LED şerit ışık olacaktır. Bunları, bazı MOSFET N transistörlerini kullanarak değiştirilen harici bir 12 volt besleme ile besleyeceğiz. Bu bölüm için ayar, dinamik aydınlatma sistemi ile aynı olacaktır. Bir Medya Merkezi için Kendi Dinamik Ortam Aydınlatmasını Oluşturun Bir Medya Merkezi için Kendi Dinamik Ortam Aydınlatmasını Oluşturun PC'nizde veya medya merkezinde çok fazla film izlerseniz, ben aydınlatma ikilemiyle karşılaştığınızdan emin olun; tüm ışıkları tamamen kapatıyor musunuz? Onları tamamen patlatıyor musunuz? Veya… daha önce inşa ettim.

Zamanlama bir sorun olacak - bu bir prototip olduğu için, Arduino'yu her sıfırlandığında geriye saymaya ayarlayacağım. Teoride, her gün sadece bir veya iki kaybetmemiz gerekir, fakat ideal olarak “gerçek zamanlı saat” Bunu daha güvenilir yapmak için çip. Gündoğumu alarmı, uyanma saatinden 30 dakika önce başlayacak ve çıkış seviyesini% 100 parlaklığa kadar yavaşça arttıracaktır - bu, bizi uyandırmak için yeterli olmalıdır, ancak normal alarm saatinizi vücudunuzu kullanana kadar kullanmak iyi bir fikirdir. buna alışmış.

Ayrıca, karımı ve benim uyanmamı sağlayacak olan LED ışıklarından ayrı olarak, hareketi algılayan ve yatağın altında 3 dakikalık bir zaman aşımına sahip gizli düşük seviyeli bir ışığı aktive eden bu projeye bir gece lambası da ekleyeceğim. . Yatak altı aydınlatma ticari bir ana ünite olacak, bu yüzden onu açmak ve kapatmak için bir prizin içindeki röleyi keseceğim. Herhangi bir koşulda 110-240v AC şebeke gücü ile çalışmaktan rahat değilseniz (ve bu genellikle olması iyi bir kuraldır), o zaman Raspberry Pi Arduino ev otomasyonu projesinde belirtildiği gibi, 433 MHz kablosuz vericiyi anahtar prizlerine bağlayın. Ahududu Pi ve Arduino ile Ev Otomasyonu Rehberi Ahududu Pi ve Arduino ile Ev Otomasyonu Rehberi Ev otomasyonu pazarı, birbiriyle uyumlu olmayan ve kurulumu pahalı olan tüketici sistemleriyle doludur. Bir Ahududu Pi ve bir Arduino'nuz varsa, temelde aynı şeyi başarabilirsiniz: .

Parça Listesi ve Şematik

  • Arduino
  • RGB LED şerit ışıkları ayarlayın
  • 12 voltluk güç kaynağı
  • 3 x MOSFET N transistör (STP16NF06FP tipini kullanıyorum)
  • Röle ve elektrik prizi veya kablosuz kontrollü prizler ve uygun verici
  • Gece lambası seçiminiz (fişli elektrik şebekesi normal durumda)
  • 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.

Röle Kablolama

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

Şebeke elektriğini değiştirmek için rölenizin voltaj değerinde olması gerekir. - 110V veya 240V AC nerede yaşadığınıza bağlı olarak - ve toplam amperden daha fazlasını değiştireceksiniz. Bu sensör paketinden kullandığım (feragatname: bu benim dükkanım) olduğu 250VAC / 10A, bu yüzden güvende olmalıyız. Röleleri bir com genellikle merkezde olan ve fişe gelen canlı kabloya bağlanması gereken bağlantı noktası; daha sonra soket canlı terminalini YOK HAYIR (Normalde açık). Bir prize takılıyken bu işi yapmamanı söylememeliyim yoksa öleceksin. Şebeke gücüyle uğraşmaktan korkuyorsanız, bunun yerine kablosuz anahtarlı prizler kullanın..

Toprak ve nötr kabloları doğrudan sokete gitmeli ve röleye dokunmamalıdır. ABD'de bir toprak hattınız olmayabilir. Bölgenizdeki tellerin renk kodlamasını bilmek sizin sorumluluğunuzdadır - Evinizde normal bir prize başka bir kablo bağlayamadıysanız ya da bir prize takamadıysanız, bir röleyi prize takmayı denemeyin!

Test etmek için röle sinyal pimini 12'ye bağlayın, sonra varsayılan olarak 13 değil, pim 12 üzerinde çalışacak şekilde modifiye edilmiş basit bir yanıp sönme programı çalıştırın. Soketiniz birkaç saniyede bir açılıp kapanmalıdır. Pim 13'ü kullanmamamın nedeni, yükleme işlemi sırasında yerleşik LED'in seri aktiviteyi göstermek için hızlı bir şekilde artması ve rölenin de aktif hale gelmesine neden olmasıdır..

Zamanlamayı Doğru Almak

Zamanlama ve saat işlevleri, bir ağ bağlantısına erişmeden veya özel Gerçek Zamanlı Saat (Bunlar, ana Arduino’nun gücü olmadığında bile saatin ilerlemesini sağlamak için kendi bataryalarını içerir). Maliyetleri düşük tutmak için hile yapacağım. Arduino'nun geri sayıma başlaması için bir başlangıç ​​zamanı kodlayacağım; bu nedenle zamanlamalar bu başlangıç ​​zamanına göre olacaktır. Her 24 saatte, saat sıfırlanır. Aşağıdaki saat fonksiyon kodu genel değişkenleri sağlar currentMillis ve currentMinutes Her gün doğru. Arduino her 45 günde bir, birkaç saniyeden fazla kaybetmemelidir; bununla birlikte, bu kodlanmış zamanlama stili, bir elektrik kesintisi veya kazayla sıfırlama işleminin her şeyi kıracağı için oldukça sınırlıdır, bu nedenle bu kesinlikle geliştirilebilecek bir alandır. Zamanlama senkronizasyondan çıkarsa, Arduino'yu ayarlanan başlangıç ​​saatinde sıfırlamanız yeterlidir..

Kodun anlaşılması kolay olmalı.

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

Gece ışık fonksiyonu

Ana döngüleri farklı fonksiyonlara ayırdım, böylece okunması ve çıkarılması veya ayarlanması daha kolay. gece lambası() işlev yalnızca Arduino'nun sıfırlandığı saatler arasında (sanırım karanlıkta veya yatmadan önce veya çevresinde yapacağınızı farz ediyorum) ve gündoğumu alarmının başlamasından kaynaklanana kadar çalışır. Başlangıçta ışığa bağlı bir direnç kullanmaya çalıştım, ancak mavi ışığa karşı çok hassas değiller (gece ışığı için kullandığım renk olur) ve doğru kalibre edilmesi zor. Zaten saati kullanmak daha mantıklı. Global kullanacağız currentMinutes Her gün sıfırlanan değişken.

Daha önce hiç kullanmadıysanız, PIR sensörü biraz tuhaf olabilir; VCC, GND, ve DIŞARI açıkça arkada etiketlenmiş. Sizde iki değişken direnç vardır; etiketli bir RX menzili belirler (yaklaşık 7m'ye kadar) ve bir diğer etiketli TX gecikmeyi belirler. Gecikme, en düşük ayarında 5 saniyedir (saatin tersi yönünde tamamen) ve anlık hareketlerin en az 5 saniye boyunca tetikleneceği anlamına gelir “üzerinde” sensörden durumu belirtin. Bununla birlikte, aktif durumlar arasındaki gecikmeyi de belirler - bu yüzden 5 saniye geçerse ve hiçbir hareket algılanmazsa, sensör bu süre içinde hareket olsa bile en az 5 saniye boyunca düşük bir sinyal gönderir. Gecikme yaklaşık 30 saniyede çok yükseğe ayarlanmışsa, sensör kırılmış gibi görünebilir.

Yalnız uyuyorsanız ve aynı gün doğumu alarmı ve gece ışığı için aynı RGB şerit ışıklarını kullanmakta sakınca yoksa, kodu kolayca ayarlayabilmeniz gerekir..

geçersiz gece lambası () // Sadece sıfırlama -> gün doğumu saatleri arasında çalışın. (CurrentMinutes eğer < minutesUntilSunrise) if(digitalRead(trigger) == 1) nightLightTimeOff = millis()+nightLightTimeOut; // activate, or extend the time until turning off the light Serial.println("Activating nightlight");   //Turn light on if needed if(millis() < nightLightTimeOff) digitalWrite(nightLight,HIGH);  else digitalWrite(nightLight,LOW);   

Gündoğumu Alarmı

Basit olması için, koyu 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. Seni çok erken uyandırdığını görürseniz, koyu kırmızı ile başlamayı ve sarı veya beyaza doğru solmayı düşünün. Sadece lineer olarak kullandığım rampa yukarı - parlaklık değerleri için daha doğal bir eğri kullanarak araştırma yapmak isteyebilirsiniz..

İşlev basittir - 30 dakikalık bir süre sonunda ışığın her saniye ne kadar artacağını hesaplar; daha sonra, birkaç saniye içinde, şuanda güneşin doğuşunda olduğunu çoğaltır. Zaten tam parlaklıktaysa, kalktığınızdan emin olmak için 10 dakika daha açık kalır (ve hala çalışmazsanız, muhtemelen bir yedekleme alarmı devreye sokmalısınız).

void sunrisealarm () // 30 dakikalık periyot boyunca her saniye, renk değerini aşağıdaki kadar artırmalıdır: şamandıralı artış = (şamandıra) 255 / (30 * 60); // kırmızı 255, yeşil 255 bize tam parlaklık sarı verirse (currentMinutes> = minutesUntilSunrise) // sunrise başlar! şamandıra akımıVal = (şamandıra) ((currentMillis / 1000) - (dakikaUntilSunrise * 60)) * artış; Seri.print ("Gündoğumu için geçerli değer:"); Serial.println (currentVal); // hızlanma sırasında, dakikadaki X parlaklık artışının mevcut değerini yazın (currentVal < 255) analogWrite(RED,currentVal); analogWrite(GREEN,currentVal);  else if(currentMinutes - minutesUntilSunrise < 40) // once we're at full brightness, keep the lights on for 10 minutes longer analogWrite(RED,255); analogWrite(GREEN,255);  else //after that, we're nuking them back to off state analogWrite(RED,0); analogWrite(GREEN,0);    

Tuzaklar ve Gelecek Yükseltmeleri

Bunu son birkaç haftadır kullanıyorum ve gerçekten daha tazelenmiş ve iyi bir zamanda uyandırılmış hissi uyandırmaya yardımcı oluyor; gece lambası da gerçekten iyi çalışıyor. Yine de mükemmel değil, işte inşaat sırasında öğrenim ve çalışma gerektiren birkaç şey var..

Bu projeyi yaparken büyük sayılarla uğraşmakla ilgili birçok sorunla karşılaştım, bu yüzden kodu değiştirmeyi planlıyorsanız, lütfen bunu aklınızda bulundurun. C dilinde, değişkenlerinizi yazmanız çok önemlidir - bir sayı her zaman sadece bir sayı değildir. Örneğin, imzasız uzun Milisaniye hakkında konuşurken ele aldığımız süper büyük numaraları saklamak için değişkenler 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 edilebilirdi). Önemli olan, büyük sayıları kullanırken değişken tiplerinizi okumak ve eğer garip hatalar buluyorsanız, muhtemelen değişkenlerinizden birinin yeterli bit olmaması nedeniyle!

Ayrıca çok düşük parlaklıkta voltaj sızıntıları ile ilgili bir sorun buldum - digitalWrite (kırmızı, 0) sinyal yayılır - Resmi denetleyicilerle iyi çalıştıkları için şeritlerin donanım sorunu olduğunu sanmıyorum. Birisi bu sorunu çözebilseydi, aşağıdaki resimde, çok minnettar olurum. Dirençleri düşürmeyi ve Arduino pinlerinden gelen çıkış voltajını sınırlandırmayı denedim. Gerektiğinde yalnızca LED şeridine voltaj sağlamak için basit bir güç değiştirme devresi eklemem gerekebilir; veya hatalı MOSFET'ler olabilir.

Gelecekteki çalışmalar için, bir IR alıcısı eklemeyi ve orijinal denetleyicinin bazı özelliklerini çoğaltmayı umuyorum - 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 otomatik bir zaman aşımı fonksiyonu bile ekleyebilirim.

Bunu denediniz, iyileştirmeler yaptınız veya başka bir fikriniz var mı? Yorumlarda bana bildirin!




Henüz no comments

Modern teknoloji hakkında basit ve uygun fiyatlı.
Modern teknoloji dünyasında rehberiniz. Her gün bizi çevreleyen teknolojileri ve araçları nasıl kullanacağınızı ve Internet'te ilginç şeyleri nasıl keşfedeceğinizi öğrenin.