Cuprins:

Pian cu ultrasunete Pi cu comenzi gestuale !: 10 pași (cu imagini)
Pian cu ultrasunete Pi cu comenzi gestuale !: 10 pași (cu imagini)

Video: Pian cu ultrasunete Pi cu comenzi gestuale !: 10 pași (cu imagini)

Video: Pian cu ultrasunete Pi cu comenzi gestuale !: 10 pași (cu imagini)
Video: Sunetul care te va speria fara sa-ti dai seama 2024, Iulie
Anonim
Image
Image
Pian Pi cu ultrasunete cu comenzi gestuale!
Pian Pi cu ultrasunete cu comenzi gestuale!

Acest proiect folosește senzori cu ultrasunete HC-SR04 ieftine ca intrări și generează note MIDI care pot fi redate printr-un sintetizator pe Raspberry Pi pentru un sunet de înaltă calitate.

Proiectul folosește, de asemenea, o formă de bază de control al gesturilor, în care instrumentul muzical poate fi schimbat ținându-vă mâinile peste cei doi senzori externi pentru câteva secunde. Un alt gest poate fi folosit pentru a opri Raspberry Pi după ce ați terminat.

Videoclipul de mai sus arată produsul finit într-o carcasă simplă tăiată cu laser. Există un videoclip mai aprofundat mai târziu în acest instructable care explică modul în care funcționează proiectul.

Am creat acest proiect împreună cu The Gizmo Dojo (spațiul meu local din Broomfield, CO) pentru a face câteva exponate interactive pe care le putem duce la evenimente locale STEM / STEAM și Maker Fires.

Vă rugăm să consultați și cele mai recente documentații și tutoriale la https://theotherandygrove.com/octasonic/ care include acum informații despre o versiune Python a acestui proiect (acest instructable a fost scris pentru versiunea Rust).

Pasul 1: Ingrediente

Pentru acest instructiv, veți avea nevoie de următoarele ingrediente:

  • Raspberry Pi (2 sau 3) cu card SD
  • 8 senzori cu ultrasunete HC-SR04
  • Placa Octasonic Breakout
  • Convertor de nivel logic bidirecțional
  • Sârme jumper de 32 x 12 "Femelă-Femină pentru conectarea senzorilor cu ultrasunete
  • Sârme jumper de 13 x 6 "Femelă-Femină pentru conectarea convertorului de nivel Raspberry Pi, Octasonic și Logic
  • Alimentare adecvată pentru Raspberry Pi
  • Boxe pentru PC sau similare

Aș recomanda utilizarea unui Raspberry Pi 3 dacă este posibil, deoarece are mai multă putere de calcul, rezultând un sunet mai receptiv și mai plăcut. Poate funcționa bine cu un Raspberry Pi 2, cu puține modificări, dar nu aș încerca să folosesc Raspberry Pi original pentru acest proiect.

Senzorii cu ultrasunete HC-SR04 au 4 conexiuni - 5V, GND, Trigger și Echo. De obicei, Trigger și Echo sunt conectate la pini separați pe un microcontroler sau Raspberry Pi, dar asta înseamnă că ar trebui să utilizați 16 pini pentru a conecta 8 senzori, iar acest lucru nu este practic. Aici intervine placa de separare Octasonic. Această placă se conectează la toți senzorii și are un microcontroler dedicat care monitorizează senzorii și apoi comunică cu Raspberry Pi prin SPI.

HC-SR04 necesită 5V, iar Raspberry Pi are doar 3,3V, deci de aceea avem nevoie și de convertorul de nivel logic care va conecta Raspberry Pi la placa de decupare Octasonic.

Pasul 2: Conectați senzorii cu ultrasunete la placa Octasonic

Conectați senzorii cu ultrasunete la placa Octasonic
Conectați senzorii cu ultrasunete la placa Octasonic
Conectați senzorii cu ultrasunete la placa Octasonic
Conectați senzorii cu ultrasunete la placa Octasonic

Utilizați 4 fire jumper-mamă pentru a conecta fiecare senzor cu ultrasunete la placă, având grijă să le conectăm corect. Placa este proiectată astfel încât pinii să fie în aceeași ordine ca pinii senzorului cu ultrasunete. De la stânga la dreapta pe tablă, pinii sunt GND, Trigger, Echo, 5V.

Pasul 3: Conectați convertorul de nivel logic la placa Octasonic

Conectați convertorul de nivel logic la placa Octasonic
Conectați convertorul de nivel logic la placa Octasonic

Placa Raspberry Pi și Octasonic comunică prin SPI. SPI folosește 4 fire:

  • Master In, Slave Out (MISO)
  • Master Out, Slave In (MOSI)
  • Ceas serial (SCK)
  • Slave Select (SS)

