İçindekiler:
- Adım 1: Tabanı Yapın
- Adım 2: Neopiksel Halkalarını Hazırlama
- Adım 3: Kablolama
- Adım 4: Kod
- 7. Adım: Mikrofonu Kablolama
Video: Arduino & Neopixel Kola Şişesi Gökkuşağı Parti Işığı: 7 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Bu yüzden oğlum Doon, eski kola şişelerinden ve Glow Sticks'in yapışkan iç parçalarından yapılmış çok havalı bir parti ışığı görüyor ve yaklaşan Okul Sınavları Bitti Üfleme PartAYYY için bir tane yapıp yapamayacağımızı soruyor! Elbette diyorum ama hakkında okuduğumuz o gösterişli Adafruit Neopiksel Halkalarından bazılarını almayı tercih etmez miydin… Bana boş bir bakış attı. Çünkü gerçek şu ki, neden bahsettiğimi bilmiyor, ama babam okuduğu Neopixel halkalarıyla oynama fırsatı buldu ve hepimiz biliyoruz ki inek babaların doğurduğu en önemli 10 nedenden biri bir Herkesin çocukları için olduğunu söyledikleri havalı aletlerle oynamak için bahane.
Bu gerçekten harika görünen süper basit bir proje. Kendimizi 3 eski kola şişesi, ahşap bir plaka ve bir oyun alanı direk braketi - bodrumda yatan şeyler - bir Arduino (bizim durumumuzda Leonardo, ancak herhangi bir Genuino panosu yapacak!) ve üç Neopiksel halka ile birleştirdik.. 9 LED'li bir halka sipariş ettim, ancak aynı fiyata 12 LED'li bir halka aldım. Bu hoştu, ancak kuyu deliklerinde bir değişiklik anlamına geliyordu - 12 LED halkalar 23 mm'nin aksine 35 mm genişliğindedir. Neye ihtiyacınız olacak:
- Genuino/Arduino kartı (Leonardo kullandık, ancak hemen hemen her tahta yapacak)
- 3 Neopiksel halka (her biri 12 LED): Onları Adafruit'ten alın ve bu güzel insanları destekleyin
- 1000 µf 6.3v veya daha iyi kapasitör
- 300-500 ohm direnç
- Tahta bir plaka veya bir kare hurda odun veya neopikselleri yerleştirebileceğiniz ve kola şişelerini üstüne oturtabileceğiniz herhangi bir şey
- Plaka için bir tür montaj - bir oyun alanı direk braketi bizim için harika çalıştı
- 9v duvar siğil
- 40 mm delik açıcı
- Cıvatalar, Somunlar, Pullar, Ara Parçalar
- Katı çekirdek tel
- Bir havya ve lehim
- ekmek tahtası
- Arduino için plastik bir kasa. Dışarı çıkıp, kırılgan bir ortamda topraktan çıkarılan ve gezegenin diğer tarafında üretilen ve bir konteynır içinde size en yakın bir depoya gönderilen milyon yıllık petrolden yapılmış gerçekten güzel mükemmel oturan plastik kasayı satın alabilirsiniz. limanlar mükemmel bir hizada kesilir ve atmosfere karbondioksit yayan bir minibüs tarafından kapınıza teslim edilir. Ya da benim yaptığımı yapıp eski, atılmış bir plastik kutu kullanabilirsiniz.. bu durumda ecza dolabında duran bir Madagaskar yara bandı kutusu… ve içine birkaç delik açın. Ders burada bitiyor. Hadi yapalım…
Adım 1: Tabanı Yapın
Kendi bodrumunuzda sahip olduğunuz her türlü çöpten üssünüzü doğaçlama yapabilir veya hatta tahta bir kutu veya elektroniklerinizi saklayacak herhangi bir şey kullanabilirsiniz.
İlk önce, ahşap plaka üzerine eşit aralıklarla yerleştirilmiş, Neopixel halkalarının oturması için yeterince büyük üç delik açtık. Resimde delikler, bir kürek matkabı ile açılmış kuyulardır. Sonunda, 12 LED halkaların daha büyük boyutu nedeniyle, matkap ucuyla delikler açmak zorunda kaldık. Bu, plakanın sonuna kadar gitmek anlamına geliyordu ve halkaları düzgün bir kablo geçişi için merkez deliği olan ince hazırlanmış 2 mm derinliğindeki kuyularına güzelce sokmak yerine, halkaları… ahem… plakanın. Yargılama. Zaten tasarımımda plakanın altını göremezsiniz. Ve açıkken karanlık. Ve ayrıca -- koli bandının nesi var?
Plakanın altındaki bir devre tahtası ve bir bileşen - kapasitör ve devre tahtasından desteğin içine yerleştirmeyi planladığım Arduino'ya gitmesi gereken kablolar için plaka ile braket arasında boşluğa ihtiyacım vardı. Bu yüzden, yeterli boşluk sağlamak için cıvata millerine bir dizi geçici ara parçası koydum - yaklaşık 3 cm, devre tahtasının yüksekliği ve kabloları ezmemeniz için biraz. Köşe başına iki ahşap ankraj cıvatası kullandım çünkü bunlar doğru yükseklikteydi ve adam çekmecesinde yatıyordu… o kutu gevşek vidalar, cıvatalar, çiviler, paslı zincir bağlantıları, hortum bağlantıları, eski paralar, beklenmedik şekilde keskin nesneler ve her türlü şey. Tam olarak ihtiyacınız olan şey olmasa da, gayet iyi iş görecek bir şey sunarak sizi hırdavatçıya gitme zahmetinden sihirli bir şekilde kurtarabilecek küçük parçalar.
Bodrumda bulduğum oyun alanı direğiyle ilgili mutlu bir kaza, plakanın zaten içinden geçen delikler olmasıydı. Demir delmeye gerek yok! Tabanda dört cıvata deliği vardı ve buna uygun olarak ahşap plakaya dört gömme delik açtık.
Daha sonra her şeyi Gothic Black spreyle boyadık.
Adım 2: Neopiksel Halkalarını Hazırlama
Neopiksel halkalarınıza kablo lehimlemeniz gerekecek: hepsi için bir Veri Girişi kablosu, ikisi için bir Veri Çıkışı kablosu ve her biri için güç ve toprak. İhtiyacınız olduğunu düşündüğünüz uzunluk ne olursa olsun, biraz ekleyin. Fazla teli her zaman kesebilirsin, çok kısa olanı uzatamazsın. Adafruit'in uyarısına da dikkat edin:
Telleri bu halkalara lehimlerken, lehim lekeleri ve kısa devreler konusunda ekstra dikkatli olmanız gerekir. Bileşenler arasındaki boşluk çok dar! Kabloyu önden ve lehimi arkadan yerleştirmek genellikle en kolayıdır.
Keşke bunu cepheye lehimlemeden önce okusaydım. LED'lerimden hiçbirini yakmamayı başardım, ancak bir tanesini açana kadar beni terletecek şekilde kenarını yaktım. Ayrıca, ince kılavuzu okumuş olsaydım, LED'e bir timsah klipsi koymama uyarısını da okurdum. Yakınımdaki batıklar senin deniz fenerin olsun.
Neopiksel halkalar papatya zinciri, bu, bir halkanın ÇIKIŞINDAn diğerinin GİRİŞİNE bir kablo bağlayarak tüm LED'lerini aynı anda bir Arduino'dan kontrol edebileceğiniz anlamına gelir. Her halkanın da güç ve topraklama kablolarına ihtiyacı vardır.
Adım 3: Kablolama
Yukarıdaki Fritzing'de olduğu gibi bağlayın - Arduino'nun pim 6'sı verileri ilk halkaya alır, bu halkadan gelen Veri çıkışı, bir sonrakinin Veri girişine gider, bunun Veri çıkışı, Son halkanın veri girişi. Son halkanın veri çıkış kablosuna ihtiyacınız yok.
1000 µf kapasite, breadboard'un pozitif ve negatif rayları arasında gider. Bu kapak, halkaları güç artışlarından korur ve Adafruit NeoPixel Uberguide'ın en iyi uygulama bölümü tarafından önerilir. İlk neopikseldeki Veri üzerindeki direnç Adafruit tarafından da tavsiye edilmektedir -- Fritzing'de 1K'dır ancak önerilen direnç 300-500 ohm'dur.
Yapımda, Neopiksellerden gelen kabloları plakanın arkasından merkeze sabitlenmiş bir devre tahtasına geçirdim. Bu şekilde, ana birime yalnızca üç uzun kablo bağlamanız gerekir: güç, toprak ve veri. Bu kabloları süper uzun yaptım -- tabanda bol miktarda saklama alanı var ve bu, yeniden programlama için kartın dışarı çekilebilmesini kolaylaştırıyor.
Adım 4: Kod
"loading="lazy", oğlumun bunun müziğe duyarlı bir versiyonunu istediğinden bahsetti. Alışması 18. doğum gününe kadar sürdü, ama işte burada!
Ek ekipman parçaları:
1 Tek kutuplu, Çift Yönlü Anahtar1 Otomatik Kazanç Kontrol Mikrofonu (AdaFruit'in MAX9184'ünü kullandım) 1 1uF-100uF kapasitör (Herhangi bir değerde)
Bunun düzgün çalışması için mikrofonun gerçekten Otomatik Kazanç Kontrolüne sahip olması gerekir. AGC sürekli olarak ortam gürültüsünü örnekleyecek ve arka plan olarak kabul ettiği eşiği yükseltip alçaltacaktır, böylece ışığınız bu arka plana karşı ani yükselmelere tepki verecektir. AdaFruit'in mikrofonu harika: Tek bir sesin onu tetikleyeceği sessiz bir odadan, gençlerle dolu ve müziğin çaldığı bir oda dolusu parti moduna geçebilir ve müziğin ritmini anında yakalayabilirsiniz. iyi. Alternatif, Ayarlanabilir Kazanç Mikrofonu, kart üzerinde inanılmaz derecede hassas ve zahmetli olan küçük bir potansiyometreye sahiptir. Üniteyi işe yaramaz hale getirmek için ortam sesinde çok fazla değişiklik gerekmez: ışıklar sürekli yanar veya sürekli karanlık. AGC sihir gibi çalışır.
Girdap testi desenini veya müziği kullanma seçeneğini istedim, bu yüzden bir anahtarın orta ucunu VIN'e ve bir ucu pim 4'e, diğerini de Leonardo'nun pim 8'ine bağladım. Bu pinleri YÜKSEK veya DÜŞÜK için test ederek, anahtarın hangi durumda olduğunu ve buna göre şube kodunu öğrenebiliriz.
7. Adım: Mikrofonu Kablolama
Mic girişini bu 1-100µF kapasitör aracılığıyla Analog Pin 0'a besleyin. Kondansatörünüz polarize ise, çıkış pimi pozitif tarafa (Yeşil kablo) gider.
Aşağıda uyarladığım Biblo-Renk-by-Sound rutini için CodeGirlJP'ye teşekkürler:
// Arduino ve NeoPixels ile ses aktif LED'ler
#Dahil etmek
#define MIC_PIN A0 // Leonardo'daki a0 pinine mikrofon takılı
#define LED_PIN 6 // Leonardo'daki pim 6'ya bağlı NeoPixel LED dizisi #define N_PIXELS 36 // LED dizisindeki piksel sayısı !!!!!! Kurulumunuzdaki piksel sayısına ayarlayın. Bu, 3 Neopiksel halka için doğrudur !!!!!! #define N 100 // Her okumada alınacak örnek sayısı Örneklere #define fadeDelay 5 // her sönümleme miktarı için gecikme süresi #define noiseLevel 30 // sessiz ortalama mikrofon gürültüsünün eğim seviyesi
//NeoPixel şeridini yukarıda tanımlanan değerlerle başlatın:
Adafruit_NeoPixel şeridi = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);
int örnekler[N]; // bir örnek toplama seti için depolama
int periodFaktörü = 0; // periyot hesaplaması için ms sayısını takip et int t1 = -1; // eğim sayısı > 100 algılandı. int T; // milisaniye olarak ölçeklenen zamanlar arasındaki süre int eğim; // toplanan iki veri örnek noktasının eğimi bayt periodChanged = 0; const int SwitchPinMusic = 4; // Anahtar konumu için pin müzik duyarlılığı const int SwitchPinSwirl = 8; // Anahtar konumu için pin Test Modeli (girdap) int MusicbuttonState = 0; // Müzik duyarlılığı için açık kapalı mantık değişkeni
// Arduino kurulum Yöntemi
geçersiz kurulum() {
strip.begin();
ledlerKapalı(); gecikme(500); displayColor(Tekerlek(100)); şerit.göster(); gecikme(500); tekTekerlek(Tekerlek(100)); şerit.göster(); gecikme(500); pinMode(SwitchPinMusic, INPUT); pinMode(SwitchPinSwirl, INPUT); //attachInterrupt(4, Switched, FALLING);
}
// Arduino döngü Yöntemi
void loop() { SwirlbuttonState = digitalRead(SwitchPinSwirl); //Eğer anahtar Müzik duyarlılığına ayarlanmışsa YÜKSEK MusicbuttonState = digitalRead(SwitchPinMusic); //Eğer anahtar Test deseni olarak ayarlanmışsa YÜKSEK while (SwirlbuttonState == LOW) { readSamples(); //Müzik örnekleme rutinini çalıştırın SwirlbuttonState = digitalRead(SwitchPinSwirl); //Anahtarın değiştirilip değiştirilmediğini kontrol edin } SwirlbuttonState = digitalRead(SwitchPinSwirl); MusicbuttonState = digitalRead(SwitchPinMusic); while (SwirlbuttonState == YÜKSEK) { Dance(); // Girdaplı test deseni rutinini çalıştırın SwirlbuttonState = digitalRead(SwitchPinSwirl); // Anahtarın değiştirilip değiştirilmediğini kontrol edin
}
}
geçersiz Dans() {
while (SwirlbuttonState == YÜKSEK) { colorWipe(strip. Color(255, 0, 0), 50); // Red SwirlbuttonState = digitalRead(SwitchPinSwirl); colorWipe(şerit. Color(0, 255, 0), 50); // Yeşil SwirlbuttonState = digitalRead(SwitchPinSwirl); colorWipe(şerit. Renk(0, 0, 255), 50); // Blue SwirlbuttonState = digitalRead(SwitchPinSwirl); //colorWipe(şerit. Color(0, 0, 0, 255), 50); // Beyaz RGBW // Şuraya bir sinema piksel takibi gönder… SwirlbuttonState = digitalRead(SwitchPinSwirl); tiyatroChase(şerit. Renk(127, 127, 127), 50); // Beyaz SwirlbuttonState = digitalRead(SwitchPinSwirl); tiyatroChase(şerit. Renk(127, 0, 0), 50); // Red SwirlbuttonState = digitalRead(SwitchPinSwirl); tiyatroChase(şerit. Color(0, 0, 127), 50); // Blue SwirlbuttonState = digitalRead(SwitchPinSwirl); gökkuşağı(20); SwirlbuttonState = digitalRead(SwitchPinSwirl); gökkuşağı Döngüsü(20); SwirlbuttonState = digitalRead(SwitchPinSwirl); tiyatroChaseRainbow(50); SwirlbuttonState = digitalRead(SwitchPinSwirl); } } // Mikrofondan Örnek Verileri Okuyun ve İşleyin void readSamples() { for(int i=0; i0) { eğim = örnekler - örnekler[i-1]; } başka { eğim = örnekler - örnekler[N-1]; } // Slope'nin noiseLevel'den büyük olup olmadığını kontrol edin - gürültü seviyesinde olmayan ses tespit edildi if(abs(slope) > noiseLevel) { if(slope < 0) { hesapPeriod(i); if(periodChanged == 1) { displayColor(getColor(T)); } } } başka { ledsOff(); // theatreChaseRainbow(50); } periodFaktörü += 1; gecikme(1); } }
geçersiz hesaplamaPeriod(int i)
{ if(t1 == -1) { // t1 ayarlanmadı t1 = i; } else { // t1 hesap periyodu int period = periodFactor*(i - t1); periodChanged = T==dönem ? 0: 1; T = dönem; //Seri.println(T); // t1'i yeni i değerine sıfırla t1 = i; periodFaktörü = 0; } }
uint32_t getColor(int nokta)
{ if(periyot == -1) return Wheel(0); else if(dönem > 400) return Wheel(5); else return Wheel(harita(-1*period, -400, -1, 50, 255); }
geçersiz fadeOut()
{ for(int i=0; i<5; i++) { strip.setBrightness(110 - i*20); şerit.göster(); // Şerit gecikmesini güncelle(fadeDelay); periodFactor +=fadeDelay; } }
geçersiz fadeIn()
{ strip.setBrightness(100); şerit.göster(); // Stripi güncelle // rengi soldur for(int i=0; i<5; i++) { //strip.setBrightness(20*i + 30); //şerit.göster(); // Şerit gecikmesini güncelle(fadeDelay); periodFactor+=fadeDelay; } }
geçersiz led'lerKapalı()
{ fadeOut(); for(int i=0; ben
geçersiz displayColor(uint32_t color)
{ for(int i=0; ben
geçersiz garipTekerlek(uint32_t rengi)
{ for (int j=0; j < 256; j++) { // çarktaki 256 rengin hepsini çevir for (int q=0; q < 3; q++) { for (uint16_t i=24; i < 36; i =i+3) { strip.setPixelColor(i+q, Wheel((i+j) % 255)); //her üçüncü pikseli } strip.show();
gecikme(1);
for (uint16_t i=24; i < 36; i=i+3) { strip.setPixelColor(i+q, 0); // her üçüncü pikseli kapat } } } fadeIn(); }
// Noktaları arka arkaya bir renkle doldurun
void colorWipe(uint32_t c, uint8_t bekle) { for(uint16_t i=0; i
void gökkuşağı(uint8_t bekleyin) {
uint16_t ben, j;
for(j=0; j<256; j++) { for(i=0; i
// Biraz farklı, bu gökkuşağının her yere eşit dağılmasını sağlar
void RainbowCycle(uint8_t bekle) { uint16_t i, j;
for(j=0; j<256*5; j++) { // çarktaki tüm renklerin 5 döngüsü for(i=0; i< strip.numPixels(); i++) { strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255); } şerit.göster(); gecikme(bekle); } }
//Tiyatro tarzı gezici ışıklar.
void TheaterChase(uint32_t c, uint8_t wait) { for (int j=0; j<10; j++) { //10 döngü takip for (int q=0; q < 3; q++) { for (uint16_t i=) 0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, c); //her üç pikselden birini çevir } strip.show();
gecikme(bekle);
for (uint16_t i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); // her üçüncü pikseli kapat } } } }
//Gökkuşağı efektli tiyatro tarzı sürünen ışıklar
void TheaterChaseRainbow(uint8_t wait) { for (int j=0; j < 256; j++) { // çarktaki 256 rengin hepsini döndürün for (int q=0; q < 3; q++) { for (uint16_t i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, Wheel((i+j) % 255); //her üçüncü pikseli } strip.show();
gecikme(bekle);
for (uint16_t i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); // her üçüncü pikseli kapat } } } }
// Bir renk değeri elde etmek için 0 ile 255 arasında bir değer girin.
// Renkler r - g - b - r'ye bir geçiştir. uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { dönüş şeridi. Color(255 - WheelPos * 3, 0, WheelPos * 3); } if(WheelPos < 170) { WheelPos -= 85; dönüş şeridi. Renk(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; dönüş şeridi. Renk(WheelPos * 3, 255 - WheelPos * 3, 0); }
geçersiz Anahtarlı(){
şerit.göster(); örnek okuma(); }
Yorumlarda katledilmeden önce (İyi Ol politikasını hatırlayın!!) Bunu yükledikten sonra bazı kodlarımın ne kadar özensiz olduğunu fark ettim. Hem Pin 4'ü hem de Pin 8'i HIGH için sürekli olarak test etmeye gerek yoktur. Anahtar Tek kutuplu çift atış olduğundan birinin değeri diğerinden çıkarılabilir: sadece birini test etmeniz yeterlidir. Böylece, MusicButtonState'i okumak ve yazmak için yapılan her referansı gözden geçirebilir ve kaldırabilir ve hafızanız düşükse veya diğer rutinlerle genişletme yapıyorsanız SwirlButtonState'i test ederek her şeyi daha verimli bir şekilde çalıştırabilirsiniz. Ama yukarıdaki kod çalışıyor.
Ve herhangi biri bu ses rutinlerini sadece gürültü seviyelerini değil aynı zamanda frekansı da algılamak ve ses spektrumu boyunca hareketlere yanıt olarak ışık spektrumunu yukarı ve aşağı kaydırmak için düzgün bir kod yazmak için değiştirmek isterse, yorumlara bir bağlantı bırakın. bunu nasıl yaptın.
Eğlence!
Önerilen:
M5stick-C ile Neopixel Ws2812 Gökkuşağı LED Glow - Rainbow'u Arduino IDE Kullanarak M5stack M5stick C Kullanarak Neopixel Ws2812 Üzerinde Çalıştırmak: 5 Adım
M5stick-C ile Neopixel Ws2812 Gökkuşağı LED Glow | Rainbow'u Neopixel Ws2812'de M5stack M5stick C Kullanarak Arduino IDE Kullanarak Çalıştırmak: Merhaba arkadaşlar bu talimatta Arduino IDE ile neopixel ws2812 LED'lerini veya led şerit veya led matrisi veya led halkayı m5stack ile m5stick-C geliştirme kartını nasıl kullanacağımızı öğreneceğiz ve bunu yapacağız. onunla bir gökkuşağı deseni
Tam Gökkuşağı Efekti ve Daha Fazlası Olan Gökkuşağı Kelime Saati: 13 Adım (Resimlerle)
Tam Gökkuşağı Efektli Gökkuşağı Kelime Saati ve Daha Fazlası: Hedefler1) Basit2) Pahalı değil3) Mümkün olduğunca enerji verimli Gökkuşağı efektine sahip Gökkuşağı Kelime Saati. Kelime Saatinde Bir Gülümseme. Basit IR uzaktan kumanda için Güncelleme 03-nov-18 LDR NeopixelsUpdate 01-jan-…'in Parlaklık Kontrolü
Keçe & Neopixel Gökkuşağı Taç: 8 Adım (Resimlerle)
Keçe ve Neopiksel Gökkuşağı Taç: Bu hafta sonu, 3 yaşındaki kuzenim için ışıklı, neopiksel özellikli bir taç yaptım. Her zaman benim ışıklı düzeneklerimden oldukça etkilenmiş görünüyor, bu yüzden kendisinin bir tane olmasının zamanının geldiğini düşündüm. Oldukça havalı görünüyor ve ona telkin etmek istiyorum
Kola Şişesi Dekoratif Işık: 4 Adım
Kola Şişesi Dekoratif Işık: Bu benim ilk Eğitilebilir Kitabım olduğu için basit ama yine de ilginç bir şey yaratmak istedim. Bu "Holiday 2008" kola şişelerine rastladım ve projem doğdu. Bu proje ayrıca geri dönüştürülmüş parçalar kullanıyor. Bu paylaşmak için güzel bir proje olur
Kola Şişesi Dikey Dağlama Tankı: 12 Adım
Kola Şişesi Dikey Dağlama Tankı: Dikey dağlamanın sizin için olup olmadığından emin değil misiniz? Denemek! Yaklaşık 10 dakikada küçük ölçekli, bira bardağı büyüklüğünde, sızdırmaz bir asit tankı yapın, zaten elinizde olan 2 şey: bir DVD kutusu ve 2L şişe