Innholdsfortegnelse:

Interaktiv geodetisk LED -kuppel: 15 trinn (med bilder)
Interaktiv geodetisk LED -kuppel: 15 trinn (med bilder)

Video: Interaktiv geodetisk LED -kuppel: 15 trinn (med bilder)

Video: Interaktiv geodetisk LED -kuppel: 15 trinn (med bilder)
Video: Физик РАЗВЕРНУЛ Большой Взрыв! Квантовые петли Абхая Аштекара 2024, November
Anonim
Image
Image
Interaktiv geodetisk LED -kuppel
Interaktiv geodetisk LED -kuppel
Interaktiv geodetisk LED -kuppel
Interaktiv geodetisk LED -kuppel
Interaktiv geodetisk LED -kuppel
Interaktiv geodetisk LED -kuppel

Jeg konstruerte en geodesisk kuppel bestående av 120 trekanter med en LED og sensor i hver trekant. Hver LED kan adresseres individuelt, og hver sensor er innstilt spesielt for en enkelt trekant. Kuppelen er programmert med en Arduino for å lyse opp og produsere et MIDI -signal avhengig av hvilken trekant du plasserer hånden din.

Jeg designet kuppelen til å være en morsom skjerm som får folk til å interessere seg for lys, elektronikk og lyd. Fordi kuppelen deler seg fint i fem deler, designet jeg kuppelen til å ha fem separate MIDI -utganger som hver kan ha en annen lyd. Dette gjør kuppelen til et gigantisk musikkinstrument, ideelt for å spille musikk med flere mennesker samtidig. I tillegg til å spille musikk, programmerte jeg også kuppelen for lysshow og spilte en gjengivelse av Simon og Pong. Den endelige strukturen er litt mer enn en meter i diameter og 70 cm høy, og er hovedsakelig konstruert med tre-, akryl- og 3D -trykte deler.

Det er flere flotte instrukser på LED -bord og terninger som inspirerte meg til å starte dette prosjektet. Imidlertid ønsket jeg å prøve å arrangere lysdiodene i en annen geometri. Jeg kunne ikke tenke meg en bedre struktur for prosjektet enn en geodesisk kuppel, som også er godt dokumentert på Instructables. Så dette prosjektet er en remiks/blanding av LED -bord og geodesiske kupler. Nedenfor er lenker til LED -bordet og geodetiske kuppelinstruksjoner som jeg sjekket ut i begynnelsen av prosjektet.

LED -bord og terninger:

www.instructables.com/id/RGB-LED-Pixel-Touc…

www.instructables.com/id/Touch-LED-Table-Re…

www.instructables.com/id/Led-Cube-8x8x8/

www.instructables.com/id/500-LED-Pixel-RGB-…

Geodetisk kuppel:

www.instructables.com/id/Folding-Geodesic-D…

www.instructables.com/id/Geodesic-dome-kit/

Trinn 1: Forsyningsliste

Tilbudsliste
Tilbudsliste
Tilbudsliste
Tilbudsliste
Tilbudsliste
Tilbudsliste

Materialer:

1. Tre for kuppelstøtter og kuppelbunn (mengden avhenger av kuppelens type og størrelse)

2. Adresserbar LED -stripe (16,4ft/5m adresserbar farge LED -pikselstrimmel 160leds Ws2801 Dc5v)

3. Arduino Uno (Atmega328 - montert)

4. Prototypplate (Penta Angel Double-Side Prototype PCB Universal (7x9cm))

