3 Simple Ways to
Share What You Make

With Instructables you can share what you make with the world — and tap into an ever-growing community of creative experts.

PhotosPhotos

Share one or more photos of a project, recipe, or whatever you've made, quickly and easily.

Step by StepStep-By-Step

Share your step-by-step photos with text instructions of what you made so others can do it too!

VideoVideo

Share your how-to video. You'll need your embed code from a video site such as YouTube.

Bedazzler: DIY non-lethal weaponry

Step 8Hardware Files

Hardware Files
This is all public domain, so enjoy!

*Schematic for LED plate in PNG format
The LEDs originally used are CREE Xlamp 7090 but any 1+ Watt LEDs work OK. The balancing resistors are about 1 ohm, but can be adjusted. Use 2 sets of 6 LEDs for full tri-color (more versatile). Or 3 sets of 6 LEDs for green/blue only (more effective)

The arduino (or compatible) is hooked up to the LEDs via logic-level N-channel FETs. The diagram shows 2 groups of 3 colors but can be easily changed for 2 colors. If red LEDs are used, a 0.5 ohm, 5W led should be placed in series with the wire to the LED plate.

Code:

// Bedazzler! A good multiple LED PWM project, by Limor Fried
// Public domain 2009

#include <util/delay.h>
int value;
int redpin1 = 5, redpin2 = 6;
int greenpin1 = 3, greenpin2 = 11;
int bluepin1 = 9, bluepin2 = 10;

int ledmax;

#define GLITTER 0
#define SWIRL 1
#define DAZZLE 2

volatile int mode = DAZZLE;

// we use a button on pin 2 (interrupt pin) to detect mode changes
void modechange(void)
{
// debounce it
if (digitalRead(2) == LOW) {
_delay_ms(10);
if (digitalRead(2) != LOW)
return;
Serial.println("button");
mode++;
if (mode > 2)
mode = 0;
Serial.print("new mode! ");
Serial.println(mode, DEC);

}
}

void setup()
{
pinMode(2, INPUT);
digitalWrite(2, HIGH); // pullup on mode button
attachInterrupt(0, modechange, CHANGE);

Serial.begin(9600);

randomSeed(analogRead(0));

// nothing for setup
analogWrite(redpin1, 0);
analogWrite(redpin2, 0);
analogWrite(greenpin1, 0);
analogWrite(greenpin2, 0);
analogWrite(bluepin1, 0);
analogWrite(bluepin2, 0);

ledmax = 250; // change this value to adjust the maximum brightness
}

void loop()
{
switch(mode) {
case SWIRL:
//Serial.println("swirl");
ckswirl(ledmax, 10);
break;
case GLITTER:
//Serial.println("glimmer");
glimmertest(ledmax, ledmax/10, 30);
break;
case DAZZLE:
//Serial.println("dazzle");
bedazzle(ledmax, 10, 7, 11);
break;
}

}

void bedazzle(int ledmax, int pulselensec, int freqmin, int freqmax) {
long pulses;

analogWrite(redpin1, 0);
analogWrite(redpin2, 0);
analogWrite(greenpin1, 0);
analogWrite(greenpin2, 0);
analogWrite(bluepin1, 0);
analogWrite(bluepin2, 0);

// note we dont use red LEDs in this
int freq = random(freqmin, freqmax+1);
int pulsedelay = 1000/freq;
pulsedelay /= 2;

pulses = pulselensec;
pulses *= 1000;
pulses /= 2*pulsedelay;

/*
Serial.print("pulsing at ");
Serial.print(freq, DEC);
Serial.print(" Hz (");
Serial.print(pulsedelay, DEC);
Serial.println(" ms on/off)");
Serial.print(pulses);
Serial.println(" pulses");
*/

while (pulses--) {
analogWrite(greenpin1, ledmax);
analogWrite(greenpin2, ledmax);
analogWrite(bluepin1, ledmax);
analogWrite(bluepin2, ledmax);
_delay_ms(pulsedelay);
analogWrite(greenpin1, 0);
analogWrite(greenpin2, 0);
analogWrite(bluepin1, 0);
analogWrite(bluepin2, 0);
_delay_ms(pulsedelay);
if (mode != DAZZLE) return;
}

}

void ckswirl(int ledmax, uint8_t z) {
int r, g, b;

// fade from red to orange to yellow to green
for (g=0; g// turn red down
analogWrite(redpin1, ledmax-g);
analogWrite(redpin2, ledmax-g);
analogWrite(greenpin1, g); // sets the value (range from 0 to 255)
analogWrite(greenpin2, g); // sets the value (range from 0 to 255)
delay(z);

if (mode != SWIRL) return;
}
// fade from green to blue
for (b=0; b// turn red down
analogWrite(bluepin1, b);
analogWrite(bluepin2, b);
analogWrite(greenpin1, ledmax-b); // sets the value (range from 0 to 255)
analogWrite(greenpin2, ledmax-b); // sets the value (range from 0 to 255)
delay(z);

if (mode != SWIRL) return;
}
// from blue to red
for (r=0; r// turn red down
analogWrite(redpin1, r);
analogWrite(redpin2, r);
analogWrite(bluepin1, ledmax-r); // sets the value (range from 0 to 255)
analogWrite(bluepin2, ledmax-r); // sets the value (range from 0 to 255)
delay(z);

if (mode != SWIRL) return;
}
}

void glimmertest(int maxvalue, int incr, int z) {

for(value = 0 ; value <= maxvalue; value+=incr)
{
analogWrite(greenpin1, value); // sets the value (range from 0 to 255)
analogWrite(greenpin2, maxvalue-value); // sets the value (range from 0 to 255)
analogWrite(bluepin1, value);
analogWrite(bluepin2, maxvalue-value); // sets the value (range from 0 to 255)
analogWrite(redpin1, value);
analogWrite(redpin2, maxvalue-value); // sets the value (range from 0 to 255)
delay(z); // waits for 30 milli seconds to see the dimming effect

if (mode != GLITTER) return;
}
for(value = maxvalue; value >=0; value-=incr) // fade out (from max to min)
{
analogWrite(greenpin1, value);
analogWrite(greenpin2 , maxvalue-value); // sets the value (range from 0 to 255)
analogWrite(bluepin1, value);
analogWrite(bluepin2, maxvalue-value); // sets the value (range from 0 to 255)
analogWrite(redpin1, value);
analogWrite(redpin2, maxvalue-value); // sets the value (range from 0 to 255)
delay(z);

if (mode != GLITTER) return;
}
}

« Previous StepDownload PDFView All StepsNext Step »

Pro

Get More Out of Instructables

Already have an Account?

close

All Steps Viewing
View all steps of an Instructable on the same page when you're a Pro Member.

Upgrade to Pro today!
234
Followers
17
Author:adafruit(Adafruit Industries)
All-original DIY electronics kits - Adafruit Industries is a New York City based company that sells kits and parts for original, open source hardware electronics projects featured on www.adafruit.com ...
more »