Inhoudsopgave:

Ultrasone Pi-piano met gebarenbediening! - Ajarnpa
Ultrasone Pi-piano met gebarenbediening! - Ajarnpa

Video: Ultrasone Pi-piano met gebarenbediening! - Ajarnpa

Video: Ultrasone Pi-piano met gebarenbediening! - Ajarnpa
Video: Ultrasone piano met bijhorende servomotor via Arduino 2024, November
Anonim
Image
Image
Ultrasone Pi-piano met gebarenbediening!
Ultrasone Pi-piano met gebarenbediening!

Dit project maakt gebruik van goedkope HC-SR04 ultrasone sensoren als input en genereert MIDI-noten die via een synthesizer op de Raspberry Pi kunnen worden afgespeeld voor een geluid van hoge kwaliteit.

Het project maakt ook gebruik van een basisvorm van gebarencontrole, waarbij het muziekinstrument kan worden veranderd door je handen een paar seconden boven de twee buitenste sensoren te houden. Een ander gebaar kan worden gebruikt om de Raspberry Pi uit te schakelen als je klaar bent.

De video hierboven toont het eindproduct in een eenvoudige lasergesneden behuizing. Er is een meer diepgaande video verderop in deze instructable waarin wordt uitgelegd hoe het project werkt.

Ik heb dit project gemaakt in samenwerking met The Gizmo Dojo (mijn lokale makerspace in Broomfield, CO) om een aantal interactieve tentoonstellingen te maken die we kunnen meenemen naar lokale STEM/STEAM-evenementen en Maker Faires.

Bekijk ook de nieuwste documentatie en tutorials op https://theotherandygrove.com/octasonic/ die nu informatie bevat over een Python-versie van dit project (deze instructable is geschreven voor de Rust-versie).

Stap 1: Ingrediënten

Voor deze instructable heb je de volgende ingrediënten nodig:

  • Raspberry Pi (2 of 3) met SD-kaart
  • 8 HC-SR04 ultrasone sensoren
  • Octasonic Breakout Board
  • Bidirectionele logische niveau-omzetter
  • 32 x 12" Female-Female Jumper Wires voor het aansluiten van de ultrasone sensoren
  • 13 x 6" Female-Female Jumper Wires voor het aansluiten van de Raspberry Pi, Octasonic en Logic Level Converter
  • Geschikte voeding voor de Raspberry Pi
  • PC-luidsprekers of iets dergelijks

Ik zou aanraden om indien mogelijk een Raspberry Pi 3 te gebruiken, omdat deze meer rekenkracht heeft, wat resulteert in een responsiever en prettiger geluid. Het kan prima werken met een Raspberry Pi 2 met een beetje tweaken, maar ik zou niet proberen de originele Raspberry Pi voor dit project te gebruiken.

HC-SR04 ultrasone sensoren hebben 4 aansluitingen - 5V, GND, Trigger en Echo. Meestal zijn Trigger en Echo verbonden met afzonderlijke pinnen op een microcontroller of Raspberry Pi, maar dat betekent dat je 16 pinnen moet gebruiken om 8 sensoren aan te sluiten, en dit is niet praktisch. Dit is waar het Octasonic breakout-bord binnenkomt. Dit bord maakt verbinding met alle sensoren en heeft een speciale microcontroller die de sensoren bewaakt en vervolgens via SPI met de Raspberry Pi communiceert.

HC-SR04 vereist 5V en de Raspberry Pi is slechts 3,3V, dus daarom hebben we ook de logische niveau-omzetter nodig die de Raspberry Pi op het Octasonic breakout-bord zal aansluiten.

Stap 2: Sluit de ultrasone sensoren aan op de Octasonic Board

Sluit de ultrasone sensoren aan op het Octasonic-bord
Sluit de ultrasone sensoren aan op het Octasonic-bord
Sluit de ultrasone sensoren aan op het Octasonic-bord
Sluit de ultrasone sensoren aan op het Octasonic-bord

Gebruik 4 vrouwelijke-vrouwelijke jumperdraden om elke ultrasone sensor op het bord aan te sluiten en zorg ervoor dat u ze op de juiste manier aansluit. Het bord is zo ontworpen dat de pinnen in dezelfde volgorde staan als de pinnen op de ultrasone sensor. Van links naar rechts op het bord zijn de pinnen GND, Trigger, Echo, 5V.

Stap 3: Sluit de Logic Level Converter aan op het Octasonic Board

Sluit de Logic Level Converter aan op het Octasonic Board
Sluit de Logic Level Converter aan op het Octasonic Board

De Raspberry Pi en Octasonic Board communiceren via SPI. SPI gebruikt 4 draden:

  • Master In, Slave Uit (MISO)
  • Master uit, slave in (MOSI)
  • Seriële klok (SCK)
  • Slave selecteren (SS)

Daarnaast moeten we stroom aansluiten (5V en GND).

