İçindekiler:

Holi-Tie: 8 Adım (Resimlerle)
Holi-Tie: 8 Adım (Resimlerle)

Video: Holi-Tie: 8 Adım (Resimlerle)

Video: Holi-Tie: 8 Adım (Resimlerle)
Video: Hercai 8. Bölüm 2024, Temmuz
Anonim
Image
Image

gwfongMonkey Patching tarafındanYazarın daha fazlasını izleyin:

Aydınlatıcı Köpek Rampası
Aydınlatıcı Köpek Rampası
Çelik Kalp ve Kaynaşmış Cam Heykel
Çelik Kalp ve Kaynaşmış Cam Heykel
Çelik Kalp ve Kaynaşmış Cam Heykel
Çelik Kalp ve Kaynaşmış Cam Heykel
Bakır Tel ve Kaynaşmış Cam Kelebek
Bakır Tel ve Kaynaşmış Cam Kelebek
Bakır Tel ve Kaynaşmış Cam Kelebek
Bakır Tel ve Kaynaşmış Cam Kelebek

Hakkında: Sadece havalı şeyler yapmak isteyen bir adam Daha Fazla gwfong Hakkında »

Bu, bayramlarda giyilmek üzere tasarlanmış bayramlık bir kravat olan Holi-Tie. Bir Flora kartı kullanan Becky Stern'in Ampli-Tie'sini temel alan Holi-Tie, NeoPixel animasyonlarını ve müziği sürmek için bir Circuit Python Express (CPX) mikro denetleyicisi kullanır. Bir düğme, 2 farklı NeoPixel animasyonu arasında geçiş yapar. Kapasitif dokunmatik yüzeyler NeoPixel renklerini ve animasyon hızlarını değiştirir. Diğer düğme, LED animasyonları ve müzik arasında geçiş yapar. Yerleşik mikrofon, VU metre animasyonu için ortam gürültüsünü ölçmek için kullanılır. Ve CPX hoparlörü tatil çipi melodileri verir.

Her şey CircuitPython sisteminin üzerinde çalışan Python programlama dili kullanılarak kodlanmıştır. Açma/kapama anahtarına sahip olacak şekilde değiştirilmiş 3.7V, 500mAH LiPo pil ile çalışır.

Holi-Tie'yi gösteren iki video klip var:

  • Tamamlanmış Bayram Kravat
  • Holi-Tie'nin İçinde

Adım 1: Parçalar ve Araçlar

Parçalar

  • Devre Bahçesi Ekspres
  • 15x Flora Neopiksel
  • Mıknatıs teli
  • Yapışkanlı cırt bant
  • JST konektörlü 500mAH lipo pil
  • şeker kamışı kravat
  • Mini sürgülü anahtar, SPDT
  • Isıyla daralan makaron

Parçaları tedarik ederken, ekstralar satın almak akıllıca olacaktır. Toplam 20 adet NeoPikselim vardı, biri en baştan kırıldı, biri de mahvettim. Candy Cane kravat o kadar ucuzdu ki, ilkini mahvedersem diye ikincisini aldım.

Aletler

  • Sıcak yapıştırıcı tabancası
  • Lehimleme istasyonu
  • Tel kesiciler
  • Küçük bıçak
  • multimetre
  • Bilgisayar
  • Çakmak veya ısı tabancası
  • İplik ve iğne

2. Adım: Kravatın Hazırlanması

Kravatın Hazırlanması
Kravatın Hazırlanması
Kravatın Hazırlanması
Kravatın Hazırlanması
Kravatın Hazırlanması
Kravatın Hazırlanması

Ana amaç, iç bağlantı çekirdeğine erişmek ve LED'lerin nereye yerleştirilmesi gerektiğini gösteren çizgileri ayırmaktır.

Adım 1: Kravatı yerine bağlayın

Elektronikler yerindeyken kravatı bağlamak zor olacaktır. Kravatı iyi görünecek ve düğüm oldukça sağlam olacak ve çözülmeyecek şekilde bağlayın. Ardından, kravatı başın üzerine geçirmek için deliği açmak için kravatın küçük ucunu dikkatlice çekin. Kravatın üzerinde çalışılacağı pozisyon budur.

