Étape 8: Fichiers de matériel
- Schématique et mise en page pour plaque LED au format EagleCAD
Les LEDs utilisées initialement sont CREE Xlamp 7090 mais n’importe quel travail de Watt LED 1 + OK. Les résistances d’équilibrage sont environ 1 ohms, mais peuvent être adaptés. Utiliser 2 séries de 6 LEDs pour tri-polychrome (plus polyvalent). Ou 3 séries de 6 LEDs vert/bleu seulement (plus efficace)
L’arduino (ou compatible) est relié à la LED via FET canal N niveau logique. Le diagramme montre les 2 groupes de 3 couleurs, mais peut être facilement modifié pour 2 couleurs. Si l'on utilise des LEDs rouges, un 0,5 ohm, 5W led doit être placé en série avec le fil à la plaque de LED.
Code :
BeDazzler ! Un bon projet de multiples LED PWM, par Limor Fried
Domaine public 2009
#include < util/delay.h >
int valeur ;
int redpin1 = 5, redpin2 = 6 ;
int greenpin1 = 3, greenpin2 = 11 ;
int bluepin1 = 9, bluepin2 = 10 ;
ledmax int ;
#define GLITTER 0
#define tourbillon 1
#define DAZZLE 2
mode de volatile int = DAZZLE ;
Nous utilisons un bouton sur la broche 2 (goupille d’interruption) pour détecter les changements de mode
Sub modechange(void)
{
Il Debounce
Si (digitalRead(2) == faible) {}
_delay_ms(10) ;
Si (digitalRead(2)! = faible)
retour ;
Serial.println("Button") ;
mode ++ ;
Si (mode > 2)
mode = 0 ;
Serial.Print "(nouveau mode!") ;
Serial.println (mode, DEC) ;
}
}
void setup()
{
pinMode (entrée 2) ;
digitalWrite (2, haut) ; pullup sur bouton mode
attachInterrupt (0, modechange, changement) ;
Serial.Begin(9600) ;
randomSeed(analogRead(0)) ;
rien pour l’installation
analogWrite (redpin1, 0) ;
analogWrite (redpin2, 0) ;
analogWrite (greenpin1, 0) ;
analogWrite (greenpin2, 0) ;
analogWrite (bluepin1, 0) ;
analogWrite (bluepin2, 0) ;
LEDMAX = 250 ; Modifiez cette valeur pour ajuster la luminosité maximale
}
void loop()
{
{Switch(mode)}
cas faire tourbillonner :
Serial.println("Swirl") ;
ckswirl (ledmax, 10) ;
rupture ;
cas GLITTER :
Serial.println("Glimmer") ;
glimmertest (ledmax, ledmax/10, 30) ;
rupture ;
boitier DAZZLE :
Serial.println("Dazzle") ;
éblouir (ledmax, 10, 7, 11) ;
rupture ;
}
}
void bedazzle (int pulselensec, int freqmin, int freqmax, int ledmax) {}
impulsions longues ;
analogWrite (redpin1, 0) ;
analogWrite (redpin2, 0) ;
analogWrite (greenpin1, 0) ;
analogWrite (greenpin2, 0) ;
analogWrite (bluepin1, 0) ;
analogWrite (bluepin2, 0) ;
Notez que nous n’utilisons pas des LEDs rouges dans ce
int freq = random (freqmin, freqmax + 1) ;
int pulsedelay = 1000/freq ;
PulseDelay / = 2 ;
impulsions = pulselensec ;
impulsions * = 1000 ;
impulsions / = 2 * pulsedelay ;
/*
Serial.Print ("impulsion à") ;
Serial.Print (freq, DEC) ;
Serial.Print ("Hz (") ;
Serial.Print (pulsedelay, DEC) ;
Serial.println ("ms on/off)") ;
Serial.Print(pulses) ;
Serial.println ("impulsions") ;
*/
tandis que (impulsions--) {}
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) ;
Si (mode! = DAZZLE) return ;
}
}
void ckswirl (int ledmax, uint8_t z) {}
int r, g, b ;
fondu du rouge au orange à jaune à vert
pour (g = 0; g / / vire au rouge vers le bas
analogWrite (redpin1, ledmax-g) ;
analogWrite (redpin2, ledmax-g) ;
analogWrite (greenpin1, g) ; définit la valeur (gamme de 0 à 255)
analogWrite (greenpin2, g) ; définit la valeur (gamme de 0 à 255)
Delay(z) ;
Si (mode! = SWIRL) return ;
}
fondu du vert au bleu
pour (b = 0; b / / vire au rouge vers le bas
analogWrite (bluepin1, b) ;
analogWrite (bluepin2, b) ;
analogWrite (greenpin1, ledmax-b) ; définit la valeur (gamme de 0 à 255)
analogWrite (greenpin2, ledmax-b) ; définit la valeur (gamme de 0 à 255)
Delay(z) ;
Si (mode! = SWIRL) return ;
}
du bleu au rouge
pour (r = 0; r / / vire au rouge vers le bas
analogWrite (redpin1, r) ;
analogWrite (redpin2, r) ;
analogWrite (bluepin1, ledmax-r) ; définit la valeur (gamme de 0 à 255)
analogWrite (bluepin2, ledmax-r) ; définit la valeur (gamme de 0 à 255)
Delay(z) ;
Si (mode! = SWIRL) return ;
}
}
void glimmertest (int maxvalue, int incr, int z) {}
pour (valeur = 0; valeur < = maxvalue ; valeur += incr)
{
analogWrite (greenpin1, valeur) ; définit la valeur (gamme de 0 à 255)
analogWrite (greenpin2, valeur maxvalue) ; définit la valeur (gamme de 0 à 255)
analogWrite (bluepin1, valeur) ;
analogWrite (bluepin2, valeur maxvalue) ; définit la valeur (gamme de 0 à 255)
analogWrite (redpin1, valeur) ;
analogWrite (redpin2, valeur maxvalue) ; définit la valeur (gamme de 0 à 255)
Delay(z) ; attend 30 milli secondes Voir l’effet de gradation
Si (mode! = GLITTER) return ;
}
pour (valeur = maxvalue ; valeur > = 0; valeur = incr) / / fade out (à partir de max et min)
{
analogWrite (greenpin1, valeur) ;
analogWrite (greenpin2, valeur maxvalue) ; définit la valeur (gamme de 0 à 255)
analogWrite (bluepin1, valeur) ;
analogWrite (bluepin2, valeur maxvalue) ; définit la valeur (gamme de 0 à 255)
analogWrite (redpin1, valeur) ;
analogWrite (redpin2, valeur maxvalue) ; définit la valeur (gamme de 0 à 255)
Delay(z) ;
Si (mode! = GLITTER) return ;
}
}