Lundi, mai 9 2011

Modification d’un trépied photo Manfrotto 785b

Depuis que je suis passé de l’EOS 400D à l’EOS 7D avec les objectifs qui vont bien, un de mes équipements n’a pas suivi: mon trépied Manfrotto 785b.

Il restait donc 2 solutions: en racheter un autre, sachant que le prix n’est quand même pas négligeable pour un bon trépied, pas trop lourd ou modifier l’existant.

Évidemment, j’ai choisi la deuxième  solution!

Tout d’abord, voyons ce qui ne va pas sur ce trépied; le pied est assez léger ( en aluminium ), de bonne qualité mais sa rotule souffre d’un manque de force de serrage très net. Ce problème de rotule interdit l’utilisation du 7D + 70/200 et rend l’utilisation du 7D et 17/40 peu précise. Dans un premier temps, j’ai démonté la tête pour tenter d’augmenter le couple de serrage, en collant un morceau de caoutchouc sur les mâchoires qui appuient sur la boule métallique. Peine perdue, ça marche un tout petit peu mieux, mais ça reste beaucoup trop « light » et peu précis.

Puisque le trépied est de bonne facture mais que ça rotule n’est pas satisfaisante, changeons la rotule! Le problème c’est que la tête est vissée / collée sur la colonne du pied ce qui la rend indémontable… sauf avec une scie à métaux, merci Manfrotto!

Voilà notre tête sans la partie démontable de la colonne.

Hacking  Manfrotto 785b ball head

Toutes les rotules démontables du commerce disposent en dessous d’un pas de vis 3/8″ pour les fixer sur le trépied. L’idée c’est donc de séparer la rotule de la colonne puis d’adjoindre un système de fixation avec une vis 3/8″ pour pouvoir y fixer une nouvelle rotule.

J’ai choisi, comme remplaçante, une rotule Manfrotto 496RC2 pouvant supporter une charge de 6Kg.

Hacking  Manfrotto 785b ball head

Pour fixer la nouvelle tête, j’ai trouvé un adaptateur 1/4″ femelle, 3/8″ mâle qui pourra faire l’affaire. Il suffit pour cela de lui fixer une vis 1/4″, et de coller un morceau de tube métallique qui viendra s’insérer / coller dans le tube de la colonne.

 

Hacking  Manfrotto 785b ball head

 

Le tube est disposé au dos de l’adaptateur avec la vis au milieu. Le vide formé entre le tube et la vis est rempli de colle epoxy pour rendre l’ensemble très solide.

 

Hacking  Manfrotto 785b ball head

La partie haute de la colonne est séparée de l’ancienne rotule avec un coup de scie à métaux.

Hacking  Manfrotto 785b ball head

Le tube et le bout de la colonne sont ensuite collés ensemble.

Hacking  Manfrotto 785b ball head

 

Après le temps de séchage réglementaire, nous voilà avec un beau trépied et une vis de 3/8″ tout à fait standard.

Hacking  Manfrotto 785b ball head

 

Il ne reste plus qu’à lui visser sa nouvelle tête.

Hacking  Manfrotto 785b ball head

 

Sympa non ?

 

Bien sur, cette modification n’a d’intérêt que si vous disposez déjà d’un trépied de ce type, n’allez pas en acheter un pour le modifier ;-)

Mercredi, février 11 2009

Arduino PhotoLab – Schéma

Comme promis, voici le schéma de la carte principale du montage Arduino PhotoLab

Je débute avec Eagle alors mon schéma n’est pas forcément très clair, mais bon…

photolab

Le voici au format Eagle

  • Prise SENSORS: branchement des capteurs
  • Prise TTL: Branchement d’un convertisseur USB/TTL pour reprogrammer l’arduino.
  • Prise STROBE: Sortie pour la prise de commande du flash ou de l’appareil photo suivant l’usage.
  • Prise POWER: Alimentation 5V par transfo ou pack de piles.

Les 4 boutons permettent de se ballader dans les menus pour choisir les capteurs et changer les valeurs.

Il reste quelques ports dispo sur l’arduino pour un usage futur…

Je n’ai pas mis le schéma des capteurs. Vous pouvez en trouver plein sur le playground arduino ici. Il suffit d’utiliser une prise jack 3.5mm male et de la brancher sur la prise SENSORS. Vous avez alors VCC,  GND, DATA. Où DATA est un voltage entre 0 et 5 v.

Je ne suis pas sûr que mon système soit utilisable tel quel chez vous, mais vous pouvez vous en inspirer pour créer le votre. En tout cas, chez moi ça marche très bien :-)

Pour ce qui est du code, le voici:

[code]

#include <LCD4Bit.h>

//BUG ?
#undef int()
// END BUG
#include <stdio.h>

LCD4Bit lcd = LCD4Bit(2);

//#define DEBUG 1

// global defs
#define shootPin  11
#define sensorPin 4
#define bt1Pin 3
#define bt2Pin 4
#define bt3Pin 5
#define bt4Pin 6
#define ledPin 13 //digital

#define MAXMENU 4

#define MENUSENSOR 1
#define MENUSTROBEDELAY 2
#define MENURUN 3

#define MODESENSOR 1

#define NO 0
#define YES 1
#define TEST 2

#define SOUNDSENSOR 0
#define IRSENSOR 1
#define CONTACTSENSOR 2
#define LIGHTSENSOR 3

volatile unsigned int menu0Pos = MENUSENSOR;
volatile unsigned int debounce = 0;
volatile unsigned int modeSensor = 0;
volatile unsigned int modeDrop= 0;
volatile unsigned int modeApp = MODESENSOR;
volatile unsigned int sensorType = IRSENSOR;
volatile unsigned int firstPass = 0;
volatile unsigned int sndLevel = 0;

volatile int strobeDelay = 10;

void setup() {
pinMode(ledPin,OUTPUT);
pinMode(shootPin,OUTPUT);
pinMode(bt1Pin,INPUT);
pinMode(bt2Pin,INPUT);
pinMode(bt3Pin,INPUT);
pinMode(bt4Pin,INPUT);
setLed(1);
lcd.init();

/*lcd.commandWrite(0x0F);//cursor on, display on, blink on.  (nasty!)
*/
lcd.clear();
lcd.printIn("equinoxefr.org");
lcd.cursorTo(2, 0);  //line=2, x=0.
lcd.printIn("Photo lab v0.3");
delay(2000);
fillLine(2,"FW Trigger");
delay(2000);
lcd.clear();
setLed(0);
#ifdef DEBUG
Serial.begin (9600);
Serial.println("start");                // a personal quirk
#endif
}

void loop() {
int val=0;
int keyFactor=1;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//  SENSOR SECTION
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (modeSensor)
{
while (1)
{
val=analogRead(sensorPin);
switch (sensorType)
{
case LIGHTSENSOR:

if (val > 500)
{
shoot();
}
//      char buffer[50];
//      strobeDelay=getValue(strobeDelay,-1,9999);
//      itoa(strobeDelay,buffer,DEC);
//      fillLine(2,buffer);
break;

case IRSENSOR:

if (val < 900)
{
shoot();
}
//      char buffer[50];
//      strobeDelay=getValue(strobeDelay,-1,9999);
//      itoa(strobeDelay,buffer,DEC);
//      fillLine(2,buffer);
break;

case SOUNDSENSOR:
if (firstPass)
{
fillLine(2,"Getting snd level");
sndLevel=soundLevel();
clearLcdLine(2);
firstPass=0;
}
val = analogRead(sensorPin);

if ((val > (sndLevel + 40)) && (val < 1024))
{
shoot();
}

break;

case CONTACTSENSOR:
if ( val < 500)
{
shoot();
}
break;
}
}
}

/*
#ifdef DEBUG
Serial.println(menu0Pos,DEC);
#endif
*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//  MENU SECTION
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

switch (menu0Pos)
{
case MENUSTROBEDELAY:
fillLine(1,"Strobe delay ms");
modeSensor=0;
strobeDelay=getValue(strobeDelay,-1,9999);
if (strobeDelay==-1)
{
fillLine(2,"not used");
}
else
{
char buffer[50];
itoa(strobeDelay,buffer,DEC);
fillLine(2,buffer);
}
break;
case MENUSENSOR:
fillLine(1,"Select sensor");
sensorType=getValue(sensorType,0,3);
switch(sensorType)
{
case SOUNDSENSOR:
fillLine(2,"SOUND");
firstPass=1;
break;
case IRSENSOR:
fillLine(2,"IR BARRIER");
break;
case CONTACTSENSOR:
fillLine(2,"CONTACT");
break;
case LIGHTSENSOR:
fillLine(2,"IR LIGHT");
break;
}
//digitalWrite(ledPin, HIGH);
modeSensor=0;
break;

case MENURUN:
if (!modeSensor)
{
fillLine(1,"***SHOOT MODE***");
}
modeSensor=1;
break;
}
getMenu();
}

//
//  soundLevel()
//
int soundLevel()
{
int value=analogRead(sensorPin);

Serial.println("Getting sound level...");
for(int i=0; i < 50 && !modeSensor; i++)
{
value = ( value + analogRead(sensorPin) ) / 2;
delay(50);
}
Serial.println("Done!");

return value;

}

void clearLcdLine(int line)
{
lcd.cursorTo(line, 0);
lcd.printIn("                     ");
}

void fillLine(int line,char* str)
{
char buffer[21];
int len=strlen(str);
for (int i=0;i<20;i++)
{
if (i < len)
{
buffer[i]=str[i];
}
else
{
buffer[i]=' ';
}
}
lcd.cursorTo(line,0);
lcd.printIn(buffer);
}

void shoot()
{
if (strobeDelay > 0 )
{
delay(strobeDelay);
}
digitalWrite(shootPin,HIGH);
delay(10);
digitalWrite(shootPin,LOW);
fillLine(2,"Shoot !");
digitalWrite(ledPin,HIGH);
delay(3000);
digitalWrite(ledPin,LOW);
clearLcdLine(2);

}

void getMenu()
{
int bt1=digitalRead(bt3Pin);
int bt2=digitalRead(bt4Pin);

if (!bt1 && !bt2)
{
return;
}

if (bt1 && menu0Pos < MAXMENU)
{
menu0Pos++;
}
if (bt2 && menu0Pos > 0)
{
menu0Pos--;
}

}

int getValue(int value, int mini, int maxi)
{
unsigned int keyFactor=1;
int bt1=digitalRead(bt1Pin);
int bt2=digitalRead(bt2Pin);

if  (value < 50 )
{
keyFactor=1;
}
else
{
if (value >= 50 )
{
keyFactor=10;
}
}
if  ( bt1 )
{
value+=keyFactor;
}
if  ( bt2 )
{
value-=keyFactor;
}

if ( value <= mini)
{
value=mini;
}
else
{
if (value >= maxi)
{
value=maxi;
}
}
/*
if ( bt1 && bt2 )
{
modeSensor=0;
fillLine(2,"switch off");
}
*/
return value;

}

void setLed(int value)
{
if (value)
{
digitalWrite(ledPin,HIGH);
}
else
{
digitalWrite(ledPin,LOW);
}
}
[/code]

Lundi, octobre 6 2008

Fraiseuse CNC sous Linux, « Do It Yourself »

Après quelques tests sur ma précédente fraiseuse, je me suis rendu compte que le manque de précision était fatal à ce genre de machine. Bien décidé à ne pas laisser tomber, j’ai décidé d’en reconstruire une nouvelle beaucoup plus précise.

Le cahier des charges est assez simple:

  • La machine doit rester bon marché
  • Il s’agit d’une petite fraiseuse de bureau et non d’un routeur de 2x3m
  • Elle devra fonctionner sous EMC2 (Linux Ubuntu 8.04)
  • Elle devra être suffisement précise pour réaliser des gravures de circuits imprimés.
  • La conception se fera au feeling, je suis incapable de concevoir une telle machine sur plans.

J’ai choisi des matériaux faciles à trouver, il s’agit de tube carré en aluminium vendu en barres de 1 mètre chez LeroyMerlin, de tige filetée de 6mm, de boulons de 6mm et de roulements à billes de roller et d’autres récupérés dans des imprimantes ainsi que du tube de 25mm en acier pour la potence de l’axe Z.

La motorisation est assurée par 3 moteurs pas à pas unipolaires 4.1V 1.1A acheté chez Technimaniacs, les prix sont très corrects et le service parfait :-) à recommander. Je n’ai pas réutilisé les anciens moteurs, ils nécessitaient d’être démultipliés ce qui me faisait perdre en précision, de plus, leur puissance était vraiment limite.

Pour ce qui est de l’électronique, il s’agit de la même carte que ma première fraiseuse, un kit de chez HobbyCnc. Elle a le mérite de bien fonctionner et d’être très bon marché par rapport à la concurrence. Le pilotage ce fait cette fois sous linux avec EMC2. Un excellent logiciel opensource de pilotage de fraiseuse.

La chaine logiciel (opensource)utilisée est la suivante:

  • Qcad pour le dessin des pièces. Les fichiers sont enregistrés en DXF

  • Gcnccam pour générer le GCODE

  • Ensuite c’est axis qui est utilisé comme interface à EMC2.

EMC2 est installé sur une ubuntu 8.04 avec un noyau temps réel RTLinux. C’est absolument nécessaire sur ce type de machine afin de garantir la précision du fraisage.

Pour la gravure de circuits imprimés, il y a Eagle et un script de génération du Gcode. Je ne suis pas certain que ce soit facilement faisable avec Kicad :-(

Voici quelques photos de la machine construite. Le seul gros problème rencontré: un axe des Z trop souple donc une machine très imprécise. Je l’ai donc entièrement refait en acier soudé au chalumeau. Il est maintenant très rigide. Pour le reste, c’est assez simple, un châssis rectangulaire en aluminium dans lequel vient coulisser le mobile de l’axe des Y. C’est sur ce mobile Y que vient glisser le plateau de fraisage. L’axe des Z qui porte la dremel est guidé par des rails en alu. Des roulements de roller maintiennent le chariot Z en place.

Cnc mill Z axis Z axis IMG_5911 Z axis Z axis IMG_5913 Ball bearing from rollers IMG_5916 Aluminium rails Y stepper mount Unipolar steppers IMG_5917 ball bearing from old printers Limit switch from old printers Electronics Electronics Plugs Power supply 12v 80Va First test

Voilà une petite vidéo de test avec le fichier de démo d’Axis. Le fraisage ne se termine pas la course de ma machine étant trop limitée. Pour un premier test, la précision est au rendez-vous.

Mercredi, mars 26 2008

Fraiseuse CNC

Je vous ai parlé il y a quelques semaines de ma fraiseuse CNC que j’étais en train de construire. Et bien voilà, ca y est, elle est presque terminée.

CNC Mill

La carte de contrôle (Kit provenant du site www.hobbycnc.com). On distingue à droite un gros condo de filtrage et le redresseur. L’alimentation est du 24V 5A fourni par un transformateur de récupération.

CNC Mill

CNC Mill
CNC Mill

Deux bras équipés de roulements à bille permettent de réduire le jeux sans provoquer trop de frottements.

CNC Mill

Il ne me reste plus qu’à tester tout ça. Première étape: installer des interrupteurs de fin de course pour ne rien casser en cas de problème. Ensuite, la deuxième étape indispensable est le calibrage, pas simple sur ce type de machine. Pour les débuts j’utilise Turbocnc sous DOS qui est moins gourmand que EMC2 sous Linux (Mon seul portable ayant un port // est trop vieux…).

A très bientôt pour les premiers tests. Vous pouvez me souhaiter bonne chance parce que la moindre erreur d’alignement rendrait la machine totalement inutile :-(