Skyduino:~#
Articles
arduino, programmation, projet, python

[News] Projet Rgb-POV

Salut tu le monde !

J’ai de bonne nouvelles (des news fraiche yes!) !

Je viens de finir le câblage de mon RGB-POV !
Pour la petite histoire, 35 led rgb = 105 pattes donc 105 perçages et par conséquent 105 fils soit 105 dénudages / étamages / soudures !

Ce fut long, ch*ant (très même) mais maintenant c’est finit et le projet avance donc énormément !

Voici quelque photos du résultat :

Je ferais une vidéo demain aujourd’hui (il est 00:25 ^^ oups !) pour vous montrer un peu mieux la chose.
Edit : vidéo OK !

J’ai aussi finit le gros du code arduino pour gérer le M5450.
Pour les curieux le voici :

unsigned long sequenceR[] = {
  0x0, 0xF, 0xFF, 0xFFF, 0xFFFF, 0xFFFFF, 0xFFFFFF, 0xFFFFFFF, 0xFFFFFFFF};
unsigned long sequenceG[] = {
  0x0, 0xF, 0xFF, 0xFFF, 0xFFFF, 0xFFFFF, 0xFFFFFF, 0xFFFFFFF, 0xFFFFFFFF};
unsigned long sequenceB[] = {
  0x0, 0xF, 0xFF, 0xFFF, 0xFFFF, 0xFFFFF, 0xFFFFFF, 0xFFFFFFF, 0xFFFFFFFF};
const unsigned int sequenceLength = 9;
unsigned int index = 0;

void setup()
{
  setupM5450(2, 3);
  setupM5450(4, 5);
  setupM5450(6, 7);
}

void loop()
{
  if(index == sequenceLength)
    index = 0;
  else
    index ++;
    
  delay(5000);
 
  sendToM5450(2, 3, sequenceB[index]);
  sendToM5450(4, 5, sequenceG[index]);
  sendToM5450(6, 7, sequenceR[index]);
}

void setupM5450(byte clockPin, byte dataPin)
{
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  //sendToM5450(clockPin, dataPin, 0);
}

void sendToM5450(byte clockPin, byte dataPin, unsigned long data)
{
  lowLevelSend(clockPin, dataPin, 1);
  delayMicroseconds(1);
  for(byte i=0; i<35; i++){
    lowLevelSend(clockPin, dataPin, bitRead(data, i));
    delayMicroseconds(1);
  }
}

void lowLevelSend(byte clockPin, byte dataPin, boolean bit){
  digitalWrite(clockPin, LOW);
  digitalWrite(dataPin, bit);
  delayMicroseconds(1);
  digitalWrite(clockPin, HIGH);
}

Les 3 séquences RGB sont très basique c’était juste pour voir la consommation global du systéme.
(Juste pour info elle est de 300mA toutes leds allumées (r + g + b))

Bon pour le moment je vais allez dormir un peu, j’ai les yeux complétement explosé par les leds (que j’ai du réduire à 5mA par led sinon c’était vraiment trop lumineux).

Update : Voici le code arduino pour l’affichage de bitmap et le script python qui va avec !
(Pensez bien à enregistrer vos images en bmp 32x?? couleurs 24bits)

#include "scroll.h"

const int dTime = 20;
unsigned int index = 0;

void setup()
{
  setupM5450(2, 3);
  setupM5450(4, 5);
  setupM5450(6, 7);
}

void loop()
{
  if(index == sequenceLength)
    index = 0;
  else
    index ++;

  delay(dTime);

  sendToM5450(2, 3, sequenceB[index]);
  sendToM5450(4, 5, sequenceG[index]);
  sendToM5450(6, 7, sequenceR[index]);
}

void setupM5450(byte clockPin, byte dataPin)
{
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  //sendToM5450(clockPin, dataPin, 0);
}

void sendToM5450(byte clockPin, byte dataPin, unsigned long data)
{
  digitalWrite(clockPin, LOW);
  digitalWrite(dataPin, 1);
  digitalWrite(clockPin, HIGH);
  for(byte i=0; i<35; i++){
    digitalWrite(clockPin, LOW);
    digitalWrite(dataPin, bitRead(data, i));
    digitalWrite(clockPin, HIGH);
  }
}
import Image, sys
print "Library import success !"

if len(sys.argv) == 1:
    print "Usage: img2Array.py <image file>"
    exit(1)

try :
    im = Image.open(sys.argv[1])
    im.load()
    file = open(sys.argv[1][:-4] + ".h", "w")
except IOError:
    print "Error openning image ..."
    exit(2)
print "Image openning success !"

if im.size[1] < 32 :
    print "Bad Image Size (H) ..."
    exit(3)
    
if im.size[1] > 32 :
    print "Image will be truncated !"

nbcol = im.size[0]
if nbcol > 80 :
    print "Ram Size Unsuffisant (W) ..."
    exit(4)

print "Image Col Count :", nbcol
r,g,b = im.split()

print "Generating Red Header ",
file.write("unsigned long sequenceR[] = {")
for x in range(0, nbcol):
    value = 0
    for y in range(0, 32):
        if r.getpixel((x,y)) >= 127:
            (value) |= (1 << (y))
    print ".",
    if x != (nbcol-1):
        file.write("%d," % value)
    else:
        file.write("%d" % value)
file.write("};\n\n")
print " "

print "Generating Green Header ",
file.write("unsigned long sequenceG[] = {")
for x in range(0, nbcol):
    value = 0
    for y in range(0, 32):
        if g.getpixel((x,y)) >= 127: 
            (value) |= (1 << (y))
    print ".",
    if x != (nbcol-1):
        file.write("%d," % value)
    else:
        file.write("%d" % value)
file.write("};\n\n")
print " "

print "Generating Blue Header ",
file.write("unsigned long sequenceB[] = {")
for x in range(0, nbcol):
    value = 0
    for y in range(0, 32):
        if b.getpixel((x,y)) >= 127: 
            (value) |= (1 << (y))
    print ".",
    if x != (nbcol-1):
        file.write("%d," % value)
    else:
        file.write("%d" % value)
file.write("};\n\n")
print " "

file.write("int sequenceLength = %d;" % nbcol)
file.close()
print " "
print "Header file generated !"
exit(0)

Et une petite image de test :
Image
(renommer en .png en .bmp)

unsigned long sequenceR[] = {2147483648,3221225472,3758096384,4026531840,4160749568,4227858432,2113929216,1056964608,528482304,264241152,132120576,66060288,33030144,2163998720,3229483008,3762225152,1881112576,940556288,470278144,235139072,117569536,58784768,29392384,14696192,7348096,3674048,1837024,918512,459256,229628,114814,57407,28703,14351,7175,3587,1793,896,448,224,112,56,28,14,7,3,1,0,0,0};

unsigned long sequenceG[] = {2147483648,3221225472,3758096384,4026531840,4160749568,4227858432,4261412864,4278190080,4286578688,4290772992,4292870144,4293918720,4294443008,2147221504,1073610752,536805376,268402688,134201344,67100672,33550336,16775168,8387584,4193792,2096896,1048448,524224,262112,131056,65528,32764,16382,8191,4095,2047,1023,511,255,127,63,31,15,7,3,1,0,0,0,0,0,0};

unsigned long sequenceB[] = {2147483648,1073741824,536870912,268435456,134217728,67108864,33554432,16777216,8388608,4194304,2149580800,3222274048,3758620672,4026793984,4160880640,2080440320,1040220160,520110080,260055040,130027520,65013760,32506880,16253440,8126720,4063360,2031680,1015840,507920,253960,126980,63490,31745,15872,7936,3968,1984,992,496,248,124,62,31,15,7,3,1,0,0,0,0};

int sequenceLength = 50;

Plus d’info sur la page du projet :
https://skyduino.wordpress.com/projets/arduino-afficheur-pov-34-led-rgb/

Publicités

Discussion

Rétroliens/Pings

  1. Pingback: YOUrban — Projects inspired by ‘Immaterials: Light painting WiFi’ - 6 juin 2012

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.