Fabriquer un panneau led D.I.Y. Low Cost

Présenter des projets, c’est cool, surtout sur un événement comme le MakemeFest où nous avons participé. Mais pouvoir mettre en valeur notre site par le biais d’un magnifique panneau leds, c’est mieux non ? Apprenons dès maintenant à en fabriquer un !

 

Notre idée était simple, réussir à fabriquer un panneau leds qui soit programmable, et à moindre coût !
Sur ce projet, nous remercions notre partenaire Banggood qui nous à fourni le matériel !

En parlant du matériel, voici ce dont vous aurez besoin :

Matériel :

Préparation du support

Tout d’abord, 2 façons s’offrent à vous pour faire le montage, et comme nous étions un peu pressés, nous avons donc fait celle qui prenait… le plus de temps !
Et oui, bidouilleurs ne veut pas dire  forcément réfléchir dès le début !!

Nous avons donc utilisé une planche de bois pour faire notre support. De la même manière, vous pouvez utiliser un autre matériau tels qu’un vieux calendrier !

Notre support aura une taille d’environ 45cm x 25cm, par conséquent, prévoyez plus large si vous voulez faire un cadre autour !

Montage du panneau leds

Pour le montage électronique, on vous a concocté un beau petit schéma !
Pour notre part, nous sommes partis sur une base de 10 bandes leds composé de 25 leds à chaque fois.

Attention !

Lors de la pose de vos bandes leds, pensez surtout à vérifier le sens de celles-ci.
Si vous souhaitez économiser du câble et ne pas faire comme nous, il faudra alors changer le code arduino !

Pour le montage électronique, vos fils devront passer derrière tout le panneau, ce qui évidemment n’est pas très économique en matière de fils.
Pensez donc à étamer vos pattes avec de l’étain pour une soudure plus simple dès le départ.

panneau led arduino

Explication du montage :
  • Le Fil rouge est le +12 Volts, le fil noir est le GND et le fil vert correspond au DATA.
pannneau led non câblé arduino
Panneau leds avant son câblage
panneau led test arduino
Premier test du panneau leds avec quelques leds d’allumées

 

Câblage de l’arduino et de l’alimentation

L’étape suivante est de connecter notre Arduino et notre alimentation au panneau leds.
Cette étape est très courte et vous permettra donc d’alimenter séparément l’arduino et le panneau leds, offrant une puissance suffisante pour l’ensemble des leds.

Certaines alimentations ne délivrent pas assez de puissance. Si c’est votre cas, vous pouvez alors rajouter le +12 volts et le GND au milieu de votre panneau. Toutefois, pensez à ne pas connecter le +12 Volts et le GND de la bande leds précédente.

 

Montage très simple, le fil DATA de votre bande led se connecte au pin D3 de l’Arduino.
Ensuite, le rouge et noir de l’alimentation iront donc sur le + et – de votre panneau leds.

 

Programmation

Pour réaliser le programme Arduino, un des auteurs de Bidouille2Geek s’en est occupé il y a un certain temps. C’est pourquoi il sera difficile pour moi de vous expliquer comment le modifier. Alors, à vous de tester, essayer, et le déchiffrer. Mais je vous promets, cet article aura une suite ! une programmation par téléphone serait intéressante non ?!

Au vu de la longueur du code, vous le retrouverez en fin d’article !


Et en vrai, ça donne quoi ?!

 

Voilà, votre panneau leds est maintenant terminé ! Dès à présent, je vous laisse découvrir son rendu.

panneau led B2G Panneau led B2G feuille

 

Code Arduino

int decalage;
int LEDmortes;
int positionLogoX=30;
int tourDe=0;
int red=0;
int green=0;
int blue=255;
int stop=0;

#include <Adafruit_NeoPixel.h>

#define PIXEL_PIN 3 // On définit le pin où est connecté la patte DATA du bandeau
#define PIXEL_COUNT 238 // On définit le nombre de LED compris sur le Ruban de LED soit 150 pour le ruban de 5m50
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800); // Paramètre l'objet strip qui correspond à toute les LED du ruban

void allumerTout(int luminosite, int red, int green, int blue)
{
  /*
      Allume toutes les LEDs en fonction de la luminosité et du choix des couleurs
  */

  strip.setBrightness(luminosite);  //Défini la luminosité en fonction de la variable luminosité obtenue à partir du potentiomètre
  for (int i = 0 ; i < PIXEL_COUNT ; i++)
  {
  strip.setPixelColor(i, red, blue, green); //Défini la couleur de chaque LED (de 0 à PIXEL_COUNT --> nombre de LEDs défini) en fonction des couleurs choisies
  }
}

void allumerLED(int luminosite, int x, int y, int red, int green, int blue)
{
  strip.setBrightness(luminosite);
  if(((y==2)&&(x<2))||(x<0)||(x>23))
  {
    LEDmortes=0;
  }else{
    LEDmortes=1;
  }
  if(y>1)
  {
    decalage=2;
  }else{
    decalage=0;
  }
  if(LEDmortes==1)
  {
    strip.setPixelColor(y*24+x-decalage, strip.Color(red,blue,green));
  }
}

void ligneHoriz(int luminosite, int x1, int x2, int y, int red, int green, int blue)
{
  for(int i=x1;i<x2;i++)
  {
    allumerLED(luminosite,i,y,red,green,blue);
  }
}

boolean spriteA[][8] =
{
    {0,1,1,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,1,1,1,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1}
};

boolean spriteB[][8] =
{
    {1,1,1,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,1,1,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,1,1,1,0}
};

boolean spriteC[][8] =
{
    {0,1,1,1,0},
    {1,0,0,0,1},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,0,0,1},
    {0,1,1,1,0}
};

boolean spriteD[][8] =
{
    {1,1,1,0,0},
    {1,0,0,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,1,0},
    {1,1,1,0,0}
};

boolean spriteE[][8] =
{
    {1,1,1,1,1},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,1,1,1,0},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,1,1,1,1}
};

boolean spriteF[][8] =
{
    {1,1,1,1,1},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,1,1,1,0},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,0,0,0}
};

boolean spriteG[][8] =
{
    {0,1,1,1,0},
    {1,0,0,0,1},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,1,1,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {0,1,1,1,0}
};

boolean spriteH[][8] =
{
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,1,1,1,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,0}
};

boolean spriteI[][8] =
{
    {1,1,1,1,1},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {1,1,1,1,1}
};

boolean spriteJ[][8] =
{
    {1,1,1,1,1},
    {0,0,0,1,0},
    {0,0,0,1,0},
    {0,0,0,1,0},
    {0,0,0,1,0},
    {0,0,0,1,0},
    {1,0,0,1,0},
    {0,1,1,0,0}
};

boolean spriteK[][8] =
{
    {1,0,0,0,1},
    {1,0,0,1,0},
    {1,0,1,0,0},
    {1,1,0,0,0},
    {1,0,1,0,0},
    {1,0,0,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1}
};

boolean spriteL[][8] =
{
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,1,1,1,1}
};

boolean spriteM[][8] =
{
    {1,0,0,0,1},
    {1,1,0,1,1},
    {1,0,1,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1}
};

boolean spriteN[][8] =
{
    {1,0,0,0,1},
    {1,1,0,0,1},
    {1,1,0,0,1},
    {1,0,1,0,1},
    {1,0,1,0,1},
    {1,0,0,1,1},
    {1,0,0,1,1},
    {1,0,0,0,1}
};