În plus, trebuie să conectăm alimentarea (5V și GND).

Convertorul de nivel logic are două fețe - o tensiune joasă (LV) și o tensiune înaltă (HV). Raspberry se va conecta la partea LV, deoarece este de 3,3V. Octasonic se va conecta la partea HV, deoarece este de 5V.

Acest pas este pentru conectarea Octasonic la partea HV a convertorului de nivel logic

Vedeți fotografia atașată la acest pas care arată ce pini trebuie conectați la convertorul de nivel logic.

Conexiunile de la Octasonic la convertorul de nivel logic trebuie să fie după cum urmează:

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

Pasul 4: Conectați convertorul de nivel logic la Raspberry Pi

Conectați convertorul de nivel logic la Raspberry Pi
Conectați convertorul de nivel logic la Raspberry Pi

Raspberry Pi și Octasonic Board comunică prin SPI. SPI folosește 4 fire:

  • Master In, Slave Out (MISO)
  • Master Out, Slave In (MOSI)
  • Ceas serial (SCK)
  • Slave Select (SS)

În plus, trebuie să conectăm alimentarea (3.3V și GND). Convertorul de nivel logic are două fețe - o tensiune joasă (LV) și o tensiune înaltă (HV). Raspberry se va conecta la partea LV, deoarece este de 3,3V. Octasonic se va conecta la partea HV, deoarece este de 5V.

Acest pas este pentru conectarea Raspberry Pi la partea LV a convertorului de nivel logic

Conexiunile de la Raspbery Pi la convertorul de nivel logic trebuie să fie după cum urmează:

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

Utilizați diagrama atașată la acest pas pentru a localiza pinii corecți pe Raspberry Pi!

Pasul 5: Conectați Raspberry Pi 5V la Octasonic 5V

Conectați Raspberry Pi 5V la Octasonic 5V
Conectați Raspberry Pi 5V la Octasonic 5V
Conectați Raspberry Pi 5V la Octasonic 5V
Conectați Raspberry Pi 5V la Octasonic 5V

Există un fir final de adăugat. Trebuie să alimentăm placa Octasonic cu 5V, așa că facem acest lucru conectând unul dintre pinii Raspberry Pi 5V la pinul de 5V de pe antetul Octasonic AVR. Acesta este pinul din stânga jos în blocul antet AVR (acesta este blocul 2 x 3 din partea dreaptă sus a plăcii). Vedeți fotografia atașată care arată unde este blocul AVR.

Vedeți cealaltă diagramă atașată pentru a găsi pinul de 5V pe Raspberry Pi.

Pasul 6: Instalați software-ul

Instalați Raspian

Începeți cu o instalare curată a Raspbian Jessie, apoi actualizați-o la cea mai recentă versiune:

sudo apt-get update

sudo apt-get upgrade

Activați SPI

Trebuie să activați SPI pe Raspberry Pi pentru ca acest proiect să funcționeze! Utilizați utilitarul de configurare Raspberry Pi pentru a face acest lucru.

De asemenea, este important să reporniți Pi după ce ați activat SPI pentru ca acesta să aibă efect

Instalați FluidSynth

Fluidsynth este un uimitor software gratuit MIDI synth. Puteți să-l instalați din linia de comandă cu această comandă:

sudo apt-get install fluidsynth

Instalați limbajul de programare Rust

Ultrasonic Pi Piano este implementat în limbajul de programare Rust de la Mozilla (este ca C ++, dar fără biți răi). Este ceea ce folosesc toți copiii drăguți în aceste zile.

Urmați instrucțiunile de la https://rustup.rs/ pentru a instala Rust. Pentru a vă economisi timp, instrucțiunile sunt de a rula această comandă. Puteți accepta răspunsurile implicite la orice întrebare în timpul instalării.

NOTĂ: De la postarea acestei instrucțiuni, există câteva probleme cu instalarea Rust pe Raspberry Pi. Moment greșit: - / dar am modificat comanda de mai jos pentru a soluționa problema. Sperăm că vor rezolva acest lucru în curând. Lucrez la crearea unei imagini pe care oamenii să o poată descărca și înregistra pe un card SD. Dacă doriți acest lucru, vă rugăm să mă contactați.

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

Descărcați codul sursă Ultrasonic Pi Piano

Codul sursă pentru codul sursă Ultrasonic Pi Piano este găzduit pe github. Există două opțiuni pentru obținerea codului. Dacă sunteți familiarizat cu git și github, puteți clona repo:

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

Alternativ, puteți descărca un fișier zip al celui mai recent cod.

Compilați codul sursă

cd UltrasonicPiPiano

construcție de marfă - eliberare

Testați codul

Înainte de a începe să facem muzică în pasul următor, să ne asigurăm că software-ul rulează și că putem citi date valide de la senzori.