5. Akryl for diffusjon av lysdioder (støpt akrylark, klart, 12 "x 12" x 0,118 "størrelse)

6. Strømforsyning (Aiposen 110/220V til DC12V 30A 360W bryter strømforsyningsdriver)

7. Buck-omformer for Arduino (RioRand LM2596 DC-DC Buck Converter 1.23V-30V)

8. Buck -omformer for lysdioder og sensorer (DROK Mini Electric Buck Voltage Converter 15A)

9. 120 IR -sensorer (Infrarød hindringssensormodul)

10. Fem 16 -kanals multiplexere (Analog/Digital MUX Breakout - CD74HC4067)

11. Seks 8 -kanals multiplexere (Multiplexer Breakout - 8 Channel (74HC4051))

12. Fem 2 -kanals multiplexere (MAX4544CPA+)

13. Wire wrap wire (PCB Lodding 0.25mm Tinnbelagt kobberledning Dia Wire-wrapping Wire 305M 30AWG Red)

14. Tilkoblingskabel (solid kjerne, 22 AWG)

15. Pinhoder (Gikfun 1 x 40 Pin 2.54mm Single Row Breakaway Male Pin Header)

16. Fem MIDI-kontakter (brødbrettvennlige MIDI-kontakter (5-pinners DIN))

17. Ti 220ohm motstander for MIDI -kontakter

18. Stand-off avstandsstykker for montering av elektronikk til kuppel (Stand-off Spacer Hex M3 Hann x M3 Kvinne)

19. Gjengeadaptere for å koble avstandsstykker til tre (E-Z Lok gjenget innsats, messing, knivtråd)

20. Epoxy eller Gorilla Superlim

21. Elektrisk tape

22. Lodding

Verktøy:

1. Loddestasjon

2. Motorbor

3. Sirkelsag

4. Orbital slipemaskin

5. Jiggsag

6. Gjærsag

7. Vinkelmåler

8. 3D -skriver

9. Wire cutters

10. Wire wrap -verktøy

11. Laserskjærer for kutting av LED -plater (valgfritt)

12. CNC -butikk for kuppelbasis (valgfritt)

Trinn 2: Design av den geodesiske kuppelen

Design av Geodesic Dome
Design av Geodesic Dome
Design av Geodesic Dome
Design av Geodesic Dome

Som jeg nevnte i introen, er det flere online kilder for å bygge din egen geodesiske kuppel. Disse nettstedene tilbyr kuppelkalkulatorer som bestemmer lengden på hver side (dvs. stiver) og antall kontakter som kreves for hvilken type kuppel du vil bygge. Kompleksiteten til en geodesisk kuppel (dvs. tettheten av trekanter) er spesifisert av sin klasse (1V, 2V, 3V, og så videre), med høyere kompleksitet som blir en bedre tilnærming til en perfekt sfærisk overflate. For å bygge din egen kuppel må du først velge en kuppeldiameter og klasse.

Jeg brukte et nettsted som heter Domerama for å hjelpe meg med å designe en 4V kuppel som ble avkortet til 5/12 av en kule med en radius på 40 cm. For denne typen kuppel er det seks stiver i forskjellige lengder:

30 X “A” - 8,9 cm

30 X “B” - 10,4 cm

50 X “C” - 12,4 cm

40 X “D” - 12,5 cm

20 X “E” - 13,0 cm

20 X “F” - 13,2 cm

Det er totalt 190 stiver som legger til opptil 2223 cm (73 fot) materiale. Jeg brukte 1x3 (3/4 "× 2-1/2") furutømmer til stagene i denne kuppelen. For å koble til stiverne designet jeg og 3D -trykte kontakter med Autocad. STL -filene er tilgjengelige for nedlasting på slutten av dette trinnet. Antall kontakter for en 4V 5/12 dome er:

20 X 4-kontakt

6 X 5-kontakt

45 X 6-kontakt

I det neste trinnet beskriver jeg hvordan denne kuppelen er konstruert med trebjelker og 3D -trykte kontakter jeg designet.

Trinn 3: Konstruere kuppel med stiver og kontakter

Konstruere kuppel med stiver og kontakter
Konstruere kuppel med stiver og kontakter
Konstruere kuppel med stiver og kontakter
Konstruere kuppel med stiver og kontakter
Konstruere kuppel med stiver og kontakter
Konstruere kuppel med stiver og kontakter
Konstruere kuppel med stiver og kontakter
Konstruere kuppel med stiver og kontakter

Ved å bruke beregningene fra Domerama for en 4V 5/12 kuppel, kuttet jeg stiverne med en sirkelsag. De 190 stiverne ble merket og lagt i en eske etter kutting. De 71 kontaktene (20 fire-kontakter, 6 fem-kontakter og 45 seks-kontakter) ble 3D-trykt ved hjelp av en Makerbot. Trebjelkene ble satt inn i kontaktene i henhold til diagrammet laget av Domerama. Jeg startet konstruksjonen fra toppen og beveget meg radialt utover.

Etter at alle fjærbeinene var tilkoblet, fjernet jeg en stiver om gangen og tilførte epoksy til treverket og kontakten. Kontaktene ble designet for å ha fleksibilitet i hvordan de koblet konstruksjonene, så det var viktig å sjekke symmetrien til kuppelen før du legger til epoksy.

Trinn 4: Laserskjæring og montering av grunnplater

Laserskjæring og montering av grunnplater
Laserskjæring og montering av grunnplater
Laserskjæring og montering av grunnplater
Laserskjæring og montering av grunnplater
Laserskjæring og montering av grunnplater
Laserskjæring og montering av grunnplater
Laserskjæring og montering av grunnplater
Laserskjæring og montering av grunnplater

Nå som kuppelens skjelett er konstruert, er det på tide å kutte de trekantede bunnplatene. Disse bunnplatene er festet til bunnen av stiverne, og brukes til å montere lysdiodene på kuppelen. Jeg kuttet i utgangspunktet bunnplatene av 5 mm (3/16”) tykk kryssfiner ved å måle de fem forskjellige trekanter som er på kuppelen: AAB (30 trekanter), BCC (25 trekanter), DDE (20 trekanter), CDF (40 trekanter)) og EEE (5 trekanter). Dimensjonene på hver side og trekantenes form ble bestemt ved hjelp av en kuppelkalkulator (Domerama) og litt geometri. Etter å ha kuttet testbunnplater med et stikksag, tegnet jeg trekantsdesignet med Coral Draw, og klippet de resterende grunnplatene med en laserskjærer (mye raskere!). Hvis du ikke har tilgang til en laserskjærer, kan du tegne bunnplatene på kryssfiner ved hjelp av en linjal og vinkelmåler og kutte dem alle med et stikksag. Når bunnplatene er kuttet, vendes kuppelen og platene limes til kuppelen ved hjelp av trelim.