Her çeşit farklı kravat düğümü vardır. Sadece çocukken öğrendiğim Windsor'u biliyorum. Hangi düğümün kullanıldığı önemli değildir.

Adım 2: Kravatın arkasını açın

Kravat halkasının ve logonun bir tarafındaki dikişleri yırtın ve ardından kravatın ortasından aşağı doğru açın. Dikkatli olun çünkü sonunda tekrar dikilmesi gerekiyor.

Adım 3: LED'lerin yerleştirileceği yerlere çizgiler çizin

LED'lerin bağın beyaz şerit bölümlerinde görünmesini sağlamak için, bağ göbeğinin arkasındaki her beyaz şerit bölümü için merkez çizgisini bulmak ve ardından bunu bağ göbeğinin önüne eşlemek daha kolaydır. Merkez çizgisinin 1) merkezde ve 2) şeride paralel olduğunu kontrol edin ve iki kez kontrol edin. LED konumları biraz kapalıysa ince ayar yapmak mümkün olacaktır. Ancak, daha sonra değil, şimdi tama yakın hale getirmek en iyisidir.

LED'leri çizgilere yerleştirerek ve şerit kumaşı üste yerleştirerek çizgilerin merkezliğini test edin. Gerektiğinde ayarlayın.

3. Adım: NeoPixels'in Takılması

NeoPixel'leri Takma
NeoPixel'leri Takma
NeoPixel'leri Takma
NeoPixel'leri Takma
NeoPixel'leri Takma
NeoPixel'leri Takma
NeoPixel'leri Takma
NeoPixel'leri Takma

Temel olarak, kendi LED şeridimizi yapıyoruz. LED'leri bağlantı çekirdeğine monte ediyoruz ve ardından birbirine bağlıyoruz.

Adım 1: NeoPixels'i bağ çekirdeğine yapıştırın

NeoPixel'in arkasına bir miktar sıcak tutkal sürün ve orta çizgilerin üzerine yerleştirin. 3 NeoPixel'li bölümler için, merkezi NeoPixel'i dikey olarak hizalayın ve önce bunları yapıştırın. Bu, özellikle bağın genişliğinin yukarıdan aşağıya doğru arttığı göz önüne alındığında, sol ve sağ NeoPixel'i merkeze göre konumlandırmayı kolaylaştıracaktır.

Tüm NeoPikselleri aynı yönde, sol alttan sağ üste doğru yönlendirdiğinizden emin olun. Bu doğru değilse, şerit çalışmayacaktır.

Sıcak tutkal hakkında bir not. Projeyi tamamlamanız yeterli olacaktır. Yıllarca devam edip etmeyeceğine gelince, sadece görmek gerekiyor.

Adım 3: NeoPikselleri birbirine lehimleyin

İletken iplik kullanmak yerine NeoPixel'leri lehimlemeye karar verdiğim için NeoPixel pedlerindeki delik biraz bize karşı çalışıyor. Teli lehimlemek için ped üzerinde iyi bir yer bulun. Deliği lehimle doldurmaya çalışmayın, ancak gerçekleşirse sorun olmaz.

Mıknatıs teli, bakır bir çekirdeğin etrafında ince bir yalıtım tabakasına sahiptir. Bir bıçakla, lehimlenecekleri uçlardaki yalıtımı kazıyın. Telin tüm çevresini kazımak en iyisidir.

4. Adım: Bağlantıyı test edin

Aşağıdakilerin bağlantısını test etmek için bir multimetre kullanın:

  1. Olumlu bağlantılar. Uçtan uca bağlantı olmalıdır. Test bağlantısının kabloda değil, pedlerde olduğundan emin olun.
  2. Toprak bağlantıları. Aynı testi zemin pedleri ile yapın.
  3. Her veri satırı. Bir veri panelinden diğerine bağlantı olduğunu doğrulayın.

Adım 4: Circuit Playground Express'i Takma

Circuit Playground Express'i Takma
Circuit Playground Express'i Takma

Circuit Playground Express (CPX), sistemin kalbidir. Adafruit, bu kontrolör için çok sayıda öğreticiye sahiptir. Bu talimatta daha sonra, MCU özelliklerinden birkaçını vurgulayacağım.

Adım 1: CPX'i NeoPixel'in alt ucuna lehimleyin

Güç, toprak ve veri için mıknatıs telinin uygun uzunluklarını kesin. NeoPixel güç, zemin ve veri pedlerine dokunmaları için onları bağ çekirdeği kumaşından geçirin. Pedlerdeki mevcut kabloların hala iyi bağlantı sağladığından emin olarak bunları lehimleyin.

Ardından bağ çekirdeğini ters çevirin ve CPX'i istenen konuma yerleştirin. Güç kablosunu VOUT pedine, topraklama kablosunu herhangi bir toprak pedine ve veri kablosunu A0 dışındaki herhangi bir G/Ç pedine besleyin. Yazdığım kod A3 kullanıyor.

Bağlantıyı test edin.

2. Adım: CPX'i bağlayın

Bir iplik ve iğne kullanarak, eşit mesafedeki dört pedden herhangi birini seçin ve bunları bağ göbeğine dikin.

Adım 5: CPX'e Güç Verme

CPX'e Güç Verme
CPX'e Güç Verme
CPX'e Güç Verme
CPX'e Güç Verme
CPX'e Güç Verme
CPX'e Güç Verme

CPX'in bir açma/kapama anahtarı yoktur. Bu, pilin takıldığı anda kravatın açılacağı anlamına gelir. Bu aynı zamanda, onu kapatmanın tek yolunun, büyük bir güçlük olan pili çıkarmak olduğu anlamına gelir. Basit bir çözüm, aküye bir kapatma/kapama anahtarı koymaktır.

Adım 1: Anahtardaki 3. pimi kesin

Merkez olmayan pimlerden birine ihtiyaç yoktur. Anahtarın gövdesiyle aynı hizada kesin.

Adım 2: Anahtarı bir pil ucuna lehimleyin

Akü topraklama kablosunu ortada bir yerden kesin. Topraklama kablolarının her birine bir parça ısıyla daralan makaronu kaydırın. Bir topraklama kablosunu pimlerden birine ve diğer topraklama kablosunu diğer pime lehimleyin. Birbirlerine veya lehimin metal gövdeye temas etmemesine dikkat ediniz.

Bunun bir multimetre kullanarak bağlanmadığını doğrulayın. Boruyu lehimli bağlantıların üzerine kaydırın ve küçültün. Bükülme yorgunluğu nedeniyle arızalanabilecek herhangi bir parçaya biraz elektrik bandı ekleyin.

3. Adım: Pilin çalıştığını doğrulayın

Bu noktada, pil CPX'e takılabilir. Her şey yolunda giderse, anahtar CPX'i açıp kapatabilmelidir.

Adım 4: Pili takın

Pilin arka tarafına ve bağ göbeğine biraz yapışkanlı cırt bant yapıştırın. Kravat çok fazla elle tutulmazsa, bu onu yerinde tutacaktır.

Adım 6: Circuit Playground Express'i Kurma

CPX'in nasıl kurulacağıyla ilgili ayrıntılara girmeyeceğim. Adafruit bunu ve sonra bazılarını yapar. Oldukça sık karşılaştığım sorunlar için birkaç ipucu vereceğim.

CPX Donuyor

Muhtemelen çalışma zamanı belleği sorunları nedeniyle, CPX oldukça sık donardı. Hızlı düzeltme, silmek ve yeniden yanıp sönmektir. Bu talimatlarda "Eski Yol" ifadesini arayın. Temel olarak, birkaç düğmeye basmak, silmek için bir sürükle ve bırak ve ardından yeniden yanıp sönmek için bir sürükle ve bırak.

Uyarı: Bu her şeyi siler. CPX üzerindeki tüm kodlar kaybolacak.

Değişiklikleri CPX'e Kaydetmek Sorunlara Neden Olabilir

Bazen bir dosyayı CPX'e kaydettikten sonra python çalışma zamanının kötü durumda olacağını keşfettim. Düzeltme, sıfırlama düğmesine basarak python çalışma zamanını yeniden başlatmaktı. Sadece bir kez basın. İki kez basmak yeniden flaş işlemini başlatacaktır.

Doğrudan CPX'e Kaydetmek Risklidir

CPX'in yeniden yanıp sönme olasılığı nedeniyle, kişi tüm kodlarını kaybetme riskiyle karşı karşıyadır. Kodumu iki kez kaybettikten sonra basit bir iş akışı buldum. Kodumu yerel sabit diske kaydederdim. CPX üzerinde test edilmeye hazır olduğunda, basit bir dağıtım komut dosyası çalıştırarak basitçe kopyalardım.

Adım 7: Circuit Playground Express'i Kodlama

Bu noktada, CPX ve NeoPixels hemen hemen tamamlandı. Onlarla başka hiçbir mekanik veya elektrik işi yapılması gerekmez. Gerisi tamamen yazılımdır.

Kodu github hesabımda bulabilirsiniz. Çekirdek python kodu, tüm işletim sistemleri için herhangi bir değişiklik yapmadan çalışmalıdır. Harici Adafruit CircuitPython kitaplıklarını kurmayın. Kullanılmazlar.

İşte kodda neler olup bittiğinin üst düzey bir özeti.

Hangi Giriş Ne Yapar?

  • Düğme A: LED animasyonları arasında geçiş yapar
  • B Düğmesi: Şarkılar arasında geçiş yapar
  • Kapasitif Dokunmatik Yüzey A1: LED animasyonlarının renklerini değiştirir
  • Kapasitif Dokunmatik Yüzey A6: LED animasyonlarının hızını değiştirir

3 Animasyon Var Ama Sadece 2'si Yürürlükte

kod.py

pikselleri içe aktar

#import vumeter merdiven import twinkle … led_animations = [pikselkapalı. PixelsOff(piksel), # vumeter. VuMeter(piksel, 100, 400) merdiven. Merdiven(piksel), pırıltı. Twinkle(piksel)]

Ampli-Tie VU metre stil kodunu taşıdım. Sesi almak ve NeoPikselleri ses genliğine göre aydınlatmak için CPX mikrofonunu kullanır. Ancak, daha fazla animasyon istedim. Çalışma zamanı bellek kısıtlamaları nedeniyle, hangi animasyonları istediğimi seçmek zorunda kaldım. Bu nedenle, varsayılan olarak diğer ikisi, Stairs ve Twinkle, kod değişikliği yapmak zorunda kalmadan çalışacaktır. VU ölçer animasyonunu çalıştırmak için, diğer animasyonlardan birinin veya her ikisinin yorumlanması ve VU ölçerin yorumunun kaldırılması gerekir.

Müzik Yöneticisi ve Çevrimdışı Kodlama

frosty_the_snowman.py

müzikal_notları mn olarak içe aktar

# Kardan Adam Frosty # Walter E. Rollins şarkısı = [(mn. G4, mn. HLF), (mn. E4, mn. DTQ), (mn. F4, mn. ETH), (mn. G4, mn. QTR), (mn. C5, mn. HLF), …

convert_to_binary.py

şarkılar = [(jingle_bells.song, "jingle_bells.bin"), (frosty_the_snowman.song, "frosty_the_snowman.bin")] şarkılardaki şarkı için: data=şarkı[0] dosya=şarkı[1] ile open(file, "wb") bin_file olarak: veri girişi için: print("writing: " + str(giriş)) note=entry[0] dur=entry[1] bin_file.write(struct.pack("<HH", not, dur))