Utilizați următoarea comandă pentru a rula aplicația. Aceasta va citi datele de la senzori și le va traduce în note MIDI care sunt apoi tipărite pe consolă. Pe măsură ce mutați mâna peste senzori, ar trebui să vedeți datele generate. Dacă nu, treceți la secțiunea de depanare de la sfârșitul acestui instructable.

marfă - eliberare

Dacă sunteți curios, semnalul „--release” îi spune lui Rust să compileze codul cât mai eficient posibil, spre deosebire de setarea implicită „--debug”.

Pasul 7: Faceți muzică

Asigurați-vă că sunteți încă în directorul de unde ați descărcat codul sursă și rulați următoarea comandă.

Acest script "run.sh" se asigură că codul a fost compilat și apoi rulează codul, canalizând ieșirea în fluidsynth.

./run.sh

Asigurați-vă că aveți difuzoare amplificate conectate la mufa audio de 3,5 mm de pe Raspberry Pi și ar trebui să auziți muzică în timp ce vă deplasați mâinile peste senzori.

Dacă nu auziți muzică și aveți un monitor HDMI atașat, atunci ieșirea audio va merge probabil acolo. Pentru a remedia acest lucru, pur și simplu executați această comandă și apoi reporniți Pi Piano:

sudo amixer cset numid = 3 1

Schimbarea volumului

Volumul (sau „câștigul”) este specificat cu parametrul „-g” la fluidsynth. Puteți modifica scriptul run.sh și puteți modifica această valoare. Rețineți că modificările mici ale acestui parametru duc la o schimbare mare a volumului, așa că încercați să îl măriți cu cantități mici (cum ar fi 0,1 sau 0,2).

Pasul 8: Controlul gesturilor

Vedeți videoclipul atașat acestui pas pentru o demonstrație completă a proiectului, inclusiv modul în care funcționează comenzile gestuale.

Conceptul este foarte simplu. Software-ul ține evidența carei senzori sunt acoperiți (în termen de 10 cm) și care nu. Aceasta se traduce prin 8 numere binare (1 sau 0). Acest lucru este foarte convenabil, deoarece o secvență de 8 numere binare face un „octet” care poate reprezenta numere cuprinse între 0 și 255. Dacă nu știți deja despre numerele binare, atunci vă recomand să căutați un tutorial. Numerele binare sunt o abilitate fundamentală de învățat dacă doriți să aflați mai multe despre programare.

Software-ul mapează starea actuală a senzorilor la un singur octet reprezentând gestul curent. Dacă acel număr rămâne același pentru mai multe cicluri, atunci software-ul acționează pe acel gest.

Deoarece senzorii cu ultrasunete nu sunt foarte fiabili și pot exista interferențe între senzori, va trebui să vă exersați oarecare răbdare atunci când utilizați gesturile. Încercați să modificați distanța pe care o țineți de mâini față de senzori, precum și unghiul pe care îl țineți pe mâini. De asemenea, rece, încercați să țineți ceva plat și solid peste senzori pentru a reflecta mai bine sunetul.

Pasul 9: Realizarea unei incinte

Dacă doriți să faceți din aceasta o expoziție permanentă și să o puteți arăta oamenilor, probabil că veți dori să faceți un fel de incintă. Acest lucru ar putea fi realizat din lemn, carton sau multe alte materiale. Iată un videoclip care prezintă incinta la care lucrăm pentru acest proiect. Acesta este realizat din lemn, cu găuri găurite pentru a menține senzorii cu ultrasunete în poziție.

Pasul 10: Depanarea și următorii pași

Depanare

Dacă proiectul nu funcționează, de obicei se reduce la o eroare de cablare. Faceți-vă timp pentru a verifica dublu toate conexiunile.

O altă problemă obișnuită este eșecul activării SPI și repornirea pi.

Vă rugăm să vizitați https://theotherandygrove.com/octasonic/ pentru documentație completă, inclusiv sfaturi de depanare, cu articole specifice Rust și Python, precum și informații despre cum să obțineți asistență.

Pasii urmatori

Odată ce proiectul funcționează, vă recomand să experimentați codul și să încercați diferite instrumente muzicale. Codurile instrumentelor MIDI sunt cuprinse între 1 și 127 și sunt documentate aici.

Doriți un singur instrument muzical cu fiecare senzor care joacă o octavă diferită? Poate ați dori ca fiecare senzor să fie un instrument separat? Posibilitățile sunt aproape nelimitate!

Sper că ți-a plăcut acest lucru instructabil. Vă rugăm să vă place dacă ați făcut-o și asigurați-vă că vă abonați la mine aici și la canalul meu YouTube pentru a vedea proiecte viitoare.

Recomandat: