Hackster is hosting Hackster Holidays, Ep. 6: Livestream & Giveaway Drawing. Watch previous episodes or stream live on Monday!Stream Hackster Holidays, Ep. 6 on Monday!
Alie Gonzalez-Guyon
Published © GPL3+

Rezz Halloween Rave Glasses

Inspired by the DJ Rezz these glasses use the SparkFun Skeleboard "Doot Doot" board and have been waterproofed so you can rave without fear!

IntermediateWork in progress12 hours919

Things used in this project

Hardware components

SparkFun Skeleboard - ESP32 Thing Plus
×1
SparkFun MicroB USB Plug Breakout
×1
Adafruit NeoPixel Ring - 16 LED
×1
Adafruit NeoPixel Ring - 24 LED
×1
LED Diffusing Acrylic - Black
×1
Cheap Glasses
×1
Glasses Straps
×1
Acrylic Conformal Coating Spray
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Glowforge
Glowforge
Soldering iron (generic)
Soldering iron (generic)
Hot glue gun (generic)
Hot glue gun (generic)
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires

Story

Read more

Custom parts and enclosures

Rezz Glasses Frames

Use this to laser cut the frames out of LED acrylic

Schematics

Circuit Diagram

Code

Main Code

Arduino
////////////////////////////////////////////////
//MADE BY: Alie Gonzalez - @Alie_GG - 10/28/21//
////////////////////////////////////////////////


#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel strip = Adafruit_NeoPixel(80, 5, NEO_GRB + NEO_KHZ800);


uint32_t brightness = 10;
uint32_t color = strip.Color(brightness, 0, 0);

unsigned long outerRingInterval = 42; //ONLY PUT EVEN NUMBERS // the time we need to wait
unsigned long innerRingInterval = outerRingInterval*1.5; // the time we need to wait

unsigned long innerRingPreviousMillis = 0; // millis() returns an unsigned long.
unsigned long outerRingPreviousMillis = 0; // millis() returns an unsigned long.


uint16_t outerRingCounter1 = 0;
uint16_t outerRingCounter2 = 12;

uint16_t outerLeftRingCounter1 = 56;
uint16_t outerLeftRingCounter2 = 68; //68

uint16_t innerRingCounter1 = 37; //37
uint16_t innerRingCounter2 = 29;

uint16_t innerLeftRingCounter1 = 53;
uint16_t innerLeftRingCounter2 = 45;



void setup() {
  strip.begin();
  strip.setBrightness(255); //adjust brightness here
  strip.show(); // Initialize all pixels to 'off'

  Serial.begin(115200);
}



void loop() {

  unsigned long currentMillis = millis(); // grab current time

  //////////////
  //INNER RING//
  //////////////
  
  if ((unsigned long)(currentMillis - innerRingPreviousMillis) >= innerRingInterval) {
  
    strip.setPixelColor(innerRingCounter1, color);
    strip.setPixelColor(innerRingCounter2, color);
    strip.setPixelColor(innerLeftRingCounter1, color);
    strip.setPixelColor(innerLeftRingCounter2, color);
    
    strip.setPixelColor(((innerRingCounter1+16-5)%16)+24, 0);
    strip.setPixelColor(((innerRingCounter2+16-5)%16)+24, 0);
    strip.setPixelColor(((innerLeftRingCounter1+16-5)%16)+40, 0);
    strip.setPixelColor(((innerLeftRingCounter2+16-5)%16)+40, 0);
    
    strip.show();
    
    innerRingCounter1--;
    innerRingCounter2--;
    innerLeftRingCounter1--;
    innerLeftRingCounter2--;

    if (innerRingCounter1 == 23) innerRingCounter1=39;
    if (innerRingCounter2 == 23) innerRingCounter2=39;
    if (innerLeftRingCounter1 == 39) innerLeftRingCounter1=55;
    if (innerLeftRingCounter2 == 39) innerLeftRingCounter2=55; 
    
    innerRingPreviousMillis = currentMillis;
  }

  //////////////
  //OUTER RING//
  //////////////

  // check if "interval" time has passed (1000 milliseconds)
  if ((unsigned long)(currentMillis - outerRingPreviousMillis) >= outerRingInterval) {
  
    strip.setPixelColor(outerRingCounter1, color);
    strip.setPixelColor(outerRingCounter2, color);
    strip.setPixelColor(outerLeftRingCounter1, color);
    strip.setPixelColor(outerLeftRingCounter2, color);
    
    strip.setPixelColor((outerRingCounter1+24-4)%24, 0);
    strip.setPixelColor((outerRingCounter2+24-4)%24, 0);
    strip.setPixelColor(((outerLeftRingCounter1+24)%24)+56, 0);
    strip.setPixelColor(((outerLeftRingCounter2+24)%24)+56, 0);
    
    strip.show();
    
    outerRingCounter1++;
    outerRingCounter2++;
    outerLeftRingCounter1++;
    outerLeftRingCounter2++;

    if (outerRingCounter1 == 24) outerRingCounter1=0;
    if (outerRingCounter2 == 24) outerRingCounter2=0;
    if (outerLeftRingCounter1 == 80) outerLeftRingCounter1=56;
    if (outerLeftRingCounter2 == 80) outerLeftRingCounter2=56;
    
    outerRingPreviousMillis = currentMillis;
  }
}

Credits

Alie Gonzalez-Guyon

Alie Gonzalez-Guyon

21 projects • 65 followers
✨ Creative Technologist 💡 Arm Innovator 💼 Formerly: SparkFun, MATRIX Labs, & AdMobilize

Comments