Bedazzler: DIY icke-dödliga vapen (8 / 8 steg)
Steg 8: Hårdvara filer
- Schematiska och layout för LED skylt i EagleCAD format
Lysdioderna är används ursprungligen CREE Xlamp 7090 men någon 1 + watts lysdioder arbete OK. Balanserande motstånden är ca 1 ohm, men kan justeras. Använda 2 uppsättningar med 6 lysdioder för tri-färg (mer mångsidig). Eller 3 uppsättningar av 6 lysdioder för grön/blå endast (mer effektiv)
Arduino (eller kompatibel) är ansluten till lamporna via logik-nivå N-kanal fETsna. Diagrammet visar 2 grupper av 3 färger men kan lätt ändras för 2 färger. Om röda lysdioderna används, bör en 0.5 ohm, 5W led placeras i serie med kabeln till LED plattan.
Kod:
Bedazzler! En bra flera LED PWM projektet, av Limor Fried
Public domain 2009
#include < util/delay.h >
int värde;
int redpin1 = 5, redpin2 = 6;
int greenpin1 = 3, greenpin2 = 11;
int bluepin1 = 9, bluepin2 = 10;
int ledmax;
#define GLITTER 0
#define virvel 1
#define DAZZLE 2
flyktiga int läge = blända;
Vi använder en knapp på stift 2 (avbryta pin) för att upptäcka läget ändras
void modechange(void)
{
Dämpningstid det
om (digitalRead(2) == låg) {
_delay_ms(10);
om (digitalRead(2)! = låg)
hemkomst.
Serial.println("button");
läge ++;
om (läge > 2)
läge = 0;
Serial.Print ("nya läge!");
Serial.println (läge, DEC);
}
}
void setup()
{
pinMode (2, ingång);
digitalWrite (2, hög). pullup på mode-knappen
attachInterrupt (0, modechange, förändring);
Serial.BEGIN(9600);
randomSeed(analogRead(0));
ingenting för installationsprogrammet
analogWrite (redpin1, 0);
analogWrite (redpin2, 0);
analogWrite (greenpin1, 0);
analogWrite (greenpin2, 0);
analogWrite (bluepin1, 0);
analogWrite (bluepin2, 0);
ledmax = 250; ändra detta värde för att justera den maximala ljusstyrkan
}
void loop()
{
Switch(mode) {
fall virvel:
Serial.println("Swirl");
ckswirl (ledmax, 10);
bryta;
fall GLITTER:
Serial.println("glimmer");
glimmertest (ledmax, ledmax/10, 30);
bryta;
fall bländning:
Serial.println("Dazzle");
blända (ledmax, 10, 7, 11);
bryta;
}
}
void blända (int ledmax, int pulselensec, int freqmin, int freqmax) {
långa pulser;
analogWrite (redpin1, 0);
analogWrite (redpin2, 0);
analogWrite (greenpin1, 0);
analogWrite (greenpin2, 0);
analogWrite (bluepin1, 0);
analogWrite (bluepin2, 0);
Observera att vi inte använder röda lysdioder i detta
int freq = random (freqmin, freqmax + 1);
int pulsedelay = 1000/freq;
pulsedelay = 2;
pulser = pulselensec;
pulser * = 1000;
pulser / = 2 * pulsedelay;
/*
Serial.Print ("pulserande på");
Serial.Print (freq, DEC);
Serial.Print ("Hz (");
Serial.Print (pulsedelay, DEC);
Serial.println ("ms på/av)");
Serial.Print(Pulses);
Serial.println ("pulserar");
*/
medan (pulser--) {
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);
om (läge! = DAZZLE) återvända;
}
}
void ckswirl (int ledmax, uint8_t z) {
int r, g, b;
blekna från rött till orange till gult till grönt
för (g = 0; g / / slå röda ner
analogWrite (redpin1, ledmax-g);
analogWrite (redpin2, ledmax-g);
analogWrite (greenpin1, g); anger värdet (varierar från 0 till 255)
analogWrite (greenpin2, g); anger värdet (varierar från 0 till 255)
Delay(z);
om (läge! = virvel) återvända;
}
blekna från grönt till blått
för (b = 0; b / / slå röda ner
analogWrite (bluepin1, b);
analogWrite (bluepin2, b);
analogWrite (greenpin1, ledmax-b); anger värdet (varierar från 0 till 255)
analogWrite (greenpin2, ledmax-b); anger värdet (varierar från 0 till 255)
Delay(z);
om (läge! = virvel) återvända;
}
från blått till rött
för (r = 0; r / / slå röda ner
analogWrite (redpin1, r);
analogWrite (redpin2, r);
analogWrite (bluepin1, ledmax-r); anger värdet (varierar från 0 till 255)
analogWrite (bluepin2, ledmax-r); anger värdet (varierar från 0 till 255)
Delay(z);
om (läge! = virvel) återvända;
}
}
void glimmertest (int maxvalue, int incr, int z) {
för (värde = 0; värdet < = maxvalue; värde += incr)
{
analogWrite (greenpin1, värde); anger värdet (varierar från 0 till 255)
analogWrite (greenpin2, maxvalue-värde); anger värdet (varierar från 0 till 255)
analogWrite (bluepin1, värde);
analogWrite (bluepin2, maxvalue-värde); anger värdet (varierar från 0 till 255)
analogWrite (redpin1, värde);
analogWrite (redpin2, maxvalue-värde); anger värdet (varierar från 0 till 255)
Delay(z); väntar på 30 milli sekunder att se ljusreglering effekten
om (läge! = GLITTER) återvända;
}
för (värde = maxvalue; värde > = 0; värde-= incr) / / tona ut (från max till min)
{
analogWrite (greenpin1, värde);
analogWrite (greenpin2, maxvalue-värde); anger värdet (varierar från 0 till 255)
analogWrite (bluepin1, värde);
analogWrite (bluepin2, maxvalue-värde); anger värdet (varierar från 0 till 255)
analogWrite (redpin1, värde);
analogWrite (redpin2, maxvalue-värde); anger värdet (varierar från 0 till 255)
Delay(z);
om (läge! = GLITTER) återvända;
}
}