Tatil müziği istedim. CPX hem WAV'ı hem de tonları destekler. WAV dosyalarının dosya boyutu ve çalışma zamanı belleği açısından çok büyük olduğu ortaya çıktı. Tonları ve sürelerini tutmak için python veri yapılarının kullanılması da çok fazla çalışma zamanı belleği kullandığı ortaya çıktı. Bu yüzden Holi-Tie kodunu, yalnızca gerekli şarkı verilerini sıkıştırılmış bir ikili biçimde içeren sıkıştırılmış bir ikili dosyayı okuyacak şekilde değiştirdim. Python veri yapısında tutulan bir şarkıyı okuyan ve onu ikili formata yazan bir komut dosyası yazdım. Şarkının bir dosyada ikili veri olarak kodlanması, şarkıyı hem küçük hem de dinamik hale getirir. Şarkı çalındıktan sonra hafıza serbest bırakılır.

Daha fazla şarkı eklemek önemsizdir. Ayrıntılar için şarkılarda README.md dosyasına bakın.

A Düğmesi NeoPikselleri Canlandırır, B Müzik Çalar, Ama Aynı Anda Değil

kod.py

def button_a_pressed():

if music.is_playing(): # music.stop() çalınıyorsa müziği durdurun next_led_animation() def button_b_pressed(): if active_led_animation != 0: # İşlemsiz animasyonu çalıştır next_led_animation(0) if music.is_playing(): # Değiştir müzik açık veya kapalı music.stop() başka: music.play()

Belleği daha verimli kullanan müzik yönetim sistemiyle bile, 1 tanesini çalarken ve aynı anda bir şarkıyı çalarken 2 animasyonu çalışma zamanı belleğinde tutamadım. Zaten çalışma zamanı belleğinde VU metre olmamasını tercih ettiğim için, animasyon sayısını sadece 1'e düşürmek istemedim. Bu yüzden kodu, animasyon çalıyor veya müzik çalıyor ama çalmıyor diye yazdım. ikisi birden. Diğer bir seçenek de NeoPiksel sayısını azaltmaktı, ancak bu, animasyon serinliğinin bir kısmını kaybedecekti.

Python Kodu Eğlencesi

Deneyimli bir yazılım geliştiricisi olmama rağmen Python'u hiç yazmamıştım. Alıştıktan ve kapsülleme ve modülerleştirme gibi iyi kodlama uygulamalarını uygulamaya başladıktan sonra, çok fazla çalışma zamanı belleği kullandığımı çabucak keşfettim. Bu yüzden adil bir miktar DRY olmayan kod var. Ayrıca çalışma zamanı bellek sorunlarını daha da azaltmak için const() gibi bazı MicroPython tekniklerini kullanmak zorunda kaldım.

Derlenmiş Modüller

derlemek

#!/bin/bash

compiler=~/development/circuitpython/mpy-cross-3.x-windows.exe cd şarkıları python3./convert_to_binary.py cd.. f in *.py; if

Projenin başlarında Adafruit'in tavsiyesine uydum ve tüm Adafruit CircuitPython kitaplıklarını flash'ta sakladım. Ancak bu, projem için çok az yer bıraktı. Kodumu CPX'e aktarabilmek için modülleri derlemeye ve MCU'ya yerleştirmeye başladım. Holi-Tie'nin herhangi bir harici kütüphaneye ihtiyacı olmadığı ortaya çıktı. UF2'deki mevcut kütüphaneler bu proje için yeterliydi. *.mpy dosyalarını çalıştırmak biraz daha verimli olduğundan, derlenmiş modülleri dağıtma sürecini sürdürdüm.

Yukarıdaki derleme komut dosyasında da görüldüğü gibi, bir Windows makinesinde çalışıyorum ancak bash ve python3 gibi Unix yardımcı programlarını kullanıyorum. Bunu başarmak için Cygwin kullanıyorum. Bu komut dosyası kolayca DOS toplu işlemine ve bir Windows yerel Python3 uygulamasına çevrilebilir.

Adım 8: Kravatın Düğmelerini Açmak

Kravatın Düğmelerini Açmak
Kravatın Düğmelerini Açmak
Kravatın Düğmelerini Açmak
Kravatın Düğmelerini Açmak

Son adım, bağ çekirdeğini yerine koymak, bağı yeniden monte etmek ve tekrar dikmektir. CPX'i erişilebilir kılabildiğinizden emin olun. Pili değiştirirken veya kod değişiklikleri yaparken buna ihtiyacınız olacak.

Önerilen: