Introduction: DISTANCE DANCE

A system to be integrated into a haute couture dress that will contribute to the modern dance theater with the developing fashion technology. The aim is to ensure that the clothes that reflect ourselves are transferred correctly with technology. These are the modern dances in the theatre. It will make its effect more functional and impressive. Cultural and social interaction will be ensured. The modern dancer will dance in her dress and show the effect of light with the distance sensor with her dance moves.

Step 1: HISTORY

Step 2: COMPONENTS

An Ultrasonic Sensor is a device that measures distance to an object using Sound Waves. It works by sending out a sound wave at ultrasonic frequency and waits for it to bounce back from the object. Then, the time delay between transmission of sound and receiving of the sound is used to calculate the distance.

The HC-SR04 is a typical ultrasonic sensor which is used in many projects such as obstacle detector and electronic distance measurement tapes.

List of Components

  • Arduino Uno
  • Neopixel Ring 24
  • Ultrasonic Distance Sensor (HC-SR04)
  • Female- Male Cablo

After obtaining the components in the list, you must place them in the right places.

Step 3: INSERT

You should place it as above. Try it from https://www.tinkercad.com/ first and make sure it will work.

Step 4: Upload to Library

Step 5: Code

// NeoPixel test program showing use of the WHITE channel for RGBW// pixels only (won't look correct on regular RGB NeoPixel strips).
#include <adafruit_neopixel.h>#ifdef __AVR__ #include <avr power.h=""> // Required for 16 MHz Adafruit Trinket#endif 0</avr></adafruit_neopixel.h>
const int trigPin = 13;const int echoPin = 12;// Which pin on the Arduino is connected to the NeoPixels?// On a Trinket or Gemma we suggest changing this to 1:#define LED_PIN     6
// How many NeoPixels are attached to the Arduino?#define LED_COUNT  24
// NeoPixel brightness, 0 (min) to 255 (max)#define BRIGHTNESS 250 // Set BRIGHTNESS to about 1/5 (max = 255)
// Declare our NeoPixel strip object:Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRBW + NEO_KHZ800);// Argument 1 = Number of pixels in NeoPixel strip// Argument 2 = Arduino pin number (most are valid)// Argument 3 = Pixel type flags, add together as needed://   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
void setup() {  // These lines are specifically to support the Adafruit Trinket 5V 16 MHz.  // Any other board, you can remove this part (but no harm leaving it):#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)  clock_prescale_set(clock_div_1);#endif  // END of Trinket-specific code.
  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)  strip.show();            // Turn OFF all pixels ASAP  strip.setBrightness(BRIGHTNESS);}
void loop() { long duration, inches, cm;  pinMode(trigPin, OUTPUT);  digitalWrite(trigPin, LOW);  delayMicroseconds(2);  digitalWrite(trigPin, HIGH);  delayMicroseconds(10);  digitalWrite(trigPin, LOW);
   pinMode(echoPin, INPUT);  duration = pulseIn(echoPin, HIGH);
    // convert the time into a distance  inches = microsecondsToInches(duration);  cm = microsecondsToCentimeters(duration);   Serial.print(inches);  Serial.print("in, ");  Serial.print(cm);  Serial.print("cm");  Serial.println();
  if (inches <= 1)  {  whiteOverRainbow(75, 5);    }
 else if (inches >= 2) {
 pulseWhite(5);}
    // Fill along the length of the strip in various colors...  colorWipe(strip.Color(255,   200,   15)     , 10); // Red  colorWipe(strip.Color( 20, 255,   192)     , 80); // Green  colorWipe(strip.Color(  80,   64, 255)     , 95); // Blue  colorWipe(strip.Color(  75,   32,   200, 255), 0); // True white (not RGB white)
  //whiteOverRainbow(75, 5);
  //pulseWhite(5);
  //rainbowFade2White(3, 3, 1);}
long microsecondsToInches(long microseconds){// According to Parallax's datasheet for the PING))), there are// 73.746 microseconds per inch (i.e. sound travels at //1130 feet per second).  This gives the distance travelled //by the ping, outbound and return, so we divide by 2 to get the //distance of the obstacle. //See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf  return microseconds / 74 / 2;} long microsecondsToCentimeters(long microseconds){  // The speed of sound is 340 m/s or 29 microseconds per  // centimeter. The ping travels out and back, so to find   //the distance of the object we take half of the distance   //travelled.  return microseconds / 29 / 2;}// Fill strip pixels one after another with a color. Strip is NOT cleared// first; anything there will be covered pixel by pixel. Pass in color// (as a single 'packed' 32-bit value, which you can get by calling// strip.Color(red, green, blue) as shown in the loop() function above),// and a delay time (in milliseconds) between pixels.void colorWipe(uint32_t color, int wait) {  for(int i=0; i<strip.numpixels(); i++)="" {="" for="" each="" pixel="" in="" strip...="" strip.setpixelcolor(i,="" color);="" set="" pixel's="" color="" (in="" ram)="" strip.show();="" update="" strip="" to="" match="" delay(wait);="" pause="" a="" moment="" }="" }<="" p=""></strip.numpixels();>
void whiteOverRainbow(int whiteSpeed, int whiteLength) {
  if(whiteLength >= strip.numPixels()) whiteLength = strip.numPixels() - 1;
  int      head          = whiteLength - 1;  int      tail          = 0;  int      loops         = 5;  int      loopNum       = 0;  uint32_t lastTime      = millis();  uint32_t firstPixelHue = 0;
  for(;;) { // Repeat forever (or until a 'break' or 'return')    for(int i=0; i<strip.numpixels(); i++)="" {="" for="" each="" pixel="" in="" strip...="" if(((i="">= tail) && (i <= head)) ||      //  If between head & tail...         ((tail > head) && ((i >= tail) || (i <= head)))) {        strip.setPixelColor(i, strip.Color(0, 0, 0, 255)); // Set white      } else {                                             // else set rainbow        int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());        strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));      }    }</strip.numpixels();>
    strip.show(); // Update strip with new contents    // There's no delay here, it just runs full-tilt until the timer and    // counter combination below runs out.
    firstPixelHue += 40; // Advance just a little along the color wheel
    if((millis() - lastTime) > whiteSpeed) { // Time to update head/tail?      if(++head >= strip.numPixels()) {      // Advance head, wrap around        head = 0;        if(++loopNum >= loops) return;      }      if(++tail >= strip.numPixels()) {      // Advance tail, wrap around        tail = 0;      }      lastTime = millis();                   // Save time of last movement    }  }}
void pulseWhite(uint8_t wait) {  for(int j=0; j<256; j++) { // Ramp up from 0 to 255    // Fill entire strip with white at gamma-corrected brightness level 'j':    strip.fill(strip.Color(0, 0, 0, strip.gamma8(j)));    strip.show();    delay(wait);  }
  for(int j=255; j>=0; j--) { // Ramp down from 255 to 0    strip.fill(strip.Color(0, 0, 0, strip.gamma8(j)));    strip.show();    delay(wait);  }}
void rainbowFade2White(int wait, int rainbowLoops, int whiteLoops) {  int fadeVal=0, fadeMax=100;
  // Hue of first pixel runs 'rainbowLoops' complete loops through the color  // wheel. Color wheel has a range of 65536 but it's OK if we roll over, so  // just count from 0 to rainbowLoops*65536, using steps of 256 so we  // advance around the wheel at a decent clip.  for(uint32_t firstPixelHue = 0; firstPixelHue < rainbowLoops*65536;    firstPixelHue += 256) {
    for(int i=0; i<strip.numpixels(); i++)="" {="" for="" each="" pixel="" in="" strip...<="" p=""></strip.numpixels();>
      // Offset pixel hue by an amount to make one full revolution of the      // color wheel (range of 65536) along the length of the strip      // (strip.numPixels() steps):      uint32_t pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
      // strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or      // optionally add saturation and value (brightness) (each 0 to 255).      // Here we're using just the three-argument variant, though the      // second value (saturation) is a constant 255.      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue, 255,        255 * fadeVal / fadeMax)));    }
    strip.show();    delay(wait);
    if(firstPixelHue < 65536) {                              // First loop,      if(fadeVal < fadeMax) fadeVal++;                       // fade in    } else if(firstPixelHue >= ((rainbowLoops-1) * 65536)) { // Last loop,      if(fadeVal > 0) fadeVal--;                             // fade out    } else {      fadeVal = fadeMax; // Interim loop, make sure fade is at max    }  }
  for(int k=0; k<whiteloops; k++)="" {="" for(int="" j="0;" j<256;="" j++)="" ramp="" up="" 0="" to="" 255="" fill="" entire="" strip="" with="" white="" at="" gamma-corrected="" brightness="" level="" 'j':="" strip.fill(strip.color(0,="" 0,="" strip.gamma8(j)));="" strip.show();="" }="" delay(1000);="" pause="" 1="" second="">=0; j--) { // Ramp down 255 to 0      strip.fill(strip.Color(0, 0, 0, strip.gamma8(j)));      strip.show();    }  }</whiteloops;>
  delay(500); // Pause 1/2 second}

Step 6: LET'S WATCH THE VIDEO

Step 7: REFERENCE LINKS