THEREMIN CON ARDUINO (motion triggered sound)

Ciao A tutti!

premetto che sono una neofita completa in Arduino. Il progetto a cui sto lavorando consiste nel attaccare all'arduino un sensore di movimento cosicche' nel momento in cui il sensore riconosce la presenza di qualcosa/qualcuno mandi un segnale a MAX-msp il quale a sua volta aprira' dei microfoni.

vorrei che il volume dei microfoni e conseguentemente del suono che ne esce cresca man mano che ci si avvicina ad essi. IL problema e' come faccio.

Vi prego illuminatemi!

Ecco quello che ho trovato finora:

http://www.robotstore.it/product/204/PIR-Sensore-di-movimento-e-di-prossimità-ad-infrarossi.html

http://www.robot-electronics.co.uk/htm/srf05tech.htm

ma non saprei quale puo essere il migliore.

Inoltre ho trovato gia' alcuni schemi per collegare arduino a sensore PIR:


Grazie

Arianna

Secondo me con microfoni non fai un suono ma lo riprendi. Servono altoparlanti oppure c'é qualcosa che non ho capito.
Per secondo come é l' interfaccia col MAX-msp. C'é possibilitá di selezionare il volume?

Il PIR non rileva la distanza ma solo la presenza. Per un rilevamento di distanza Ti serve un sensore di distanza a ultrasuoni o a infrarossi. Il SFR05 puó andare bene anche se ha un rang die rilevamento abbastanza stretto.

Ciao Uwe

Ciao Uwe,

GrazieTantissimo!
scusa non mi sono spiegata molto bene: i microfoni sono attaccati al mio "corpo sonoro" e dal momento in cui sono azionati sara' possibile ascoltarlo

Max non l'ho mai usato interfacciato ad Arduino (anche perche' con quest'ultimo e' poco meno di un mese che ci smanetto) ma posso selezionare praticamente quello che voglio...vedro'...

La parte che piu' mi preme e' quella con Arduino dato che ancora lo capisco poco. Le distanza da cui voglio lavorare e' dai 60cm in giu'..credo che su questo range l'SRF05 dovrebbe funzionare....?

Grazie ancora!!!

arianna

Arduino puó mandare stringe sulla USB/seriale alla COM del PC. Se il MAX puó prendere i dati e fare determinate azioni é fattibile.

La distanza minima del SRF05 é 3 cm e va fino a un massimo di 4 metri.

Ciao Uwe

Ciao! Per provare ti allungo questo schema http://www.elettromarco.altervista.org/theremin-economico.html?cb=1348921366387#semplicissimo. So che non è precisissimo ma io l'ho realizzato e va abbastanza bene. Per il resto ti lascio a più illustri membri del forum! :stuck_out_tongue:
So che non è precisissimo ma io l'ho realizzato e va abbastanza bene. Per il resto ti lascio a più illustri membri del forum! :stuck_out_tongue:

Grazie! scusate se non ho risposto subito..casini su casini su casini =(

ora io mi ci sto spaccando la testa: al momento sto usando tale schema:

http://luckylarry.co.uk/arduino-projects/arduino-sonic-range-finder-with-srf05/

il led pero' al posto che essere sulla breadboard e' su arduino (dig input 13)..sono praticamente certa di avere sbagliato qualcosa nella programmazione, vorrei che la distanza a cui inizia a rispondere il sensore sia 60cm..

cmq ora provo il tuo sketch SUBSEA

vi faro' sapere.

Grazie ancora a tutti!

ari

Il mio schema vorrai dire! :wink: comunque è qualcosa di molto semplice e sicuramente non è ciò che cerchi, ma per qualche prova a basso costo... :slight_smile:
P.S. Se vuoi anche regolare il volume come nei theremin veri sostituisci il trimmer con un altra ldr. Per quanto riguarda lo schema prova così:

const int numOfReadings = 10;                   // number of readings to take/ items in the array
int readings[numOfReadings];                    // stores the distance readings in an array
int arrayIndex = 0;                             // arrayIndex of the current item in the array
int total = 0;                                  // stores the cumlative total
int averageDistance = 0;                        // stores the average value

// setup pins and variables for SRF05 sonar device

int echoPin = 2;                                // SRF05 echo pin (digital 2)
int initPin = 3;                                // SRF05 trigger pin (digital 3)
unsigned long pulseTime = 0;                    // stores the pulse in Micro Seconds
unsigned long distance = 0;                     // variable for storing the distance (cm)

// setup pins/values for LED

int redLEDPin = 13;                              // Red LED, connected to digital PWM pin 9
int redLEDValue = 0;                            // stores the value of brightness for the LED (0 = fully off, 255 = fully on)

//setup

void setup() {

  pinMode(redLEDPin, OUTPUT);                   // sets pin 9 as output
  pinMode(initPin, OUTPUT);                     // set init pin 3 as output
  pinMode(echoPin, INPUT);                      // set echo pin 2 as input

  // create array loop to iterate over every item in the array

  for (int thisReading = 0; thisReading < numOfReadings; thisReading++) {
readings[thisReading] = 0;
 }
// initialize the serial port, lets you view the
 // distances being pinged if connected to computer
     Serial.begin(9600);
 } 

// execute
void loop() {
digitalWrite(initPin, HIGH);                    // send 10 microsecond pulse
delayMicroseconds(10);                  // wait 10 microseconds before turning off
digitalWrite(initPin, LOW);                     // stop sending the pulse
pulseTime = pulseIn(echoPin, HIGH);             // Look for a return pulse, it should be high as the pulse goes low-high-low
distance = pulseTime/58;                        // Distance = pulse time / 58 to convert to cm.
 total= total - readings[arrayIndex];           // subtract the last distance
readings[arrayIndex] = distance;                // add distance reading to array
total= total + readings[arrayIndex];            // add the reading to the total
arrayIndex = arrayIndex + 1;                    // go to the next item in the array
// At the end of the array (10 items) then start again
if (arrayIndex >= numOfReadings)  {
    arrayIndex = 0;
  }

  averageDistance = total / numOfReadings;      // calculate the average distance

  // if the distance is less than 255cm then change the brightness of the LED

  if (averageDistance < 60) {
    redLEDValue = 60 - averageDistance;        // this means the smaller the distance the brighterthe LED.
  }

  analogWrite(redLEDPin, redLEDValue);          // Write current value to LED pins
  Serial.println(averageDistance, DEC);         // print out the average distance to the debugger
  delay(100);                                   // wait 100 milli seconds before looping again

}

Fammi sapere! Ciao!