Lundi, octobre 20 2014

Seeedstudio Limite Perçage

Petit article juste pour vous parler d’un bonne surprise, la qualité des pcb SeeedStudio semble avoir été vraiment améliorée, vous pouvez voir en exemple un des plus « mauvais » via que j’ai trouvé sur ce batch.

Le via doivent normalement avoir une pastille de 0.8mm mais avec une pastille à 0.6mm et un perçage à 0.3mm le via est correcte.

Pour comparaison voila une analyse d’un PCB produit par le même service en 2012.

seeedstudio_2012_analysis


Classé dans:Microscope, PCB

Mardi, septembre 30 2014

Le poulailler connecté

Grâce à une campagne de test concernant la réduction des déchets à laquelle j'ai participé, j'ai maintenant 2 poules et un poulailler (c'est d'ailleurs le nom de la campagne : « deux poules et un poulailler pour réduire nos déchets »).
L'opération consistait à nourrir les poules avec un maximum de déchets qui finissent habituellement dans les poubelles ou au mieux dans un composteur. Plus de 6 mois se sont écoulés, l'opération est maintenant finie et je trouvais qu'il serait intéressant, et surtout amusant de mettre quelques capteurs dans le poulailler.

Cot ! Les poules

Après la brosse à dents connectée ou le produit qui va totalement révolutionner vos WC : SmartPQ, le premier rouleau de papier de toilette connecté et surfant sur cette vague de bullshit créativité, j'ai décidé de me lancer dans une première mondiale : ami des gallinacées, je vous présente le premier poulailler connecté !

Twitter @LaVieDePoule

Fonctionnalités du bestiau :

  • Prise de photos infrarouges, détection des œufs
  • Prise de température / luminosité / capteur mouvement / capteurs d'ouverture
  • Surveillance de la température, de la tension d'alimentation et du courant consommé
  • Alertes via Twitter et SMS (API Free Mobile) si certains seuils sont dépassés (température, alimentation)

Le tout est articulé autour d'un Raspberry et d'une carte fille RaspiO'Mix armée de capteurs :

  • Température de l'enceinte du poulailler
  • Température de chaque nid
  • Détecteur de mouvement IR
  • Caméra infrarouge
  • Capteur de luminosité extérieure
  • 3 capteurs sur tous les accès du poulailler (basse-cour, porte jardin et collecteur d’œufs)
  • Mesure de la tension d'alimentation et du courant consommé

2 sorties sont également pilotables et sont utilisées pour la led témoin et le relais pilotant les leds infrarouges.

Le tout en 1 image :
Vue des entrées / sorties

Le poulailler

Le poulailler fourni dispose de 2 portes et d'un collecteur d'oeufs, sur l'un des côtés disposant d'une ouverture, on vient coller une sorte de cage (à gauche sur la photo) disposant elle-même d'une ouverture permettant l'accès à une éventuelle basse-cour, dans la configuration actuelle, la seconde porte sert à faire sortir les poules directement dans le jardin (la porte devant).

Vue du poulailler

Le boitier et son logement

Afin de protéger l'électronique contre les conditions qui seront certainement rudes en pleine hiver, le tout est logé dans un boitier de répartition étanche.

Le coffret étanche

Détails techniques

Caméra

J'utilise Pi Noir (la caméra officielle de Raspberry sans le filtre infra-rouge), elle est placée face aux 2 nids et sa focale permet d'avoir une vue parfaite sur les poulettes.
Pour les photos de nuit, un relais pilote un anneau de leds infra-rouges permettant d'illuminer le poulailler afin d'y voir quelque chose et ça marche plutôt bien :

ir_0.jpg ir_1.jpg ir_2.jpg ir_3.jpg

La caméra (en noir à droite) et l'éclairage infrarouge situé à la verticale des nids
Le capteur infrarouge à gauche et la caméra Noir à droite Les leds infrarouges

Le principal intérêt de la caméra concerne la détection des œufs via OpenCV. À intervalle régulier, je prends une photo de la scène et je cherche des éventuels œufs après une succession de traitement sur l'image.

Pour le moment, la détection des œufs ne se lance pas automatiquement car j'ai encore un peu de développement à faire pour améliorer l’algorithme qui affiche pour le moment un taux de succès inférieur à 42%.

