Dimanche, janvier 24 2010

Chargeur solaire pour gadgets USB ( téléphone, GPS… )

Mon premier projet 2010, tout simple mais bien utile: un chargeur de téléphone autonome. Le montage est basé sur une batterie Lithium polymère d’un élément (3.7v) qui alimente un « Mintyboost » transformant le 3.7v en 5V pour charger un périphérique USB. La charge de la batterie est assurée par un courant entre 3 et 6v au travers d’un MAX1555. Ce courant peut provenir de 3 sources:

  • Un port USB d’ordinateur.
  • Un chargeur secteur 5v.
  • Un panneau solaire.

Le montage se base sur 2 cartes open hardware provenant de 2 fournisseurs bien connus sparkfun et Adafruit industries.

L’une des cartes sert de support au MAX1555. Elle comporte 2 entrées et 2 sorties.

En entrée:

  • Un port d’alimentation 2.1mm.
  • Un mini usb.

En sortie:

  • La batterie Lipo.
  • la sortie 3.7v vers le mintyboost.

Elle est disponible préassemblée chez sparkfun

La batterie provient aussi de chez Sparkfun. C’est une batterie 1 élément de 2000 mAh.

L’autre partie, est un kit de chez Adafruit. Le mintyboost. Il n’a qu’un but: élever la tension de la batterie de 3.7v à 5v. Le kit est très simple, il faut moins de 15 min pour l’assembler.

Les instructions d’assemblage, les schémas et tout la documentation sont en ligne sur le site de ladyada.

Le panneau solaire provient lui aussi de chez adafruit.

Dernière étape: assembler l’ensemble dans un boitier de petite taille. J’ai choisi un boitier robuste en aluminium qui n’aura aucun mal à trainer dans un sac à dos.

Inside the box

L’intérieur du boitier. Comme vous pouvez le constater, on peut encore réduire un peu l’encombrement.

It work's !

Mon téléphone en charge. Le chargeur peut assurer à peu près une charge et demi du téléphone sans l’aide du panneau solaire. Avec le panneau il faut une dizaine d’heures pour recharger complètement la batterie du chargeur. Le chargeur est suffisamment petit pour rester dans un sac à portée de main. Quand vous partez en randonnée, il suffit juste d’emporter en plus le panneau solaire que l’on fixera sur le dessus du sac à dos par exemple.

L’avantage c’est qu’il peut être utilisé avec ou sans la partie solaire. Celle-ci assure une totale autonomie: rechargement de la batterie « tampon » dans la journée et charge des périphériques USB la nuit par exemple.

En se qui concerne la facture, elle est relativement élevée: ~90$ Ce chiffre pourrait être fortement réduit  en faisant nous même le circuit. Comme il s’agit d’un prototype, j’ai préféré rester sur le kit, plus simple à assembler.

Vendredi, décembre 4 2009

Réparations du jour: un jouet et un chargeur

Allez hop, aujourd’hui j’ai a réparer un petit hélicoptère d’intérieur: un mosquito V2. Un appareil bien sympa pour les enfants mais qui à force de chuter ne fonctionne plus.L’autre réparation concerne un chargeur rapide Varta qui fait un bruit d’avion dès qu’il se met en marche.

  • Pour le petit hélicoptère, le rotor de queue ne tourne plus, du coup impossible d’avancer ou de reculer.

DSC01571

DSC01573

  • A priori la panne vient soit de la télécommande ( potentiomètre HS ) ou de l’appareil lui-même. Etant donné que c’est l’hélico qui tombe plus que la télécommande, j’ai parié sur lui. Là encore plusieurs hypothèses:
  1. Le PCB est fendu à cause des chutes
  2. Un fil s’est coupé
  3. Le moteur du rotor est H.S
  4. Les transistors de contrôle (H-bridge) du moteur sont morts

Pour le savoir, il faut ouvrir la bête. Quelques vis plus loin, on accède à la carte et à la batterie.

DSC01567


Sous celle-ci, deux fils qui vont au moteur de queue. L’un d’eux est coupé au ras de la soudure côté PCB. Au moins une panne facile à trouver sans équipements de test. Juste de bon yeux ;-)

DSC01568

Un coup de fer à souder plus loin, on peut tester. Ça marche, et hop un jouet qui ne finira pas à la poubelle (enfin pas tout de suite…).

  • Deuxième objet de la journée, le chargeur. Un bruit épouvantable dès que l’on charge des piles. Facile à identifier, c’est le ventilateur de refroidissement des piles qui vibre.

DSC01569

DSC01570

Allez hop, on démonte la bête. La réparation est toute simple:

  1. Le ventilateur est nettoyé de toutes les poussières qui déséquilibrent les pales
  2. Le ventilateur est calé dans son logement à l’aide de colle à chaud. Ça lui évitera de vibrer.

Le tout en vidéo:

Planet MadeInFr: Le Do-It-Yourself à la française

Aujourd’hui HugoKernel vient de mettre en ligne un Planet regroupant les sites francophones autour d’un thème commun: « Fait soit même ». Vous devez vous demander « mais qu’est ce que c’est que ce truc ? ». Le Do-It-Yoursef de nos amis anglo-saxons, vous connaissez ? hackaday.com, makezine.com… et bien là c’est pareil mais en français. Orienté électronique, vous y trouverez des circuits, des bidouilles, des réparations d’appareils courants…

Capture d’écran 2009-12-04 à 15.54.24

La publication sur le planet est ouverte à tout le monde, il suffit de posséder un blog et des articles en français sur le sujet, et de nous le signaler par le biais du formulaire approprié.

L’adresse de ce planet est : http://planet.madeinfr.org/

Samedi, novembre 28 2009

Fabrication d’un support « tout terrain » pour appareil photo / camescope.

Aujourd’hui, j’ai fabriqué un support « tout-terrain » pour appareil photo compact ou petit camescope afin de pourvoir filmer en attachant l’appareil à un guidon de vélo, un balcon de bateau, une branche ou même un casque. Pour ça j’ai dessiné un petit support comportant une vis centrale pour fixer l’appareil et 4 fentes latérales pour pouvoir y passer des bandes velcro ou des sangles.

Afin d’avoir un support très solide et de petites dimensions, j’ai utilisé du DELRIN, une matière plastique très solide. Pour la vis d’appareil photo, j’en ai récupéré une sur un pied d’appareil photo cassé. Sinon, vous pouvez vous en procurer chez tous les bons photographes. Attention à ne pas utiliser un boulon M6 métrique, les vis pour APN ont un pas anglais…

Un petit coup de Qcad nous donne une petite pièce toute simple. Vous pouvez télécharge le fichier DXF ici.

Qcad

Quelques paramétrages plus loin, le fichier GCODE pour la fraiseuse est prêt. C’est parti pour une bonne heure de fraisage avec une fraise droite 3mm. J’ai réduit volontairement la vitesse de coupe et d’avance pour le pas fondre le plastique, celui-ci étant assez épais (8mm).

La matière première: un bloc de DELRIN noir de 88x38x8.

Support APN - Camescope - 1

Support APN - Camescope - 1

Après de longues minutes de fraisage, me voilà avec une belle pièce.

Support APN - Camescope - 2

Support APN - Camescope - 2

Le centre de la pièce est évidé pour que la tête de la vis puisse s’y loger en entier. Un circlip empêche la vis de tomber une fois en place.

Support APN - Camescope - 3

Support APN - Camescope - 3

Support APN - Camescope - 4

Support APN - Camescope - 4

Vue de derrière.

Support APN - Camescope - 5

Support APN - Camescope - 5

La partie arrière permet de visser fermement l’appareil sur le support. Ensuite elle se replie dans son logement.

Je mettrais l’article à jour dès que j’aurais récupéré des bandes velcro.

[EDIT]

Le test sur un dossier de chaise avec une caméra Kodak Zi8: impec :-)

En place

Dimanche, novembre 22 2009

Fraiseuse CNC DIY v3 – Episode 1

Vous vous souvenez de ma « fraiseuse CNC v1« , c’était une première version, pas vraiment fonctionnelle mais qui m’a permis de me familiariser avec la fabrication d’une telle machine.

CNC Mill

CNC Mill

Ensuite, j’ai fabriqué la version actuelle, estampillée V2, tout à fait opérationnelle celle là.

Cnc mill

Cnc mill

Cependant, avec l’expérience, elle souffre de quelques limitations:

  • La première, la plus gênante est la surface de la table de fraisage, beaucoup trop restreinte ( 12 x 12 cm) alors que l’encombrement de la machine est assez conséquent. C’est essentiellement du à la conception de type fraiseuse avec une table X / Y mobile et un axe Z fixe.
  • Le deuxième soucis vient de la précision, elle est très bonne, mais encore insuffisante. J’arrive sans problème à faire des circuit imprimés mais ils ne sont pas parfaits. On doit pouvoir faire mieux.

Partant de ce constat, j’ai décidé de me lancer dans une 3° version qui j’espère sera plus performante. Avec toutefois 2 contraintes:

  • Le prix devra rester raisonnable
  • La fraiseuse devra pourvoir rentrer dans le caisson anti-bruit que j’ai fabriqué pour la V2. Ça limite la surface totale de la table de fraisage à une taille de 40x40cm ce qui, si je ne fais pas d’erreur de conception, devrait donner une surface utile d’environ 30x30cm ce qui est bien plus grand que la précédente.

Pour arriver à un bon résultat, j’ai cherché du matériel me permettant d’obtenir des mouvements linéaires très précis sans pour autant êtres ruineux. Pour cela, j’ai trouvé sur Ebay des arbres de précision avec des paliers en aluminium équipés de douilles à billes. Pour la structure de la machine et les différentes pièces mécaniques, je me suis orienté vers du polyéthylène haute densité ou PEHD, moins cher que le DELRIN. C’est un plastique très dur, facile à fraiser / couper qui sert notamment dans le domaine alimentaire pour faire des planches à découper la viande. Je vais utiliser la fraiseuse V2 pour fabriquer les petites pièces plastiques de la V3. Concernant les entrainements, je pense rester sur des tiges filetées de 6mm, même si le rendement n’est que de 30%, elles sont d’un coût < à 1€ / m alors que les vis à billes sont de l’ordre de 100 € / m…

Les premières pièces:

DIY CNC Parts

DIY CNC Parts

Voilà deux exemples glanés sur le net de ce que pourrait être la machine finale:

aliversionwk9

drawingfi4

Il ne me reste plus qu’à valider quelques « concepts » côté mécanique avant de me lancer dans la construction. La suite au prochain numéro.

Lundi, septembre 7 2009

Un bureau pour la rentrée

C’est la rentrée (enfin c’était), il faut changer le bureau du fiston. Aller un petit tour chez IK… Et là, rien ne plait, il faut un bureau pas trop large ~80cm, si possible dans les tons de gris / rouge. Bref le mouton à 5 pattes, introuvable… encore que, avec la génétique…

Il ne reste plus qu’une solution, ressortir la scie sauteuse, la règle et le crayon. Et pour être  moderne, on va jouer avec Sketchup pour concevoir un modèle 3D du bureau (on va ainsi vérifier qu’il convienne à Madame ;-)

croquis

- Oui, c’est bien comme ça, avec du gris et du rouge, ça sera parfait !

- Clic, Clic… Zut, Clic, Clic, Ouf !

modèle Sketchup

Après un petit tour dans une grande surface du bricolage, nous voici avec les différents éléments du futur bureau.

Making of - 01

  1. Des pieds (à découper)
  2. 1 plaque de MDF 18mm en 800×500
  3. 1 plaque de MDF 10mm en 800×400
  4. des vis
  5. deux appliques murales
  6. du fils électrique, 1 interrupteur, 1 prise male
  7. 4 fixations pour pieds
  8. 4 ecrous à frapper
  9. de la tige filetée M8
  10. de la peinture
  11. Un jeu de rangements en bois (à peindre)

L’assemblage est simple et ne nécessite que peu d’outillage.

Découpe des pieds et perçage.

Making of - 02

Insertion et collage à l’epoxy d’écrous à frapper.

Making of - 03

Fixation des supports pour les pieds

Making of - 04

Making of - 05

Assemblage de l’arrière du bureau avec tourillons et collage.

Making of - 06

On serre le tout bien fort pendant quelques heures.

Making of - 07

La boite de rangements est collée et vissée par l’arrière.

Making of - 08

Ça commence à prendre forme, reste la mise en peinture et l’installation des lampes.

Making of - 09

Et voilà pour la peinture (Monocouche acrylique).

Making of - 10

Les lampes sont installée puis les câbles électriques sont passés à l’arrière du bureau.

Making of - 11

C’est fini, fiston à son bureau aux bonnes dimensions, pour un coût d’environ 50 €.

Pour ceux qui veulent, voilà le modèle Sketchup du bureau.

Mercredi, mai 27 2009

Fraisage d’un engrenage sur ma CNC.

Après quelques tests, j’ai quelque peu amélioré ma fraiseuse. L’axe des Z, peu précis a été remplacé. La précision est maintenant au rendez-vous. J’ai usiné plusieurs circuits imprimés sans problème. Le seul soucis rencontré est venu du réglage du zéro sur l’axe des Z ce qui conditionne la précision pour ôter le cuivre d’un circuit imprimé sans pour autant emporter l’époxy de la plaque. Le réglage manuel étant impossible pour obtenir une bonne précision, j’ai utilisé un réglage automatique par contact. J’ai utilisé une broche libre de la carte d’interface pour réaliser un contact de calibrage. Une petite plaque conductrice est posée sur la matière à usiner, une pince est fixée sur la fraise, machine éteinte. Ensuite EMC2 pilote la machine jusqu’à ce que le contact avec la pièce soit établi. Le zero est alors calculé en déduisant l’épaisseur de ma plaque conductrice.

Voilà la démo en video:

Pour ce qui est du fraisage de pièces, je n’ai pas trouvé sous linux de programme satisfaisant permettant de créer des « pocket », je ne sais faire que des fraisages simples. J’ai donc utilisé un freeware « Cambam » pour windows au travers de Virtualbox. Les dessins sont fait avec QCAD sous linux puis convertis en GCODE par Cambam. L’ensemble est ensuite usiné avec EMC2 sous Linux.

La forme à fraiser.

Cambam1

Le chemin de l’outil en vert.

Cambam2

Et voilà la séquence d’usinage. Vous remarquerez facilement qu’il y a une erreur dans mon test, j’aurais du commencer par le centre de la pièce et non par les bords… mais bon, pour un test, le résultat est très concluant, la machine a réalisé 6 passes de 1 mm pour découper la plaque de plastique.

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]

- page 1 de 2