boolean spriteO[][8] =
{
    {0,1,1,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {0,1,1,1,0}
};

boolean spriteP[][8] =
{
    {1,1,1,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,1,1,1,0},
    {1,0,0,0,0},
    {1,0,0,0,0},
    {1,0,0,0,0}
};

boolean spriteQ[][8] =
{
    {0,1,1,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,1,0,1},
    {1,0,0,1,0},
    {0,1,1,0,1}
};

boolean spriteR[][8] =
{
    {1,1,1,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,1,0},
    {1,1,1,0,0},
    {1,0,0,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1}
};

boolean spriteS[][8] =
{
    {0,1,1,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {0,1,1,0,0},
    {0,0,0,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {0,1,1,1,0}
};

boolean spriteT[][8] =
{
    {1,1,1,1,1},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,0,1,0,0}
};

boolean spriteU[][8] =
{
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {0,1,1,1,0}
};

boolean spriteV[][8] =
{
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {0,1,0,1,0},
    {0,0,1,0,0}
};

boolean spriteW[][8] =
{
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {1,0,1,0,1},
    {1,0,1,0,1},
    {0,1,0,1,0}
};

boolean spriteX[][8] =
{
    {1,0,0,0,1},
    {1,0,0,0,1},
    {0,1,0,1,0},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,1,0,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1}
};

boolean spriteY[][8] =
{
    {1,0,0,0,1},
    {1,0,0,0,1},
    {0,1,0,1,0},
    {0,1,0,1,0},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,0,1,0,0}
};

boolean spriteZ[][8] =
{
    {1,1,1,1,1},
    {0,0,0,0,1},
    {0,0,0,1,0},
    {0,0,1,0,0},
    {0,0,1,0,0},
    {0,1,0,0,0},
    {1,0,0,0,0},
    {1,1,1,1,1}
};

boolean sprite2[][8] =
{
    {0,1,1,1,0},
    {1,0,0,0,1},
    {1,0,0,0,1},
    {0,0,0,1,0},
    {0,0,1,0,0},
    {0,1,0,0,0},
    {1,0,0,0,0},
    {1,1,1,1,1}
};


void dessiner(int luminosite, char sprite[], int x, int y, int red, int green, int blue)
{
  for(int j=0;j<8;j++)
  {
    for(int i=0;i<5;i++)
    {
      
      
      if(sprite=="A")
      {
        if(spriteA[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="B")
      {
        if(spriteB[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="C")
      {
        if(spriteC[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="D")
      {
        if(spriteD[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="E")
      {
        if(spriteE[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="F")
      {
        if(spriteF[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="G")
      {
        if(spriteG[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="H")
      {
        if(spriteH[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="I")
      {
        if(spriteI[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="J")
      {
        if(spriteJ[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="K")
      {
        if(spriteK[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="L")
      {
        if(spriteL[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="M")
      {
        if(spriteM[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="N")
      {
        if(spriteN[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="O")
      {
        if(spriteO[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="P")
      {
        if(spriteP[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="Q")
      {
        if(spriteQ[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="R")
      {
        if(spriteR[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="S")
      {
        if(spriteS[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="T")
      {
        if(spriteT[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="U")
      {
        if(spriteU[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="V")
      {
        if(spriteV[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="W")
      {
        if(spriteW[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="X")
      {
        if(spriteX[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="Y")
      {
        if(spriteY[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="Z")
      {
        if(spriteZ[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
      
      if(sprite=="2")
      {
        if(sprite2[j][i]==1)
        {
          allumerLED(luminosite,x+i,y+j,red,blue,green);
        }
      }
        
      
    }
  }
}


void animationB2G(int luminosite)
{
  
  if(positionLogoX!=3)
  {
    positionLogoX--;
  }else{
    stop++;
    if(stop==100)
    {
      stop=0;
      positionLogoX--;
    }
  }
  
  if(positionLogoX<-30)
  {
    positionLogoX=30;
  }
  allumerTout(0,0,0,0);
  dessiner(luminosite,"B",positionLogoX,1,255,255,255);
  dessiner(luminosite,"2",positionLogoX+6,1,255,100,0);
  dessiner(luminosite,"G",positionLogoX+12,1,50,50,255);
  
  if(tourDe==0)
  {
    red+=10;
    blue-=10;
    if(red>255)
    {
      tourDe=1;
      blue=0;
    }
  }
  if(tourDe==1)
  {
    red-=10;
    green+=10;
    if(green>255)
    {
      tourDe=2;
      red=0;
    }
  }
  if(tourDe==2)
  {
    green-=10;
    blue+=10;
    if(blue>255)
    {
      tourDe=0;
      green=0;
    }
  }
  
  ligneHoriz(luminosite,0,23,0,red,green,blue);
  ligneHoriz(luminosite,0,23,9,red,green,blue);
  delay(25);
}

void animationJN(int luminosite)
{
  
  if(positionLogoX!=3)
  {
    positionLogoX--;
  }else{
    stop++;
    if(stop==100)
    {
      stop=0;
      positionLogoX--;
    }
  }
  
  if(positionLogoX<-150)
  {
    positionLogoX=30;
  }
  allumerTout(0,0,0,0);
  dessiner(luminosite,"B",positionLogoX,1,255,255,255);
  dessiner(luminosite,"I",positionLogoX+6,1,255,100,0);
  dessiner(luminosite,"E",positionLogoX+12,1,50,50,255);
  dessiner(luminosite,"N",positionLogoX+18,1,50,50,255);
  dessiner(luminosite,"V",positionLogoX+24,1,50,50,255);
  dessiner(luminosite,"E",positionLogoX+30,1,50,50,255);
  dessiner(luminosite,"N",positionLogoX+36,1,50,50,255);
  dessiner(luminosite,"U",positionLogoX+42,1,50,50,255);
  dessiner(luminosite,"E",positionLogoX+48,1,50,50,255);
  dessiner(luminosite,"J",positionLogoX+60,1,50,50,255);
  dessiner(luminosite,"O",positionLogoX+66,1,50,50,255);
  dessiner(luminosite,"Y",positionLogoX+72,1,50,50,255);
  dessiner(luminosite,"C",positionLogoX+78,1,50,50,255);
  dessiner(luminosite,"A",positionLogoX+84,1,50,50,255);
  dessiner(luminosite,"E",positionLogoX+96,1,50,50,255);
  dessiner(luminosite,"T",positionLogoX+102,1,50,50,255);
  dessiner(luminosite,"N",positionLogoX+108,1,50,50,255);
  dessiner(luminosite,"E",positionLogoX+114,1,50,50,255);
  dessiner(luminosite,"O",positionLogoX+120,1,50,50,255);
  dessiner(luminosite,"X",positionLogoX+126,1,50,50,255);
  dessiner(luminosite,"I",positionLogoX+132,1,50,50,255);
  
  
  if(tourDe==0)
  {
    red+=10;
    blue-=10;
    if(red>255)
    {
      tourDe=1;
      blue=0;
    }
  }
  if(tourDe==1)
  {
    red-=10;
    green+=10;
    if(green>255)
    {
      tourDe=2;
      red=0;
    }
  }
  if(tourDe==2)
  {
    green-=10;
    blue+=10;
    if(blue>255)
    {
      tourDe=0;
      green=0;
    }
  }
  
  ligneHoriz(luminosite,0,23,0,red,green,blue);
  ligneHoriz(luminosite,0,23,9,red,green,blue);
  delay(25);
}


void setup()  //Initialisation
{
  Serial.begin(9600);   //Ouverture du serial pour débugguer si besoin
  strip.begin(); //fonction d'initialisation du bandeau LEDs
}

void loop()
{
  //animationB2G(20);
  animationJN(20);
  //dessiner(3,"A",0,0,0,255,0);

  strip.show();
}

Si cet article vous a plu, n’hésitez pas à le partager et le commenter, en proposant divers sujets et idées !

422 Vues

Martin

Créateur de Bidouille 2 Geek, passionné de multimédia et d'informatique

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.