İçindekiler:

XOD ile Çalışan Şarj Edilebilir Solar Lamba: 9 Adım (Resimlerle)
XOD ile Çalışan Şarj Edilebilir Solar Lamba: 9 Adım (Resimlerle)

Video: XOD ile Çalışan Şarj Edilebilir Solar Lamba: 9 Adım (Resimlerle)

Video: XOD ile Çalışan Şarj Edilebilir Solar Lamba: 9 Adım (Resimlerle)
Video: Tuşlu Telefondan roblox açıyoruz 😯 2024, Aralık
Anonim
XOD ile Çalışan Şarj Edilebilir Solar Lamba
XOD ile Çalışan Şarj Edilebilir Solar Lamba

Çoğu ev eşyası ve donanım mağazasında ucuz güneş enerjisi bahçe/geçit lambaları bulunmaktadır. Ama eskilerin dediği gibi, genellikle ödediğinizin karşılığını alırsınız. Kullandıkları normal şarj ve aydınlatma devreleri basit ve ucuzdur, ancak elde ettiğiniz ışık çıkışı etkileyici olmaktan başka bir şey değildir (ve geçitinizi kullanan herkesin nereye gittiklerini görmesi için zar zor yeterli!)

Bu, önemli bir gelişme olan ve yine de yapılması nispeten ucuz olan bir şebekeden bağımsız aydınlatma modülü tasarlama girişimim. Ona biraz "beyin" vererek. XOD.io, grafiksel olarak kod "yazabileceğiniz" Arduino gömülü geliştirme platformuyla uyumlu yeni bir IDE'dir. Ortam, grafik çiziminizi, kompakt kod oluşturmada oldukça verimli olan ve daha fazla harici bağımlılık gerektirmeden stok Arduino IDE ile tamamen uyumlu kaynak üreten modern C++'a aktarır. Bu şekilde, karmaşık görevleri üstlenmek için sınırlı program ve veri depolama kaynaklarına sahip küçük, ucuz mikro denetleyiciler bile kullanılabilir.

Bu proje, lambanın güç gereksinimlerini yönetmek için birlikte çalışan iki Arduino uyumlu ATTiny85 mikro denetleyicinin nasıl kullanılabileceğini gösterir. İlk işlemci, harici donanımdan çevre verilerini algılamayı yönetir ve ikincisi, gün boyunca güneşten elde edebileceği en fazla enerjiyi toplamaya çalışır ve daha sonra, bir depolama pili gece boşalırken yüksek güçlü bir LED'in aydınlatmasını kontrol eder. İkinci işlemci, işini "bulanık mantık" kontrolünün kompakt bir uygulamasıyla gerçekleştirir. Her iki çip için de yazılım, yalnızca XOD ortamında geliştirilmiştir.

Adım 1: Gerekli Malzemeler

Arduino IDE, en son sürüm, "Boards" yöneticisinden yüklenen ATTinyCore uzantısıyla

Sparkfun USBTinyISP ATTiny programcısı, 11801 veya eşdeğeri Sparkfun ürün sayfası

Kapatma girişli Pololu ayarlanabilir alçak gerilim yükseltici dönüştürücü, U1V11A veya eşdeğeri Pololu ürün sayfası

Soğutucu, ortak anot, Adafruit 2524 veya eşdeğeri Adafruit ürün sayfası ile yüksek güçlü beyaz veya RGB LED

8 pinli DIP paketinde Microchip ATTiny85, 2 Mouser ürün sayfası

8 pinli DIP IC soketi, 2

Toplu depolama kondansatörü, 16 v 220 uF

Çıkış kapasitörü, 6.3v 47uF

Akım sınırlayıcı dirençler, 50 ohm 1/4 watt

i2c pull-up dirençleri, 4.7k, 2

Panel voltaj algılama bölücü dirençleri, 1/4 watt, 100k, 470k

Akım algılama direnci, 10 ohm 1⁄2 watt %1 tolerans

Baypas kapasitörleri, 0.1uF seramik, 2

2 3,7 v 100mAh lityum iyon şarj edilebilir pil, PKCELL LP401 veya eşdeğeri

Panel için varil fiş giriş jakı, 1

Mini terminal blokları 3”x3” lehim plakası kartı ve bağlantı yapmak için ince tek damarlı tel

Test için neredeyse kesinlikle bir osiloskop, multimetre ve tezgah güç kaynağı gerekli olacaktır

2. Adım: Ortam Kurulumu

Ortam Kurulumu
Ortam Kurulumu

XOD ortamı, kutudan çıktığı haliyle ATTiny işlemci serisini desteklemez, ancak Arduino evreninden birkaç üçüncü taraf kitaplığı kullanarak bu AVR serisine destek eklemek kolaydır. İlk adım, Arduino IDE'nin “Tools → Board → Board Manager” açılır menüsünden “ATTinyCore” kütüphanesini kurmaktır. Dahil edilen resimde gösterildiği gibi ayarların doğru olduğundan emin olun - herhangi bir kod yüklemeden önce kesinti voltajını ve saat hızı ayar sigortalarını değiştirmek için "Önyükleyiciyi yak" düğmesine basmanız gerektiğini unutmayın!

Bu kitaplığın kaynak kodu şu adreste mevcuttur:

Depodan edinilebilecek bir diğer yararlı kitaplık, Arduino destekli işlemciler için sabit nokta matematiğinin derleme zamanı uygulaması olan “FixedPoints”. ATTiny, sınırlı SRAM ve program belleğine sahiptir ve AVR'de 4 bayt gerektiren kayan nokta türü yerine genel veri depolama için 2 baytlık bir tamsayı kullanmak için son çizim boyutunu küçültmede çok yardımcı olur. ATTiny'de donanım çarpma birimi olmadığı için, donanım kayan noktası çok daha az olduğundan yürütme hızı da iyileştirilmelidir!

Kaynak kodu şu adreste mevcuttur:

github.com/Pharap/FixedPointsArduino adresindeki XOD grafik çizimlerinin nasıl oluşturulacağına, aktarılacağına ve dağıtılacağına ilişkin öğretici, dahil edilen kaynak dosyaların nasıl oluşturulduğunu anlamada çok yardımcı olacaktır.

3. Adım: Tasarıma Genel Bakış

Tasarıma Genel Bakış
Tasarıma Genel Bakış
Tasarıma Genel Bakış
Tasarıma Genel Bakış

Kartta iki ATTiny85 işlemci bir i2c arabirimi aracılığıyla bağlanır ve güneş panelinin voltajını, panel aydınlatılırken güçlendirici dönüştürücüden pile akan akımı, pil voltajını ve pili algılamayı yönetmek için birlikte çalışır. sıcaklık.

Boost dönüştürücü, 0,5 volt kadar düşük bir giriş voltajını alıp 2 volttan 5 volta yükseltebilen Texas Instruments TPS6120 IC'ye dayalı hazır bir modüldür. Sensör çekirdeği birkaç fonksiyonel blok içerir. Ana saat, güneş paneli girişinden boost dönüştürücüye güç verilir uygulanmaz çalışmaya başlar. Bu, çizimin yürütülmesini başlatır ve ilk şey, panelin aküye şarj akımı sağlamak için yeterince aydınlatılıp aydınlatılmadığını belirlemektir.

Güneş paneli voltajı iki dijital filtreden geçirilir ve belirli bir eşiğin üzerindeyse sistem panelin aydınlandığını belirler ve ana saati akım algılama monitörüne geçirir. Bu, diferansiyel olarak yapılandırılmış, boost dönüştürücünün çıkışı ile pil girişi arasına seri olarak bağlanan 10 ohm'luk %1 toleranslı bir direnç üzerindeki voltajı algılayan, çipin analogdan dijitale dönüştürücü kanalıdır. Panel aydınlatılmadığında bu ATTiny, ikinci ATTiny'ye şarj gücü yerine LED gücünü izlemesini ve güçlendirici dönüştürücüyü kapatmasını ve pilin panelden akım geri göndermemesi için girişi izole etmesini söyleyen bir sinyal gönderir..

İkinci ATTiny çekirdeği, LED denetleyici ve pil şarjı izleme sisteminin çalıştığı yerdir. Panel voltajı, batarya voltajı ve batarya şarj akımı verileri, SHTDN pinine uygulanacak uygun bir PWM sinyali üretmeye çalışan ve böylece bataryaya gönderilen akım miktarını kontrol eden bir bulanık mantık ağı aracılığıyla işlenmek üzere bu çekirdeğe gönderilir. aydınlatıldığında şarj etmek için – maksimum güç noktası takibinin (MPPT) temel bir şeklidir. Ayrıca sensör çekirdeğinden, sensör çekirdeğinin gün/gün çıkışına bağlı olarak LED'i açıp kapatmayacağını söyleyen bir sinyal alır. gece parmak arası terlik.

LED gece aktif olduğunda, bu ATTiny, LED'e ne kadar güç itildiğine dair kaba bir tahmin elde etmek için arkadaşından ve kendi çip üstü sıcaklık sensöründen gönderilen akü voltajı verilerini izler (akü voltajı düşer) ve çip sıcaklığı pinlerinden çekilen akımla artar.) LED PWM yaması ile ilişkili bulanık mantık ağı, ne kadar pil gücünün mevcut olduğuna dair bir karar vermeye çalışır ve pil tükendikçe LED yoğunluğunu azaltır.

Adım 4: XOD Çekirdek Kitaplığından Özel Yamalar Oluşturma

XOD Çekirdek Kitaplığından Özel Yamalar Oluşturma
XOD Çekirdek Kitaplığından Özel Yamalar Oluşturma
XOD Çekirdek Kitaplığından Özel Yamalar Oluşturma
XOD Çekirdek Kitaplığından Özel Yamalar Oluşturma

Bu tasarım için, bazıları tamamen dahil edilen XOD düğümlerinden kolayca oluşturulabilen ve bazıları C++'da uygulanan birkaç özel yama düğümü kullanıldı.

Resimlerdeki iki özel yama düğümünden ilki, üstel hareketli ortalama filtresinin bir uygulamasıdır. Bu, taslakta seri olarak kullanılan, bir kez mantık çekirdeği için gelen güneş paneli voltajını filtrelemek ve bir kez daha uzun vadeli ortam aydınlatmasını belirleyen tetiği beslemek için kullanılan düşük tepeli düşük geçişli bir dijital filtredir. Üstel yumuşatma hakkındaki Wikipedia girişine bakın.

Görüntüdeki düğüm yapısı, uygun girişlerden çıkışlara bağlantılar kullanılarak birbirine bağlanan, makaledeki transfer fonksiyonunun doğrudan grafiksel bir temsilidir. Kitaplıkta bir geri besleme döngüsünün oluşturulmasına izin veren bir erteleme düğümü vardır (XOD yürütme modelinde açıklandığı gibi döngüye bir gecikme eklemeden bir geri besleme döngüsü oluşturursanız XOD sizi uyarır.) Bu ayrıntıyla ilgilenilir. yama iyi çalışıyor, bu kadar basit.

İkinci özel yama düğümü, filtrelenmiş panel voltajıyla beslenen, XOD'de bulunan stok flip-flop'un bir varyasyonudur. Giriş sinyalinin belirli bir eşiğin üstünde veya altında olmasına bağlı olarak yüksek veya düşük olarak kilitlenir. Durum düşükten yükseğe geçerken flip flop'u tetiklemek için Boole çıkış değerlerini darbe veri tipine dönüştürmek için döküm düğümleri kullanılır. Bu yama düğümünün tasarımı, umarım ekran görüntüsünden biraz açıklayıcı olmalıdır.

Adım 5: C++ Kullanarak Özel Yamalar Oluşturma

C++ Kullanarak Özel Yamalar Oluşturma
C++ Kullanarak Özel Yamalar Oluşturma

Düğüm işlevselliğinin grafiksel olarak kolayca tasvir edilemeyecek kadar karmaşık olduğu veya stok Arduino ortamına özgü olmayan Arduino kitaplıklarına dayanan özel gereksinimler için, XOD, bazı C/C++ bilgisine sahip olanların ısırık büyüklüğünde parçalar yazmasını kolaylaştırır. daha sonra herhangi bir kullanıcı tarafından oluşturulan veya stok düğümüyle aynı olan bir yamaya entegre edilebilen kod. Dosya menüsünden "yeni bir yama oluştur"u seçmek, çalışmak için boş bir sayfa oluşturur ve giriş ve çıkış düğümleri, çekirdek kitaplığın "düğümler" bölümünden sürüklenebilir. Ardından, "xod'da uygulanmayan" düğümü sürüklenebilir ve tıklandığında, gerekli işlevselliğin C++'da uygulanabileceği bir metin düzenleyici getirecektir. Dahili durumun nasıl ele alınacağı ve C++ kodundan giriş ve çıkış bağlantı noktalarına nasıl erişileceği burada ele alınmaktadır.

C++'da özel yamaların uygulanmasına bir örnek olarak, sürücü çekirdeğinin besleme voltajı ve çekirdek sıcaklığının bir tahminini ortaya koymak için sürücü çekirdeği için iki özel yama daha kullanılır. Bulanık ağıyla birlikte, karanlık olduğunda LED'lere güç sağlamak için kalan pil gücünün kabaca bir tahminini sağlar.

Sıcaklık sensörü yaması ayrıca daha iyi bir tahmin elde etmek için besleme gerilimi sensörünün çıkışıyla beslenir - çekirdek sıcaklığının algılanması, LED'lerde ne kadar güç yakıldığına dair kaba bir tahmin elde etmemize ve ne zaman besleme gerilimi okumasıyla birleştirilmesine izin verir. pilin bitmesi, kalan pil gücünün kaba bir tahminidir. Süper doğru olması gerekmez; Çekirdek, LED'lerin çok fazla akım çektiğini ancak pil voltajının hızla düştüğünü "biliyorsa", pil gücünün çok daha uzun sürmeyeceğini ve lambayı kapatma zamanının geldiğini söylemek muhtemelen güvenlidir.

Adım 6: İnşaat

Yapı
Yapı
Yapı
Yapı
Yapı
Yapı

Projeyi, delikten geçen parçalar için bakır pedli küçük bir prototipleme tahtası parçası üzerine kurdum. IC'ler için soketlerin kullanılması, programlama/değişiklik/test için çok yardımcı olur; Sparkfun'dan USBTiny ISP, kartında benzer bir sokete sahiptir, bu nedenle iki yongayı programlamak, programlayıcıyı bir PC USB bağlantı noktasına takmaktan, verilen Arduino.ino dosyalarından aktarılan XOD kodunu uygun kart ve programlayıcı ayarlarıyla yüklemekten ibarettir ve daha sonra çipleri programlayıcı soketinden yavaşça çıkarın ve bunları protokol soketlerine yerleştirin.

Pololu TPS6120 tabanlı boost dönüştürücü modülü, pin başlıklarında protoboard'a lehimlenmiş bir yükseltici kart üzerinde gelir, bu nedenle bazı bileşenleri altına monte ederek yerden tasarruf etmek mümkündür. Prototipimde altına iki adet 4.7k çekme direnci koydum. Bunlar, çipler arasındaki i2c veri yolunun doğru çalışması için gereklidir - bunlar olmadan iletişim doğru çalışmaz! Kartın sağ tarafında, güneş panelinin fişi ve giriş depolama kapasitörü için giriş jakı bulunur. Mümkün olduğunca düşük dirençli bir yol elde etmek için jakı ve bu kapağı doğrudan lehim "çalışmaları" ile birbirine bağlamaya çalışmak en iyisidir, bağlantı teli değil. Daha sonra, depolama kondansatörünün pozitif terminalini doğrudan yükseltme modülünün giriş voltajı terminaline ve takviye modülünün topraklama pimini doğrudan jakın toprak pimine bağlamak için katı lehim koşuları kullanılır.

