Innehållsförteckning:

Ultraljud Pi -piano med gestkontroller !: 10 steg (med bilder)
Ultraljud Pi -piano med gestkontroller !: 10 steg (med bilder)

Video: Ultraljud Pi -piano med gestkontroller !: 10 steg (med bilder)

Video: Ultraljud Pi -piano med gestkontroller !: 10 steg (med bilder)
Video: Мощная ультразвуковая ванна своими руками. DIY ultrasonic bath. 2024, November
Anonim
Image
Image
Ultraljud Pi -piano med gestkontroller!
Ultraljud Pi -piano med gestkontroller!

Detta projekt använder billiga HC-SR04 ultraljudssensorer som ingångar och genererar MIDI-noter som kan spelas via en synt på Raspberry Pi för ett högkvalitativt ljud.

Projektet använder också en grundläggande form av gestkontroll, där musikinstrumentet kan ändras genom att hålla händerna över de två yttersta sensorerna i några sekunder. En annan gest kan användas för att stänga av Raspberry Pi när du är klar.

Videon ovan visar den färdiga produkten i ett enkelt laserskuret hölje. Det finns en mer fördjupad video senare i denna instruktör som förklarar hur projektet fungerar.

Jag skapade detta projekt tillsammans med The Gizmo Dojo (min lokala makerspace i Broomfield, CO) för att göra några interaktiva utställningar som vi kan ta till lokala STEM/STEAM -evenemang och Maker Faires.

Titta också på den senaste dokumentationen och självstudierna på https://theotherandygrove.com/octasonic/ som nu innehåller information om en Python -version av detta projekt (denna instruktion skrevs för Rust -versionen).

Steg 1: Ingredienser

För denna instruerbara, behöver du följande ingredienser:

  • Hallon Pi (2 eller 3) med SD -kort
  • 8 ultraljudssensorer HC-SR04
  • Octasonic Breakout Board
  • Dubbelriktad logisk nivåomvandlare
  • 32 x 12 "kvinnliga-kvinnliga bygeltrådar för anslutning av ultraljudssensorer
  • 13 x 6 "kvinnliga-kvinnliga bygelkablar för anslutning av Raspberry Pi, Octasonic och Logic Level Converter
  • Lämplig strömförsörjning för Raspberry Pi
  • PC -högtalare eller liknande

Jag skulle rekommendera att använda en Raspberry Pi 3 om möjligt eftersom den har mer datorkraft, vilket resulterar i ett mer lyhörd och tilltalande ljud. Det kan fungera bra med en Raspberry Pi 2 med lite tweaking men jag skulle inte försöka använda den ursprungliga Raspberry Pi för detta projekt.

HC -SR04 ultraljudssensorer har 4 anslutningar - 5V, GND, Trigger och Echo. Vanligtvis är Trigger och Echo anslutna till separata stift på en mikrokontroller eller Raspberry Pi, men det betyder att du skulle behöva använda 16 stift för att ansluta 8 sensorer, och det är inte praktiskt. Det är här som Octasonic breakout -kortet kommer in. Detta kort ansluter till alla sensorer och har en dedikerad mikrokontroller som övervakar sensorerna och sedan kommunicerar med Raspberry Pi via SPI.

HC-SR04 kräver 5V och Raspberry Pi är bara 3,3V, så det är därför vi också behöver den logiska nivåomvandlaren som kommer att ansluta Raspberry Pi till Octasonic breakout-kortet.

Steg 2: Anslut ultraljudssensorerna till Octasonic -kortet

Anslut ultraljudssensorerna till Octasonic -kortet
Anslut ultraljudssensorerna till Octasonic -kortet
Anslut ultraljudssensorerna till Octasonic -kortet
Anslut ultraljudssensorerna till Octasonic -kortet

Använd fyra hona-hona-trådar för att ansluta varje ultraljudssensor till kortet, var noga med att ansluta dem på rätt sätt. Kortet är utformat så att stiften är i samma ordning som stiften på ultraljudssensorn. Från vänster till höger på brädet är stiften GND, Trigger, Echo, 5V.

Steg 3: Anslut Logic Level Converter till Octasonic Board

Anslut Logic Level Converter till Octasonic Board
Anslut Logic Level Converter till Octasonic Board

Raspberry Pi och Octasonic Board kommunicerar över SPI. SPI använder 4 trådar:

  • Master In, Slave Out (MISO)
  • Master Out, Slave In (MOSI)
  • Seriell klocka (SCK)
  • Slavval (SS)

Dessutom måste vi ansluta ström (5V och GND).