Trinn 5: Oversikt over elektronikk

Oversikt over elektronikk
Oversikt over elektronikk

Vist i figuren ovenfor er en skjematisk oversikt over elektronikken for kuppelen. En Arduino Uno brukes til å skrive og lese signaler for kuppelen. For å lyse opp kuppelen, kjøres en RGB LED -stripe over kuppelen slik at en LED er plassert ved hver av de 120 trekanter. For informasjon om hvordan en LED -stripe fungerer, sjekk ut denne instruksen. Hver LED kan adresseres separat ved hjelp av Arduino, som produserer serielle data og klokkesignal for stripen (se A0 og A1 -pinnen i skjematisk). Med stripen og disse to signalene alene kan du få en fantastisk lysende kuppel. Det er andre måter å skrive signaler på mye LED fra en Arduino, for eksempel Charlieplexing og skiftregistre.

For å samhandle med kuppelen, satte jeg opp en IR -sensor over hver LED. Disse sensorene brukes til å oppdage når noens hånd er nær en trekant på kuppelen. Fordi hver trekant på kuppelen har sin egen IR -sensor og det er 120 trekanter, må du gjøre en slags multipleksing før Arduino. Jeg bestemte meg for å bruke fem 24-kanals multiplexere (MUX) for de 120 sensorene på kuppelen. Her er en instruksjon om multiplexing, hvis du ikke er kjent. En 24 -kanals MUX krever fem styresignaler. Jeg valgte pinner 8-12 på Arduino, så jeg kunne gjøre portmanipulering (se trinn 10 for mer informasjon). Utgangen til MUX-kortene leses inn ved hjelp av pinnene 3-7.

Jeg inkluderte også fem MIDI -utganger på kuppelen slik at den kunne produsere lyd (trinn 11). Med andre ord kan fem personer spille kuppelen samtidig med at hver utgang spiller en annen lyd. Det er bare en TX -pin på Arduino, så fem MIDI -signaler krever demultiplexering. Fordi MIDI -utgangen produseres på et annet tidspunkt enn IR -sensoravlesningen, brukte jeg de samme styresignalene.

Etter at alle IR -sensorinngangene er lest inn i Arduino, kan kuppelen lyse opp og spille lyder uansett hvordan du programmerer Arduino. Jeg har noen få eksempler i trinn 14 av denne instruksen.

Trinn 6: Montering av lysdioder på kuppel

Montering av lysdioder på kuppel
Montering av lysdioder på kuppel
Montering av lysdioder på kuppel
Montering av lysdioder på kuppel
Montering av lysdioder på kuppel
Montering av lysdioder på kuppel

Fordi kuppelen er så stor, må LED -stripen kuttes for å plassere en LED på hver trekant. Hver LED er limt på trekanten ved hjelp av superlim. På hver side av lysdioden bores et hull gjennom bunnplaten for kabler som skal føres gjennom kuppelen. Jeg loddet deretter tilkoblingskabelen ved hver kontakt på LED-en (5V, jord, klokke, signal) og førte ledningene gjennom bunnplaten. Disse ledningene er kuttet slik at de er lange nok til å nå neste LED på kuppelen. Ledningene trekkes gjennom til neste LED, og prosessen fortsetter. Jeg koblet lysdiodene til i en konfigurasjon som ville minimere mengden ledning som trengs, samtidig som det var fornuftig å adressere lysdiodene ved hjelp av Arduino senere. En mindre kuppel ville eliminere behovet for å kutte stripen og spare mye tid på lodding. Et annet alternativ er å bruke separate RGB -lysdioder med skiftregistre.