İki ATTiny için soketlerin sağında ve solunda 0.1 uF despike/deglitching kapasitörler bulunur. Bu bileşenlerin dışarıda bırakılmaması da önemlidir ve IC'lerin güç ve topraklama pinlerine mümkün olduğunca kısa ve doğrudan bir yoldan bağlanmalıdır. 10 ohm'luk akım algılama direnci soldadır, bu, güçlendirici dönüştürücünün çıkışına göre bağlanır ve her iki taraf da bir sensör çekirdeği giriş pimine bağlanır - bu pimler, dolaylı olarak ölçmek için bir diferansiyel ADC olarak çalışacak şekilde ayarlanmıştır. aküye akım. i2c veriyolu için IC pinleri ile boost dönüştürücü kapatma pini vb. arasındaki bağlantılar, protokolün alt tarafındaki bağlantı kablosu kullanılarak yapılabilir, çok ince katı çekirdekli bağlantı kablosu bunun için harika çalışır. Değişiklikleri kolaylaştırır ve üstteki delikler arasında atlama tellerinden çok daha düzgün görünür.

Kullandığım LED modülü üç renkli bir RGB birimiydi, planım, pil neredeyse tamamen şarj olduğunda beyaz üretmek için üç LED'in tümünü aktif hale getirmek ve şarj tükendiğinde mavi LED'i yavaşça sarıya çevirmekti. Ancak bu özellik henüz uygulanmadı. Bir akım sınırlayıcı dirençli tek bir beyaz LED de sorunsuz çalışacaktır.

7. Adım: Test Etme, 1. Kısım

Test, Bölüm 1
Test, Bölüm 1

Her iki ATTiny IC'yi dahil edilen çizim dosyaları ile Arduino ortamından USB programlayıcı aracılığıyla programladıktan sonra, pili güneş panelinden şarj etmeye çalışmadan önce prototip üzerindeki iki çekirdeğin düzgün çalıştığını test etmeye yardımcı olur. İdeal olarak bu, temel bir osiloskop, multimetre ve tezgah güç kaynağı gerektirir.

Kontrol edilmesi gereken ilk şey, olası hasarları önlemek için IC'leri, pili ve paneli soketlerine takmadan önce kartın hiçbir yerinde kısa devre olmamasıdır! Bunu yapmanın en kolay yolu, bu durumda çıkış akımını güvenli bir değere sınırlayabilen bir masaüstü güç kaynağı kullanmaktır. 3 volt ve 100 mA limitli tezgah besleme setimi güneş paneli giriş jakı terminallerine bağlı pozitif ve negatif güç kaynağı uçlarına kullandım. Takılan pasif bileşenlerden başka hiçbir şey olmadığında, güç kaynağının akım monitöründe kayda değer bir akım çekişi olmamalıdır. Önemli bir akım akışı varsa veya besleme akım sınırlamasına girerse, bir şeyler ters gitti ve kart, yanlış bağlanmış bağlantı veya ters polariteye sahip kapasitör olmadığından emin olmak için kontrol edilmelidir.

Bir sonraki adım, güçlendirici dönüştürücünün doğru şekilde çalıştığından emin olmaktır. Kart üzerinde bir vidalı potansiyometre var, güç kaynağı hala bağlı ve dönüştürücünün dördü uygun şekilde bağlıyken potansiyometre, modülün çıkış terminalindeki voltaj yaklaşık 3,8 ila 3,9 volt okuyana kadar küçük bir tornavida ucuyla döndürülmelidir. Bu DC değeri çalışma sırasında değişmeyecek, sürücü çekirdeği, modülün kapatma pimini titreştirerek ortalama çıkış voltajını kontrol edecektir.

Adım 8: Test Etme, 2. Kısım

Test, Bölüm 2
Test, Bölüm 2
Test, Bölüm 2
Test, Bölüm 2

Kontrol edilecek bir sonraki şey, i2c iletişiminin iyi çalıştığıdır, kart tezgah gücünden çalışırken sensör çekirdeği IC takılabilir. Bir osiloskopta, fiziksel çipin hem pin 5 hem de pin 7'sinde darbe sinyalleri olmalıdır, çip üzerindeki bu i2c sürücüsü, arkadaşına veri göndermeye çalışır. Kapattıktan sonra sürücü çekirdeği takılabilir ve bağlantı tekrar bir osiloskop ile kontrol edilebilir, her iki hatta daha büyük bir darbe dizisi görünür olmalıdır. Bu, çiplerin doğru bir şekilde iletişim kurduğu anlamına gelir.

Son tam test için pilin biraz şarj edilmesine yardımcı olur. Akım sınırı yaklaşık 50 mA'ya ayarlanmış ve voltaj hala 3,8 volttayken, bunu gerçekleştirmek için tezgah kaynağı da kullanılabilir ve LiPo pili birkaç dakika doğrudan bağlı kalır.

Son adım, tüm sistemi test etmektir - panel on veya 15 saniye boyunca kapatılırsa, her şey bağlıyken, ışık sürücü çekirdeğinin PWM çıkışı aracılığıyla sürülmelidir. Panel parlak güneş ışığı altındayken pil, güçlendirici dönüştürücünün çıkışından şarj edilmelidir. Bulanık mantık ağı, güçlendirici dönüştürücünün kapatma pimini çalıştıran PWM hattına bakılarak doğru çalışıp çalışmadığını görmek için dolaylı olarak denetlenebilir; Düşük şarj durumunda pil ile aydınlatma arttıkça, darbe genişliği artmalıdır, bu da güneş ışığından daha fazla güç elde edildiğinde, sürücü çekirdeğinin pile daha fazla güç gönderilmesi gerektiğini işaret ettiğini gösterir!

Adım 9: Bulanık Mantık Ek

Bulanık Mantık Ek
Bulanık Mantık Ek

Bulanık mantık, kontrol edilen sistemin birçok parametresinde belirsizliğin olduğu donanım sistemlerinin kontrolünde kullanılabilen ve matematiksel olarak yazılması zor olan hedef için çıktı kontrol çözümüne açık bir giriş yapan bir makine öğrenme tekniğidir. Bu, 0 (yanlış) ile 1 (doğru) arasında bir yere düşen mantıksal değerler kullanılarak, belirsizliği daha çok bir insanın yaptığı gibi bir değerde ifade ederek ("çoğunlukla doğru" veya "gerçekten doğru değil") ve bir gri alana izin vererek gerçekleştirilir. %100 doğru ve %100 yanlış olan ifadeler arasında Bunun başarılmasının yolu, ilk önce bir kararın dayandırılması gereken girdi değişkenlerinin örneklerini almak ve bunları "bulanıklaştırmak"tır.

Herhangi bir bulanık mantık sisteminin kalbi, bir "bulanık çağrışımsal bellek"tir. Bu, pil şarj devresi durumunda 0 ile 1 arasında değişen bir 3x3 değer kümesinin depolandığı bir matrisi anımsatır. Matristeki değerler, yukarıdaki üyelik fonksiyonunun belirli bir girdi setini nasıl nitelediğine bağlı olarak, bir insanın boost dönüştürücünün SHTDN pinini kontrol eden PWM faktörünün ne olması gerektiği konusunda nasıl akıl yürüteceği ile kabaca ilişkilendirilebilir. Örneğin, panel giriş voltajı yüksek ancak aküye çekilen akım düşükse, muhtemelen daha fazla güç çekilebileceği ve PWM ayarının optimal olmadığı ve arttırılması gerektiği anlamına gelir. Tersine, panel voltajı düşerse, ancak şarj cihazı hala pile büyük bir akım göndermeye çalışıyorsa da boşa gidecektir, bu nedenle güçlendirici dönüştürücüye giden PWM sinyalini azaltmak en iyisi olacaktır. Giriş sinyalleri bir bulanık kümeye "bulanıklaştırıldığında", "bilginin" hücreyi ne kadar yoğun olarak içerdiğini temsil eden dönüştürülmüş bir küme oluşturmak için bir vektörün bir matrisle çarpılmasına benzer şekilde bu değerlerle çarpılırlar. matrisin değeri, son kombinasyon fonksiyonuna dahil edilmelidir.

Özel işlevleri uygulayan XOD düğümlerinin, stok yapı taşlarından makul olamayacak kadar karmaşık olmasına izin veren “xod'da uygulanmayan” düğümü ve küçük bir Arduino tarzı C++, ilişkisel bellek, ağırlıklandırma işlevi ve " fuzzifier", bu referansta açıklanan bloklara benzer: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940 yapmak kolaydır ve denemesi çok daha kolaydır.

Önerilen: