La bricole du jour consiste a trouver une utilisation sympathique au Protoshield Snootlab.
Nous disposons donc de :
Un protoshield + breadboard + cordons (kit de prototypage Snootlab) – Crédit photo : Snootlab
Un mètre de led strip RGB en 12V – Crédit photo : Snootlab
Une Alim PC ATX classique et un trombone 🙂
3 transistors BC547A (ou 2n2222, ou équivalent) et 3 résistances de valeur entre 1k et 2.2k, voir « How to drive relays with arduino »
Un arduino
On branche suivant ce schéma :
Schéma de montage – Crédit photo : Snootlab
Presque comme sur la photo quoi 🙂
Vue d’ensemble du montage – Crédit photo : Snootlab
Et maintenant, un peu de code pour faire tourner tout ça …
//i/o pin declarations int rpin = 9; int gpin = 10; int bpin = 11; //function prototypes void solid(int r, int g, int b, int t); void fade(int r1, int g1, int b1, int r2, int g2, int b2, int t); void setup() { //empty } void loop() { //colour sequence instructions //Example sequence one: Rainbow fade over 12 seconds: solid(255,0,0,1000); // Maintain pure red 1 sec fade(255,0,0,0,255,0,3000); //fade from red to green over 3 seconds solid(0,255,0,1000); // Maintain pure green 1 sec fade(0,255,0,0,0,255,3000); //fade from green to blue over 3 seconds solid(0,0,255,1000); // Maintain pure blue 1 sec fade(0,0,255,255,0,0,3000); //fade from blue to red over 3 seconds } //function holds RGB values for time t milliseconds void solid(int r, int g, int b, int t) { //map values - arduino is sinking current, not sourcing it // r = map(r, 0, 255, 255, 0); // g = map(g, 0, 255, 255, 0); // b = map(b, 0, 255, 255, 0); //output analogWrite(rpin,r); analogWrite(gpin,g); analogWrite(bpin,b); //hold at this colour set for t ms delay(t); } //function fades between two RGB values over fade time period t //maximum value of fade time = 30 seconds before gradient values //get too small for floating point math to work? replace floats //with doubles to remedy this? void fade(int r1, int g1, int b1, int r2, int g2, int b2, int t) { float r_float1, g_float1, b_float1; float r_float2, g_float2, b_float2; float grad_r, grad_g, grad_b; float output_r, output_g, output_b; //declare integer RGB values as float values r_float1 = (float) r1; g_float1 = (float) g1; b_float1 = (float) b1; r_float2 = (float) r2; g_float2 = (float) g2; b_float2 = (float) b2; //calculate rates of change of R, G, and B values grad_r = (r_float2-r_float1)/t; grad_g = (g_float2-g_float1)/t; grad_b = (b_float2-b_float1)/t; //loop round, incrementing time value "i" for ( float i=0; i<=t; i++ ) { output_r = r_float1 + grad_r*i; output_g = g_float1 + grad_g*i; output_b = b_float1 + grad_b*i; //map values - arduino is sinking current, not sourcing it // output_r = map (output_r,0,255,255,0); // output_g = map (output_g,0,255,255,0); // output_b = map (output_b,0,255,255,0); //output analogWrite(rpin, (int)output_r); analogWrite(gpin, (int)output_g); analogWrite(bpin, (int)output_b); //hold at this colour set for 1ms delay(1); } }
Code légèrement modifié, issu d’un post sur le forum arduino
et voilà ….
Après ça, tout est envisageable… pour nos amis du tuning, mettre en relation la vitesse ou la position de la pédale d’accélération pour changer la couleur diffusée dans l’habitacle du véhicule (ou dessous, comme les navettes spatiales des téléfilms).
Changer la couler en fonction de la température d’un appart ou de sa conso électrique, une guirlande commandée par ethernet pour un sapin de noel geek, la limite, c’est l’imagination …