Innehållsförteckning:

Väderbaserad musikgenerator (ESP8266 baserad midi -generator): 4 steg (med bilder)
Väderbaserad musikgenerator (ESP8266 baserad midi -generator): 4 steg (med bilder)

Video: Väderbaserad musikgenerator (ESP8266 baserad midi -generator): 4 steg (med bilder)

Video: Väderbaserad musikgenerator (ESP8266 baserad midi -generator): 4 steg (med bilder)
Video: Dot Matrix display Mk2 2024, November
Anonim
Väderbaserad musikgenerator (ESP8266 baserad midi -generator)
Väderbaserad musikgenerator (ESP8266 baserad midi -generator)
Väderbaserad musikgenerator (ESP8266 baserad midi -generator)
Väderbaserad musikgenerator (ESP8266 baserad midi -generator)

Hej, idag ska jag förklara hur du gör din egen lilla väderbaserade musikgenerator.

Den är baserad på en ESP8266, som är ungefär som en Arduino, och den svarar på temperatur, regn och ljusintensitet.

Förvänta dig inte att det kommer att göra hela låtar eller ackordprogressioner. Det är mer som Generativ musik som folk ibland gör med Modular Synthesizers. Men det är lite mindre slumpmässigt då, det håller sig till exempel till vissa skalor.

Tillbehör

ESP8266 (jag använder Feather Huzzah ESP8266 från Adafruit)

BME280 temperatur-, luftfuktighets- och barometrisk trycksensor (I2C -versionen)

Arduino regnsensor

25K LDR (ljusberoende motstånd)

Några motstånd (två 47, en 100, en 220 och en 1k Ohm)

Kvinna Midi -kontakt (5 Pin Din) lämplig för kretskortmontering

Jumper Wires

Brödbräda eller någon form av prototypbräda

Dator, jag kommer att använda en som kör Windows 8.1, men den borde fungera på alla operativsystem så vitt jag vet.

Valfritt: 1250 mAh LiPo -batteri med JST -kontakt från Adafruit (endast kompatibel med vissa ESP -enheter)

Steg 1: Steg 1: Programvara

Först och främst behöver du Arduino IDE.

Då behöver du SiLabs CP2104 -drivrutinen och ESP8266 Board Package.

Detta gör att din dator kan programmera ESP via den inbyggda UART och gör att Arduino IDE kan programmera ESP.

Du hittar all information om IDE, förar- och brädpaket på denna sida på Adafruit -webbplatsen.

Du behöver också Arduino Midi -biblioteket för att kunna skicka Midi -data. Det går att göra utan, men det här gör allt mycket enklare.

För att kommunicera med BME280 använde jag detta BME280-I2C-ESP32-bibliotek. (Detta är för I2C -versionen av BME280)

Och det biblioteket kräver i sin tur Adafruit Unified Sensor Driver. Det här är inte första gången jag behöver det här biblioteket för att kunna använda ett annat bibliotek utan problem, så jag har alltid bokmärket det här biblioteket någonstans.

Steg 2: Steg 2: Hårdvara

Steg 2: Hårdvara
Steg 2: Hårdvara
Steg 2: Hårdvara
Steg 2: Hårdvara
Steg 2: Hårdvara
Steg 2: Hårdvara

Okej, så äntligen kommer vi till de bra grejerna, hårdvaran.

Som nämnts använde jag denna Adafruit ESP, men det borde bara fungera bra med en NodeMCU. Jag rekommenderar V2 -versionen eftersom jag tror att den passar mycket bättre på en brödbräda och du kan få dem väldigt billigt från eBay eller AliExpress. Jag gillar det faktum att Adafruit ESP har en snabbare CPU, levereras med en kvinnlig JST -kontakt för en LiPo och en laddningskrets. Det är också lite lättare att räkna ut vilken Pin du använder. Jag tror att på en NodeMCU är stiftet märkt D1 faktiskt GPIO5 till exempel, så du behöver alltid ett Pinout -diagram till hands. Inte en stor fråga alls, men bara bekvämt för nybörjare märkte de Adafruit ett så tydligt.

Låt oss först ansluta BME280, eftersom det finns några variationer i den här modellen. Som du kan se på bilderna har min ett enda stort hål, men det finns också några med 2 hål. Du kan se att den har 4 in- och utgångar, 1 för ström, en för jord och en SCL och SDA. Det betyder att den kommunicerar via I2C. Jag tror att andra modeller kommunicerar via SPI. Och i vissa kan du välja antingen SPI eller I2C. SPI kan kräva ett annat bibliotek eller åtminstone annan kod och olika kablar. Jag tror också att S i SPI står för Serial och jag kan inte säga om detta kommer att störa Midi -delen av detta projekt eftersom det också fungerar via seriell anslutning.

Att ansluta denna BME är ganska rakt fram. På ESP8266 kan du se stift 4 och 5 märkta SDA respektive SCL. Anslut bara dessa stift direkt till SDA- och SCL -stiftet på BME. Naturligtvis ansluter du också VIN till brädbrädans positiva skena och GND till den negativa skenan. De är i sin tur anslutna till 3V3- och GND -stiftet på ESP.

Därefter ansluter vi LDR. I Fritzing -exemplet kan du se de 3,3 volt som går genom ett motstånd, sedan delas det till LDR och ett annat motstånd. Sedan efter LDR delas det igen till ett motstånd och till ADC.

Detta för att skydda ESP från att få för höga spänningar och för att se till att det får läsbara värden. ADC klarar 0-1 volt men 3V3 levererar 3,3 volt. Det kommer förmodligen inte att spränga något om du går över 1 volt, men det kommer inte att fungera bra.

Så först använder vi en spänningsdelare med 220 och 100 ohm motstånd för att sänka spänningen från 3,3 till 1,031 volt. Sedan bildar 25k ohm LDR och 1k ohm motståndet en annan spänningsavståndare som tar ner spänningen var som helst mellan 1,031 och 0 volt beroende på mängden ljus som LDR får.

Sedan har vi regnsensorn. En del säger FC-37, den andra delen säger HW-103. Jag köpte precis den första jag hittade på Ebay som sa att den klarar 3,3 och 5 volt. (Jag tror att de alla kan).

Detta är ganska rakt fram, vi kan använda en analog utgång, men vi kan bara vrida den lilla Trimpot för att göra sensorn så känslig som vi vill (och vi använde redan vår ena analoga stift på ESP). Som med de andra sensorerna måste vi leverera ström från Positivskena och ansluta den till markskenan. Ibland varierar dock stifternas ordning. På min är det VCC, Ground, Digital, Analog, men på Fritzing -bilden är det annorlunda. Men om du bara är uppmärksam bör detta vara lätt att få rätt.

Och slutligen, Midi Jack. På min brödbräda kan den inte sitta på kanten av brödbrädan, eftersom stiften inte alla är i linje. Om detta stör dig skulle jag försöka få en brödbräda i en fysisk butik. Eller inspektera bilderna väldigt bra.

Som du kan se från schemat, går den positiva spänningen och den seriella signalen båda genom ett 47 ohm motstånd.

Om du gör detta projekt med en Arduino Uno till exempel, se till att använda 220 ohm motstånd !! Dessa ESP: s fungerar med 3,3 V -logik, men de flesta Arduino använder 5,0 V så att du måste begränsa strömmen som går genom Midi -kabeln mer.

Och slutligen koppla mittstiftet till markskenan. De andra 2 stiften från 5 Pin Din används inte.

Steg 3: Steg 3: Kod

Och äntligen har vi koden!

I denna Zip -fil lägger jag 2 skisser. 'LightRainTemp' testar helt enkelt alla sensorer och skickar tillbaka deras värden. (Se till att öppna terminalfönstret!)

Och naturligtvis har vi LRTGenerativeMidi (LRT står för Light, Rain, Temperature) skiss.

Inuti kan du hitta en massa förklaringar i kommentarer om vad som händer. Jag tänker inte gå in på hur jag skrev det hela, det skulle ta timmar. Om du vill veta var du ska börja med något sådant här har jag några andra projekt i åtanke. En liten Random Riff -generator med några knappar och en Sequencer med en massa funktioner som jag inte kan hitta på andra modeller.

Men de måste jag göra klart med att designa och koda först. Låt mig veta om du vill hålla dig uppdaterad om andra projekt. Jag har inte bestämt mig för om jag ska göra fler instruktioner eller göra en videoserie.

Steg 4: Steg 4: Anslut och testa det

Och nu är det dags att testa det!

Anslut helt enkelt en Midi -kabel, se till att ställa in ditt Synth/Keyboard för att svara på kanal 1 eller ändra kanalen i Arduino -koden och se om det fungerar!

Jag är verkligen nyfiken på att se och höra vad du gör med det. Om du gör ändringar, uppgraderingar, tweaks (som till ljussensorn och temperaturvärden. Utanför kan det fungera bättre eller sämre än inuti) vad som helst.

Jag är också nyfiken på att se om det fungerar bra med alla Synthesizers. På min Volca Bass fungerar den perfekt, men på min Neutron fastnar LFO så snart jag skickar en Midi Note. Det är bra när jag startar om det, men det är konstigt. Jag är inte säker på om det finns något i Midi -biblioteket eller i min kod, jag kan försöka göra det utan ett bibliotek snart och se om det blir bättre.

Tack för att du läste och tittade och lycka till !!

Rekommenderad: