İçindekiler:
- Adım 1: Şemalar ve Donanım
- Adım 2: PCB Barındıran LED'leri Yapmak
- Adım 3: Kutuyu Yapmak
- Adım 4: Kravatın Hazırlanması
- Adım 5: Fiberoptiği Yapıştırma
- Adım 6: Fiberoptiği Kravattan Geçirmek
- Adım 7: Fiberoptiği Kravat'a Yapıştırma
- Adım 8: Kod
- Adım 9: Nihai Ürün
Video: Starry Sky Led Kravat: 9 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bir süre önce bir dolar mağazasında fiberoptikli bir çocuk oyuncağı buldum ve onunla ne yapabilirim diye düşünmeye başladım.
Aklıma gelen çılgın fikirlerden biri de yıldızlı gökyüzünün etkisiyle kravat yapmaktı.
Hala muhtemelen bu projeye uyacak bazı arduino pro mini'lerim, adafruit panolarım ve pillerim vardı.
Kasabamdaki bir rehinci dükkanında güzel ve geniş bir kravat bulduğumda ve donanıma uygun bir kutu bulduğumda, gidip onu yapmaya karar verdim.
Bu talimat size nasıl yaptığımı gösteriyor.
Bir arduino pro mini, adafruit powerboost 500 şarj cihazı, emmerich icr 18650nh-sp ve 5 beyaz LED ile çalışır. Kod, LED'in parlaklığını rastgele değiştirir. (Videonun ilk 40 saniyesi 3x hızdır)
Adım 1: Şemalar ve Donanım
Aşağıdaki donanımı kullanıyorum:
- Buz beyazı LED'li ve 220 Ohm dirençli PCB.
- Arduino pro mini (bir taklit kullandım)
- Adafruit Powerboost 500 şarj cihazı
- Emmerich Li-ion akü ICR-18650NH-SP
- Optik fiberler (farklı boyutlarda)
Adım 2: PCB Barındıran LED'leri Yapmak
LED'leri tutmak için bir PCB'den bir şerit kestim ve ana PCB'ye lehimlemek için LED pinlerini kullandım.
Tüm katotları (-) GND'ye bağladı ve pinlerin yarısını ana PCB'ye yapışmış lehimlemek için kullandı.
Tüm anotları (+) dirençlere ve kablolarla arduinoya bağlayın.
LED'lerin her biri aşağıdaki PWM bağlantı noktalarından birine bağlanmalıdır: 3, 5, 6, 9, 10, 11
Aptal ben bu projede çok hata yaptım ve doğru PWM portlarını kontrol etmeyi unuttum, bu yüzden birkaç sonra yeniden lehimlemem gerekti. Yüksek/Düşük ile test edildi, bu yüzden bunu ancak daha sonra fark ettim.
7 LED ile başladım, ancak yalnızca 6 PWM bağlantı noktası vardı ve yeniden lehimlediğim LED'lerden biri öldü. Sadece 5 çalışan LED'i tuttum ve 6.'yı kullanmıyorum.
Adım 3: Kutuyu Yapmak
Pilin, düğmenin, mikro-usb bağlantı noktasının, Arduino'dan gelen başlıkların ve optik fiberlerin şeklini kesmek için bir Bosch GRO (Dremel gibi) ve bir matkap kullandım. (toz maskesi kullanın!)
Pili 2 bant ile kasaya yapıştırın.
Adafruit kartını ve PCB'yi monte etmek için kullanılan vidalar.
Açma ve kapamadan kaynaklanan sürtünme bazı tellere zarar verdi. Onları yeniden lehimlemem ve tekrar olmasını önlemek için yapıştırıcı kullanmam gerekiyordu.
Adım 4: Kravatın Hazırlanması
Lastik tabakaya uyması için bağın alt kısmındaki dikiş kaldırıldı.
Donanımı gizlemek ve gerektiğinde hala erişebilmek için bir fermuar kullanmaya karar verdim.
Dikiş makinesiyle aram iyi değil, bu yüzden tatlı annem kravatın arkasına bir fermuar koydu.
Bu yapıldıktan sonra, lastik tabakayı bağa yapıştırdım. Kumaşı doyuracak ve önden görülebilecek çok fazla yapıştırıcı kullanmaktan korktum, bu yüzden düzleştirmeye ve çok fazla kullanmamaya çalıştım. Genel olarak iyi görünüyor, ancak birkaç yerde çok fazla veya çok az yapıştırıcı fark ettim, çünkü kumaştan geçti veya kumaşa çok iyi yapışmadı. Neyse ki bu sadece parlak ışıkta yakın mesafeden zar zor görülebilir.
Kutu ve kravat şimdi yapılır. Fiberoptiği yapıştırma zamanı!
Adım 5: Fiberoptiği Yapıştırma
Oyuncakta, kolayca parçalanabilen büyük bir fiber optik kablo demeti vardı. İlk başta bunları tek tek yapıştırmaya çalıştım, ancak kısa süre sonra küçük demetler yapıp bunları bir kerede LED'e yapıştırmanın daha iyi olacağını fark ettim. Bu, yapıştırıcı kuruyana kadar sabit kalmasını kolaylaştıracaktır. Bunu çözen ilk LED'i karıştırdı.
Şeffaf bir yapıştırıcı kullandığınızdan emin olun! Kullandığım çok yavaş kurudu ve ilk LED'de denediğim hızlı kuruyan yapıştırıcı beyaza döndü ve ilk LED'den bazı liflerin daha az parlak olmasına neden oldu.
Üstüne ışık sızmasını önlemek ve LED'leri ayırmak için küçük siyah lastik levhalar yapıştırdım.
Sayfalardan biri kasanın kapanmasını engelledi, bu yüzden kapağı kapalı tutmak için bir lastik bant ekledim.
Adım 6: Fiberoptiği Kravattan Geçirmek
Alttan başlayarak iğne ile delikler açtım ve lifleri tek tek geçirdim. Her LED'in lifleri, bağ boyunca rastgele yayılır.
Kutunun ağırlığını korumak için bağın daha küçük kısmına kadar gitmesi gereken siyah bir şeridi arkaya yapıştırdım, ancak tüm telleri geçirip tellerin gerginliğini hissettikten sonra yapıştırmaya karar verdim. kravat için her şey daha iyi bir fikirdi ve şeridi kesti.
Oyuncaktan gelen fiber optik teller çok kısa olduğu için onları bağın her yerine takmak zordu. Kutuyu konumlandırma konusunda sınırlıydım ve her şeyi istediğim gibi düz hale getirmekte zorlandım.
Adım 7: Fiberoptiği Kravat'a Yapıştırma
Tüm fiber optik kabloları kauçuk levhadan tellerin dışarı çıkmasını önlemek ve bağı düz hale getirmek için yapıştırdım.
Üzerine bastırırken kelepçeyi kravata yapıştırmadığımdan emin olmak için aralarına biraz kağıt koydum. O kadar harika görünmüyor ama iyi çalışıyor. Ve kapalıyken görmüyorsunuz.
Yapıştırıcı kuruduktan sonra ön taraftaki telleri kestim ve en yüksek telin hemen üzerindeki lastik tabakayı biraz kestim, çünkü bağ biraz fazla uzundu.
Beyaz gömlekli fotoğraflar, son lastik parçasını kesmeden önce çekildi.
Adım 8: Kod
Kravat için yazdığım kodun altında.
Tüm LED'lerin belirli bir "ortalama" değeri vardır (aslında ortalama değil, orta parlaklık).
Bu ortalamaya ulaşır ulaşmaz 3/4 şansla daha düşük bir parlaklığa gitmeye karar verecek. Ayrıca rastgele olarak yeni bir minimum parlaklık, maksimum parlaklık, minimum ve maksimum parlaklık için bekleme süresi ve her turda artırdığı veya azalttığı hızı (1-255) önceden ayarlanmış 5 değerden ayarlar. Sonra tekrar ortalamaya ulaşana kadar bir döngü yapacak. Aynı anda sadece 2 LED yüksek döngüde olabilir.
Her durum, ortalama düşük, düşük ortalama, düşük bekleme, güncelleme vb. olup olmadığını belirleyen bir tamsayı değeri (1-7) ile temsil edilir.
Arduino'ya kod yükleme hakkında bilgi için lütfen www.arduino.cc'ye bakın.
/* Starry Sky Tie * * Fiberoptik ile kullanıldığında yıldızlı bir gökyüzü gibi görünmek için rastgele daha düşük, daha yüksek ve zamanlama ayarları * ile 5 LED'i ortalamadan daha düşük * veya daha yüksek bir parlaklığa rastgele solduran bir komut dosyasıdır. * Bu durumda bunlar berabere uygulanacaktır. * * Yukarı/aşağı şansı = 1/4 yukarı, 3/4 aşağı, maksimum 2 * aynı anda maksimuma çıkıyor. * * Ortalama aynı kalır. * Minimum, maksimum ve zamanlama seçenekleri, bir LED tekrar ortalamaya ulaştığında 5 seçenek arasından rastgele * değişir. * * Mayıs 2019'da Billy Jaspers tarafından düzenlendi. *
/ Pinleri bildir
int LED01 = 3; int LED02 = 5; int LED03 = 6; int LED04 = 9; int LED05 = 11;
// Zaman değişkenleri
imzasız uzun currentTime; imzasız uzun bekleme süresi[5]; imzasız uzun lastRound;
// LED Değişkenler
int parlakMin [5] = { 10, 10, 10, 10, 10 }; // Minimum parlaklık int brightAvg [5] = { 200, 200, 200, 200, 200 }; // Ortalama parlaklık int parlakMax[5] = { 240, 240, 240, 240, 240 }; // Maksimum parlaklık int timeWaitLow[5] = { 1000, 1000, 1000, 1000, 1000 }; // Bekleme süresi int timeWaitAvg[5] = { 5000, 5000, 5000, 5000, 5000 }; // Bekleme süresi int timeWaitMax[5] = { 4000, 3000, 3000, 3000, 3000 }; // Bekleme süresi int artış[5] = { 2, 5, 4, 5, 2 }; // Parlaklıkta artış int akımParlak[5]= { 200, 230, 210, 210, 235 }; // Mevcut parlaklık
// LED Değişken Olanakları
int parlakMinPos[5] = { 5, 20, 40, 5, 20 }; // Minimum parlaklık olasılıkları int brightMaxPos[5] = { 240, 245, 230, 225, 245 }; // Maksimum parlaklık olasılıkları int timeLowPos[5] = { 3000, 5000, 4000, 2000, 1000 }; // Düşük parlaklık olasılıklarında bekleme süresi int timeHighPos[5] = { 3000, 1000, 500, 2000, 4000 }; // Yüksek parlaklık olasılıklarında bekleme süresi int timeAvgPos[5] = { 3000, 5000, 4000, 7000, 8000 }; // Ortalama parlaklık olasılıklarında bekleme süresi int incrementPos[5] = { 2, 4, 5, 3, 1 }; // parlaklık olasılıklarında artış
// Değişkenler
bool başlangıç = doğru; // Başlangıç ayarlarının başlatılması gerekiyor mu?
// Yön değişkenleri
/* 0 = Ortalamada Bekliyor 1 = Ort. Düşük'e gidiyor 2 = Düşük bekliyor 3 = Düşük'ten Ort'a gidiyor 4 = Ort. Maks'a gidiyor 5 = Maks'ta bekliyor 6 = Yüksekten Avg'a gidiyor 7 = Değişkenler güncelleniyor*/ int statusLED[5] = { 0, 0, 0, 0, 0 }; int miktarYüksekLED = 0; int yenilemeHızı = 50; bool statusWaiting[5] = { false, false, false, false, false}; // Led bekliyor mu?
// Rastgele değişkenler
uzun rastgeleSayı; // Rastgele sayıyı saklamak için uzun uzun randomNumberTwo; // İkinci rastgele sayıyı saklamak için uzun
// sayaçlar
int ben = 0; // Ana döngü için sayaç
geçersiz kurulum() {
Serial.başlangıç (115200); // Seri randomSeed'i başlat(analogRead(A0)); // Randomseed'i ayarla
// Çıktıları bildir
pinMode (LED01, ÇIKIŞ); pinMode (LED02, ÇIKIŞ); pinMode (LED03, ÇIKIŞ); pinMode (LED04, ÇIKIŞ); pinMode (LED05, ÇIKIŞ); }
// LED'lere veri yaz
void writeToLED(){ analogWrite(LED01, currentBright[0]); analogWrite(LED02, currentBright[1]); analogWrite(LED03, currentBright[2]); analogWrite(LED04, currentBright[3]); analogWrite(LED05, currentBright[4]); }
// Ana döngü
void loop() { if (başlangıç){ // Başlangıç ayarları lastRound = millis(); // önyükleme writeToLED() için lastRound'u ayarlayın; // Başlangıç verilerini LED başlangıcına yaz = false; // Başlatmayı kapat } currentTime = millis(); // Geçerli saati ayarla
if (currentTime - lastRound >= refreshRate){
for (i=0;i<5;i++){ if (statusLED == 7){ // -7- Güncelleme Led randomNumber = random(5); parlakMin = parlakMinPos[rastgeleSayı]; // Minimum parlaklık için rastgele değer ayarla randomNumber = random(5); parlakMax = parlakMaxPos[rastgeleSayı]; // Maksimum parlaklık için rastgele değer ayarla randomNumber = random(5); timeWaitLow = timeLowPos[rastgeleSayı]; // Düşük bekleme süresi için rastgele değer ayarla randomNumber = random(5); timeWaitMax = timeHighPos[rastgeleSayı]; // Yüksek bekleme süresi için rastgele değer ayarla randomNumber = random(5); timeWaitAvg = timeAvgPos[rastgeleSayı]; // Ortalama bekleme süresi için rastgele değer ayarla randomNumber = random(5); artış = artışPos[rastgeleSayı]; // Artış değeri için rastgele değer ayarla randomNumber = random(2); // Yön için rastgele değer ayarla randomNumberTwo = random(2); // Yön için rastgele değer ayarla if (randomNumber == 1 && randomNumberTwo == 0 && miktarYüksekLED = parlakAvg){ statusLED = 0; // En düşük noktadaysa: Bekleyen Ort }else{ currentBright = currentBright+increment'ye gidin; // Else: Daha Yüksek Parlaklık } }else if (statusLED == 2){ // -2- Waiting Low if (!statusWaiting){ // Beklemiyorsa: waitTime = millis(); // Bekleme süresini ayarla statusWaiting = true; // Beklemeye başla }else if(statusWaiting && currentTime-waitingTime >= timeWaitLow){ // Eğer bekliyor VE timeWaitAvg geçtiyse: statusWaiting = false; // Beklemeyi durdur durumLED = 3; // statusLed'i Güncelleme bekleniyor olarak ayarlayın } }else if (statusLED == 1){ // -1- Ort. Düşük'e Gidiyor if (currentBright <= brightMin){ statusLED = 2; // En düşük noktadaysa: Düşük Bekliyor'a gidin }else{ currentBright = currentBright-artış; // Else: Düşük Parlaklık } }else if (statusLED == 6){ // -6- Maks'tan Avg'a Gitmek if (currentBright = timeWaitMax){ // Eğer bekliyor VE timeWaitAvg geçtiyse: statusWaiting = false; // Beklemeyi durdur statusLED = 6; // statusLed'i Güncelleme bekleniyor olarak ayarlayın } }else if (statusLED == 4){ // -4- Ort.'a Gitmek if (currentBright >= brightMax){ statusLED = 5; // En düşük noktadaysa: Yüksek Bekleyen'e gidin }else{ currentBright = currentBright+increment; // Else: Daha Yüksek Parlaklık } }else if (statusLED == 0){ // -0- Ortalamada Bekliyor if (!statusWaiting){ // Beklemiyorsa: waitTime = millis(); // Bekleme süresini ayarla statusWaiting = true; // Beklemeye başla }else if(statusWaiting && currentTime-waitingTime >= timeWaitAvg){ // Eğer bekliyor VE timeWaitAvg geçtiyse: statusWaiting = false; // Beklemeyi durdur statusLED = 7; // statusLed'i Güncelleme bekleniyor olarak ayarlayın } } } i=0; lastRound = millis(); // Son turun ne zaman biteceğini ayarlayın. writeToLED(); // Tüm verileri LED'lere yazın } }
Adım 9: Nihai Ürün
Bence iyi sonuç verdi. Kravat çok kalın, sert, uzun veya ağır değil ve yıldız efekti harika görünüyor.
Önerilen:
Çalışan Piyano Kravat: 6 Adım
Çalışan Piyano Kravat: 1980'ler moda ve müzikte birçok büyük başarıyı beraberinde getirdi. Synth müzik, korkak keytar, tozluk ve klasik erkek Piyano Kravat vardı. Bu kravatlar pek çok moda (ve modası geçmeyen) tarafından ironik (ve unironik bir şekilde) giyildi
All-sky Kamera için Raspberry Pi Çiğ Isıtıcı: 7 Adım
Tüm Gökyüzü Kamerası için Raspberry Pi Çiy Isıtıcı: [Kullanılan rölede bir değişiklik için 7. Adıma bakın] Bu, Thomas Jaquin'in mükemmel kılavuzunu izleyerek oluşturduğum tüm gökyüzü kamerasına yapılan bir yükseltmedir (Kablosuz Tüm Gökyüzü Kamerası) gökyüzü kameralarında (ve teleskoplarda da) meydana gelen çiy birleşecek
Dark Sky API Kullanarak Hava Durumu Panosu Oluşturun: 5 Adım (Resimlerle)
Dark Sky API'sini Kullanarak Bir Hava Durumu Panosu Oluşturun: Dark Sky, hava tahmini ve görselleştirme konusunda uzmanlaşmıştır. Dark Sky'ın en havalı yönü, dünyanın neredeyse her yerinden hava durumu verilerini almak için kullanabileceğimiz hava durumu API'sidir. Sadece hava yağmurlu veya güneşli değil, aynı zamanda sıcaklık
Dark Sky API PyPortal ve Hava Durumu Gösterge Tablosu: 6 Adım
Dark Sky API PyPortal & Weather Dashboard: Bu proje, daha önce yaptığımız Dark Sky API Weather Dashboard projesinin bir uyarlamasıdır. Bu sefer Raspberry Pi yerine, hava durumu verilerini görüntülemek ve bu verileri İlk Duruma göndermek için bir Adafruit PyPortal kullanacağız. Bir kişinin çalışması için iki pano
SKY CAM bir Hava Kamerası Çözümü: 10 Adım (Resimlerle)
SKY CAM bir Hava Kamerası Çözümü: Bu Talimat, Okuldaki GCSE Elektronik Ürünler Projem için nasıl uzaktan kumandalı (Yarı Otonom) Kablo Kamera sistemi yaptığım konusunda size yol gösterecek ve umarım kendi sisteminizi oluşturabilmenizi sağlayacaktır! Bu kaba bir kılavuz olarak tasarlanmıştır