Seriell kommunikasjon til stripen oppnås ved hjelp av to pinner (en data- og klokkepinne) fra Arduino. Med andre ord blir dataene for belysning av kuppelen sendt fra en LED til den neste når den forlater datapinnen. Her er eksempelkode endret fra dette Arduino -forumet:

// Få hele kuppelen til å øke og redusere intensiteten til enkeltfarger

#define numLeds 120 // Antall lysdioder // OUTPUT PINS // int clockPin = A1; // definere klokkepinne int dataPin = A0; // definere datapinne // VARIABLES // int red [numLeds]; // Initialiser array for LED strip int green [numLeds]; // Initialiser array for LED strip int blue [numLeds]; // Initialiser matrisen for LED -stripe // KONSTANT dobbel skalaA = {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0,3, 0,2, 0,1}; // brøkdel av intensiteten til lysdioder ugyldig oppsett () {pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); memset (rød, 0, numLeds); memset (grønn, 0, numLeds); memset (blå, 0, numLeds); } void updatestring (int redA [numLeds], int greenA [numLeds], int blueA [numLeds]) {for (int i = 0; i <numLeds; i ++) {shiftOut (dataPin, clockPin, MSBFIRST, redA ); shiftOut (dataPin, clockPin, MSBFIRST, greenA ); shiftOut (dataPin, clockPin, MSBFIRST, blueA ); }} void loop () {for (int p = 0; p <20; p ++) // loop for å øke lysintensiteten til dome {dobbel skala = skalaA [p]; forsinkelse (20); for (int i = 0; i <numLeds; i ++) // bla gjennom alle lysdioder {rød = 255 * skala; grønn = 80 * skala; blå = 0; } oppdateringsstreng (rød, grønn, blå); // oppdater led strip}}

Trinn 7: Design og implementering av sensorfeste

Sensormontering Design og implementering
Sensormontering Design og implementering
Sensormontering Design og implementering
Sensormontering Design og implementering
Sensormontering Design og implementering
Sensormontering Design og implementering

Jeg bestemte meg for å bruke IR -sensorer for kuppelen. Disse sensorene har IR -LED og mottaker. Når et objekt kommer foran sensoren, reflekteres noe IR -stråling fra IR -LED -en mot mottakeren. Jeg startet dette prosjektet med å lage mine egne IR -sensorer, som var basert på Richardouvinas instruerbare. All lodding tok for lang tid, så jeg kjøpte 120 IR -sensorer fra eBay som hver produserer en digital utgang. Terskelen til sensoren er satt med et potensiometer på brettet, slik at utgangen bare er høy når en hånd er nær den trekanten.

Hver trekant består av en kryssfiner LED-baseplate, et ark diffusivt akryl montert ca 2,5 cm over LED-platen, og en IR-sensor. Sensoren for hver trekant ble montert på et ark tynt kryssfiner formet som en femkant eller sekskant avhengig av posisjonen på kuppelen (se figuren ovenfor). Jeg boret hull i IR-sensorbasen for å montere IR-sensorene, og koblet deretter bakken og 5V-pinnene med wire-wrap wire og et wire-wrap-verktøy (røde og svarte ledninger). Etter å ha koblet bakken og 5V, pakket jeg inn lang wire-wire på hver utgang (gul), bakken og 5V for å løpe gjennom kuppelen.

De sekskantede eller femkantede IR -sensorfestene ble deretter epoksyet til kuppelen, rett over 3D -trykte kontakter, slik at ledningen kunne løpe gjennom kuppelen. Ved å ha sensorene over kontaktene, kunne jeg også få tilgang til og justere potensiometrene på IR -sensorene som styrer sensorenes følsomhet. I neste trinn vil jeg beskrive hvordan utgangene til IR -sensorene er koblet til multiplexere og leses inn i Arduino.

Trinn 8: Multiplexing Sensor Output

Multiplexing sensorutgang
Multiplexing sensorutgang
Multiplexing sensorutgang
Multiplexing sensorutgang
Multiplexing sensorutgang
Multiplexing sensorutgang

Fordi Arduino Uno bare har 14 digitale I/O -pinner og 6 analoge inngangspinner og det er 120 sensorsignaler som må leses, krever kuppelen at multiplexere leser inn alle signalene. Jeg valgte å konstruere fem 24-kanals multiplexere, som hver leste 24 av IR-sensorene (se figuren for elektronikkoversikt). 24-kanals MUX består av et 8-kanals MUX breakout board, 16-channel MUX breakout board og 2-channel MUX. Pin -hoder ble loddet til hvert breakout -bord slik at de kunne kobles til prototypebrett. Ved hjelp av et wire-wrap-verktøy koblet jeg deretter til jord, 5V og kontrollsignalpinnene på MUX breakout-kortene.

En 24-kanals MUX krever fem kontrollsignaler, som jeg valgte å koble til pin 8-12 på Arduino. Alle fem 24-kanals MUX mottar de samme kontrollsignalene fra Arduino, så jeg koblet ledningen fra Arduino-pinnene til 24-kanals MUX. De digitale utgangene til IR-sensorene er koblet til inngangspinnene på 24-kanals MUX slik at de kan leses inn i serie til Arduino. Fordi det er fem separate pinner for lesing i alle 120 sensorutganger, er det nyttig å forestille seg at kuppelen deles i fem separate seksjoner bestående av 24 trekanter (sjekk fargene på kuppelen i figur).

Ved å bruke Arduino-portmanipulering kan du raskt øke kontrollsignalene som sendes av pinner 8-12 til multiplexerne. Jeg har vedlagt noen eksempelkode for drift av multiplexerne her:

int numChannel = 24;

// UTGANGER // int s0 = 8; // MUX -kontroll 0 - PORTbD int s1 = 9; // MUX -kontroll 1 - PORTb int s2 = 10; // MUX -kontroll 2 - PORTb int s3 = 11; // MUX -kontroll 3 - PORTb int s4 = 12; // MUX -kontroll 4 - PORTb // INNGANGER // int m0 = 3; // MUX -inngang 0 int m1 = 4; // MUX -inngang 1 int m2 = 5; // MUX -inngang 2 int m3 = 6; // MUX -inngang 3 int m4 = 7; // MUX -inngang 4 // VARIABLES // int arr0r; // digital lesing fra MUX0 int arr1r; // digital lesing fra MUX1 int arr2r; // digital lesing fra MUX2 int arr3r; // digital lesing fra MUX3 int arr4r; // digital lesing fra MUX4 void setup () {// legg oppsettskoden her, for å kjøre en gang: DDRB = B11111111; // setter Arduino -pinner 8 til 13 som innganger pinMode (s0, OUTPUT); pinMode (s1, OUTPUT); pinMode (s2, OUTPUT); pinMode (s3, OUTPUT); pinMode (s4, OUTPUT); pinMode (m0, INNGANG); pinMode (m1, INNGANG); pinMode (m2, INNGANG); pinMode (m3, INNGANG); pinMode (m4, INNGANG); } void loop () {// legg hovedkoden din her for å kjøre gjentatte ganger: PORTB = B00000000; // SET kontrollpinner for mux low for (int i = 0; i <numChannel; i ++) {// Digital leseutgang fra MUX0 - MUX4 for IR -sensor i // Hvis IR -sensor er LO, berøres trekanten av spilleren. arr0r = digitalRead (m0); // lesing fra Mux 0, IR -sensor i arr1r = digitalRead (m1); // lesing fra Mux 1, IR -sensor i arr2r = digitalRead (m2); // lesing fra Mux 2, IR -sensor i arr3r = digitalRead (m3); // lesing fra Mux 3, IR -sensor i arr4r = digitalRead (m4); // lesing fra Mux 4, IR -sensor i // GJØR NOE MED MUX -INNGANGER ELLER LAGR I ET ARRAY HER // PORTB ++; // økningskontrollsignaler for MUX}}

Trinn 9: Spredning av lys med akryl

Spredende lys med akryl
Spredende lys med akryl
Spredende lys med akryl
Spredende lys med akryl
Spredende lys med akryl
Spredende lys med akryl

For å spre lyset fra lysdiodene, slipte jeg gjennomsiktig akryl med en sirkelslipemaskin. Slipemaskinen ble flyttet over begge sider av akrylen i en figur-8-bevegelse. Jeg syntes denne metoden var mye bedre enn spray i "frostet glass".

Etter sliping og rensing av akryl, brukte jeg en laserskjærer til å kutte ut trekanter for å passe over lysdiodene. Det er mulig å kutte akrylen ved hjelp av et akrylskjæreverktøy eller til og med et stikksag hvis akrylen ikke sprekker. Akrylen ble holdt over lysdiodene med 5 mm tykke kryssfinerrektangler som også ble kuttet med en laserskjærer. Disse små planker ble limt til stagene på kuppelen, og akryltrekantene ble epoksyet på plankene.

Trinn 10: Lag musikk med kuppelen ved hjelp av MIDI

Lage musikk med kuppelen ved hjelp av MIDI
Lage musikk med kuppelen ved hjelp av MIDI
Lage musikk med kuppelen ved hjelp av MIDI
Lage musikk med kuppelen ved hjelp av MIDI
Lage musikk med kuppelen ved hjelp av MIDI
Lage musikk med kuppelen ved hjelp av MIDI

Jeg ville at kuppelen skulle kunne produsere lyd, så jeg satte opp fem MIDI -kanaler, en for hvert delsett av kuppelen. Du må først kjøpe fem MIDI -kontakter og koble den til som vist i skjemaet (se denne opplæringen fra Arduino -støtte for mer informasjon).

Fordi det bare er en overføringsseriell pin på Arduino Uno (pin 2 merket som TX-pin), må du de-multiplexe signalene som sendes til de fem MIDI-kontaktene. Jeg brukte de samme kontrollsignalene (pinne 8-12), fordi MIDI-signaler sendes på et annet tidspunkt enn når IR-sensorene leses inn i Arduino. Disse styresignalene sendes til en 8-kanals demultiplexer slik at du styrer hvilken MIDI-kontakt som mottar MIDI-signalet som er opprettet av Arduino. MIDI -signalene ble generert av Arduino med det fantastiske MIDI -signalbiblioteket laget av Francois Best. Her er noen eksempler på kode for å produsere flere MIDI -utganger til forskjellige MIDI -kontakter med en Arduino Uno:

#include // inkluderer MIDI -bibliotek

#define numChannel 24 // Antall IR per Triangle #define numSections 5 // antall seksjoner i dome, antall 24channel MUX, antall MIDI -kontakter // OUTPUTS // int s0 = 8; // MUX -kontroll 0 - PORTbD int s1 = 9; // MUX -kontroll 1 - PORTb int s2 = 10; // MUX -kontroll 2 - PORTb int s3 = 11; // MUX -kontroll 3 - PORTb int s4 = 12; // MUX -kontroll 4 - PORTb // INNGANGER // int m0 = 3; // MUX -inngang 0 int m1 = 4; // MUX -inngang 1 int m2 = 5; // MUX -inngang 2 int m3 = 6; // MUX -inngang 3 int m4 = 7; // MUX -inngang 4 // VARIABLES // int arr0r; // digital lesing fra MUX0 int arr1r; // digital lesing fra MUX1 int arr2r; // digital lesing fra MUX2 int arr3r; // digital lesing fra MUX3 int arr4r; // digital lesing fra MUX4 int midArr [numSections]; // Lagre om et notat har blitt trykket av en av spillerne int note2play [numSections] eller ikke; // Lagre notat som skal spilles av hvis sensoren berøres int notater [numChannel] = {60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83}; int pauseMidi = 4000; // pause mellom midisignaler MIDI_CREATE_DEFAULT_INSTANCE (); void setup () {// legg oppsettskoden her for å kjøre en gang: DDRB = B11111111; // setter Arduino -pinner 8 til 13 som innganger MIDI.begin (MIDI_CHANNEL_OFF); pinMode (s0, OUTPUT); pinMode (s1, OUTPUT); pinMode (s2, OUTPUT); pinMode (s3, OUTPUT); pinMode (s4, OUTPUT); pinMode (m0, INNGANG); pinMode (m1, INNGANG); pinMode (m2, INNGANG); pinMode (m3, INNGANG); pinMode (m4, INNGANG); } void loop () {// legg hovedkoden din her for å kjøre gjentatte ganger: PORTB = B00000000; // SET kontrollpinner for mux low for (int i = 0; i <numChannel; i ++) {// Digital leseutgang fra MUX0 - MUX4 for IR -sensor i // Hvis IR -sensor er LO, berøres trekanten av spilleren. arr0r = digitalRead (m0); // lesing fra Mux 0, IR -sensor i arr1r = digitalRead (m1); // lesing fra Mux 1, IR -sensor i arr2r = digitalRead (m2); // lesing fra Mux 2, IR -sensor i arr3r = digitalRead (m3); // lesing fra Mux 3, IR -sensor i arr4r = digitalRead (m4); // lesing fra Mux 4, IR -sensor i hvis (arr0r == 0) // Sensor på seksjon 0 ble blokkert {midArr [0] = 1; // Spiller 0 har truffet et notat, sett HI slik at det er MIDI -utgang for spiller 0 note2play [0] = notater ; // Merk for å spille for spiller 0} hvis (arr1r == 0) // Sensor på seksjon 1 ble blokkert {midArr [1] = 1; // Spiller 0 har truffet et notat, sett HI slik at det er MIDI -utgang for spiller 0 note2play [1] = notater ; // Merk for å spille for spiller 0} hvis (arr2r == 0) // Sensor på seksjon 2 ble blokkert {midArr [2] = 1; // Spiller 0 har truffet et notat, sett HI slik at det er MIDI -utgang for spiller 0 note2play [2] = notater ; // Merk for å spille for spiller 0} hvis (arr3r == 0) // Sensor på seksjon 3 ble blokkert {midArr [3] = 1; // Spiller 0 har truffet et notat, sett HI slik at det er MIDI -utgang for spiller 0 note2play [3] = notater ; // Merk for å spille for spiller 0} hvis (arr4r == 0) // Sensor på seksjon 4 ble blokkert {midArr [4] = 1; // Spiller 0 har truffet et notat, sett HI slik at det er MIDI -utgang for spiller 0 note2play [4] = notater ; // Merknad for å spille for spiller 0} PORTB ++; // økningskontrollsignaler for MUX} updateMIDI (); } ugyldig oppdateringMIDI () {PORTB = B00000000; // SET kontrollpinner for mux low if (midArr [0] == 1) // Spiller 0 MIDI -utgang {MIDI.sendNoteOn (note2play [0], 127, 1); delayMicroseconds (pauseMidi); MIDI.sendNoteOff (note2play [0], 127, 1); delayMicroseconds (pauseMidi); } PORTB ++; // øke MUX hvis (midArr [1] == 1) // Spiller 1 MIDI -utgang {MIDI.sendNoteOn (note2play [1], 127, 1); delayMicroseconds (pauseMidi); MIDI.sendNoteOff (note2play [1], 127, 1); delayMicroseconds (pauseMidi); } PORTB ++; // øke MUX hvis (midArr [2] == 1) // Spiller 2 MIDI -utgang {MIDI.sendNoteOn (note2play [2], 127, 1); delayMicroseconds (pauseMidi); MIDI.sendNoteOff (note2play [2], 127, 1); delayMicroseconds (pauseMidi); } PORTB ++; // øke MUX hvis (midArr [3] == 1) // Spiller 3 MIDI -utgang {MIDI.sendNoteOn (note2play [3], 127, 1); delayMicroseconds (pauseMidi); MIDI.sendNoteOff (note2play [3], 127, 1); delayMicroseconds (pauseMidi); } PORTB ++; // øke MUX hvis (midArr [4] == 1) // Spiller 4 MIDI -utgang {MIDI.sendNoteOn (note2play [4], 127, 1); delayMicroseconds (pauseMidi); MIDI.sendNoteOff (note2play [4], 127, 1); delayMicroseconds (pauseMidi); } midArr [0] = 0; midArr [1] = 0; midArr [2] = 0; midArr [3] = 0; midArr [4] = 0; }

Trinn 11: Koble til kuppelen

Drift av kuppelen
Drift av kuppelen
Drift av kuppelen
Drift av kuppelen
Drift av kuppelen
Drift av kuppelen
Drift av kuppelen
Drift av kuppelen

Det er flere komponenter som må drives i kuppelen. Du må derfor beregne forsterkerne fra hver komponent for å bestemme strømforsyningen du trenger å kjøpe.

LED -stripen: Jeg brukte omtrent 3,75 meter Ws2801 LED -stripe, som bruker 6,4 W/meter. Dette tilsvarer 24W (3,75*6,4). For å konvertere dette til ampere, bruk Power = current*volt (P = iV), hvor V er spenningen til LED -stripen, i dette tilfellet 5V. Derfor er strømmen fra LEDene 4,8A (24W/5V = 4,8A).

IR -sensorene: Hver IR -sensor trekker omtrent 25mA, totalt 3A for 120 sensorer.

Arduino: 100mA, 9V

Multiplexerne: Det er fem 24 -kanals multiplexere som hver består av en 16 -kanals multiplexer og 8 -kanals multiplexer. 8 -kanals og 16 -kanals MUX bruker hver 100mA. Derfor er det totale strømforbruket til alle MUX 1A.

Ved å legge sammen disse komponentene, forventes det totale strømforbruket å være rundt 9A. LED -stripen, IR -sensorer og multiplexere har inngangsspenning på 5V, og Arduino har 9V inngangsspenning. Derfor valgte jeg en 12V 15A strømforsyning, en 15A buck converter for å konvertere 12V til 5V, og en 3A buck converter for å konvertere 12V til 9V for Arduino.

Trinn 12: Circular Dome Base

Circular Dome Base
Circular Dome Base
Circular Dome Base
Circular Dome Base
Circular Dome Base
Circular Dome Base

Kuppelen hviler på et sirkulært treverk med en femkant skåret ut av midten for enkel tilgang til elektronikken. For å lage denne sirkulære basen ble et 4x6 'ark kryssfiner kuttet ved hjelp av en tre CNC -freser. En stikksag kan også brukes til dette trinnet. Etter at basen ble kuttet, ble kuppelen festet til den ved hjelp av små 2x3”treblokker.

På toppen av basen festet jeg strømforsyningen med epoxy og MUX- og Buck-omformerne med PCB-avstandsstykker. Avstandsstykkene ble festet til kryssfiner ved hjelp av E-Z Lok trådadaptere.

Trinn 13: Pentagon Dome Base

Pentagon Dome Base
Pentagon Dome Base
Pentagon Dome Base
Pentagon Dome Base
Pentagon Dome Base
Pentagon Dome Base

I tillegg til den sirkulære basen konstruerte jeg også en femkantet base for kuppelen med et glassvindu i bunnen. Denne basen og utseende vinduet ble også laget av kryssfiner kuttet med en tre CNC -ruter. Sidene på femkanten er laget av treplanker med den ene siden som har et hull i den for kontaktene å gå gjennom. Ved hjelp av metallbraketter og 2x3 blokkskjøter festes treplankene til femkantbunnen. En strømbryter, MIDI -kontakter og USB -kontakt er festet til et frontpanel som jeg opprettet ved hjelp av en laserskjærer. Hele femkantbunnen skrus til den sirkulære basen beskrevet i trinn 12.

Jeg installerte et vindu i bunnen av kuppelen slik at alle kan se opp i kuppelen for å se elektronikken. Glasset er laget av akrylskåret med en laserskjærer og epokses til et sirkulært stykke kryssfiner.

Trinn 14: Programmering av kuppelen

Det er uendelige muligheter for programmering av kuppelen. Hver syklus av koden tar inn signalene fra IR -sensorene, som angir trekanter som noen har rørt. Med denne informasjonen kan du farge kuppelen med hvilken som helst RGB -farge og/eller produsere et MIDI -signal. Her er noen eksempler på programmer jeg skrev for kuppelen:

Farg kuppelen: Hver trekant går gjennom fire farger når den berøres. Når fargene endres, spilles en arpeggio. Med dette programmet får du farge kuppelen på tusenvis av forskjellige måter.

Kuppelmusikk: Kuppelen er farget med fem farger, hver seksjon tilsvarer en annen MIDI -utgang. I programmet kan du velge hvilke notater hver trekant spiller. Jeg valgte å starte i midten C på toppen av kuppelen, og øke banen etter hvert som trekanter flyttet nærmere basen. Fordi det er fem utganger, er dette programmet ideelt for at flere mennesker skal spille kuppelen samtidig. Ved hjelp av et MIDI -instrument eller MIDI -programvare kan disse MIDI -signalene få til å høres ut som et hvilket som helst instrument.

Simon: Jeg skrev en gjengivelse av Simon, det klassiske minnelyset. En tilfeldig rekke lys lyses opp en om gangen over hele kuppelen. I hver tur må spilleren kopiere sekvensen. Hvis spilleren matcher sekvensen riktig, blir det lagt til et ekstra lys i sekvensen. Den høye poengsummen er lagret på en av seksjonene i kuppelen. Dette spillet er også veldig morsomt å spille med flere mennesker.

Pong: Hvorfor ikke spille pong på en kuppel? En ball forplanter seg over kuppelen til den treffer padlen. Når den gjør det, produseres et MIDI -signal som indikerer at padlen traff ballen. Den andre spilleren må deretter lede padlen langs bunnen av kuppelen slik at den treffer ballen tilbake.

Trinn 15: Bilder av Fullført Dome

Bilder av Fullført Dome
Bilder av Fullført Dome
Bilder av Fullført Dome
Bilder av Fullført Dome
Bilder av Fullført Dome
Bilder av Fullført Dome
Bilder av Fullført Dome
Bilder av Fullført Dome
Arduino -konkurransen 2016
Arduino -konkurransen 2016
Arduino -konkurransen 2016
Arduino -konkurransen 2016

Storpris i Arduino -konkurransen 2016

Remix -konkurranse 2016
Remix -konkurranse 2016
Remix -konkurranse 2016
Remix -konkurranse 2016

Andre pris i Remix -konkurransen 2016

Make it Glow Contest 2016
Make it Glow Contest 2016
Make it Glow Contest 2016
Make it Glow Contest 2016

Andre pris i Make it Glow Contest 2016

Anbefalt: