Kazalo:
- 1. korak: Sheme in strojna oprema
- 2. korak: Izdelava tiskanega vezja, ki gosti LED
- 3. korak: Izdelava škatle
- 4. korak: Priprava kravate
- 5. korak: Lepljenje vlaknenih vlaken
- Korak 6: Prenašanje vlaknenih vlaken skozi kravato
- 7. korak: lepljenje vlaknenih vlaken na kravato
- 8. korak: Koda
- 9. korak: Končni izdelek
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Pred časom sem v trgovini z dolarji našel otroško igračo s fiberoptiki in začel razmišljati, kaj bi lahko naredil z njo.
Ena mojih norih idej je bila kravata z učinkom zvezdnega neba.
Še vedno sem imel položenih nekaj arduino pro mini, adafruit plošč in baterij, ki bi verjetno ustrezale temu projektu.
Tako da sem takoj, ko sem v zastavljalnici v svojem mestu našel lepo široko kravato in našel škatlo, ki bi lahko ustrezala strojni opremi, sem se odločil, da jo bom poskusil zgraditi.
Ta navodila vam pokažejo, kako mi je to uspelo.
Deluje na arduino pro mini, adafruit powerboost 500 polnilniku, emmerich icr 18650nh-sp in 5 belih LED. Koda naredi naključno spremembo svetlosti LED. (Prvih 40 sekund videoposnetka je 3 -krat hitrejše)
1. korak: Sheme in strojna oprema
Uporabljam naslednjo strojno opremo:
- PCB z ledeno belimi LED diodami in 220 ohmskimi upori.
-Arduino pro mini (uporabil sem knockoff)
-polnilec Adafruit Powerboost 500
-Emmerich Li-ion accu ICR-18650NH-SP
- Optična vlakna (v različnih velikostih)
2. korak: Izdelava tiskanega vezja, ki gosti LED
Odrezal sem trak s tiskanega vezja, da bi držal LED, in sem ga uporabil za spajkanje na glavno tiskano vezje.
Priključil je vse katode (-) na GND in polovico nožic spajal, pritrjen na glavno tiskano vezje.
Vse anode (+) povežite z upori in s kabli na arduino.
Vsaka LED mora biti priključena na eno od naslednjih vrat PWM: 3, 5, 6, 9, 10, 11
Neumno sem naredil veliko napak pri tem projektu in pozabil preveriti pravilna vrata PWM, zato sem jih moral nekaj kasneje ponovno spakirati. Preizkušeno z High/Low, zato sem to opazil šele kasneje.
Začel sem s 7 LED diodami, vendar je bilo le 6 vrat PWM in ena od LED, ki sem jih ponovno spajkala, je umrla. Pravkar sem obdržal 5 delujočih LED in ne uporabljam 6.
3. korak: Izdelava škatle
Uporabil sem Bosch GRO (kot Dremel) in vrtalnik, da sem izrezal obliko baterije, gumb, vrata micro-usb, glave iz Arduina in optična vlakna. (uporabite masko za prah!)
Baterijo je z dvema trakoma prilepil na ohišje.
Uporabljeni vijaki za pritrditev plošče Adafruit in tiskanega vezja.
Trenje zaradi odpiranja in zapiranja je poškodovalo nekatere žice. Moral sem jih ponovno spajkati in z lepilom preprečiti, da bi se to ponovilo.
4. korak: Priprava kravate
Odstranjeni so šivi iz spodnjega dela kravate, da se prilegajo gumijastemu listu.
Če sem želel skriti strojno opremo in do nje še vedno dostopati, sem se odločil uporabiti zadrgo.
S šivalnim strojem nisem dober, zato je moja ljubka mama na zadnjo stran kravate nataknila zadrgo.
Po tem sem lepil gumijasto folijo v kravato. Bala sem se, da bom uporabila preveč lepila, ki bo nasičilo tkanino in bo vidno od spredaj, zato sem ga poskušala izravnati in ne porabiti preveč. Na splošno izgleda dobro, vendar sem na nekaterih mestih opazil preveč ali premalo lepila, ker je prišlo skozi tkanino ali pa se tkanine ni dobro prijelo. Na srečo je to pri močni svetlobi komaj vidno od blizu.
Škatla in kravata sta zdaj končana. Čas je za lepljenje vlaknenih vlaken!
5. korak: Lepljenje vlaknenih vlaken
Igrača je imela en velik snop optičnih žic, ki so se zlahka zlomile. Najprej sem jih poskušal lepiti enega po enega, vendar sem kmalu opazil, da bi bilo bolje narediti majhne svežnje in jih naenkrat prilepiti na LED. To bi olajšalo njegovo stabilnost, dokler se lepilo ne posuši. Pogrešal je prvo LED, ki je to ugotovila.
Uporabite prozorno lepilo! Tisto, ki sem ga uporabil, se je zelo počasi sušilo in hitro sušeče se lepilo, ki sem ga preizkusil na prvi LED, je postalo belo, zaradi česar so bila nekatera vlakna iz prve LED manj svetla.
Lepil sem majhne črne gumijaste plošče, da preprečim puščanje svetlobe na vrhu in ločim LED.
Eden od listov je preprečil zapiranje ohišja, zato sem dodal gumijast pokrov, da je pokrov zaprt.
Korak 6: Prenašanje vlaknenih vlaken skozi kravato
Začenši na dnu, sem z iglo stisnil luknje in vlakna vlekel eno za drugo. Vlakna vsake LED se naključno razprostirajo po kravati.
Na zadnji del sem prilepil črni trak, ki naj bi šel vse do manjšega dela kravate, da bi obdržal težo škatle, a potem, ko sem dal vse žice in začutil napetost žic, sem se odločil lepiti vse do kravate je bila boljša ideja in odrezal trak.
Ker so bile optične žice igrače tako kratke, jih je bilo težko pritrditi po kravati. Pri postavljanju škatle sem bil omejen in mi je bilo težko narediti vse tako plosko, kot sem hotel.
7. korak: lepljenje vlaknenih vlaken na kravato
Na gumijasto folijo sem zlepil vse optične žice, da preprečim, da bi se žice izvlekle iz gumijaste pločevine, in da bi bila vezica ravna.
Da bi zagotovil, da ob pritisku na njo nisem prilepil objemke na kravato, sem vmes vstavil nekaj papirja. Ne izgleda tako dobro, vendar deluje dobro. In ko je zaprta, je ne vidite.
Ko se je lepilo posušilo, sem odrezal žice na sprednji strani in nekoliko odrezal gumijasto folijo tik nad najvišjo žico, ker je bila kravata predolga.
Fotografije z belo srajco so narejene, preden odrežem še zadnji del gume.
8. korak: Koda
Pod kodo, ki sem jo napisal za kravato.
Vse LED diode imajo nastavljeno "povprečje" (dejansko ni povprečje, ampak srednja svetlost).
Takoj, ko doseže to povprečje, se bo z možnostjo 3/4 odločil za nižjo svetlost. Prav tako naključno nastavi novo najmanjšo svetlost, največjo svetlost, čakalni čas za najmanjšo in največjo svetlost ter hitrost, ki se poveča ali zmanjša v vsakem krogu (1-255) od 5 prednastavljenih vrednosti. Nato bo naredil cikel, dokler spet ne doseže povprečja. Samo 2 LED diodi sta lahko v visokem ciklu hkrati.
Vsako stanje je predstavljeno s celoštevilčno vrednostjo (1-7), ki določa, ali gre povprečno nizko, nizko povprečno, nizko čakanje, posodobitev itd.
Za informacije o nalaganju kode na arduino si oglejte www.arduino.cc
/ * Starry Sky Tie * * To je skript za naključno izginjanje 5 LED s povprečne na nižjo * ali višjo svetlost z naključnimi nižjimi, višjimi in časovnimi nastavitvami *, da bodo videti kot zvezdnato nebo, če jih uporabljamo z vlakni. * V tem primeru bodo te izvedene neodločeno. * * Verjetnost navzgor/navzdol = 1/4 navzgor, 3/4 navzdol, pri čemer se največ 2 * hkrati dvigne na max. * * Povprečje ostaja enako. * Najmanjše, največje in časovne možnosti se naključno spreminjajo * od 5 možnosti vsakič, ko LED ponovno doseže povprečje. * * Ustvaril Billy Jaspers, maj 2019. *
/ Razglasi zatiče
int LED01 = 3; int LED02 = 5; int LED03 = 6; int LED04 = 9; int LED05 = 11;
// Časovne spremenljivke
nepodpisani dolgi currentTime; dolg čakalni čas brez podpisa [5]; brez podpisa dolga zadnja runda;
// LED spremenljivke
int brightMin [5] = {10, 10, 10, 10, 10}; // Najmanjša svetlost int brightAvg [5] = {200, 200, 200, 200, 200}; // Povprečna svetlost int brightMax [5] = {240, 240, 240, 240, 240}; // Največja svetlost int timeWaitLow [5] = {1000, 1000, 1000, 1000, 1000}; // Čakalna doba int timeWaitAvg [5] = {5000, 5000, 5000, 5000, 5000}; // Čakalna doba int timeWaitMax [5] = {4000, 3000, 3000, 3000, 3000}; // Prirastek čakalnega časa int [5] = {2, 5, 4, 5, 2}; // povečanje svetlosti int currentBright [5] = {200, 230, 210, 210, 235}; // Trenutna svetlost
// Možnosti LED spremenljivk
int brightMinPos [5] = {5, 20, 40, 5, 20}; // Najmanjše možnosti svetlosti int brightMaxPos [5] = {240, 245, 230, 225, 245}; // Največje možnosti svetlosti int timeLowPos [5] = {3000, 5000, 4000, 2000, 1000}; // Čakalni čas pri možnostih nizke svetlosti int timeHighPos [5] = {3000, 1000, 500, 2000, 4000}; // Čakalni čas pri visokih možnostih svetlosti int timeAvgPos [5] = {3000, 5000, 4000, 7000, 8000}; // Čakalni čas pri povprečnih možnostih svetlosti int incrementPos [5] = {2, 4, 5, 3, 1}; // povečanje možnosti svetlosti
// Spremenljivke
bool zagon = res; // Ali je treba zagnati začetne nastavitve?
// Smerne spremenljivke
/* 0 = Čakanje na povprečje 1 = gre povprečje na nizko 2 = čakanje nizko 3 = gre nizko na povprečje 4 = gre povprečje na maks. 5 = čakanje pri maks. 6 = gre visoko na povprečje 7 = posodobitev spremenljivk*/ int statusLED [5] = {0, 0, 0, 0, 0}; int znesekHighLED = 0; int refreshRate = 50; bool statusWaiting [5] = {false, false, false, false, false}; // Ali Led čaka?
// Naključne spremenljivke
dolgo naključnoŠtevilo; // Dolgo za shranjevanje naključnega števila dolgo randomNumberTwo; // Dolgo za shranjevanje druge naključne številke
// števci
int i = 0; // Števec za glavno zanko
void setup () {
Serial.begin (115200); // Zagon serijskega randomSeed (analogRead (A0)); // Nastavi naključno seme
// Razglasi izhode
pinMode (LED01, IZHOD); pinMode (LED02, IZHOD); pinMode (LED03, IZHOD); pinMode (LED04, IZHOD); pinMode (LED05, IZHOD); }
// Zapis podatkov v LED
void writeToLED () {analogWrite (LED01, currentBright [0]); analogWrite (LED02, currentBright [1]); analogWrite (LED03, currentBright [2]); analogWrite (LED04, currentBright [3]); analogWrite (LED05, currentBright [4]); }
// Glavna zanka
void loop () {if (startup) {// Nastavitve zagona lastRound = millis (); // Nastavi lastRound za zagonski writeToLED (); // Zapiši začetne podatke v zagon LED = false; // Izklopi zagon} currentTime = millis (); // Nastavite trenutni čas
if (currentTime - lastRound> = refreshRate) {
for (i = 0; i <5; i ++) {if (statusLED == 7) {// -7- Posodabljanje Led randomNumber = naključno (5); brightMin = brightMinPos [randomNumber]; // Nastavimo naključno vrednost za najmanjšo svetlost randomNumber = random (5); brightMax = brightMaxPos [randomNumber]; // Nastavimo naključno vrednost za največjo svetlost randomNumber = random (5); timeWaitLow = timeLowPos [randomNumber]; // Nastavi naključno vrednost za nizek čakalni čas randomNumber = random (5); timeWaitMax = timeHighPos [randomNumber]; // Nastavi naključno vrednost za visoko čakalno dobo randomNumber = random (5); timeWaitAvg = timeAvgPos [randomNumber]; // Nastavi naključno vrednost za povprečni čakalni čas randomNumber = random (5); prirast = povečanjePos [naključno številko]; // Nastavimo naključno vrednost prirastne vrednosti randomNumber = random (2); // Nastavimo naključno vrednost za smer randomNumberTwo = random (2); // Nastavimo naključno vrednost za smer if (randomNumber == 1 && randomNumberTwo == 0 && amountHighLED = brightAvg ) {statusLED = 0; // Če je na najnižji točki: Pojdi na Čakajoče povprečje} drugače {currentBright = currentBright +prirast ; // Drugače: višja svetlost}} else if (statusLED == 2) {// -2- Waiting Low if (! StatusWaiting ) {// Če se ne čaka: waitTime = millis (); // Nastavi čakalni čas statusWaiting = true; // Začni čakati} else if (statusWaiting && currentTime-waitingTime > = timeWaitLow ) {// Če je čakanje AND timeWaitAvg minilo: statusWaiting = false; // ustavitev čakanja statusLED = 3; // Nastavi statusLed na Čakanje na posodobitev}} else if (statusLED == 1) {// -1- Going Avg to Low if (currentBright <= brightMin ) {statusLED = 2; // Če je na najnižji točki: Pojdite na Čakanje nizko} drugače {currentBright = currentBright -increment ; // Drugače: nižja svetlost}} else if (statusLED == 6) {// -6- Največja vrednost do Avg if (currentBright = timeWaitMax ) {// Če je čakanje IN timeWaitAvg minilo: statusWaiting = false; // status ustavitve čakanjaLED = 6; // Nastavi statusLed na Čakanje na posodobitev}} else if (statusLED == 4) {// -4- Going Avg to Max if (currentBright > = brightMax ) {statusLED = 5; // Če je na najnižji točki: Pojdite na Waiting High} drugače {currentBright = currentBright +prirast ; // Drugače: višja svetlost}} else if (statusLED == 0) {// -0- Počaka na povprečje if (! StatusWaiting ) {// Če ne čaka: waitTime = millis (); // Nastavi čakalni čas statusWaiting = true; // Začni čakati} else if (statusWaiting && currentTime-waitingTime > = timeWaitAvg ) {// Če je čakanje AND timeWaitAvg minilo: statusWaiting = false; // status ustavitve čakanjaLED = 7; // Nastavi statusLed na Čakanje na posodobitev}}} i = 0; lastRound = millis (); // Nastavi, ko je zadnji krog končan. writeToLED (); // Zapišite vse podatke v LED -je}}}
9. korak: Končni izdelek
Mislim, da se je dobro izšlo. Kravata ni preveč debela, trda, dolga ali težka in zvezdniški učinek izgleda neverjetno.