Pour pouvoir tester l'algorithme de détection, j'ai collecté des images en provenance de la caméra sur lesquelles apparaissent ou non des œufs, le nom des fichiers indique le nombre d’œufs présents (0_1.jpg signifie 1 œuf, il faut ignorer le premier numéro), ainsi, une fois l'image analysé, je peux savoir si le résultat est bon ou non, si tous les œufs de l'image ont bien été trouvés.

Un exemple d'utilisation :

$ python eggcounter.py --export=tests/export tests/with/*
Open tests/with/0_1.jpg [Ok]
Open tests/with/10_2.jpg [Error]
Open tests/with/11_1.jpg [Ok]
Open tests/with/11_2.jpg [Error]
Open tests/with/1_1.jpg [Ok]
Open tests/with/12_2.jpg [Error]
Open tests/with/13_1.jpg [Error]
Open tests/with/14_1.jpg [Error]
Open tests/with/15_1.jpg [Error]
Open tests/with/16_1.jpg [Error]
Open tests/with/2_1_highlight.jpg [Ok]
Open tests/with/3_1.jpg [Ok]
Open tests/with/5_1.jpg [Ok]
Open tests/with/6_1.jpg [Ok]
Open tests/with/7_2_highlight.jpg [Error]
Open tests/with/9_2_highlight.jpg [Error]
Result: 42% (7/16)
- Extra egg detected : 5
- Missed egg : 11
$ 

42%, ce n'est pas énorme mais c'est une partie que j'ai peu travaillé, le score ne peut donc que s'améliorer...

Notez que je lance le même test avec des images sans œuf, le résultat est meilleur (84%) mais ça signifie tout de même que j'arrive à trouver des œufs ou il n'y en a pas ;).

Enfin, je n'ai pas testé d'image depuis que l'éclairage infrarouge est installé, je pense que ça devrait grandement améliorer la détection.

Les différentes étapes de la détection
  1. On part de l'image source
  2. On applique 2 transformations (erode et dilate)
  3. Modification des niveaux (threshold)
  4. Le résultat : 1 œuf trouvé !

Tout ceci en image :
Image originale Erode / Dilate Niveaux Oeuf trouvé !

Capteur de mouvements IR

L'idée est de repérer les mouvements dans l'enceinte du poulailler afin de savoir si les poules sont dedans ou non lorsque les portes extérieures sont ouvertes.

J'utilise un capteur de type PIR HC-SR501 qui possède 3 broches, 2 d'alimentation et une de sortie. Le souci avec ce module est qu'il possède son propre régulateur 3V (à faible chute de tension), or, je l'alimente en 5V et j'ai besoin d'une tension de sortie de 5V pour un niveau haut (3V pourrait être pris un niveau indéterminé par l'adaptateur de niveau de la carte RaspiO'Mix #vécuInside, enfin, je ne souhaite pas le brancher en direct sur les IO du Raspberry), j'ai donc ajouté un petit montage avec un transistor et une résistance faisant office d’adaptateur de niveau (0V -> 5V, 3V -> 0V).

Le capteur étant assez sensible et surtout pas vraiment adapté à ce genre d'utilisation (dans un environnement aussi confiné), le logiciel gère en grande partie ces insuffisances (debouncer et compteur d'impulsions) et ça marche assez bien.

Le capteur infrarouge à gauche et la caméra RaspberryPi Noir à droite
Le capteur infrarouge à gauche et la caméra Noir à droite

Capteur de luminosité extérieure

Il est constitué d'une simple photorésistance (LDR) dont le principe de fonctionnement est une modification de la résistance à ces bornes proportionnellement à la luminosité (plus l'éclairage est fort, plus la résistance diminue).
Ce capteur permet de donner des indications sur l'heure de coucher des poules car le rythme de ces dernières est totalement calé sur celui du Soleil, d’où l'expression se coucher à l'heure des poules...

La LDR est utilisée avec un pont diviseur de tension qui attaque directement une des entrées analogiques de la carte RaspiO'Mix.

La LDR (à droite) et un capteur de température à gauche (DS1820)
La LDR (à droite) et un capteur de température à gauche

Capteur d'accès

Aux nombres de 3 et disposés sur toutes les ouvertures, ils sont simplement constitués de microswitch, à chaque changement d'état de l'entrée associée au capteur, un évènement est généré dans le code et une action est générée (Tweet, etc...), l'anti-rebond est géré du côté logiciel.

Les accès :

  • Basse court
  • Jardin entier
  • Collecteur d’œufs

Capteur d'ouverture basse-cour Capteur d'ouverture jardin Capteur d'ouverture collecteur oeufs

Mesures de tension et courant

La valeur de la tension d'entrée (environ 12V) juste avant le régulateur à découpage est présentée via un pont diviseur de tension à une des entrées analogiques du RaspiO'Mix, la seconde mesure concernant la courant consommé par le dispositif.

Le but serait d'alimenter le tout par panneau solaire, cela explique aussi la présence de ces 2 capteurs.

Les sondes de température

Le capteur de l'enceinte du poulailler est basé sur un simple LM35 connecté sur une des entrées analogiques de la carte RaspiO'Mix, au niveau logiciel, je lis très simplement cette valeur, la multiple par 100 (1 degré = 10mV) et l'affiche dans les log ou la publie sur Twitter, dans la configuration (config/general.py), il est possible de définir des seuils acceptables (3 à 32 degré C) au delà desquels une alerte est générée et un twit m'est directement adressé pour me prévenir que mes poulettes ont froid ou trop chaud...

La prise de température de chaque nid est un peu plus complexe que pour l'enceinte, la distance entre le Raspberry et les nids étant plus grande, un capteur analogique n'aurait pas été très précis, ainsi, afin d'avoir une mesure fiable, j'ai utilisé des sondes OneWire DS1820 qui autorisent de grande distance de câble sans perte de précision (et puis de toute façon, je n'avais plus d'entrées analogiques disponibles).

Ces 2 sondes n'utilisent que 2 fils (mode parasite), la masse et le tension / signal :

Screen_Shot_2014-08-13_at_14.45.41.png

Au niveau logiciel, afin de fonctionner correctement, ces sondes ont besoin des modules suivants avec les paramètres qui vont bien :

$ modprobe w1-gpio gpiopin=25 pullup=1
$ modprobe w1-therm
$ 

Une fois les modules chargés, ils vont "pouller" à intervalle régulier le bus afin de découvrir et lire les valeurs des capteurs connectés sur le bus, pour les découvrir, une petite commande suffit :

$ ls /sys/bus/w1/devices/
10-0008008ba2a9  10-0008008bceb5  w1_bus_master1
$ cat 10-0008008ba2a9/w1_slave
1b 00 4b 46 ff ff 01 10 23 : crc=23 YES
1b 00 4b 46 ff ff 01 10 23 t=13687
$ 

Le fichier w1_slave contient toutes les informations qui nous intéressent, il est à parser et c'est la fonction read_w1_temperature qui s'en occupe et pas folle la guêpe, en cas d'erreur de lecture sur le bus, une nouvelle tentative est faite...

Durant le développement, un bug dans le pilote w1 foutait la brouille sur le bus i2c et empêchait la caméra de fonctionner correctement, il n'était donc pas possible d'utiliser conjointement la caméra et les capteurs de température, si je voulais utiliser ces derniers, j'étais obligé de rebooter en activant les modules, la caméra devenant alors inaccessible, pour l'avoir, il fallait rebooter et bien entendu, ne pas charger les modules w1 (plus d'informations à propos de ce problème sur GitHub).

J'ai réglé ces problèmes avec cet ordre dans /etc/modules :

$ cat /etc/modules
# First load onewire driver before i2c module
w1-therm
w1-gpio gpiopin=25 pullup=1

i2c-bcm2078
i2c-dev
#spi-bcm2708
rtc-ds1307
#snd-bcm2835
bcm2708_wdog

cuse
$ 

Note à propos des capteurs de température des nids : en suivant leurs températures, il est possible de détecter la présence des poules sur les nids, plus pratique et précis qu'un système mécanique.

Le logiciel

C'est Python qui fait tout le travail de notifications, de surveillance, etc... J'utilise également Motion pour streamer « en live » le flux vidéo en provenance de la caméra afin de voir ce qui se passe dans le poulailler.

Pour tout le reste, c'est Python qui intervient, j'utilise, entre autre, les modules suivants :

  • OpenCV pour la recherche des œufs
  • Twython pour l'interfaçage avec Twitter

2 threads sont utilisés, un s'occupe d'envoyer les notifications dans la console, surveiller les seuils d'alertes, générer les messages et les envoyer sur Twitter et un autre thread gère les réponses aux messages qui sont adressés au compte Twitter, oui, je l'admet, mes poules n'ont pas le temps de répondre à tous les messages et un CM automatisé leur permet de vaquer à leurs occupations tranquillement !

J'ai également développé un bout de code qui permet de former des phrases de manières plus ou moins « aléatoire » afin de ne pas toujours envoyer les mêmes messages sur Twitter.

Voici un exemple d'utilisation très simple; imaginez que vous vouliez pouvoir dire bonjour à quelqu'un via l'appel à un programme mais d'une manière originale à chaque fois, par exemple :

Nous avons d'un côté "Bonjour", "Salut" et "Hello", de l'autre "toi", "l'ami" et "vous", en combinant tout ça, on obtient ces bouts de phrases :

  • Bonjour toi / Bonjour l'ami / Bonjour vous
  • Salut l'ami / Salut toi / Salut vous
  • Hello vous / Hello toi / Hello l'ami

Vous avez compris le principe, on combine plusieurs morceaux de phrases ensemble afin d'en former d'autres.

Pour automatiser ça avec ma lib, on créé un tuple de tuple ainsi :

test = (
    '{0} {1}',
    (
        ( 5, 'Bonjour'),
        ( 2, 'Salut' ),
        ( 2, 'Hello' ),
    ),
    (
        ( 1, 'toi'),
        ( 5, 'l\'ami{0}', (
            ( 1, ', il est %hour% !'),
            ( 1, '!'),
        )),
        ( 5, 'vous'),
    )
)

Notes :

  • Le premier élément du tuple '{0} {1}' est une règle de formatage "format", le second élément et le troisième correspondent aux éléments que l'on va « sélectionner aléatoirement » et venir remplacer dans dans le premier élément.
  • Le second tuple est constitué de sous tuple contenant un nombre (la pondération) et une chaine de caractère, plus la valeur de la pondération est élevée et plus la chaine de caractère associée à de chance d'être choisi.
  • Vous pouvez imbriquez autant de tuple que vous le souhaitez pour créer des phrases très complexes

Après, il suffit de faire un appel à la fonction speak avec notre tuple en paramètre et elle nous généra une phrase automagiquement.

speak(test, hour='11h')

Vous noterez au passage que vous pouvez injecter des paramètres nommés qui serviront à remplacer leur équivalent sous la forme %param% dans les chaines de caractères.

Et voici ce que ça donne :

$ python speak.py
Bonjour l'ami, il est 11h !
$ python speak.py
Bonjour vous
$ 

Si vous voulez jouer avec cette lib, vous la trouverez dans lib/speak.py.

Les pistes d'évolutions

  • Améliorer la détection des œufs
  • Générer des stats (pontes, températures, éclairage, etc...)
  • Reconnaitre chaque poule (les lier à la production d’œufs)
  • Autonomie énergétique du dispositif

Le tout est disponible sur GitHub sous une licence évidemment libre : GitHub / hugokernel / LaVieDePoule

Vendredi, septembre 12 2014

[DIY] Table basse et matrices de leds – Partie 2

Bonjour tout le monde !

Ça y est, ma table basse est vivante !
(enfin, pas au sens propre bien sûr)

Il reste encore quelques petites finitions à réaliser, un petit coup de papier de verre sur les angles par exemple, mais l’ensemble donne déjà un résultat très satisfaisant !

Je vous laisse juger par vous-même ;)

Les perçages pour les fils

DSCF3265

Vous remarquerez que j’ai utilisé de la (sainte) colle chaude (amen) pour éviter aux câbles une décapitation lente et douloureuse.

Résultat final sans les matrices

DSCF3267

Le dessous avec l’électronique et l’alimentation

DSCF3271

NB Je vais devoir faire une nouvelle version du contrôleur de matrices avec les connecteurs pour les manettes de SNES et des trous de fixation (c’est pratique les trous de fixation …).
En attendant, le contrôleur pend en dessous de la table … ça fera l’affaire pour le moment.

Résultat final avec les matrices

DSCF3273

It’s alive !

DSCF3288

(J’ai toujours pas trouvé de moyen de faire des photos claires en filmant un truc lumineux … je suis pas doué en photo …)

Test de charge

DSCF3291

Toutes les leds à pleine puissance, soit 8 ampères au total, et rien ne sent le brûlé. Test validé ! :)
Lunettes de soleil conseillées, ces matrices sont vraiment très lumineuses.


Classé dans:projet Tagged: diy, leds, madeinfr, matrices, table basse

Mardi, septembre 9 2014

[DIY] Table basse et matrices de leds – Partie 1

Bonjour tout le monde !

Il y a déjà quelques mois maintenant, j’avais dans l’idée un projet assez sympa de table basse intégrant des matrices de leds RGB.
L’idée (pour faire simple) est d’avoir une table basse sur laquelle il est possible de jouer à des mini jeux (en pixel art) tout en buvant un verre.

Avec tous mes problèmes de temps libres et de météo (cela fait presque 3 mois maintenant qu’il pleut tous les jours dans ma région, c’est super), je n’avais pas pu avancer sur ce projet.
Mais les choses ont évolué, voici donc la première partie de mon aventure dans le monde salissant de la menuiserie ;)

Le commencement

DSCF2996

Une table basse c’est quoi ? Un plateau, 4 côtés et 4 pieds.
Sur le papier ça à l’air assez simple à faire … ou pas.

En début de mois d’août, j’avais fait une première tentative pour réaliser le corps en bois de la table basse.
Effectivement sur le papier c’est simple. Mais en réalité, ça ne l’est pas vraiment.

La table basse fait 50cm de côté et comporte au centre un évidemment de 32cm de côté pour les matrices.
Avec un peu de calcul mental, on arrive facilement à déterminer les dimensions de chacune des pièces de bois.

DSCF3091

Les matrices faisant 26mm de haut (avec les pieds de fixation), j’avais choisi pour ma première tentative de faire un sandwich de 3 couches de bois d’épaisseur 10mm (soit 30mm au total).

Les deux couches inférieures sont de simples planches de bois mises bout à bout.
Le dessus n’est quant à lui qu’un simple cadre en bois de 9cm de large (9 + 9 + 32 = 50cm) avec des angles à 45° pour faire plus jolis.

Sur le papier, la découpe des pièces de bois semble aussi simple que de sortir la scie à disques de son placard.
Mais vous vous en doutez, les choses ne se sont pas vraiment passées comme prévu.

Première tentative, premiers ratés

DSCF3094

Pour commencer, les angles à 45° n’étaient finalement pas vraiment à 45°.
Sur le coup, je n’avais pas vu le problème, mais après collage il y avait clairement un problème, et un gros.

J’ai donc coupé une planche de test, sorti le rapporteur et regardé l’angle réel : environ 43°.
Conclusion : ma scie ne coupe pas droit. Pire, même les coupes à 90° ne sont pas vraiment à 90° …
Comme on dit, à vouloir faire des économies sur le matériel ça finit toujours mal.

DSCF3097

Mais le problème d’angles pas vraiment à 45° n’est qu’esthétique.

Le vrai problème concerne le collage, que j’ai (il faut l’avouer) un peu beaucoup foiré.
Conséquence : certains angles de la couche du dessus (celle visible) ont rebiqué et ne sont donc pas alignés avec la surface des autres angles …
Impossible donc de poser une plaque de plexiglas par dessus sans qu’elle dépasse par endroit ou bouge quand on appuie sur l’angle opposé.

Mais ce n’est pas encore le pire …

DSCF3099

Durant le collage (enfin, durant le serrage post-collage pour être précis) la couche du milieu a bougé.

Les côtés ne sont donc pas lisses. Et il est donc impossible de coller les planches des côtés.
J’aurai pu rattraper le coup, mais avec tous les autres problèmes j’ai préféré reprendre mes plans et changer de solution.

Sky-wood 2, le retour. Ça va scier !

DSCF3109

Pour la deuxième tentative, j’ai décidé de travailler avec deux couches de bois seulement : une grosse couche de soutien, d’épaisseur 18mm et une petite couche (visible) de 10mm par dessus.
La couche du dessus aura toujours des angles à 45° (pour faire jolie), mais coupé avec une autre scie.

DSCF3111

J’ai donc sorti ma plus belle planche de sapin, la scie linéaire et …

DSCF3105

… en moins d’une journée, le plus gros des découpes était fait.

Au passage mon « coin menuiserie » est passé de ça :

DSCF3101

À ça :

DSCF3122

Et sur cette photo, j’avais déjà ramassé/aspiré un bon paquet de sciure ;)

DSCF3105

Bref, une fois la montagne de sciure dehors, j’ai pu commencer l’assemblage de la table basse.

DSCF3153

J’ai tout d’abord commencé par rassembler toutes les pièces de bois.

À savoir :
- la planche de fond (50x50cm) qui sert de support rigide à l’ensemble (en dessous des autres pièces de bois sur la photo),
- les 4 côtés (à gauche),
- les 4 pieds (au centre),
- les 4 morceaux du plateau supérieur (à droite),
- les 4 morceaux de bois servant de soutien au plateau supérieur (en haut).
Le reste du bois n’est rien d’autre que de simples cales et équerres pour rigidifier un peu le tout.

PS Je travaille quasiment dans le noir. Il fait tellement mauvais dehors que j’ai eu besoin d’installer des lampes de chantier pour pouvoir faire les photos …
C’est pour cela que les photos ont l’air sombres et jaunâtres. Pour toute réclamation, merci de vous adresser à météo France ;)

Assemblage à blanc

On est loin d’un meuble en kit, mais l’assemblage n’est pas vraiment compliqué.
C’est juste de la colle, beaucoup de colle même, et des serres cadres.

DSCF3159

Tout commence par les côtés en bois qui avec l’aide de deux serres-cadres font tenir l’ensemble en attendant le collage final.

DSCF3163

Viennent ensuite, 4 cales qui seront retirées une fois la colle sèche pour maintenir à la bonne hauteur le reste du montage.

DSCF3165

Par-dessus les cales vient se poser le fond servant de support rigide.

DSCF3169

Fond immédiatement suivi de deux feuilles d’acier d’épaisseur 0.5mm qui permettront aux pieds magnétiques des matrices de leds de tenir en place.

DSCF3170

Par-dessus tout ce petit monde vient se placer les supports de soutien pour le plateau supérieur.

DSCF3175

Remarque : Vous remarquerez la découpe un peu bizarre sur les angles, c’est volontaire.
J’avais besoin d’un petit millimètre de marge pour placer les matrices, mais j’avais aussi besoin de pile-poil 9cm pour pouvoir agencer et coller correctement les supports.
Du coup, j’ai fait une découpe incomplète sur les bords pour avoir mes 9cm et ma marge en même temps.

DSCF3179

Par dessus les supports viennent alors se placer les morceaux du plateau supérieur (avec de vrais angles à 45° cette fois-ci).

DSCF3181

Et pour finir une petite plaque de plexiglas qui protégera le bois des verres humides et autres cadavres de cacahuètes traînant sur la table.

La suite ?

DSCF3184

Il faudra attendre encore un peu pour la suite, la colle a du mal à prendre avec l’humidité ambiante.
J’utilise une colle vinylique qui date un peu et qui mériterait de prendre sa retraite …

Une fois la colle sèche, il restera à faire un peu de finition au papier de verre, quelques perçages pour les câbles et l’assemble de l’électronique.

« To be continued » ;)


Classé dans:projet Tagged: diy, leds, madeinfr, matrices, table basse

Jeudi, août 21 2014

Un cyclone pour l’aspirateur

Voilà un petit bricolage simple qui vous permettra de disposer d’un cyclone sur votre aspirateur de chantier et ainsi vous pourrez aspirer gravats et sciure sans utiliser de sac !

Il vous faudra un tube PVC de 100mm et un de 40mm d’une longeur d’environ 50cm chacun. Un bouchon pour le tube de 100mm (le mien est découpé dans une plaque de MDF) et un réducteur 100/40mm.

Pour récupérer les poussières il faut un sceau étanche et résistant. Si comme moi il s’écrase avec la pression vous pourrez le renforcer avec un croisillion en bois.

 

Le cyclone
Le cyclone

Le séparateur
Le séparateur
Prise d'aspiration
Prise d’aspiration
Insertion sur la tangente
Insertion sur la tangente
Le tube de 40mm au centre
Le tube de 40mm au centre
Les mesures
Les mesures
Contre l'écrasement de la cuve
Contre l’écrasement de la cuve
Le renfort du couvercle
Le renfort du couvercle
Supprimer les inserts
Supprimer les inserts
Le réducteur
Le réducteur

Le résultat est visible dans la vidéo :)

Je n’ai pas inventé grand chose, je me suis inspiré de cet article

Vendredi, août 1 2014

RaspiO'Mix ou GrovePi ?

On m'a demandé par courriel quelles étaient les différences entre le RaspiO'Mix et la carte GrovePi et j'ai pensé qu'il serait intéressant d'en faire un article...et je vais tâcher de faire un effort pour rester objectif, promis !

raspiomixvsgrovepi.png

Tout comme RaspiO'Mix, GrovePi vous permet de connecter vos modules Grove à votre Raspberry, même finalité mais choix technique différent : là ou RaspiO'Mix utilise directement les entrées / sorties du Raspberry, GrovePi utilise en fait un ATMega jouant le rôle d'intermédaire entre le Raspberry et le monde extérieur via une liaison I2C.

L'avantage pour l'un, c'est que GrovePi utilise moins d'entrées / sorties et du coup, vous pouvez les utiliser pour autre chose, l'inconvénient, c'est qu'on ne les pilote par directement, supprimant certaines fonctionnalités des IO du PI.

RaspiO'Mix fait office d'interface direct entre le Raspberry et le monde extérieur, vous pouvez donc utiliser des lignes de commandes, du Python, ce que vous voulez sans avoir à passer par une librairie spécialisée, en gros, pour faire cours, vous n'avez pas besoin d'utiliser un drivers contrairement à GrovePi.

Détails sur le mapping des ports : RaspiO'Mix et GrovePi.

Fonctionnalité GrovePi RaspiO'Mix
Entrées / Sorties 7 4
Entrées analogiques 3 4
Résolution CAN 10bits 18bits
Lignes I2C 4 2
Lignes série 1 1
Horloge Non Oui (via DS1307) avec batterie de sauvegarde
Interrupteur 0 2
Alimentation via le Raspberry via le Raspberry ou une prise jack / bornier

Flag_of_France.svg.png
Autre chose importante, les RaspiO'Mix sont fabriquées en France !
oshw-logo-100-px.png
Dans les 2 cas, GrovePi et RaspiO'Mix sont des projets OpenSource et OpenHardware et vous pouvez retrouver toutes les sources sur GitHub : GitHub / GrovePi et GitHub / RaspiO'Mix

Les cartes RaspiO'Mix devraient être disponible dans des boutiques en ligne mais en attendant, si vous en voulez une, contactez moi directement !

Lundi, juillet 7 2014

Table de placement manuel : Le cadre

Suite à l'introduction de ma table de placement manuel, je vais poursuivre en vous présentant le cadre.

Tous le design des pièces est réalisé à l'aide de OpenSCAD et est disponible sur le dépôt GitHub suivant : GitHub / hugokernel / ManualPickAndPlace

La base

Le cadre qui va supporter la mécanique doit être suffisamment rigide pour ne pas bouger, je désire aussi quelque chose de suffisamment fin, les profilés aluminium couramment utilisé dans le milieu maker m'ont semblé parfaitement adapté.

Voici le cadre en profilé aluminium de 20mm, les profilés sont maintenus entre eux par des équerres internes :

frame.png

Concernant la taille du cadre (60x40cm), il est parfaitement possible d'avoir d'autres dimensions (tout est paramétrable dans les sources OpenSCAD), j'ai choisi cette dernière en fonction des arbres de précisions (trempés et rectifiés) de 12mm de diamètre que j'ai pu trouver.

Par dessus, nous rajoutons les supports d'arbre de précisions (réalisé via une imprimante 3D) :

rod_support.png

Les supports viennent se fixer aux 4 coins du cadre, les arbres de précision rentrent dedans en force et n'en bouge plus :

frame2.png

Pour cet étape, il faut imprimer :

Le chariot X

Les chariots pour l'axe X sont eux aussi aussi fabriqués via une imprimante 3D, ils ont chacun 2 parties creuses dans laquelle on insère des roulements linéaires (type LM12UU) dans lesquels viendront coulisser les arbres de précision.

lm12uu.png dolly_x.png

Tout ceci monté :

frame3.png

Pour cet étape, il faut imprimer :

Le chariot Y

Le chariot de l'axe Y possède 4 roulements linéaires, un support porte-outils (indiqué par la flèche) et des trous de fixation pour le "repose bras".

dolly_y_top.png dolly_y_bottom.png

frame4.png

Pour cet étape, il faut imprimer :

Récapitulatif des pièces à imprimer

Concernant l'impression des pièces, les jeux étant assez faibles, n'hésitez pas à faire quelques tests avant de tout imprimer.

Toutes les sources des pièces de cet article sont sur GitHub dans le fichier ManualPickAndPlace / cad / table.scad.

anim.gif

Ça nous donne quelque chose comme ça :

À suivre...

Mardi, juillet 1 2014

Table de placement manuel : Introduction

Le projet OpenAlarm utilisera comme module de transmission des FunkyV3, des cartes de très petites tailles avec tout un tas de composants permettant la connexion à différents type de capteurs, la liaison radio avec la base, etc...

Les Funky V3 sont très petit, pourtant, ils embarquent un bon nombre de composants et pour faire tenir autant de monde sur une surface aussi réduite, pas de mystère, il faut utiliser des composants TRÈS petit, lorsque je dis très petit, je parle de la résistance au format 0402 tout à gauche de la photo ci-dessous :

comparatif_cms.png

Et j'en viens à parler d'une des choses qui fait que OpenAlarm à pris beaucoup de retard, c'est que pour pouvoir manipuler des composants aussi petit en quantité (je ne vais pas faire des cartes que pour moi), il faut du matériel approprié.

Impossible de manipuler de tels composants directement avec les mains, avec des brucelles, c'est faisable mais pas pratique, le plus adapté est d'utiliser une pompe de préhension qui n'est rien d'autre qu'une micro ventouse et si on y ajoute une table de placement, alors, là, on tend vers le parfait...

Mais c'est quoi une table de placement ?

C'est assez simple : on place la ou les cartes électroniques sur une surface, on dispose les composants à proximité, et à l'aide d'un support coulissant et par des mouvements de translation, on vient prendre les composants et on les dépose sur le pcb.

Les composants sont « pris » par un système de pompe à dépression pour une grande précision de positionnement et surtout permettant de prendre des composants dans de très petits formats.

Que trouve-t-on sur Internet ?

Un modèle commercial : ERMES - Table de positionnement CMS

Chez Selectronic, on peut trouver la table ci-dessous :

selectronic_table.png selectronic_table_2.png

Je vois plusieurs points noirs à leur système :

  • La surface sur laquelle on pose son bras est trop petite et non souple, ça sent les douleurs musculaires au bout de quelques heures d'utilisation
  • Le stylo n'est pas maintenu droit par un quelconque mécanisme, je pense qu'il est difficile de manipuler des composants très petit comme des 0402
  • Le prix n'est pas sérieux...

Le modèle en bois peu chère de vpapanik

Ce modèle est intéressant car il utilise principalement des matériaux de récupération...

low_budget_vpapanik.jpg
Photo originale de http://vpapanik.blogspot.fr/2012/11/low-budget-manual-pick-place.html

Un point intéressant est que la pointe de préhension est solidaire du support coulissant, garantissant ainsi une pose plane du composant.

Au final, le système est ingénieux mais prend beaucoup de place (en hauteur) et j'ai un léger doute concernant la stabilité de l'ensemble, enfin, le support pour le bras n'est pas adapté et à la longue, le frottement de ce dernier sur le bord à angle droit du bois ne doit pas être agréable (voir la dernière photo de son article).

La table de Brian Dorey

Alors là, ça commence à devenir du lourd :

pnp-machine_briandorey.jpg

Elle est entièrement en aluminium, elle dispose d'un vrai support pour le bras en cuir / simili, sa tête est articulée et muni d'un moteur pas à pas permettant de choisir l'orientation du composant à l'aide de bouton poussoir se trouvant sur la flanc de la machine.

Il a même publié tous les plans de sa machine sur GitHub.

C'est du super boulot, par contre, elle est difficile d'accès à cause de ses pièces usinées et je la trouve encore assez imposante...

Brian Dorey, non content de sa table de placement manuel, à enchaîné par la suite sur une table de placement automatique plutôt impressionnante : http://www.briandorey.com/?tag=/manual+pick+and+place.

Autre machines...

Je ne vais pas toutes les passer en revue, il y en a trop mais voici quelques pointeurs :

Faisons un mix de tout ça

Prenons les bonnes idées, apprenons des erreurs et créons la notre :

  • Je veux une table qui reste avec un faible encombrement en hauteur
  • Avec le maximum de pièces imprimables à l'aide d'une imprimante 3D
  • Le système d'aspiration doit être automatique, pas besoin de pédale ou de bouton supplémentaire en utilisation normale (avec tout de même un mode manuel)
  • Un support pour bras suffisamment confortable pour travailler quelques heures de suite
  • Un voyant indiquant si la pointe aspire ou non
  • Une mécanique fluide (roulements linéaires)

Au moment ou j'écris ces lignes, ma table maison est terminée et parfaitement fonctionnelle, je fais donc durer le suspens et tâcherai de pondre des articles quand je le pourrai pour décrire la machine...

- page 1 de 17