De logische niveau-omzetter heeft twee kanten - een lage spanning (LV) en een hoge spanning (HV). De Raspberry maakt verbinding met de LV-kant omdat deze 3,3 V is. De Octasonic maakt verbinding met de HV-zijde aangezien deze 5V is.

Deze stap is voor het aansluiten van de Octasonic op de HV-zijde van de logische niveau-omzetter

Zie de foto bij deze stap die laat zien welke pinnen op de logische niveau-omzetter moeten worden aangesloten.

De aansluitingen van de Octasonic naar de Logic Level converter moeten als volgt zijn:

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

Stap 4: Verbind de Logic Level Converter met de Raspberry Pi

Sluit de Logic Level Converter aan op de Raspberry Pi
Sluit de Logic Level Converter aan op de Raspberry Pi

De Raspberry Pi en Octasonic Board communiceren via SPI. SPI gebruikt 4 draden:

  • Master in, slave uit (MISO)
  • Master uit, slave in (MOSI)
  • Seriële klok (SCK)
  • Slave selecteren (SS)

Daarnaast moeten we stroom aansluiten (3,3V en GND). De logische niveau-omzetter heeft twee kanten - een lage spanning (LV) en een hoge spanning (HV). De Raspberry maakt verbinding met de LV-kant omdat deze 3,3 V is. De Octasonic maakt verbinding met de HV-zijde aangezien deze 5V is.

Deze stap is voor het aansluiten van de Raspberry Pi op de LV-zijde van de logische niveau-omzetter

De verbindingen van de Raspbery Pi naar de Logic Level-converter moeten als volgt zijn:

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

Gebruik het diagram bij deze stap om de juiste pinnen op de Raspberry Pi te vinden!

Stap 5: Sluit Raspberry Pi 5V aan op Octasonic 5V

Sluit Raspberry Pi 5V aan op Octasonic 5V
Sluit Raspberry Pi 5V aan op Octasonic 5V
Sluit Raspberry Pi 5V aan op Octasonic 5V
Sluit Raspberry Pi 5V aan op Octasonic 5V

Er is nog een laatste draad om toe te voegen. We moeten het Octasonic-bord daadwerkelijk van stroom voorzien met 5V, dus dat doen we door een van de Raspberry Pi 5V-pinnen aan te sluiten op de 5V-pin op de Octasonic AVR-header. Dit is de pin linksonder in het AVR-headerblok (dit is het 2 x 3 blok rechtsboven op het bord). Zie de bijgevoegde foto die laat zien waar het AVR-blok is.

Zie het andere bijgevoegde diagram om de 5V-pin op de Raspberry Pi te vinden.

Stap 6: Software installeren

Raspian installeren

Begin met een schone installatie van Raspbian Jessie en werk deze vervolgens bij naar de nieuwste versie:

sudo apt-get update

sudo apt-get upgrade

SPI inschakelen

U moet SPI op de Raspberry Pi inschakelen om dit project te laten werken! Gebruik hiervoor het Raspberry Pi-configuratieprogramma.

Het is ook belangrijk om de Pi opnieuw op te starten nadat SPI is ingeschakeld om deze van kracht te laten worden

FluidSynth installeren

Fluidsynth is een geweldige gratis software MIDI-synth. Je kunt het vanaf de opdrachtregel installeren met deze opdracht:

sudo apt-get install fluidsynth

Installeer de Rust-programmeertaal

De Ultrasonic Pi Piano is geïmplementeerd in de Rust-programmeertaal van Mozilla (het is net C++ maar zonder de slechte dingen). Het is wat alle coole kinderen tegenwoordig gebruiken.

Volg de instructies op https://rustup.rs/ om Rust te installeren. Om u tijd te besparen, zijn de instructies om deze ene opdracht uit te voeren. U kunt tijdens de installatie de standaardantwoorden op alle vragen accepteren.

OPMERKING: sinds het plaatsen van dit instructable, zijn er enkele problemen met het installeren van Rust op de Raspberry Pi. Slechte timing:-/ maar ik heb de onderstaande opdracht gewijzigd om het probleem te omzeilen. Hopelijk lossen ze dit snel op. Ik ben bezig met het maken van een afbeelding die mensen kunnen downloaden en op een SD-kaart kunnen branden. Mocht je dat willen, neem dan contact met mij op.

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

Download de Ultrasonic Pi Piano-broncode

De broncode voor de Ultrasonic Pi Piano-broncode wordt gehost op github. Er zijn twee opties om de code te verkrijgen. Als je bekend bent met git en github, kun je de repo klonen:

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

U kunt ook een zip-bestand van de laatste code downloaden.

Compileer de broncode

cd UltrasoonPiPiano

lading bouwen --release

Test de code

Voordat we in de volgende stap verder gaan met het maken van muziek, moeten we ervoor zorgen dat de software draait en dat we geldige gegevens van de sensoren kunnen lezen.

Gebruik de volgende opdracht om de toepassing uit te voeren. Hiermee worden gegevens van de sensoren gelezen en vertaald naar MIDI-notities die vervolgens op de console worden afgedrukt. Terwijl u uw hand over de sensoren beweegt, zou u moeten zien dat er gegevens worden gegenereerd. Als dat niet het geval is, gaat u naar het gedeelte over probleemoplossing aan het einde van dit instructable.

vrachtloop --release

Als je nieuwsgierig bent, vertelt de vlag "--release" Rust om de code zo efficiënt mogelijk te compileren, in tegenstelling tot de standaardinstelling "--debug".

Stap 7: Maak wat muziek

Zorg ervoor dat u zich nog steeds in de map bevindt waar u de broncode hebt gedownload en voer de volgende opdracht uit.

Dit "run.sh"-script zorgt ervoor dat de code is gecompileerd en voert vervolgens de code uit, waarbij de uitvoer naar fluidsynth wordt geleid.

./run.sh

Zorg ervoor dat je versterkte luidsprekers hebt aangesloten op de 3,5 mm audio-aansluiting op de Raspberry Pi en je zou muziek moeten horen terwijl je je handen over de sensoren beweegt.

Als je geen muziek hoort en je hebt een HDMI-monitor aangesloten, dan gaat de audio-uitgang daar waarschijnlijk naartoe. Om dit op te lossen, voert u eenvoudig deze opdracht uit en start u de Pi Piano opnieuw:

sudo mixer cset numid=3 1

Het volume wijzigen

Het volume (of "gain") wordt gespecificeerd met de "-g" parameter naar fluidsynth. U kunt het run.sh-script wijzigen en deze waarde wijzigen. Houd er rekening mee dat kleine veranderingen in deze parameter resulteren in een grote verandering in volume, dus probeer het met kleine hoeveelheden te verhogen (zoals 0,1 of 0,2).

Stap 8: Gesture Control

Bekijk de video die bij deze stap is gevoegd voor een volledige demonstratie van het project, inclusief hoe de gebarenbediening werkt.

Het concept is heel eenvoudig. De software houdt bij welke sensoren afgedekt zijn (binnen 10cm) en welke niet. Dit vertaalt zich in 8 binaire getallen (1 of 0). Dit is erg handig, aangezien een reeks van 8 binaire getallen een "byte" vormt die getallen tussen 0 en 255 kan vertegenwoordigen. Als je nog niet bekend bent met binaire getallen, raad ik je ten zeerste aan om een tutorial te zoeken. Binaire getallen zijn een fundamentele vaardigheid om te leren als je meer wilt leren over programmeren.

De software brengt de huidige status van de sensoren in kaart met een enkele byte die het huidige gebaar vertegenwoordigt. Als dat aantal een aantal cycli hetzelfde blijft, dan handelt de software op dat gebaar.

Omdat ultrasone sensoren niet super betrouwbaar zijn en er interferentie tussen sensoren kan zijn, moet je wat geduld oefenen bij het gebruik van de gebaren. Probeer de afstand tussen uw handen en de sensoren te variëren, evenals de hoek waarin u uw handen vasthoudt. Je probeert ook iets plat en stevig over de sensoren te houden om het geluid beter te reflecteren.

Stap 9: Een behuizing maken

Als je hier een permanente tentoonstelling van wilt maken en het aan mensen wilt laten zien, wil je waarschijnlijk een soort omheining maken. Dit kan gemaakt zijn van hout, karton of vele andere materialen. Hier is een video die de behuizing toont waar we aan werken voor dit project. Deze is gemaakt van hout, met gaten die zijn uitgeboord om de ultrasone sensoren op hun plaats te houden.

Stap 10: Problemen oplossen en volgende stappen

Probleemoplossen

Als het project niet werkt, is dit meestal te wijten aan een bedradingsfout. Neem de tijd om alle verbindingen dubbel te controleren.

Een ander veelvoorkomend probleem is het niet inschakelen van SPI en het opnieuw opstarten van de pi.

Ga naar https://theotherandygrove.com/octasonic/ voor volledige documentatie, inclusief tips voor het oplossen van problemen, met specifieke artikelen voor Rust en Python, en ook informatie over hoe u ondersteuning kunt krijgen.

Volgende stappen

Als het project eenmaal werkt, raad ik aan om met de code te experimenteren en verschillende muziekinstrumenten uit te proberen. MIDI-instrumentcodes liggen tussen 1 en 127 en worden hier gedocumenteerd.

Wil je een enkel muziekinstrument waarbij elke sensor een ander octaaf speelt? Misschien wilt u liever dat elke sensor een apart instrument is? De mogelijkheden zijn bijna onbeperkt!

Ik hoop dat je genoten hebt van deze instructable. Vind het leuk als je dat deed, en abonneer je hier op mij en op mijn YouTube-kanaal om toekomstige projecten te zien.

Aanbevolen: