Innholdsfortegnelse:

HALO: Handy Arduino Lamp Rev1.0 W/NeoPixels: 9 Steps (med bilder)
HALO: Handy Arduino Lamp Rev1.0 W/NeoPixels: 9 Steps (med bilder)

Video: HALO: Handy Arduino Lamp Rev1.0 W/NeoPixels: 9 Steps (med bilder)

Video: HALO: Handy Arduino Lamp Rev1.0 W/NeoPixels: 9 Steps (med bilder)
Video: DIY HALO Lamp Rev1.0 - Powered by Arduino Nano, 15+ Color Modes 2024, Juni
Anonim
Image
Image
HALO: Handy Arduino Lamp Rev1.0 W/NeoPixels
HALO: Handy Arduino Lamp Rev1.0 W/NeoPixels
HALO: Handy Arduino Lamp Rev1.0 W/NeoPixels
HALO: Handy Arduino Lamp Rev1.0 W/NeoPixels

I denne instruksen vil jeg vise deg hvordan du bygger HALO, eller Handy Arduino Lamp Rev1.0.

HALO er en enkel lampe, drevet av Arduino Nano. Den har et totalt fotavtrykk på ca 2 "x 3", og en vektet trebase for ekstrem stabilitet. Den fleksible halsen og 12 superlyse NeoPixels gjør at den lett kan belyse alle detaljer på enhver overflate. HALO har to trykknapper for å bla gjennom forskjellige lysmoduser, hvorav det er 15 forhåndsprogrammerte. På grunn av bruken av Arduino Nano som prosessor, er det mulighet for deg å omprogrammere den med tilleggsfunksjoner. Det eneste potensiometeret brukes til å justere lysstyrke og/eller hastighet som en modus vises med. En enkel metallkonstruksjon gjør HALO til en svært holdbar lampe, egnet for bruk i ethvert verksted. Brukervennlighet blir forsterket av Nanos innebygde effektregulator, så HALO kan drives via enten USB eller standard 5 mm fatkontakt på baksiden.

Jeg håper å se mange mennesker som bruker disse lampene i nær fremtid, fordi det er så mange muligheter som åpner seg med dette designet. Vennligst la en stemme i Microcontroller Contest hvis du liker dette eller synes det er nyttig på en eller annen måte, jeg ville virkelig sette pris på det.

Før vi går inn på denne instruksen, vil jeg si en kort takk til alle mine følgere og alle som noen gang har kommentert, favoritt eller stemt på noen av prosjektene mine. Takket være dere, min Cardboard instruerbare ble en stor suksess, og jeg er nå, da jeg skrev dette når nær 100 følgere, en stor milepæl etter min mening. Jeg setter stor pris på all støtten jeg får fra dere når jeg setter opp min Ible, og når det kommer til saken, hadde jeg ikke vært der jeg er i dag uten dere. Når det er sagt, takk, alle sammen!

MERK: Gjennom hele denne instruksjonsboken finnes fet skrift. Dette er de viktige delene av hvert trinn, og bør ikke ignoreres. Dette er ikke jeg som roper eller forsettlig er frekk, jeg prøver bare en ny skriveteknikk for bedre å understreke det som må gjøres. Hvis du ikke liker det og foretrekker hvordan jeg tidligere pleide å skrive trinnene mine, gi meg beskjed i kommentarene, så går jeg tilbake til min gamle stil.

Trinn 1: Samle materialer

Samle materialer
Samle materialer
Samle materialer
Samle materialer
Samle materialer
Samle materialer
Samle materialer
Samle materialer

Hvor mange ganger må jeg si det? Ha alltid det du trenger, og du vil garantert kunne bygge noe gjennom til mål.

Merk: Noen av disse er tilknyttede lenker (merket "al"). Jeg får et lite tilbakeslag hvis du kjøper gjennom dem, uten ekstra kostnad for deg. Takk for at du kjøper gjennom linkene

Deler:

1x Arduino Nano Nano - al

1x 10k roterende potensiometer 5 pakke 10k potensiometre - al

1x 5 mm fatkontakt (min er resirkulert fra en stekt Arduino Uno) Female Barrel Jack (5 pakker) - al

2x 2-pinners øyeblikkelige trykknapper 10-pakning SPST Trykknappbryter-al

12x NeoPixels fra en 60 LED/meter streng (enhver tilsvarende, f.eks. WS2812B, fungerer) Adafruit NeoPixels

Et ark av 0,5 mm aluminium

Den fleksible halsen fra en gammel flex -lighter

Den øvre dekselringen fra et "Stick and Click" LED -skaplys LED -skaplys - al

Et lite ark med 1/4 tommers kryssfiner

En tung, flat metallvekt med dimensjoner (omtrent) 1,5 "x 2,5" x 0,25"

Strandet kjerne elektrisk ledning

Verktøy:

Varm limpistol og lim

Loddejern og loddetinn

Batteridrevet boremaskin og diverse små skruer

X-acto kniv (eller en kniv)

Wire strippere

Tang

Wire cutters/snips

Kraftig saks

Hvis du ikke har flatmetallvekten, trenger du også:

1 rull med billig loddetinn (ikke tingene du skal bruke til lodding) Billig blyfri lodding

Alkohollys (eller en Bunsen -brenner)

En liten isket herdet stålfat du ikke har noe imot å ødelegge (eller en liten digel hvis du har en)

Et stativ for nevnte fat/digel (jeg laget min av 12 gauge ståltråd)

En tallerkenrett (en av de tingene som går under potten)

Noe aluminiumsfolie

MERK: Hvis du har et sveisesett eller en 3D -skriver, trenger du kanskje ikke alle verktøyene som er oppført her.

Trinn 2: Gjør vekten

Å gjøre vekten
Å gjøre vekten
Å gjøre vekten
Å gjøre vekten
Å gjøre vekten
Å gjøre vekten

Dette er et ganske vanskelig trinn, og du må være ekstrem forsiktig når du gjør det. Hvis du har en tung metallvekt eller en flat neodymmagnet på omtrent 2,75 "x 1,75" x 0,25 ", vil jeg anbefale å bruke det i stedet (og magneten vil til og med tillate deg å plassere lampen sidelengs på metalloverflater!).

Ansvarsfraskrivelse: Jeg er ikke ansvarlig for noen skade fra din side, så vær så snill å bruke sunn fornuft

Gjør også dette ute over en betongoverflate som du ikke har noe imot hvis det blir litt svidd (dette er bare en forhåndsregel). Jeg har ingen bilder for denne prosessen fordi et kamera ville vært en ekstra distraksjon som jeg ikke trengte eller ønsket.

Lag først en liten form av aluminiumsfolie eller våt leire, ca. 2 3/4 tommer med 1 3/4 tommer med 1/4 tommer i innvendige dimensjoner. Det kan være en eggformet form som min, eller et rektangel. Bruk flere lag folie eller tykke lag med leire.

Legg formen i den keramiske plantefatet, og fyll både formen og brettet med kaldt vann.

Ta det uopplyste alkohollyset/bunsenbrenneren, og legg stålfatet/digelen på stativet slik at flammen vil varme midten av fatet (når den er tent). Før du tenner brenneren, må du sørge for at du har minst en tang eller metalltang for hånden, hvis ikke 2.

Det er en god idé å bruke skinnhansker, lange ermer, lange bukser, lukkede sko og øyebeskyttelse mens du gjør de neste trinnene

Spol opp og bryt en haug med det billige loddetinnet fra spolen og legg det i stålfatet, og tenn deretter brenneren. Vent til spolen smelter helt, og begynn deretter å mate resten av loddetinn i fatet i et moderat tempo. Hvis loddetinn har noe kolofonium i det, kan dette spontant brenne i varmen og gi en blekgul flamme og svart røyk. Ikke bekymre deg, dette har skjedd meg flere ganger og er helt normalt.

Fortsett å mate loddetinn i fatet til det siste er smeltet.

La alle flammer fra brennende kolofonium dø helt ut, og bruk tang/tang til å gripe fatet og virvle det smeltede metallet forsiktig inn mens du holder det forsiktig i flammen.

Etter at du er sikker på at alt loddet er fullstendig flytende og ved en god varm temperatur, fjern det raskt og forsiktig fra flammen og hell det i formen. Det vil være en høy susende lyd og damp når noe av vannet fordampes og resten tvinges ut av formen for å bli erstattet av smeltet loddetinn.

La loddet avkjøles, slå av brenneren/blåse ut lyset og sett stålfatet et trygt sted å avkjøle. Det kan være lurt å helle kaldt vann over avkjølingsloddet for å fremskynde avkjølingen og herde den ytterligere. (Det kalde vannet gjør at utsiden avkjøles raskere enn innsiden, noe som skaper indre spenninger som gjør metallet hardere og stivere, lik en Prince Rupert's Drop.) Du kan også renne vann over metallfatet ditt, men dette vil føre til at det blir sprøtt, spesielt hvis det er gjort flere ganger.

Etter at loddetinnet er helt avkjølt (ca. 20 minutter for å være trygg), fjern det fra folieformen.

Mine endte tykkere på den ene siden enn den andre, så jeg brukte en hammer til å jevne den ut og flate kantene (noe som resulterte i formen du ser på bildene). Jeg pusset den deretter lett under rennende vann for å polere den, og la den til side for senere.

Trinn 3: Bygg elektronikkhuset, trinn 1

Bygg elektronikkhuset, trinn 1
Bygg elektronikkhuset, trinn 1
Bygg elektronikkhuset, trinn 1
Bygg elektronikkhuset, trinn 1
Bygg elektronikkhuset, trinn 1
Bygg elektronikkhuset, trinn 1
Bygg elektronikkhuset, trinn 1
Bygg elektronikkhuset, trinn 1

Dette er delene til skallet som skal huse Nano, montere grensesnittet, og er i utgangspunktet det som holder HALO -lampen sammen. Jeg lagde min med min 0,5 mm aluminium og varme lim, men hvis du har en 3D -skriver (noe jeg har prøvd å få til butikken min en stund), lagde jeg en. STL -versjon i Tinkercad som jeg la ved her for å nedlasting. Siden jeg ikke har en skriver selv, klarte jeg ikke å teste ut modellen for å se om alt skrives ut ordentlig, men jeg synes det burde være greit hvis du legger til de riktige støttestrukturer i skiven din. Du kan også kopiere og redigere kildefilen her hvis du trenger eller ønsker en litt annen design eller estetikk.

Dimensjonene ble faktisk avledet fra metallvekten jeg støpte for meg selv av loddetinn, ikke fra størrelsen på elektronikken, men det ble ganske bra uansett og dimensjonene er ganske optimale.

Bildene skildrer en litt annen operasjonsrekkefølge enn det jeg skal skrive her, dette er fordi jeg har utviklet en forbedret metode basert på resultatene av min opprinnelige metode.

Hvis du monterer av metallplater som meg, er det du trenger å gjøre:

Trinn 1: Ansiktsplater

Klipp to identiske halvcirkel-ish former omtrent 1,5 "høye og 3" brede. (Jeg ga min frihånd, så de ligner litt på forsiden av en jukeboks).

I en av de to platene borer du de tre hullene for knappene og potensiometeret. Mine var hver 1/4 tomme i diameter. Disse kan være i hvilken som helst layout, men jeg foretrekker at potensiometeret mitt er litt hevet i midten, med knappene på hver side som danner en likebent trekant. Når jeg borer, lager jeg alltid et lite pilothull før jeg går til ønsket størrelse, det hjelper til med å sentrere hullene og gjør dem litt renere.

Trinn 2: Buet deksel

Bøy over et stykke aluminium for å passe rundt kurven til en av frontplatene, og merk riktig kantlengde.

Klipp ut en stripe med denne lengden og omtrent 2 tommer bred, og form den til en bue som matcher formen på kurven til ansiktsplatene på hver side.

Finn midtpunktet øverst på kurven, og bor et hull som passer til tennens flexhals. Jeg kompenserte holet mot baksiden i min fordi lampen min stort sett vil ha nakken vippet fremover mens den er i bruk, så jeg ønsket å legge litt av en motvekt til det. Den fleksible nakken min var bare litt over 1/4 tommer i diameter, så jeg brukte en 1/4 tommers bit (den største vribiten jeg eier som er under 3/4 tommer) og vinklet og vridde forsiktig bor for å "bore" ut hullet til nakken passer.

Nå som vi har delene til skallet, er neste trinn å legge til elektronikk og sette det sammen!

Trinn 4: Bygg elektronikkhuset, trinn 2

Bygg elektronikkhuset, trinn 2
Bygg elektronikkhuset, trinn 2
Bygg elektronikkhuset, trinn 2
Bygg elektronikkhuset, trinn 2
Bygg elektronikkhuset, trinn 2
Bygg elektronikkhuset, trinn 2
Bygg elektronikkhuset, trinn 2
Bygg elektronikkhuset, trinn 2

Nå legger vi til knappene og potensiometeret, og setter alt sammen.

Trinn 1: Knapper og bolter

Skru sekskantmutrene fra knappene og potensiometeret. Det skal være en gripeinnretning under mutteren, la dette være på plass.

Stikk hver av komponentene gjennom det respektive hullet, og skru deretter på mutrene for å feste hver på plass. Stram mutrene til et punkt der du er sikker på at hver komponent er helt sikker.

Trinn 2. Flekser nakken

Stikk flekshalsen gjennom hullet på toppen av det buede stykket. Varmt lim eller sveis (hvis du har utstyret) nakken sikkert på plass.

Hvis du bruker varmt lim som jeg er, er det en god idé å lime det med mye lim på begge sider spredt over et stort område for å forhindre at limet løsner senere.

Trinn 3: Skallmontering (gjelder ikke 3D -trykt skall)

Bruk enten sveisestang eller varmt lim til å feste frontplaten og bakplaten på hvert sitt sted på det buede dekselet. Det tok meg et par forsøk før limet mitt feste seg, og som før er trikset å bruke mye lim på begge sider av leddet, akkurat som halsen. Jo større området dekket av limet, desto bedre vil det feste seg.

Nå som vi har skallet, kan vi gå videre for å legge til alle kretsbitene.

Trinn 5: Legge til elektronikk

Legger til elektronikk
Legger til elektronikk
Legger til elektronikk
Legger til elektronikk
Legger til elektronikk
Legger til elektronikk

Og her er den morsomme delen: Lodding! De siste ukene har jeg ærlig talt blitt litt lei av lodding, fordi jeg har gjort det så mye i det siste for å prøve å fullføre et annet prosjekt jeg burde legge opp snart (hold øye med en radikalisert ny versjon av robotskjermen min) plattformer), noe som resulterer i at jeg ødelegger et jern og får et annet … Uansett, det er ikke mye å lodde her, så dette burde være ganske greit.

Merk: Hvis din Nano allerede har pinnehoder, vil jeg anbefale å avlodde dem for dette prosjektet, de kommer bare i veien.

Det er et diagram på bildene ovenfor, du kan følge det hvis du vil.

Trinn 1: Grensesnitt

Fra hver av bryterne loddes en ledning fra en enkelt pinne til en sidestift på potensiometeret. Lodd en ledning fra den samme sidepinnen til en bakkenål på Nano.

Lodd en ledning fra senterpinnen på potensiometeret til A0 på Nano.

Lodd en ledning fra den ikke -tilkoblede pinnen på begge bryterne til A1 på Nano.

Lodd en ledning fra den ikke -tilkoblede pinnen på den andre bryteren til A2 på Nano.

Merk: Det spiller ingen rolle hvilken bryter som er, du kan enkelt endre dem i koden, i tillegg til at den ene bryteren ganske enkelt gjør det motsatte av den andre.

Klipp en lengde på ledningen 4 tommer lengre enn bøyningshalsen, og fjern begge sider. Bruk en Sharpie, merk den ene siden med en enkelt linje.

Lodd en ledning til den siste ikke -tilkoblede sidestiften på potensiometeret, vri den ikke -tilkoblede enden av denne ledningen sammen med den umerkede enden av ledningen fra det siste deltrinnet.

Lodd denne sammenføyningen til 5V på Nano.

Trinn 2: Display og strømledninger

Klipp 2 trådlengder 4 tommer lengre enn bøyhalsen, og strip begge ender.

Bruk en Sharpie, merk enden av hver ledning, en ledning med 2 linjer og en med 3.

Lodd ledningen med 2 linjer til digital pin 9 på Nano.

På din 5 mm fatkontakt loddes en ledning fra senterpinnen (positiv) til Vin på Nano.

Lodd enda en ledning til en sidepinne (bakken/negativ) på fatkontakten.

Vri den lange ledningen sammen med 3 ledninger sammen med ledningen fra sidestiften på fatkontakten.

Lodd disse trådene til den åpne GND -pinnen på Nano.

Isoler tilkoblinger med elektrisk tape eller varmt lim der det er nødvendig.

Trinn 3: Skjærehull (bare på metallversjonen, hvis du trykte 3D -omslaget skulle du ha det bra)

Bruk et bor og en X-acto eller verktøykniv til å lage et hull i siden av dekselet for USB-porten på Nano.

Lag et nytt hull på størrelse med overflaten på fatkontakten på baksiden av dekselet, helst nærmere siden motsatt hullet for USB -porten.

Trinn 4: Monteringskomponenter

Før de tre lange ledningene gjennom bøyehalsen og ut på den andre siden.

Bruk rikelig med varmt lim for å montere fatkontakten på plass med pinnene vendt mot toppen av dekselet.

Monter Nano på nytt med mye varmt lim, med tilbakestillingsknappen vendt ned og USB -porten i sporet. Jeg lagde en "hot lim bridge" mellom fatkontakten og Nano, noe som gjør at hver holder den andre godt på plass.

Nå kan vi gå videre for å lage den vektede basen!

Trinn 6: Vektet base

Vektet base
Vektet base
Vektet base
Vektet base
Vektet base
Vektet base

Jeg er trygg på mine loddferdigheter og hadde dette godt planlagt, så jeg gikk videre og la til basen før jeg testet koden. Hvis du er mindre trygg på dine ferdigheter, vil jeg foreslå at du hopper over dette trinnet og går tilbake til det på slutten når du vet at alt fungerer.

Hvis du har laget den 3D -trykte versjonen, kan du hoppe over det første trinnet og gå videre til det andre.

Trinn 1: Tre

Fra et ark med 1/4 tommers kryssfiner, kutt en base omtrent 3 tommer med 2 tommer.

Slip kantene for å glatte dem ut og fjern hull.

Trinn 2: Vekt

Først må du forsikre deg om hvilken vekt du ønsker, det være seg at en magnet, et metall eller en tilpasset loddetinn passer innenfor kantene på metalldekselet vi laget. Mitt var litt stort i en retning, så jeg barberte meg litt fra siden med en X-acto kniv. Hvis din ikke er den typen du kan gjøre dette på, må du kanskje tukle med et annet grunndesign.

Varm lim vekten din i midten av kryssfinerstykket, eller i tilfelle av 3D -trykt design, i midten "brett" -området jeg designet for dette formålet.

Trinn 3: Base

Monter metalldekselet over vekten og sentrer det på trebunnen. (Når det gjelder 3D-trykt design, må du passe det inn i de ferdige sporene.)

Sørg for at vekten ikke forstyrrer elektronikken

Bruk varmt lim for å feste basen. Bruk nok til å sikre en fast tilkobling.

Nå som vi har kontrollboksen helt laget, la oss gå videre til lysene.

Trinn 7: NeoPixel Halo Ring

NeoPixel Halo Ring
NeoPixel Halo Ring
NeoPixel Halo Ring
NeoPixel Halo Ring
NeoPixel Halo Ring
NeoPixel Halo Ring
NeoPixel Halo Ring
NeoPixel Halo Ring

Inspirasjonen til navnet på denne lampen, denne delen er NeoPixel -haloringen som vi skal bruke som vår belysningskilde. Denne delen kan endres eller erstattes med en hvilken som helst NeoPixel eller individuelt adresserbar LED -ring, hvis ønskelig.

Trinn 1: Lodding

Klipp en stripe med NeoPixels 12 lysdioder i lengden.

Lodd GND -pinnen til ledningen fra flexhalsen som har 3 linjer.

Lodd Din -pinnen til ledningen som har 2 linjer.

Lodd 5V -pinnen til ledningen som har 1 linje.

Trinn 2: Test lysene

Last ned og installer Adafruit_NeoPixel -biblioteket, og åpne "strandtest" -koden.

Endre den konstante PIN -koden til 9.

Endre linjen der stripen er definert slik at den er konfigurert for 12 lysdioder.

Last opp koden til Nano, og sørg for at alle lysdiodene dine fungerer som de skal.

Bytt ut eventuelle defekte lysdioder med fungerende, til hele stripen fungerer.

Trinn 3: Ring

Ta den øverste ringen fra en "Stick and Click" -lampe og kutt av eventuelle skruefester på den innvendige felgen.

Klipp et lite hakk på kanten for ledningene fra stripen.

Trekk av lokket til klebebåndet på baksiden av NeoPixels (hvis det er noen) og fest dem inne i ringen, med hver ende av stripen omtrent i hakket vi laget.

Bruk varmt lim for å sikre kantene på stripen godt

Etter at limet er helt avkjølt, test pikslene igjen. Dette er for å sikre at ingen er vanskelige med varmen og curling (noen av mine var).

Trinn 4: Monter

Klipp ut to små rektangler av 1/4 tommers tre, omtrent på høyden på ringen og 1 2/3 ganger så bred.

Lim disse parallelt med hverandre på hver side av ledningene fra ringen, fyll ut hullet og dekk ledningene mellom helt med lim.

Skyv forsiktig overflødig trådlengde tilbake i flexhalsen, og lim deretter trebitene på enden av halsen, bruk rikelig med lim og fyll forsiktig hullene (uten å fylle halsen med lim).

Trinn 6: Etterbehandling

Du kan male ringen og montere hvilken som helst farge hvis du vil, jeg foretrakk sølvfargen, så jeg brukte bare en Sharpie til å dekke over logoen som (irriterende) var trykt på ringen. Det samme gjelder resten av lampen.

Nå kan vi gå videre for å fullføre den endelige koden!

Trinn 8: Koder og tester

Koder og tester
Koder og tester
Koder og tester
Koder og tester

Så nå er det bare å programmere lampen og teste den. Vedlagt er den nåværende kodeversjonen (rev1.0), jeg har testet denne koden ganske omfattende og den fungerer veldig bra. Jeg jobber med en rev2.0 der knappene er konfigurert som eksterne avbrudd, slik at moduser lettere kan byttes mellom, men denne versjonen er buggy og ennå ikke klar for utgivelse. Med den nåværende versjonen må du holde knappen til den kjører Debounce -løkken og gjenkjenner tilstandsendringen, noe som kan være irriterende på de lengre "dynamiske" løkkene. Nedenfor er koden med noen forklaringer skrevet inn (det er de samme forklaringene i den nedlastbare versjonen).

#include #ifdef _AVR_ #include #endif

#definere PIN 9

#define POT A0 #define BUTTON1 A1 #define BUTTON2 A2

// Parameter 1 = antall piksler i stripen

// Parameter 2 = Arduino pin -nummer (de fleste er gyldige) // Parameter 3 = pixeltype flagg, legg sammen etter behov: // NEO_KHZ800 800 KHz bitstream (de fleste NeoPixel -produkter m/WS2812 LED) // NEO_KHZ400 400 KHz (klassisk ' v1 '(ikke v2) FLORA -piksler, WS2811 -drivere) // NEO_GRB Piksler er kablet for GRB -bitstrøm (de fleste NeoPixel -produkter) // NEO_RGB -piksler er koblet til RGB -bitstrøm (v1 FLORA -piksler, ikke v2) // NEO_RGBW Piksler er kablet for RGBW bitstream (NeoPixel RGBW -produkter) Adafruit_NeoPixel halo = Adafruit_NeoPixel (12, PIN, NEO_GRB + NEO_KHZ800);

// Og nå, en sikkerhetsmelding fra våre venner på Adafruit:

// VIKTIG: For å redusere NeoPixel -utbrenthetsrisiko, legg til 1000 uF kondensator på tvers

// pixel power leads, legg til 300 - 500 Ohm motstand på den første pikselens datainngang // og minimer avstanden mellom Arduino og første piksel. Unngå å koble // til en strømførende krets … hvis du må, må du koble til GND først.

// Variabler

int buttonState1; int buttonState2; // gjeldende avlesning fra inngangspinnen int lastButtonState1 = LOW; // forrige lesning fra inngangspinnen int lastButtonState2 = LOW; int -modus; // modusen til lysene våre, kan være en av 16 innstillinger (0 til 15) int brightVal = 0; // lysstyrke/ hastighet, som angitt av potensiometeret

// følgende variabler er lange fordi tiden, målt i milisekunder, // vil raskt bli et større tall enn det som kan lagres i en int. long lastDebounceTime = 0; // siste gang utgangspinnen ble byttet lang debounceDelay = 50; // avvisningstiden; øke hvis utgangen blinker

void debounce () {

// les tilstanden til bryteren til en lokal variabel: int reading1 = digitalRead (BUTTON1); int reading2 = digitalRead (KNAPP2); // Hvis en av knappene endret seg på grunn av støy eller trykk: if (reading1! = LastButtonState1 || reading2! = LastButtonState2) {// reset the the bouncing timer lastDebounceTime = millis (); } hvis ((millis () - lastDebounceTime)> debounceDelay) {// hvis knappestatus definitivt har endret seg på grunn av å trykke/slippe: if (reading1! = buttonState1) {buttonState1 = reading1; // angi den som avlesning hvis den er endret hvis (buttonState1 == LOW) {// disse er angitt som aktiv lav bryter modus ++; hvis (modus == 16) {modus = 0; }}} if (reading2! = buttonState2) {buttonState2 = reading2; hvis (buttonState2 == LOW) {mode = mode - 1; hvis (modus == -1) {modus = 15; }}}}} // lagre avlesningen til neste gang gjennom løkken lastButtonState1 = reading1; lastButtonState2 = lesing2; }

void getBright () {// vår kode for å lese potensiometeret, sender ut en verdi mellom 0 og 255. Brukes til å angi lysstyrke i noen moduser og hastighet i andre.

int potVal = analogRead (POT); brightVal = map (potVal, 0, 1023, 0, 255); }

// Her er fargemodusene våre. Noen av disse er avledet fra strandtesteksemplet, andre er originale.

// Fyll prikkene etter hverandre med en farge (fargestryking, avledet fra trådtest)

void colorWipe (uint32_t c, uint8_t wait) {for (uint16_t i = 0; i

// regnbue funksjoner (også avledet fra strandtest)

ugyldig regnbue (uint8_t vent) {

uint16_t i, j;

for (j = 0; j <256; j ++) {for (i = 0; i

// Litt annerledes, dette gjør regnbuen jevnt fordelt overalt

void rainbowCycle (uint8_t wait) {uint16_t i, j;

for (j = 0; j <256*5; j ++) {// 5 sykluser med alle farger på hjulet for (i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, Wheel (((i * 256 / halo.numPixels ()) + j) & 255)); } halo.show (); forsinkelse (vent); }}

// Skriv inn en verdi 0 til 255 for å få en fargeverdi.

// Fargene er en overgang r - g - b - tilbake til r. uint32_t Wheel (byte WheelPos) {WheelPos = 255 - WheelPos; hvis (WheelPos <85) {return halo. Color (255 - WheelPos * 3, 0, WheelPos * 3); } hvis (WheelPos <170) {WheelPos -= 85; return glorie. Color (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; retur glorie. Farge (WheelPos * 3, 255 - WheelPos * 3, 0); }

ugyldig oppsett () {

// Dette er for Trinket 5V 16MHz, du kan fjerne disse tre linjene hvis du ikke bruker et Trinket #if definert (_AVR_ATtiny85_) if (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Slutt på spesialpinkoden pinMode (POT, INPUT); pinMode (BUTTON1, INPUT_PULLUP); pinMode (BUTTON2, INPUT_PULLUP); pinMode (PIN, OUTPUT); Serial.begin (9600); // feilsøking ting halo.begin (); halo.show (); // Initialiser alle piksler til 'off'}

void loop () {

debounce ();

//Serial.println(modus); // mer feilsøking //Serial.println(lastButtonState1); //Serial.println(lastButtonState2);

hvis (modus == 0) {

getBright (); for (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (brightVal, brightVal, brightVal)); // sett alle piksler til hvit} halo.show (); }; if (modus == 1) {getBright (); for (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (brightVal, 0, 0)); // sett alle piksler til rød} halo.show (); }; if (modus == 2) {getBright (); for (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (0, brightVal, 0)); // sett alle piksler til grønt} halo.show (); }; if (modus == 3) {getBright (); for (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (0, 0, brightVal)); // sett alle piksler til blå} halo.show (); }; if (modus == 4) {getBright (); for (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (0, brightVal, brightVal)); // sett alle piksler til cyan} halo.show (); }; if (modus == 5) {getBright (); for (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (brightVal, 0, brightVal)); // sett alle piksler til lilla/magenta} halo.show (); }; if (modus == 6) {getBright (); for (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (brightVal, brightVal, 0)); // sett alle piksler til oransje/gul} halo.show (); }; hvis (modus == 7) {// nå får de dynamiske modusene GetBright (); colorWipe (halo. Color (brightVal, 0, 0), 50); // Rød }; if (modus == 8) {getBright (); colorWipe (halo. Color (0, brightVal, 0), 50); // Grønn}; if (modus == 9) {getBright (); colorWipe (halo. Color (0, 0, brightVal), 50); // Blå}; if (modus == 10) {getBright (); colorWipe (halo. Color (brightVal, brightVal, brightVal), 50); // hvit}; if (modus == 11) {getBright (); colorWipe (halo. Color (brightVal, brightVal, 0), 50); // oransje/gul}; if (modus == 12) {getBright (); colorWipe (halo. Color (0, brightVal, brightVal), 50); // cyan}; if (modus == 13) {getBright (); colorWipe (halo. Color (brightVal, 0, brightVal), 50); // lilla/magenta}; hvis (modus == 14) {// de to siste er hastighetskontroll, fordi lysstyrken er dynamisk getBright (); regnbue (brightVal); }; if (modus == 15) {getBright (); rainbowCycle (brightVal); }; forsinkelse (10); // la prosessoren hvile litt}

Trinn 9: Grand Finale

Den store finalen
Den store finalen

Og nå har vi en fantastisk, super-lys liten lampe!

Du kan endre det videre herfra, eller la det være som det er. Du kan endre koden, eller til og med skrive en ny helt. Du kan forstørre basen og legge til batterier. Du kan legge til en vifte. Du kan legge til flere NeoPixels. Listen over alt du kan gjøre med dette er nesten uendelig. Jeg sier "nesten" fordi jeg er ganske sikker på at vi fremdeles ikke har teknologien til å konvertere dette til en miniportalgenerator (dessverre), men bortsett fra slike ting, er den eneste grensen fantasien din (og til en viss grad, som jeg har funnet nylig, verktøyene i verkstedet ditt). Men hvis du ikke har verktøyene, ikke la det stoppe deg, hvis du virkelig vil gjøre noe, er det alltid en måte.

Det er en del av poenget med dette prosjektet, for å bevise for meg selv (og i mindre grad verden) at jeg kan lage nyttige ting som andre mennesker også vil like, selv om alt jeg har er en virkelig søppelhaug av gammelt og skrotet komponenter og en beholder med Arduino -rekvisita.

Jeg slutter her, fordi jeg synes denne ble ganske bra. Hvis du har et forslag til forbedring, eller et spørsmål om metodene mine, kan du legge igjen en kommentar nedenfor. Hvis du har laget dette, ta et bilde, vi vil alle se det!

Ikke glem å stemme hvis du liker dette!

Som alltid er dette prosjektene til Dangerously Explosive, hans livslange oppdrag, "Å frimodig bygge det du vil bygge, og mer!"

Du kan finne resten av prosjektene mine her.

Takk for at du leser, og Happy Making!

Anbefalt: