top of page
Blog: Blog2
  • sal5014

Dancing to the music... almost

OUR PROJECT

Theremin-like instrument that can play several different scales.

Desired structure.

Functions

Where we're at.


OUR MATERIALS

At the moment what we have on hand is cardboard and plastic. Cardboard is easier to cut so we're going with that. We're not too sure of the structure. Perhaps something more compact would be best.


OUR CIRCUIT


It didn't change much since last time. We haven't added the second sensor yet. It's taken us a while to figure out this one.


OUR CODE

//Sound project #include <MIDIUSB.h> #include <pitchToNote.h> int baseNote = 60; int trigPin1 = 4; int echoPin1 = 3; //int trigPin2 = 4; //int echoPin2 = 3; int lastDistance = 0; void setup() {   // put your setup code here, to run once:   Serial.begin (9600);   pinMode(trigPin1, OUTPUT);   pinMode(echoPin1, INPUT); //  pinMode(trigPin2, OUTPUT); //  pinMode(echoPin2, INPUT); } void loop() {   // put your main code here, to run repeatedly:   byte note = baseNote;   long duration1, distance1;   digitalWrite(trigPin1, LOW);  // Added this line   delayMicroseconds(2); // Added this line   digitalWrite(trigPin1, HIGH);   delayMicroseconds(10); // Added this line   digitalWrite(trigPin1, LOW);   duration1 = pulseIn(echoPin1, HIGH);   distance1 = (duration1) / 29.1;   Serial.print ( "Sensor1  ");   Serial.print ( distance1);   Serial.println("cm");   delay(2000);   if (distance1 != lastDistance) {     delay(5);     // debounce delay     if (distance1 > 0 && distance1 <= 10) {       midiCommand(0x90, note, 127);     }       if (distance1 > 11 && distance1 <= 20) {         note = note +2;       midiCommand(0x90, note, 127);     }       if (distance1 > 21 && distance1 <= 30) {         note = note +4;       midiCommand(0x90, note, 127);     }     if (distance1 > 31 && distance1 <= 40) {         note = note +5;       midiCommand(0x90, note, 127);     }      if (distance1 > 41 && distance1 <= 50) {         note = note +7;       midiCommand(0x90, note, 127);     }      if (distance1 > 51 && distance1 <= 60) {         note = note +9;       midiCommand(0x90, note, 127);     }     if (distance1 > 61 && distance1 <= 70) {         note = note +11;       midiCommand(0x90, note, 127);     }     else {       midiCommand(0x80, note, 0);     }   } } void midiCommand(byte cmd, byte data1, byte  data2) {   // First parameter is the event type (top 4 bits of the command byte).   // Second parameter is command byte combined with the channel.   // Third parameter is the first data byte   // Fourth parameter second data byte   midiEventPacket_t midiMsg = {cmd >> 4, cmd, data1, data2};   MidiUSB.sendMIDI(midiMsg); }

OUR QUESTIONS

* How do we send a midiMessage that is able to play sounds in different scales in something other than piano?

* How do we add a byte to the message that indicates a change in the pitch?

* How do we sustain the note by just mapping the sensor?

* Is there a way to pre-configure all the scales, using the same logic?

* Will be necessary to add a smooth transition when mapping the sensor?


OUR TIPS:

-Do not use near Wi Fi signals the sensor just stops measuring correctly.

-The path to follow the sound needs to be constant. At the same height  making a  line. If you move up and down it stops reading.

17 views0 comments

Recent Posts

See All
bottom of page