Den logiska nivåomvandlaren har två sidor - en lågspänning (LV) och en högspänning (HV). Hallon ansluts till LV -sidan eftersom det är 3,3V. Octasonic kommer att ansluta till HV -sidan eftersom den är 5V.

Detta steg är för att ansluta Octasonic till HV -sidan av den logiska nivåomvandlaren

Se fotot som bifogas detta steg som visar vilka stift som ska anslutas till den logiska nivåomvandlaren.

Anslutningarna från Octasonic till Logic Level -omvandlaren bör vara följande:

  • 5V till HV
  • SCK till HV4
  • MISO till HV3
  • MOSI till HV2
  • SS till HV1
  • GND till GND

Steg 4: Anslut Logic Level Converter till Raspberry Pi

Anslut Logic Level Converter till Raspberry Pi
Anslut Logic Level Converter till Raspberry Pi

Raspberry Pi och Octasonic Board kommunicerar över SPI. SPI använder 4 trådar:

  • Master In, Slave Out (MISO)
  • Master Out, Slave In (MOSI)
  • Seriell klocka (SCK)
  • Slavval (SS)

Dessutom måste vi ansluta ström (3.3V och GND). Den logiska nivåomvandlaren har två sidor - en lågspänning (LV) och en högspänning (HV). Hallon ansluts till LV -sidan eftersom det är 3,3V. Octasonic kommer att ansluta till HV -sidan eftersom den är 5V.

Detta steg är för att ansluta Raspberry Pi till LV -sidan av den logiska nivåomvandlaren

Anslutningarna från Raspbery Pi till Logic Level -omvandlaren ska vara följande:

  • 3.3V till LV
  • GPIO11 (SPI_SCLK) till LV4
  • GPIO09 (SPI_MISO) till LV3
  • GPIO10 (SPI_MOSI) till LV2
  • GPIO08 (SPI_CE0_N) SS till LV1
  • GND till GND

Använd diagrammet som bifogas detta steg för att hitta rätt stift på Raspberry Pi!

Steg 5: Anslut Raspberry Pi 5V till Octasonic 5V

Anslut Raspberry Pi 5V till Octasonic 5V
Anslut Raspberry Pi 5V till Octasonic 5V
Anslut Raspberry Pi 5V till Octasonic 5V
Anslut Raspberry Pi 5V till Octasonic 5V

Det finns en sista tråd att lägga till. Vi måste faktiskt driva Octasonic -kortet med 5V, så vi gör det genom att ansluta en av Raspberry Pi 5V -stiften till 5V -stiftet på Octasonic AVR -huvudet. Detta är den nedre vänstra stiftet i AVR -huvudblocket (detta är 2 x 3 -blocket högst upp till höger på brädet). Se det bifogade fotot som visar var AVR -blocket är.

Se det andra bifogade diagrammet för att hitta 5V -stiftet på Raspberry Pi.

Steg 6: Installera programvara

Installera Raspian

Börja med en ren installation av Raspbian Jessie och uppdatera den sedan till den senaste versionen:

sudo apt-get uppdatering

sudo apt-get uppgradering

Aktivera SPI

Du måste aktivera SPI på Raspberry Pi för att detta projekt ska fungera! Använd verktyget Raspberry Pi Configuration för att göra detta.

Det är också viktigt att starta om Pi efter att SPI har aktiverats för att den ska träda i kraft

Installera FluidSynth

Fluidsynth är en fantastisk gratis programvara MIDI synth. Du kan installera det från kommandoraden med det här kommandot:

sudo apt-get install fluidsynth

Installera rostprogrammeringsspråket

Ultrasonic Pi Piano är implementerat i Rust Programming Language från Mozilla (det är som C ++ men utan de dåliga bitarna). Det är vad alla coola barn använder dessa dagar.

Följ instruktionerna på https://rustup.rs/ för att installera Rust. För att spara tid, är instruktionerna att köra det här kommandot. Du kan acceptera standardsvar på alla frågor under installationen.

OBS: Sedan du lägger ut detta instruerbara, finns det några problem med att installera Rust på Raspberry Pi. Dålig timing:-/ men jag har ändrat kommandot nedan för att lösa problemet. Förhoppningsvis fixar de detta snart. Jag arbetar med att skapa en bild som människor kan ladda ner och bränna på ett SD -kort. Kontakta mig om du vill ha det.

export RUSTUP_USE_HYPER = 1curl https://sh.rustup.rs -sSf | sh

Ladda ner källkoden för Ultrasonic Pi Piano

Källkoden för Ultrasonic Pi Piano -källkoden finns på github. Det finns två alternativ för att få koden. Om du är bekant med git och github kan du klona repo:

git klon [email protected]: TheGizmoDojo/UltrasonicPiPiano.git

Alternativt kan du ladda ner en zip -fil med den senaste koden.

Kompilera källkoden

cd UltrasonicPiPiano

lastbyggnad -släpp

Testa koden

Innan vi går vidare till att göra musik i nästa steg, låt oss se till att programvaran körs och att vi kan läsa giltig data från sensorerna.

Använd följande kommando för att köra programmet. Detta kommer att läsa data från sensorerna och översätta dem till MIDI -anteckningar som sedan skrivs ut på konsolen. När du flyttar handen över sensorerna bör du se data genereras. Om inte, gå sedan till felsökningsavsnittet i slutet av denna instruktion.

lastkörning -släpp

Om du är nyfiken säger "--release" -flaggan till Rust att kompilera koden så effektivt som möjligt, i motsats till standardinställningen "--debug".

Steg 7: Gör lite musik

Se till att du fortfarande finns i katalogen där du laddade ner källkoden och kör följande kommando.

Detta "run.sh" -skript ser till att koden har sammanställts och kör sedan koden och leder utmatningen till fluidsynth.

./run.sh

Se till att du har förstärkta högtalare anslutna till 3,5 mm ljuduttaget på Raspberry Pi och att du ska höra musik när du flyttar händerna över sensorerna.

Om du inte hör musik och har en HDMI -bildskärm ansluten, går ljudutmatningen förmodligen dit istället. För att åtgärda detta, kör bara det här kommandot och starta sedan om Pi Piano:

sudo amixer cset numid = 3 1

Ändra volymen

Volymen (eller "förstärkning") anges med parametern "-g" till fluidsynth. Du kan ändra run.sh -skriptet och ändra detta värde. Observera att små förändringar i denna parameter resulterar i en stor förändring i volym, så försök att öka den med små mängder (som 0,1 eller 0,2).

Steg 8: Gestkontroll

Se videon som bifogas detta steg för en fullständig demonstration av projektet, inklusive hur gestkontrollerna fungerar.

Konceptet är väldigt enkelt. Programvaran håller reda på vilka sensorer som täcks (inom 10 cm) och vilka som inte är det. Detta översätter till 8 binära tal (1 eller 0). Detta är mycket bekvämt, eftersom en sekvens med 8 binära tal gör en "byte" som kan representera tal mellan 0 och 255. Om du inte redan vet om binära tal rekommenderar jag starkt att du söker efter en handledning. Binära tal är en grundläggande färdighet att lära sig om du vill lära dig mer om programmering.

Programvaran kartlägger sensornas nuvarande tillstånd till en enda byte som representerar den aktuella gesten. Om det numret förblir detsamma under ett antal cykler, fungerar programvaran på den gesten.

Eftersom ultraljudssensorer inte är superpålitliga och det kan förekomma störningar mellan sensorerna, måste du vara lite tålamod när du använder gesterna. Prova att variera avståndet som du håller dina händer från sensorerna samt vinkeln som du håller dina händer. Du kall försöker också hålla något plant och fast över sensorerna för att bättre reflektera ljudet.

Steg 9: Skapa ett hölje

Om du vill göra detta till en permanent utställning och kunna visa upp det för människor, kommer du förmodligen att vilja göra något slags hölje. Detta kan vara tillverkat av trä, kartong eller många andra material. Här är en video som visar höljet vi arbetar med för detta projekt. Detta är tillverkat av trä, med hål borrade ut för att hålla ultraljudssensorerna på plats.

Steg 10: Felsökning och nästa steg

Felsökning

Om projektet inte fungerar är det vanligtvis ett ledningsfel. Ta dig tid att dubbelkolla alla anslutningar.

Ett annat vanligt problem är att inte aktivera SPI och starta om pi.

Besök https://theotherandygrove.com/octasonic/ för fullständig dokumentation inklusive felsökningstips, med Rust- och Python -specifika artiklar, och även information om hur du får support.

Nästa steg

När du väl har arbetat med projektet rekommenderar jag att du experimenterar med koden och testar olika musikinstrument. MIDI -instrumentkoder är mellan 1 och 127 och dokumenteras här.

Vill du ha ett enda musikinstrument med varje sensor som spelar en annan oktav? Du kanske vill att varje sensor ska vara ett separat instrument istället? Möjligheterna är nästan obegränsade!

Jag hoppas att du njöt av detta instruerbara. Gilla det om du gjorde det, och var noga med att prenumerera på mig här och på min YouTube -kanal för att se framtida projekt.

Rekommenderad: