Lionel's Tetalab & Co WIP

30/09/2009

Le “mur” de leds… Work in progress

Filed under: Arduino, Le "mur" de leds... — Tags: , , , , , , , — lionel @ 18:29

Aujourd’hui, petite avancée sur le hardware du mur de leds.

Le projet : un module de 144 leds drivées en PWM a l’aide de MAX7313AEG+ (en I2C, avec un arduino en tête).

Le routage est fini, chaque pcb drive 16 led et doit être adressé en hardware (en mettant AD0, AD1 et AD2 aux potentiels GND, V+, SDA ou SCL, voir datasheet du 7313 Table 1.) à l’aide de 3 straps (dans la matrice au bas du circuit). Les résistances de charges peuvent être des réseaux SIL ou des résistances standard (150R) câblées verticalement

Le circuit mesure 50×26mm et est cascadable (entrée et sortie I2C)

Routage Driver 16 Leds

Routage Driver 16 Leds

On attends les composants de chez Maxim IC et c’est parti pour de la séance gravure/soudure… Yeeeeah.

Niveau matériel, on s’imagine éclairer les leds et utiliser des balles de ping pong en diffuseur. Alex a demandé a un club de pongistes de nous récupérer leur balles pétées.

Je viens d’aller chercher le première fournée… bon, elles sont vraiment pétées et en plus y’en a 95% de couleur orange :)

Le lot de balles...

Bon, on verra si on maintien cette source d’appro…

23/09/2009

Compteur RPM à affichage LCD (la revanche)

Filed under: Arduino, RPM Meter — Tags: , , , , , — lionel @ 10:17

Fabrice, mon ami d’en face, a suggéré une épuration du code a base de ruse de renard.

C’est plus clean, y’a plus de calcul de modulo dans le loop, c’est mieux. Je mets a jour. J’ai commenté le code, ça devrait se lire.

A noter qu’on pourrait cabler le LCD différement pour libèrer la sortie digitale 1 et ainsi écrire la valeur en même temps sur le port série. J’ai essayé, ça marche…

/*
 * Effet hall Tachometer LCD display
 *
 * Uses hall effect sensor to implement a tachometer.
 * A status LED is connected to pin 8.
 * Pin 2 (interrupt 0) is connected across the hall effect sensor.
 * 
 */

// include the library code:
#include <LiquidCrystal.h>

// initialize the lcd library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 1);

int statusPin = 8;             // Status LED connected to digital pin 8

volatile byte rpmcount;
volatile int status;
unsigned int rpm;
unsigned long timeold;

 void setup()
 {
//   Serial.begin(9600);
   attachInterrupt(0, rpm_fun, RISING);
      //Use statusPin to flash along with interrupts
   pinMode(statusPin, OUTPUT);
      // set up the LCD's number of rows and columns: 
  lcd.begin(16, 2);
      // Shift display 1 character to the left 
  lcd.scrollDisplayLeft();
      // initial values
   rpmcount = 0;
   rpm = 0;

 }
 void loop()
 {
   if (rpmcount >= 20) {
     //Update RPM every 20 counts, increase this for better RPM resolution,
     //decrease for faster update
     //detach interrupt during calculation
        detachInterrupt(0);
    //Note that this would be 60*1000/(millis() - timeold)*rpmcount if the interrupt
    //happened once per revolution instead of twice. Other multiples could be used
    //for multi-bladed propellers or fans
    //To keep the rpm value 4 digits long, I add 10000 to the rpm value and hide 
    //the first digit using lcd.scrollDisplayLeft() in setup()
    //Nice trick from sack ;)  thx !
     rpm = 10000 + 15*1000/(millis() - timeold)*rpmcount;
     timeold = millis();
     rpmcount = 0;
      //print rpm value on LCD
// Serial.println((rpm-10000),DEC);
       lcd.setCursor(0,1);
       lcd.print(rpm);
       lcd.setCursor(6,1);
       lcd.print("RPM");
      //detach interrupt during calculation
      attachInterrupt(0, rpm_fun, RISING);
   }
 }
 void rpm_fun()
 {
   rpmcount++;
   //Each rotation, this interrupt function is run twice
   
      //Toggle status LED   
   if (status == LOW) {
     status = HIGH;
   } else {
     status = LOW;
   }
   digitalWrite(statusPin, status);
 }

22/09/2009

Compteur RPM à affichage LCD

Filed under: Arduino, RPM Meter — Tags: , , , , , — lionel @ 20:35

Yopa !

Aujourd’hui et pour ne pas oublier, présentation du compte tours avec affichage LCD.

Alors ça compte les tours/minutes d’un ventilateur de PC équipé d’un capteur a effet hall.

Le but ultime étant de de régler le ralenti de ma voiture en collant un aimant sur la poulie, utiliser un capteur a effet hall et lire la vitesse de rotation en tour/min .

Synoptique de cablage (merci fritzing…), ouvrir l’image pour zoom.

Rpm_Magnet_lcd_2_bb

Le code :

Note Importante : Je suis une grosse quiche en codage, j’ai donc compilé des exemples un peu partout sur le net, genre ou , merci d’être indulgent.

Si vous voyez des trucs débiles, ou si vous avez des ruses pour faire mieux, je prends… Enfin là tel quel, c’est tombé en marche :)

/*
 * Effet hall Tachometer LCD display
 *
 * Uses hall effect sensor to implement a tachometer.
 * A status LED is connected to pin 12.
 * Pin 2 (interrupt 0) is connected across the hall effect sensor.
 *
 * 
 */

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 1);

int statusPin = 8;             // Status LED connected to digital pin 8

volatile byte rpmcount;
volatile int status;

unsigned int rpm;
unsigned long timeold;
unsigned int unite;
unsigned int dizaine;
unsigned int centaine;
unsigned int millier;
unsigned int dmillier;

 void setup()
 {
   //Serial.begin(9600);
   attachInterrupt(0, rpm_fun, RISING);
      //Use statusPin to flash along with interrupts
   pinMode(statusPin, OUTPUT);
        // set up the LCD's number of rows and columns: 
  lcd.begin(16, 2);
     // Print a message to the LCD.
  lcd.print("RPM");
   rpmcount = 0;
   rpm = 0;
   timeold = 0;
   unite = 0;
   dizaine = 0;
   centaine = 0;
   millier = 0;
   dmillier = 0;
 }
 void loop()
 {
   if (rpmcount >= 20) {
     //Update RPM every 20 counts, increase this for better RPM resolution,
     //decrease for faster update
        detachInterrupt(0);
          //Note that this would be 60*1000/(millis() - timeold)*rpmcount if the interrupt
   //happened once per revolution instead of twice. Other multiples could be used
   //for multi-bladed propellers or fans
     rpm = 15*1000/(millis() - timeold)*rpmcount;
     timeold = millis();
     rpmcount = 0;
     unite = rpm%10;
     dizaine = (rpm%100)/10;
     centaine = (rpm%1000)/100;
     millier = (rpm%10000)/1000;
     dmillier = rpm/10000;
     //Serial.println(rpm,DEC);
      lcd.setCursor(1, 1);
      lcd.print(dmillier);
      lcd.setCursor(2, 1);
      lcd.print(millier);
      lcd.setCursor(3, 1);
      lcd.print(centaine);
      lcd.setCursor(4, 1);
      lcd.print(dizaine);
      lcd.setCursor(5, 1);
      lcd.print(unite);
        attachInterrupt(0, rpm_fun, RISING);
   }
 }
 void rpm_fun()
 {
   rpmcount++;
   //Each rotation, this interrupt function is run twice

      //Toggle status LED   
   if (status == LOW) {
     status = HIGH;
   } else {
     status = LOW;
   }
   digitalWrite(statusPin, status);
 }

install

(ça tourne vraiment, c’est une photo là…)

J’ai ajouté une mesure de fréquence au multimètre pour vérifier la valeur affichée (sur la led de status qui m’indique quand le capteur est activé) :

Sachant qu’il y a deux pulses par tour,  45 Hz affiché donne 22,5 tr/s soit 22,5×60=1350 tours/min… cool, j’affiche 1300 ;)

La vidéo http://vimeo.com/6705333

07/09/2009

Arduino DMX shield routé en simple face

Filed under: Arduino, Shield — Tags: , , , , — lionel @ 19:50

Yopa,

Aujourd’hui, visite de Lucas et session gravage de pcb.

Essai d’une nouvelle méthode de tranfert avec utilisation de papier de transfert a chaud, c’est nickel !! Plus besoin d’insoler !!

On imprime à l’envers sur le papier sus-cité avec une imprimante laser, on pose ça sur une plaque de cuivre propre, on repasse 5 minutes au fer a repasser position coton (sans vapeur) en appuyant bien fort. On attend que ça refroidisse et hop, on tire délicatement sur le papier, c’est transféré. Y’a plus qu’a graver dans le perchlo.

Les pistes sont bien dessinées, j’ai aussi fait des tests pour d’autres plaques, dont une avec avec des composants CMS, c’est beau, c’est fin, je suis ravi.

DMX Shield avec papier transfert

DMX Shield avec papier transfert

J’ai donc rerouté l’élégant shield DMX en simple face (avec un petit strap de rien du tout ;) ) et zou gravure.

Zoom sur le pcb

Zoom sur le pcb

Et  tant que j’avais les doigts dans le perchlo, j’en ai profité pour me graver une plaque issue du schéma de Raphnet

HID Usb Joystick

HID Usb Joystick

Bon, ben graver c’est du beurre maintenant !!

Euuuh en simple face évidemment, pour le double, on attend la transformation des epson…

Powered by WordPress