Ultrasone Piano (3 / 6 stap)

Stap 3: Programmering de Edison


Dit project maakt gebruik van een combinatie van Arduino voor de controle van de sensoren en de Edison's Linux-omgeving voor het afspelen van de geluiden.

Gebruik FTP een map wilt maken vanuit de hoofdmap genoemd Piano - en uploaden van een monster die u elke sensor wilt te spelen - de notities kunnen spelen een tegelijkertijd - zo plukken aantekeningen van hetzelfde instrument - of niet - uw oproep...

Deze gratis piano monsters werden gebruikt voor de geluiden:

www.Freesound.org/people/pinkyfinger/packs/4409

Alle code is geprogrammeerd met behulp van de Arduino IDE

Code kan hier worden gevonden: UltrasonicPiano op GitHub

Code is als volgt:

 #define HAND_MUST_MOVE_DISTANCE 200 //in uS ping time in we take as something near #define MAXECHOTIME 1000 // Calculate the maximum distance in uS (no rounding). #define DEBOUNCEmS 500 // millsec before can play a second note on that key #define MIN_DISTANCE 2 // below this time in uS means either too close - or nothing near #define TRIGPIN 13 // All sonics connected to one pin #define MAX_SENSOR_DELAY 500 // Maximum uS it takes for sensor to start the ping #define SONAR_NUM 9 // Number of detectors #define SOUND_BANK_PIN 12 // Button to switch sound banks //The Pins the sonar is attached to int sonar[SONAR_NUM]= { 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int result[SONAR_NUM]; int previousHits[SONAR_NUM]; long lasttime[SONAR_NUM]; int soundBank = LOW; //Two sound bank choices - guitar and piano //9 samples (must be wav unless you have installed the optional mp3 libraries on the edison) //Some free samples can be got here: www.freesound.org/people/pinkyfinger/packs/4409 //Wav files need be placed into the folders on the edison (use FTP) as indicated below. //The trailing & is important char* sounds[]= { "aplay /home/root/piano/00_piano-g.wav &", "aplay /home/root/piano/01_piano-a.wav &", "aplay /home/root/piano/03_piano-b.wav &", "aplay /home/root/piano/05_piano-c.wav &", "aplay /home/root/piano/06_piano-d.wav &", "aplay /home/root/piano/08_piano-e.wav &", "aplay /home/root/piano/09_piano-f.wav &", "aplay /home/root/piano/10_piano-f.wav &", "aplay /home/root/piano/11_piano-g.wav &" }; //9 alternative samples char* sounds2[]= { "aplay /home/root/guitar/1.e.wav &", "aplay /home/root/guitar/2.f.wav &", "aplay /home/root/guitar/3.g.wav &", "aplay /home/root/guitar/4.a.wav &", "aplay /home/root/guitar/5.b.wav &", "aplay /home/root/guitar/6.d.wav &", "aplay /home/root/guitar/7.e2.wav &", "aplay /home/root/guitar/8.f2.wav &", "aplay /home/root/guitar/9.b.wav &" }; void setup() { Serial.begin(115200); Serial.println("Start"); for(int n=0;n<SONAR_NUM;n++) {//Out of time starting int ECHOPIN = sonar[n]; pinMode(ECHOPIN, INPUT_FAST); } pinMode(TRIGPIN, OUTPUT_FAST); pinMode(12,INPUT_PULLUP); } void ping() { for(int n=0;n<SONAR_NUM;n++) result[n] = 0; //0 for no result digitalWrite(TRIGPIN, LOW); delayMicroseconds(2); // Wait for pin to go low. (try 4 if having problems) digitalWrite(TRIGPIN, HIGH); // Send out a ping. delayMicroseconds(10); // Wait for sensor to read it. Sensor specs say to wait 10uS. digitalWrite(TRIGPIN,LOW); // Set trigger pin back to low. long timeoutTime; // wait for ping to start #ifdef true //Easy way delayMicroseconds(500); //most detectors take about 450uS to 500uS //SRF06 can take much much longer. #else //use this for the slower sonar detectors timeoutTime = micros() + MAXECHOTIME + MAX_SENSOR_DELAY; for(int n=0;n<SONAR_NUM;n++) { int ECHOPIN = sonar[n]; // Previous ping hasn't finished, abort. if(digitalRead(ECHOPIN) == HIGH) result[n] = -1; //"No Reply" } for(int n=0;n<SONAR_NUM;n++) { if (result[n]==0) { int ECHOPIN = sonar[n]; // Wait for ping to start. while(digitalRead(ECHOPIN) == LOW) if (micros() > timeoutTime) { result[n] = -2; //"Too Long To Start" break; } } } #endif long startTime = micros(); timeoutTime = startTime + MAXECHOTIME ; // Ping started, set the time-out. boolean bExit; do { bExit=true; for(int n=0;n<SONAR_NUM;n++) { if (result[n]==0) { int ECHOPIN = sonar[n]; if(digitalRead(ECHOPIN) == LOW) // ping end echo result[n] = (int)((micros() - startTime)+.05); // Dont bother calc distance - ping time is enough for us. else if (micros() > timeoutTime) result[n] = -3; // record error if we're beyond the set maximum distance. bExit=false; } } }while(bExit == false); } void loop() { ping(); //All done - display for(int n=0;n<SONAR_NUM;n++) { float dist = result[n]; //in time if (dist <= MIN_DISTANCE) {//person is too close or has gone away previousHits[n]=dist; //reset continue; } int previous = previousHits[n]; if (abs(dist - previous) > HAND_MUST_MOVE_DISTANCE) {//New key pressed! previousHits[n]=dist; long now = millis(); if ((now - lasttime[n]) > DEBOUNCEmS) //debounce 333mS { char* sound = soundBank == LOW? sounds[n]:sounds2[n]; Serial.println(sound); system(sound); } lasttime[n] = now; } } if (digitalRead(12) == LOW) {//Switch to second band - have settle time. soundBank = !soundBank; Serial.print(soundBank); delay(1000);//debounce } delay(20); } 

