Lionel's Tetalab & Co WIP

12/04/2010

Led pong… des nouvelles…

Filed under: Arduino, Le "mur" de leds... — Tags: , , , , , , , , — lionel @ 14:11

It’s a long time now since we’ve started this project !!!

alors c’est parti… un bout de temps en arrière déjà (janvier…), y’a eu collage des diffuseurs… (oui, bon, les balles de ping pong quoi !)

Puis gravure (c’est sale !), soudure (c’est chaud !), cablage (c’est pété là non ?), programmation (on met des bytes ?!), prise de quiche (GRRRR !)… pour arriver a la conclusion que les pcbs maisons étaient trop instables pour un système fiable.

Donc, réflexion et dessin d’un pcb à l’épreuve des bombes

et, du rêve 3D…

nous avons commandé à PCBCART la réalisation des pcbs…

Et, par un beau matin d’avril :)

Hooooou le beau  travail !!! on ne résiste pas et zou, ajout du 7313… Hmmmm sounds good, et hop hop on continue…

On ne s’arrête pas en si bon chemin !!! C’est de toute beauté !!

AAAaaaaaAAaaaaahhahaha !!! Vivement qu’on mette ça en place !!

Stay tuned !

18/01/2010

Arduino infrared distance sensor basic test

Filed under: Arduino — Tags: , , , , , — lionel @ 12:52

Hi folks,

Today, a very simple test to check the honeywell infrared emiter and receiver SE 5455-3 and SD 5410-2 capability as distance sensor.

I use the schematic from QTR-1A polulu reflectance sensor just changing the 150 ohm resistor with a 47 Ohm to match witch the SE 5455-3 specifications

Honeywell infrared led voltage is 1,7 V and current is 100 mA (!) so current limitation resistor should be :

( 5 – 1,7 ) / 0,100 = 33 Ohms instead of 150 Ohms, I put 47 ohms ’cause i had this value directly avalaible ;)

QTR1-A schematic

QTR1-A schematic

The breadboard wiring diagram is :

Distance sensor wiring diagram

It’s cleaner than reality…

A red led (inside the paper tube) is used as PWM output visualisation on digital output 9, I used a led symbol as emiter and a transistor as receiver, by the way, it’s pretty much correct…

The arduino code is coming from AnalogInOutSerial Arduino example and the sensor (used instead of the potentiometer) range adjusted to match with sensor output.

/*
  Analog input, analog output, serial output
 
 Reads an analog input pin, maps the result to a range from 0 to 255
 and uses the result to set the pulsewidth modulation (PWM) of an output pin.
 Also prints the results to the serial monitor.
 
 The circuit:
 * potentiometer connected to analog pin 0.
   Center pin of the potentiometer goes to the analog pin.
   side pins of the potentiometer go to +5V and ground
 * LED connected from digital pin 9 to ground
 
 created 29 Dec. 2008
 by Tom Igoe
 
 */

// These constants won't change.  They're used to give names
// to the pins used:
const int analogInPin = 0;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);
  // map it to the range of the analog out:
  outputValue = map(sensorValue, 150, 900, 0, 255);
  // change the analog out value:
  analogWrite(analogOutPin, outputValue);           

  // print the results to the serial monitor:
  Serial.print("sensor = " );
  Serial.print(sensorValue);
  Serial.print("\t output = ");
  Serial.println(outputValue);   

  // wait 10 milliseconds before the next loop
  // for the analog-to-digital converter to settle
  // after the last reading:
  delay(10);
}

And not really explicit but for your eyes only :

Arduino infrared distance sensor test

And the corresponding terminal snapshot

Terminal Snapshot

Terminal Snapshot

As this, the honeywell emiter and receiver seem to be ok to measure distance between  2 and 10 cm from their built in lenses.

This range could be certainly extended using optical system like external lenses. In case I give a try on this, I’ll keep you in touch ;)

24/11/2009

Le mur de led… On avance !!

Filed under: Arduino, Le "mur" de leds... — Tags: , , , , , — lionel @ 13:05

Chauds que nous étions en ce froid samedi dans les locaux de Myrys, nous avons décidé de tester en vrai l’écriture sur les MAX7313 !

Les belles photos de ce message on été réalisées par Jérôme, qui fait du très bon travail, on peut le voir ici d’ailleurs

IMG_6183

D'abord on branche les trucs...

Comme de nos jours, rien de bon ne se fait sans quelque peu de code, le dev team se met au boulot, avec un seul pied… (ce qui n’est pas très important pour programmer, je le concède, mais ce n’est pas pratique pour tout le reste, faut être honnête)

IMG_6172

Ensuite il faut quelques lignes de code

Le but étant d'allumer ça...

Le but étant d'allumer ça...

Bon, alors là, ça s’allume pas… et ça nous plonge dans des abîmes de circonspection.

Baaaah ça marche pô...

Baaaah ça marche pô...

Il est donc très important de trouver la source du pb… est-ce le pcb ?

Rhaaa mais quand même, je crois que c'est bon ça !!

Rhaaa mais quand même, je crois que c'est bon ça !!

Peut être que le timide halo rouge de la souris pourrait inspirer notre montage ???

Garantie sans tuning bas de caisse

Garantie sans tuning bas de caisse

On cherche, on cherche, on bouge le code et ….

IMG_6194

Alleluia !!!! Fiat lux..

Yesssssss ! ça s’allume, avec un petit effet K2000 extrêmement réussi qui nous rassure sur les capacités à driver les leds en PWM… cool

Ben du coup on est contents... et on s'en lasse pas... si un peu quand même, il fait froid

Ben du coup on est contents... et on s'en lasse pas... enfin si un peu quand même, il fait froid

Bon, ben voilà, y’a plus qu’a graver plein de petits pcb, cabler encore plein de leds et mettre au point ce sketch arduino…

Ca fait plaisir, merci a tous les soudeurs, programmeurs, réflechisseurs, photographes et autres soutiens !

Keep tuned

Encore merci à Jérôme pour cette série de clichés.

Update du 19/01/10 : On peut maintenant trouver un aperçu du travail de Jérome Lautre sur son site www.fotographie.fr

02/10/2009

Le “mur” de leds… on the way

Filed under: Arduino, Le "mur" de leds... — Tags: , , , , — lionel @ 13:41

Prototypage en cours pour validation du concept de montage… c’est un tout petit mur, 3 pixels sur 4 possible, ben oui j’ai que trois balles.

Plaque de mdf,

perçage à 5 (ce serait mieux à 4,9 pour que les leds soient maintenues directement mais j’ai pas le foret…)

gros chanfrein à 45°

3 points de colle,

une balle de ping pong,

et hop maintien de tout ça au serre joint…

DSC06162

Suite au prochain épisode…

01/10/2009

Le “mur” de leds… suite

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

Allez zou,

pour faire plaisir a Gilles, une petite vue 3d de la carte a base de max7313, en attendant la vraie…

Coté composants

Coté cuivre

Ca pète hein ?

Bon je mets ça parce que j’essaie Eagle3D et que ça m’amuse bien là, j’ai pas bien tout saisi pour avoir les écritures, mais ça va venir :)

Et bientôt, les sources parce que tout de suite c’est pas possible, le schéma est saisi comme un cochon, donc je nettoie et je publie.

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