Gerelateerde Artikelen

UltraGuitar - een ultrasone gitaar

UltraGuitar - een ultrasone gitaar

Hoi!Ik hou van muziek. Ik ben het spelen op de piano, maar ik wilde ook om te leren spelen op gitaar. Ik heb een heleboel keer geprobeerd, maar het was erg moeilijk om zelfs eenvoudige nummers te spelen. Ik kon een melodische lijn, maar niet de akkoo
Besturen van een Motor met behulp van ultrasone sensoren van de afstand (HC-SR04)

Besturen van een Motor met behulp van ultrasone sensoren van de afstand (HC-SR04)

Hallo iedereen! In dit project zullen wij de richting van een motor met behulp van twee ultrasone opgezette sensoren controleren.Als de juiste sensor wordt geactiveerd, zal de motor draaien linksom.Als de linker sensor wordt geactiveerd, zal de motor
7 stappen om te leren hoe om Piano te spelen

7 stappen om te leren hoe om Piano te spelen

Veel mensen die willen leren om de piano te spelen worden afgeschrikt door het idee van de lange, saaie urenlang leren muziek notities. Als je serieus bent over het leren om de piano te spelen, is het eerste ding dat u zult moeten doen zet die negati
Wasknijper Piano voor iPad

Wasknijper Piano voor iPad

Touchscreens zijn geweldig kan, maar als het gaat om het afspelen van muziek op hen, het gebrek aan fysieke toetsen een belemmering. Dus heb ik besloten te ronden wat huishoudelijke spullen en een piano toetsenbord dat trucs van de iPad in het denken
John Cage's Solo Piano als vorm

John Cage's Solo Piano als vorm

John Cage's Solo Piano als vorm (94" W BxDxH 66" x 10" D)John Cage (5 September 1912 – 12 augustus 1992) was een Amerikaans componist en kunstenaar. Hij zou vaak sluit de toelichting op zijn bladmuziek platte formulieren maken.Ik heb een 3D
Piano pedalen apparaat

Piano pedalen apparaat

Uit alle instrumenten die iemand kiezen kan om te spelen, is een van de meest populaire de piano. Terwijl bijna iedereen tijdens de leerfase worstelt en dan beter met de praktijk wordt, moeten sommige mensen blijven om te gaan met de strijd van het l
Ultrasone afstandsmeter met LCD-scherm van Arduino UNO

Ultrasone afstandsmeter met LCD-scherm van Arduino UNO

In deze tutorial gaan we zien een ander gebruik van de HC-SR04 ultrasone module. In deze module wordt vaak gebruikt op robots en speelgoedauto's te vinden van belemmeringen, maar het kan worden gebruikt voor het meten van afstanden ook.Afstanden geme
Arduino ultrasone waterniveau Sensor voor espressomachines

Arduino ultrasone waterniveau Sensor voor espressomachines

Ik heb een zeer goede maar mooie oude koffie espressomachine met een uitneembare watertank, het probleem is dat het niet bieden een waarschuwing voor laag waterniveau, licht, dus ik kan niet zo'n niveau voordat u uit water weten! OF op zijn minst zon
8 bit Mario Bros Piano

8 bit Mario Bros Piano

Dit instructable ontstond vervulling de project-eis van de Makecourse bij de Universiteit van Zuid-Florida (www.makecourse.com). Mijn naam is Maria Fontiveros en heb ik besloten om een piano uit 12 verschillende munten uit 12 verschillende landen. Ik
Maken van een duim Piano (duimpiano)

Maken van een duim Piano (duimpiano)

dit is een eenvoudige gids voor het bouwen van een duim-Piano, of duimpiano. Zij hebben geboekt eeuwenlang heel Afrika (en een paar andere plaatsen) en veel verschillen in vorm, grootte en geluid. Ze behoren tot een groep van instrumenten genoemd "Mb
Eenvoudige 12 Opmerking Piano

Eenvoudige 12 Opmerking Piano

Muziek is geweest en nog steeds is één van de beste manieren om mensen bij elkaar komen. Als u leren hoe wilt te spelen kunnen muziek om die mensen te verzamelen die een heel moeilijk proces. Dit is de oplossing die u zoekt. Vandaag you gonna maken v
Eenvoudige Piano pedaal Extender voor kinderen

Eenvoudige Piano pedaal Extender voor kinderen

Mijn 6-jarige dochter is het leren om de piano en doet het prima spelen--het is gewoon dat je korte benen op die leeftijd hebt. Haar leraar heeft een dure piano pedaal extensie, die niet alleen de pedalen breidt, maar ook laat haar haar voeten ergens
Gemakkelijk ultrasone 4-pin sensor controle (hc-sr04)

Gemakkelijk ultrasone 4-pin sensor controle (hc-sr04)

Hallo Instructables,Ik heb wat moeite met mijn goedkoop ultrasone sensor (hc-sr04) en vandaag vond ik een echt eenvoudige oplossing.Het is een echt eenvoudig bewerken van de code van de normale 3pin.Ik voegde de 4 int naar het begin van de code, zoda
Het gebruik van een ultrasone Sensor met Arduino

Het gebruik van een ultrasone Sensor met Arduino

HC-SR04 ultrasone sensoren afstanden vrij nauwkeurig kunnen meten en zijn zeer nuttig in vele Arduino projecten. Ik heb ze gebruikt in autonome robots, elektronische instrumenten, en vele andere projecten. Ze hebben een bereik van 2 cm - 400 cm (~ 0.