jeudi 8 décembre 2011

Fabrication d'un établi

le 1er accessoire indispensable dans un atelier est l'établi. Jusqu'à  présent je me suis contenté d'un plan de travail de cuisine posé sur des tréteaux. Comme en prévision du bricolage de cet hiver je réorganise mon atelier, j'ai trouvé que c'était le moment parfait pour réaliser un vrai établi. Le plan de travail sus-cité et du bois d'ouvrage récupéré sur le chantier[1] m'ont fournit la matière première.
Si l'on cherche sur le grand ternet, on trouve de nombreux plans et idées allant du plus simple au plus perfectionné q(ui aurait plus sa place dans le salon tellement il est beau). Comme exemple, je vous en ai sélectionné 3, tous en vidéos :
De mon côté, comme je ne voulais rien acheter[3], j'étais limité dans mes dimensions et ma structure par le bois disponible. En plus, c'était l'occasion rêvée de s'entraà®ner sur des techniques pas trop maà®trisées. Les ratages ne sont pas très graves cachés au fond de l'atelier :) J'ai donc fait mes plans en choisissant un assemblage à  mis-bois, plus solide que de simples vis mais facile à  réaliser quand même.
Bien entendu, je commence par réaliser l'établi en virtuel avec Google sketchup. Les dimensions principales sont fixées par le plan de travail dont je dispose déjà . C'est l'occasion d'essayer différents assemblages en ayant une idée rapide du rendu. Ensuite cela me permet de voir les pièces à  découper et leurs dimensions. J'ai poussé le vice jusqu'à  représenter fidèlement toutes les liaisons entre les montants mais on peut se contenter de représenter juste le principal. De toutes façons les dimensions finales sont mesurées et marquées lors des multiples assemblages à  sec réalisés au fur et à  mesure de la construction. L'éclaté est réalisé simplement à  l'aide de l'excellent script Eclate_deplace
plan éclaté
Puis, je prépare le bois de récup' à  l'aide de ma nouvelle rabau-dégau[4]. J'en suis très content, c'est un vrai bonheur de travailler avec du bois bien plan et d'équerre. J'ai quand même un peu galéré pour les pièces de 150cm de long. Une machine d'entrée de gamme ne vaut pas celles à  plus de 1000€. Rien que de très normal. Pour la longueur, une 1ère coupe large suivie d'une coupe ajustée après. Cela permet d'assurer des longueurs équivalentes et des coupes bien droites. Bien sur, protection des yeux et des oreilles indispensables !
bois brut dégauchir
Viens ensuite les découpes des assemblages à  mis-bois. J'ai réalisé la majorité avec la scie circulaire installée sous table. On règle la hauteur de la lame suivant la profondeur de l'entaille[5] et à  l'aide de multiples passages on enlève le superflu. Il ne reste plus qu'a nettoyer le fond au rabot et au ciseau à  bois. J'en ai aussi fait certaines juste à  la scie à  main[6]. J'envisage depuis d'investir dans une scie spéciale pour le bois de bout, c'est dur[7] avec une scie égoà¯ne standard. Enfin d'autres entailles ont été réalisées avec plusieurs trais de scie à  main et le ciseau. (photo ci-dessous) L'expérience étant irremplaçable, mes derniers ajustements sont bien meilleurs que les 1er. Ayant un peu honte de ceux-ci, je ne vous met la photo que d'un des derniers :) Tout au long du processus, on marque bien toutes les pièces et on réalise de fréquents assemblages à  blanc.
entaille manuelle mis-bois
Enfin, lorsque toutes les pièces sont prêtes, je réalise un dernier assemblage à  blanc puis je colle/visse tout cela. Vu le nombre conséquent d'imbrications j'ai fait en plusieurs étapes. En premier les cotés. J'en ai profité pour chanfreiner tous les coins accessibles à  la défonceuse et au rabot. Cela permet d'éviter de se blesser ou de prendre des échardes. En plus ça donne un look beaucoup plus fini à  l'ensemble.
tous les morceaux ça sèche
Pour finir un peu d'huile pour parquet étalée au pinceau sur toute la structure (ça protège le bois) et on colle/visse le plateau dessus. Pour l'étagère, j'ai retaillé de vielles étagères en pin dont les montants sont inutilisables. La aussi colle et vis offriront une résistance maximale. Voila donc un établi solide qui ne bougera plus comme mes tréteaux dès que je veux scier ou donner des coups de marteaux.
ayé

Notes

[1] et patiemment stocké au grand dam de madame
[2] un nom prédestiné s'il en est !
[3] un petit challenge perso
[4] cadeau de Noà«l en avance
[5] un poil moins en fait
[6] au bout des montants
[7] et donc peu précis


Commentaires du post original

dimanche 13 novembre 2011

Aménagement d'atelier : French Cleats

En prévision du bricolage que je vais avoir à  faire dans les mois qui viennent[1], j'ai commencé à  ranger/organiser mon atelier. Il est bien plus facile de travailler quand chaque chose est à  sa place et est donc rapidement accessible. Parmi les actions entreprises, je voulais accrocher mes outils au mur. n'ayant pas de mur dispo, j'en ai créé un avec une plaque de fermacel reposant sur mon plan de travail. restait alors à  choisir comment agencer tout cela.
Quand il s'agit de ranger des outils, la première recherche renvoi vers les pegboard et équivalents. mais cela revient très vite très cher et il manque toujours le petit accessoire dont on a besoin tout de suite. Celle qu'on trouve en promo sont généralement de piètre qualité et je ne leur confierai pas forcément tous mes outils. Par contre l'énorme avantage sur un agencement maison est la modularité. Du coup comment garder une forte modularité combiné à  un agencement fait main et donc parfaitement adapté/adaptable à  ses propres outils ?
Je n'ai pas trouvé la solution tout seul, mes lectures du moment m'ont amené sur le site TheWoodWhisperer[2] et en particulier son épisode 106 – French Cleat Storage System ou il décrit sa méthode pour ranger ses outils. Le terme étant alors connu on trouve de multiples références dénotant de la très large utilisation de cette technique. à€ noter qu'on l'appelle aussi parfois Split Batten. Si quelqu'un connait l'appellation française, je suis preneur, je n'ai pas réussit à  trouver.
Le principe est très simple, on découpe un morceau de bois avec un angle à  45° dans le sens de la longueur. Une scie circulaire placée sous table est parfaite pour cela. on obtient deux parties: une qui sera fixée au mur, et une autre sur l'accessoire porte-outil. On a alors un système modulaire facile à  personnaliser. nous ne sommes plus limités que par notre imagination pour fixer n'importe quoi au mur.
Par exemple, voici le support pour les ciseaux à  bois et les rapes :

On distingue en dessous les deux parties avec la coup à  45°. Le reste est constitué de morceaux de contreplaqué qui traà®naient dans le coin[3]
Il est très facile de se confectionner des supports parfaitement adaptés et déplacables à  volonté.

Ici, une petite tablette parfaite pour le mètre/gomme/taille-crayon et son support à  crayon en véritable gaine électrique !
Et voila, en quelques heures de travail me voici avec un magnifique système de rangement évolutif, parfaitement adapté à  mes outils et qui ne m'a rien coà»té[4]

Notes

[1] j'y reviendrais
[2] Attention cliquer sur ce lien peut provoquer des heures de visionnage de vidéo sur le travail du bois
[3] toutes les chutes précieusement conservées depuis des années qui servent enfin à  quelque chose ;)
[4] enfin si mon temps ne coà»te rien


Commentaires du post original

lundi 12 septembre 2011

Generic Mapping Tools (GMT) pour tracer des cartes sous Ubuntu

GMT (Generic Mapping Tools) est une collection d'outils libres et multi-plateformes permettant la génération de cartes et de diagrammes. Regroupant de l'ordre de 60 programmes en ligne de commande elle offre de nombreuses possibilités telles la création de cartes selon différentes projections, la représentation de données géographiques, la génération de graphiques et même la représentation en 3D.

Pour avoir un aperçu des possibilités, je vous renvoi vers les exemples, et en particulier celui-la ou cet autre ou encore ce dernier

Je vais me contenter dans cet article d'aborder les fonctions de base pour la génération de cartes. Pour les autres la documentation offcielle est très fournie. Vous y trouverez un manuel de référence, un tutoriel très bien fait et les nombreuses pages de man.

Avant de rentrer dans le vif du sujet, voici ce que vous devriez être capable de produire à  la fin : Manche

Installation & configuration

GMT étant présent dans les dépots, il vous suffit d'installer les paquets gmt, gmt-coastline-data, gmt-doc, gmt-examples et gmt-tutorial ces 3 derniers ne sont pas nécessaires, mais je vous les recommande tant la doc est importante.

Il vous faut aussi créer quelques variables d'environnement. Ajoutez ces lignes à  votre ~/.bashrc

# gmt variables
export NETCDFHOME=/usr/lib
export GMTHOME=/usr/lib/gmt
export PATH=$PATH:$GMTHOME/bin

Les étapes suivantes sont facultatives mais nécessaires pour suivre ce petit tutoriel.

GMT permet plusieurs niveaux de détails pour la représentation des côtes (crude, low, intermediate, high, full). Ubuntu fournit les 3 premiers via le paquet gmt-coast-low. Nous allons installer en plus le niveau full. Vous trouverez les différents miroirs la

wget ftp://gd.tuwien.ac.at/pub/gmt/4/GMT4.2_full.tar.bz2
cd /usr/share/gmt/
sudo tar xvjf /chemin/vers/GMT4.2_full.tar.bz2

Pour avoir une idée du niveau de détails, voici la carte de la manche avec les différents niveaux[1].

crude low intermediate full

Nous aurons aussi besoin de données topographiques, c'est à  dire des données d'altitude et de profondeur. Il existe plusieurs sources dont vous trouverez les liens à  la fin. Nous utiliserons les données ETOPO2v2 fournies par la NOAA[2]. Elles ont l'avantage d'être précises à  2 minutes d'arc prêt et de combiner les terres et mers. Vous pouvez télécharger les données mondiales (Attention le fichier fait 97Mo) ou alors ne récupérer que celles qui vous seront utiles (procédure plus bas).

# Pour télécharger et installer toutes les données :
wget http://www.ngdc.noaa.gov/mgg/global/relief/ETOPO2/ETOPO2v2-2006/ETOPO2v2g/netCDF/ETOPO2v2g_f4_netCDF.zip
sudo unzip ETOPO2v2g_f4_netCDF.zip -d /usr/share/gmt/dbase/

Enfin, fixons quelques paramètres par défaut[3].

gmtset -G$HOME/.gmtdefaults4 BASEMAP_TYPE fancy+ PLOT_DEGREE_FORMAT ddd:mmF
  • BASEMAP_TYPE pour l'affichage des axes comme sur la carte ci-dessus (noir et blanc, coins arrondis)
  • PLOT_DEGREE_FORMAT pour afficher les coordonnées du type 48°23'N

voir le manuel de référence pour plus de détails.

Cartographier

Ma première carte

Maintenant lançons nous et générons notre première carte, la commande peut faire peur, mais nous allons détailler :

pscoast -R-7/2/47.5/51.5 -JM10c -P -Ggreen -Sblue -W -Df -Ir -B1g1 > gmt_manche_01.ps

pscoast va vous permettre de dessiner les terres, mers, côtes et rivières. Les options sont :

  • -R-7/2/47.5/51.5 : les limites de la carte à  réaliser. Ici, un rectangle dont les coordonnées sont 7° de longitude Est, 2° de longitude Ouest, 47,5° de Latitude Nord et 51,5° de Latitude Nord.
  • -JM10c : projection Mercator, la carte fera 10cm de large
  • -P : créer une page en mode portrait
  • -Ggreen : couleur des terres
  • -Sblue : couleur des mers
  • -W : dessine le trait de côte (en noir par défaut)
  • -Df : utiliser la base de côte full (c, l ou i pour les autres bases disponibles)
  • -Ir : affiche les rivières permanentes
  • -B1g1 : créer les axes avec une unité tous les degrés

Un fichier postcript est alors produit. Vous pouvez le convertir en png à  l'aide de la commande ps2raster (qui nécessite ghostcript)

ps2raster -Tg -A gmt_manche_01.ps
  • -Tg : format de sortie PNG (-Tj pour Jpeg et -Tf pour PDF)
  • -A : pour ne conserver que la partie utile

Capture

Ajoutons un peu de relief

Il faut tout d'abord créer un fichier .grd lisible par GMT avec les données topographiques. Si vous avez installé l'ensemble des données, créez le ainsi[4] :

grdreformat /usr/share/gmt/dbase/ETOPO2v2g_f4.nc gmt_manche_02.grd -R

Sinon, allez sur le site Geodas pour récupérer un fichier .xyz. Remplissez ainsi :

Capture

et téléchargez le fichier xyz. Vous pouvez alors générer le grd avec cette commande :

xyz2grd -Ggmt_manche_02.grd -I2m -R manche02_1630.xyz

Pour afficher les détails sur le nouveau fichier :

grdinfo gmt_manche_02.grd

/!\ Vous avez peut-être noté que je n'ai pas donné les paramètres à  l'option -R. C'est normal, GMT conserve les derniers paramètres utilisés dans le fichier .gmtcommands4 du repertoire courant. Cela vous permet de simplifier l'écriture mais est parfois source d'incompréhension :)

Nous allons maintenant ajouter les lignes de niveaux à  notre carte :

pscoast -R -JM20c -Ggreen -Sblue -W -Df -B -K  > gmt_manche_02.ps
grdcontour gmt_manche_02b.grd -J -S4 -C20 -O >> gmt_manche_02.ps

Dans les nouvelles options, notons :

  • -K : pour dire que l'on va encore ajouter des données au fichier
  • -O : pour dire que l'on ajoute des données au fichier (notez aussi le >>)
  • -C20 : pour dire à  grdcontour de tracer les lignes tous les 20m[5]
  • -S4 : pour lisser les lignes

Capture

Colorisons un peu plus

Les couleurs plates, c'est bien joli, mais ça manque un peu de ... relief :) Voyons comment arranger cela.

D'abord, il faut créer une palette de couleur à  partir de celles par défaut mais mise à  l'échelle de nos valeurs :

makecpt -Crelief -T-450/450/20 -Z > gmt_manche_03.cpt
psscale -Cgmt_manche_03.cpt -D10c/2c/20c/1ch -Ba100 > gmt_manche_03_cpt.ps
  • -Crelief, -Cgmt_manche_03.cpt : palette utilisée
  • -T-450/450/20 : translation à  appliquer à  la palette de -450m à  450m par pas de 20m, on trouve les extrêmes grà¢ce à  la commande grdinfo vue ci-dessus
  • -Z : palette continue (dégradé de couleurs)[6]

La commande psscale permet de générer une échelle. Je vous laisse lire la documentation pour les détails. Vous pouvez aussi l'utiliser pour ajouter l'échelle sur votre carte Palette

Créons maintenant la carte topographique à  l'aide de grdimage

grdimage gmt_manche_02.grd -J -Cgmt_manche_03.cpt -E50 -K > gmt_manche_03.ps
grdcontour gmt_manche_02.grd -J -S4 -C25 -O >> gmt_manche_03.ps
  • -E50 : permet d'augmenter la résolution en interpolant les données, souvenez-vous, nos données sont par pas de 2 minutes d'arc, si on laisse comme cela, nous aurons des carrés
  • les autres options sont déjà  connues ;)

Capture

Conclusion

Voila, comme l'article est déjà  (très) long, je vais m'arrêter la. Nous n'avons fait qu'effleurer les possibilités de GMT et je vous encourage donc vivement à  suivre le tutoriel officiel, à  lire la doc de référence et à  expérimenter. Vous pouvez aussi télécharger le script regroupant toutes les commandes vues.

Pour réaliser la carte de la manche présentée en début d'article, il ne vous manque que psxy pour afficher des symboles et pstext pour le texte. Leur utilisation est relativement simple et vous trouverez des exemples commentés dans le script qui génère celle-ci. Tout le reste est déjà  expliqué dans cette page.

Enfin, il existe une interface graphique pour GMT : iGMT, mais celle-ci n'étant pas disponible dans les dépots, je ne l'ai pas testé.

Liens

Pour finir les liens utiles :

A ce propos, je ne résiste pas à  citer luckytoyn qui dans ce même sujet disait :

J'ai l'impression que moins un programme est convivial, plus il est puissant.
gmt est très puissant.

Continuons les liens :

Voila, merci et bravo à  ceux qui sont arrivés jusque la ;) A vos cartes !

Notes

[1] vous trouverez le script pour les produire à  cet endroit, ne vous inquiétez pas des options nous allons détailler plus loin

[2] National Oceanic and Atmospheric Administration, une agence Américaine

[3] On peut aussi les donner en ligne à  chaque commande, voir gmtdefaults

[4] il y a surement moyen de ne pas donner le chemin complet grà¢ce au fichier coastline.conf, mais je n'ai pas trop cherché

[5] il prend aussi l'option -A50 pour labéliser les lignes tous les 50 mètres

[6] notez aussi -I pour inverser la palette


Commentaires du post original

Liaison téléinfo : le compteur électrique on the web

Les compteurs électriques récents disposent d'une sortie à  deux fils émettant en temps réel la consommation de votre installation : la liaison téléinfo. Les données étant présentes, il est dommage de ne pas pouvoir en disposer ! Nous allons y remédier. L'idée de base est de récupérer la consommation et de pouvoir la suivre de n'importe ou.
le montage aura 3 étages :
  • l'adaptation du signal pour le rendre facilement exploitable
  • la récupération et l'analyse des données
  • la présentation sur le réseau sous forme de graphiques[1]

Adaptation du signal

On trouve chez edf les spécifications techniques de la sortie téléinfo. Outre le signal, elles décrivent les messages que vous pourrez recevoir (nous y reviendrons). La 1ère étape est de transformer le signal pour le rendre lisible par notre équipement. plutôt que de ré-inventer la roue, une petite recherche sur le web nous remonte nombre de schémas (voir les liens). La source première semble être Bernard Lefrancois, mais ce n'est sans doute pas la seule. Quoi qu'il en soit, le montage est simple :
  • un optocoupleur
  • une/deux NAND
Voici ma version du schéma réalisé avec Kicad : schema teleinfo Voir ci-dessous pour les sources des schémas et le pourquoi de tous ces connecteurs inutiles.

Récupération des données

la 1ère étape est de récupérer tout cela avec un PC pour valider le concept. On s'installe donc au pied du compteur avec son PC portable et sa plaque d'essai[2] 1st Le port série est relié au connecteur Liaison vers un PC du schéma ci-dessus.
Parlons maintenant un peu des données. Elles sont transmises en boucle par votre compteur à  un débit de 1200 Bauds en 7E1[3]. Chaque trame commence par le caractère STX:0x02 et se termine par ETX:0x03. le contenu des trames dépend de votre abonnement. Dans mon cas (monophasé, heures creuses/pleines), on trouve ceci : plaque à  essai pour PC
ADCO XXXXXX088671 K
OPTARIF HC.. <
ISOUSC 60 <
HCHC 005124904 _
HCHP 007483956 =
PTEC HC.. S
IINST 002 Y
IMAX 052 F
PAPP 00400 %
HHPHC D /
MOTDETAT 000000 B
dans la GTL Je ne vais pas vous décrire par le menu les différents champs, tout est très bien détaillé dans le pdf linké précédemment. Sachez cependant que ce qui va nous intéresser le plus est :
  • HCHC : consommation totale en heures creuses
  • HCHP : consommation totale en heures pleines
  • PTEC : période tarifaire en cours (ici heures creuses)
  • IINST : l'intensité instantanée
Une fois ceci connu, il est très simple d'exploiter les données, on lit la trame sur le port série, on converti les caractères en nombre, et voila ! Vous trouverez même chez MicElectroLinGenMet des programmes en C tout fait pour exploiter ces données.
Bon, c'est bien joli de suivre sa consommation pour faire des économies, mais c'est pas en laissant un PC allumé qu'on va améliorer les choses !

On the web

Il me faut donc un moyen de lire et exporter tout cela sur le web à  basse consommation. Mon choix s'est porté sur une plateforme arduino. Pourquoi ? C'est simple :
  • il faut un arduino dans tout projet électronique[4]
  • c'est facile d'accès, tout intégré et avec plein de bibliothèques
  • les extensions[5] sont faciles et existent en grand nombre (en particulier pour l'ethernet)
  • les AVR c'est le bien
Arduino dans la GTLBref, des arguments imparables !
Pour l'ethernet, mon choix s'est porté sur un modèle à  enc28J60 plutôt que l'officiel à  base de Wiznet. Il est plus lourd à  programmer, mais beaucoup moins cher. Ici, une comparaison[6] entre les 2 shields.
Le reste n'est que du C, très simple donc ;)
Le programme est relativement léger. On lit le port série régulièrement, on accumule dans un tableau pour conserver un historique sur 24h et on affiche le tout via l'API Google chart. Vous trouverez les sources ci-dessous.
web
Voila, après quelques mois de fonctionnement sur plaque à  essai, tout va bien. J'avais prévu d'en faire un typon[7] mais au final, je me suis contenté d'une plaque à  trous.
Vous pouvez voir comme je suis fort en soudure et routage[8] :)
coté face coté pile en fonctionnement

Conclusion

Voila, un montage simple et facile qui vous permettra d'attendre le super nouveau compteur d'EDF. Dans les évolutions, on pourrait envisager une intégration Google powermeter[9] ou un historique plus grand[10]
Dans les utilisations réelles[11] je peux citer :
  • le réglage de la pompe à  chaleur pour qu'elle ne déborde plus en heures pleines
  • la découverte de l'oubli du chauffe-eau pendant les vacances[12]
Et pour finir, quelques liens :

Notes

[1] parce que j'aime bien les graphiques !
[2] madame ne vous laissera sans doute pas faire très longtemps ;)
[3] 7 bits de data, parité pair, 1 bit de stop
[4] au milieu, à  gauche
[5] shields
[6] en faveur du wiznet
[7] voir dans les sources kicad ci-dessous
[8] ironie inside
[9] si j'arrive à  faire du SSL?
[10] pour l'instant via un munin hébergé ailleurs
[11] je veux dire autre que le plaisir de voir de jolies couleurs
[12] et envoi de mamie pour l'extinction :)


Commentaires du post original

Programmateur de machine à  laver

Le besoin

Notre machine à  laver, un peu ancienne, ne dispose pas de fonction retardateur. Il est donc impossible de la programmer pour qu'elle démarre en heures creuses. De plus le bouton de démarrage n'est pas "à  état". C'est à  dire que chaque pression démarre ou arrête la machine mais qu'il revient dans son état initial après. Impossible de mettre l'alimentation sur programmateur et d'enclencher le démarrage en avance.
L'idée qui germe alors dans mon cerveau geek est de construire un doigt robotisé qui appui sur le bouton au moment opportun ! Bien sur, il est possible de caler le bouton enfoncé avec un bout de carton et d'utiliser le programmateur sus-cité, mais alors ou est le fun[1] ? De même d'aucun objecterons qu'un relais soudé sur les contacts internes du bouton peuvent mieux simuler une pression qu'une action mécanique moins fiable. J'objecterai alors, à  mon tour, que souder des trucs dans un appareil qui fonctionne très bien est à  mon goà»t plus risqué que d'appuyer sur un bouton[2]. Je n'ai pas l'intention de changer une machine qui marche très bien.
Ceci étant posé, je me suis lancé dans la construction d'un "doigt" qui appuiera sur le bouton après un temps choisit.

La réalisation

Posons les bases :
  • pour le "doigt" un simple servo fait l'affaire, un angle au repos et un angle pour l'appui sur le bouton. Il ne doit pas empêcher d'appuyer manuellement.
  • il faut aussi un écran pour régler le temps d'attente avant le déclenchement du lave-linge
  • pour le servo cerveau, un arduino, simple et facile même si sur-dimensionné

Écran LCD : Nokia

Pour l'écran, je me suis vite orienté vers les quelques Nokia 5110 qui traà®nent dans un tiroir depuis quelques années. Je les ai gardés justement pour ce genre d'utilisation car leur écran LCD est très facilement réutilisable à  partir d'un µC. Il existe foultitude sites et de bibliothèques pour les utiliser. Il suffit donc de suivre les instructions et de souder une petite nappe. à€ ce moment, la force de l'arduino entre en jeu, les bibliothèques ! J'ai utilisé celle de NuElectronics légèrement modifiée par mes soins. Et hop :
photo

Commande

Pour l'affichage, c'est bon. Pour la commande, il n'est pas besoin de grand chose, il nous faut juste régler la temporisation et la lancer. Soit 3 boutons : up, down et ok.
Les fonctions offertes sont, elles aussi, simples :
  • réglage du minuteur
  • réglage des angles repos/travail du servo (avec enregistrement en eeprom)
  • test
On se reportera au schéma suivant pour les menus et les interactions de l'interface.
photo photo photo
Le concept est validé et fonctionnel.

Finalisation

Il ne reste plus qu'à  améliorer le WAF[3] de l'ensemble si l'on veut que l'objet soit utilisé.
on commence donc par rendre tout cela un peu plus transportable en en faisant un shield[4] facile à  enficher sur notre arduino.
photo photo photo
Ensuite on agence tout ceci dans un belle boà®te de vis qui avait le malheur de traà®ner dans mes pattes. Quelques coups de dremel, de perceuse et le tour est joué.
photo photo photo
Pour finir, il ne reste qu'à  fixer notre doigt au-dessus du bouton. Pour une fois, j'ai choisit de rester simple: un morceau de scotch double-face[5].
photo photo
Voila, cela fait quelques mois que ce montage est en fonction et il donne entièrement satisfaction. Nous gagnons des € tous les soir grà¢ce aux heures creuses et dans 10 ans je pense que nous aurons économisé suffisamment pour rembourser le temps que j'y ai passé ;)
Ah oui, si quelqu'un a envie de se lancer dans la même chose, le code est bien sur disponible en GPL dans mon dépot : programmation de machine à  laver

Notes

[1] bande de rabat-joie
[2] puisque je vous dis que je veux un robot!!
[3] pas le plus amusant, mais le plus important
[4] si on peut appeler ça un shield !
[5] trop simple :(


Commentaires du post original

samedi 9 juillet 2011

Utiliser un arduino comme programmeur ISP

L'arduino est devenu le microcontroleur[1](µC) à  tout faire. De part sa communauté, de nombreuses bibliothèques et programmes sont proposés et disponibles pour nombre d'utilisations. Nous allons aujourd'hui en découvrir une un peu particulière. Nous allons apprendre à  (re)programmer un autre microcontroleur à  l'aide d'un arduino.

Charger un programme dans un arduino est très simple, cela grà¢ce au bootloader chargé dans l'ATmega. Basiquement, ce petit programme exécuté au démarrage de votre arduino récupère le code via la liaison usb et programme l'ATmega de la carte[2]. Si rien ne lui est envoyé, alors il démarre le programme déjà  présent dans la mémoire flash. Le bootloader ou le programme à  exécuter sont stockés dans 2 zones mémoires différentes.

Seulement il peut arriver que ce bootloader soit cassé[3] ou ne soit pas présent[4]. De plus, un certain nombre de µC ne peuvent pas héberger de bootloader. Dans ce cas, il faut les programmer autrement. On utilise alors un programmeur qui se charge de cette tà¢che.

Les µC d'atmel disposent en général d'une fonction très utile : l'ISP (In-System Programming). Celle-ci permet de les reprogrammer à  l'aide de 4 fils, alors qu'ils sont déjà  dans un montage. Nous allons utiliser cette fonction pour reprogrammer notre arduino.

Exemple avec un ATtiny45

Commençons par programmer un simple petit ATtiny45 (cible) à  l'aide d'un arduino Duemilanove (programmeur).

Il nous faut d'abord utiliser le sketch ArduinoISP présent dans les exemples fournis avec l'IDE de l'arduino. Vous pouvez aussi le télécharger sur le site mega-isp. Compilez le et chargez le dans l'arduino.

Note: par défaut la vitesse utilisée lors de la (future) programmation de la cible est de 19200bps, vous pouvez changer cela dans le code, mais il faudra alors penser à  reporter cette valeur dans les commandes de programmation.

Depuis la version Diecimila les arduino intègrent une fonction d'auto-reset qui permet de redémarrer la carte (et donc lancer le bootloader) quand une communication série débute[5]. C'est très utile pour programmer l'arduino, mais cela va nous poser problème ici. Nous devons donc le désactiver. Pour notre version Duemilanove, le plus simple et le moins intrusif est de relier le reset au +5V par une résistance de 120ohms, ce qui maintiendra le reset à  l'état haut[6]. Je vous laisse voir le site officiel pour les autres méthodes.

Ensuite, nous relions les différentes pattes nécessaires pour la programmation ISP :

Arduino     ATTiny45  Fonction
  10           1       reset 
  11           5       MOSI
  12           6       MISO
  13           7       SCK

Référez vous à  la datasheet de votre µC pour connaitre les pattes à  relier.

Enfin, le sketch ArduinoISP utilise 3 leds d'état que vous relierez à  la masse via une résistance adéquate[7].

Arduino    led (anode)
   7       jaune: programation en cours
   8       rouge: erreur
   9       vert : heartbeat

Voici le schéma du montage sur plaque à  essai :

montage montage

Vous pouvez ignorer la led verte de gauche, elle ne sert qu'a tester le programme chargé.

Enfin, vient le moment tant attendu, vous pouvez connecter l'arduino à  l'USB et programmer votre ATtiny en utilisant avrdude :

avrdude -V -p t45 -c avrisp  -b 19200 -P /dev/ttyUSB0 -U flash:w:led.hex

Quelques mots sur les options (voyez la doc pour les détails) :

  • -p t45 : pour dire que l'on programme un ATtiny45
  • -c avrisp : le type de programmeur utilisé
  • -b 19200 : la vitesse de la liaison (à  changer éventuellement en fonction du code de ArduinoISP)
  • -P /dev/ttyUSB0 : le port sur lequel est connecté votre arduino
  • -U flash:w:led.hex : on écrit (w) dans la flash le programme compilé led.hex

Et voila, selon votre programme de test, la led devrait commencer à  clignoter.

Programmer un arduino à  partir d'un arduino

Attention: Pour pouvoir programmer plus de 256 octets (ce qui va être nécessaire pour la suite), il vous faut utiliser ArduinoISP de l'IDE version 22 minimum, ou utiliser les sources prises sur mega-isp vues ci-dessus. C'est un bug connu de l'IDE 21

Nous allons reprogrammer le bootloader de l'arduino. On peut avoir de nombreuses raisons de faire cela: pour le réparer, pour préparer un nouveau µC, pour le remplacer par une version plus efficace. Dans mon cas, c'est cette dernière opération que je veux réaliser. Le bootloader du Duemilanove, empêche l'utilisation du watchdog dans les programmes. On trouve la correction dans des bootloader alternatifs[8] ou dans celui de l'arduino UNO (optiboot). Ce dernier étant compatible avec la majorité des versions précédentes, nous allons donc l'utiliser. Ceci impliquera de choisir Arduino Uno dans le menu Board de l'IDE lors des prochaines programmation, puisque le bootloader sera celui de l'Uno. Je vous conseille d'y coller une étiquette pour ne pas l'oublier.

Notre arduino programmeur sera préparé de la même manière que ci-dessus, c'est-à -dire qu'on lui chargera le sketch ArduinoISP. On le connecte alors vers les pattes ISP de notre arduino cible. On peut utiliser soit le connecteur ICSP soit relier directement aux connecteurs femelle sur lesquels on branche habituellement les shields.

Note: On peut aussi se contenter d'un seul arduino (programmeur) et utiliser une plaque à  essai pour simuler le 2ème. Dans ce cas, les différentes options sont décrites sur le site officiel.

Voyez ci-dessous les connexions à  établir.

arduino isp to arduino montage

La cible doit être alimentée. Vous pouvez faire cela via l'USB, mais je le déconseille ainsi, vous n'aurez qu'un seul /dev/ttyUSBx et c'est un risque d'erreur en moins. Utilisez plutôt l'entrée VIN de l'arduino à  programmer.

Il ne nous reste plus qu'à  utiliser l'IDE pour flasher la cible.

  • choisir ce que vous allez programmer dans le menu Tools / Board :
    • UNO pour avoir l'optiboot
    • ou bien duamilanove avec atmega328
    • ou autre chose suivant votre modèle d'arduino
  • puis Tools / Burn Bootloader / w/Arduino as ISP

Note: Si vous avez changé la vitesse dans le sketch ArduinoISP, il vous faudra mettre à  jour le paramètre arduinoisp.speed présent dans le fichiers programmers.txt[9], soit directement, soit en le surchargeant via votre fichier preferences.txt[10]

Nous pouvons aussi utiliser avrdude pour faire cela à  l'ancienne. il suffit d'enchainer les 3 commandes suivantes, voir de les regrouper en une seule[11]

Vous trouverez les valeurs de fuses et les fichiers de bootloader dans le fichier texte boards.txt de votre installation[12]. Les différents fichiers hex du bootloader sont dans un sous répertoire bootloaders[13]. Rappelons que les commandes suivantes s'appliquent pour programmer un optiboot sur un arduino Duemilanove.

La 1ère action est de débloquer l'accès au bootloader :

avrdude -p m328p -P /dev/ttyUSB0 -c avrisp -b 19200 -e -U lock:w:0x3F:m

Ensuite, il faut flasher le bootloader :

avrdude -p m328p -P /dev/ttyUSB0 -c avrisp -b 19200 -D -U flash:w:optiboot_atmega328.hex

notons que vous pouvez relire le fichier flashé ainsi :

avrdude -p m328p -P /dev/ttyUSB0 -c avrisp -b 19200 -D -U flash:r:read.hex:i

et enfin rebloquer l'accès au bootloader :

avrdude -p m328p -P /dev/ttyUSB0 -c avrisp -b 19200 -U lock:w:0x0F:m

Programmer directement un arduino (Bitbang FT232)

Note: Je n'ai pas personnellement utilisé cette technique, ce que vous vous apprêtez à  lire n'est donc que ma compréhension résultant de mes lectures. Cela-dit de nombreux témoignages existent sur sa viabilité et elle est visiblement beaucoup utilisée.

Une autre méthode pour reprogrammer le bootloader de votre arduino est la technique dite BitBang. Elle utilise un mode particulier du chipset FTDI présent sur les arduino. Ce mode permet de jouer directement avec les pattes de sorties du chipset et ainsi de l'utiliser pour simuler un programmeur ISP.

Le principe est donc de relier les pattes du FTDI au connecteur ICSP de l'arduino. pour cela il vous faudra souder une barette sur les trous 1 à  4 nommés X3 sur votre arduino. Puis d'établir les connexions nécessaires avec le connecteur ICSP dont nous avons déjà  parlé.

La deuxième étape est de patcher avrdude pour lui ajouter un nouveau programmeur[14]. Et enfin de reprogrammer celui-ci avec avrdude en lui donnant le bon fichier .hex à  manger.

L'énorme avantage de cette méthode est bien entendu que vous n'avez besoin que d'un seul arduino, et qu'il peut donc se reprogrammer lui-même. Les inconvénients sont que vous devez souder sur votre arduino et utiliser un autre avrdude que celui fournit avec l'environnement de programmation standard.

Pour plus de détails, je vous renvoi vers les liens suivants :

Un vrai programmeur

Pour autant que ces techniques soient amusantes leur mise en place et utilisation devient vite assez lourde. Cela est très bien pour un besoin ponctuel, mais pour une utilisation régulière, je ne saurais trop vous conseiller d'acheter un vrai programmeur de µC. Pas besoin de dépenser des centaines d'€ pour cela. On trouve facilement des programmeur ISP pour pas cher. Notons en particulier le USBtinyISP de LadyAda[15]. Une simple recherche avec stk500 ou avrisp vous renverra aussi une foultitude de résultats sur un site d'enchères bien connu.

Ainsi, vous économiserez un arduino et vous vous simplifierez la vie. Plus rapides, plus sur et plus transportables, ils ont tout pour plaire. Il ne vous reste alors qu'à  prévoir un connecteur ISP sur vos montages et hop. On peut aussi réaliser un petit adaptateur comme ci-dessous pour l'utiliser facilement sur une plaque à  essais.

montage

Voila, félicitations aux courageux qui sont arrivés jusqu'ici, et si vous avez des questions ou des remarques, les commentaires sont ouverts[16].

Notes

[1] oui, je sais c'est plus qu'un µC (régulateur, liaison usb ...)

[2] ie: charge le code dans la mémoire fash

[3] par une fausse manip

[4] cas d'un atmega neuf

[5] basé sur le passage de DTR au niveau bas

[6] il est actif à  l'état bas, vous l'aurez compris

[7] 330ohms pour mes leds

[8] tel celui de ladyAda

[9] dans /usr/share/arduino/hardware/arduino/ chez moi

[10] dans ~/.arduino

[11] en gardant le même ordre pour les options -U

[12] chez moi dans /usr/share/arduino/hardware/arduino/

[13] soit /usr/share/arduino/hardware/arduino/bootloaders/ chez moi

[14] à  utiliser via l'option -c

[15] je vous jure, que je n'ai pas d'actions chez AdaFruit !

[16] Je ne pouvais pas finir sans une dernière note de bas de page :)


Commentaires du post original

mercredi 15 juin 2011

Lecture de bandes magnétiques

CML'autre jour dans le train, je lisais Open Silicium #2 et j'ai été effaré de lire que le numéro de carte bancaire se retrouvait sur la bande magnétique des billets SNCF. Ni une, ni deux, uns fois mes pénates retrouvées, j'ai voulu en avoir le cÅ“ur net !

Ne voulant pas acheter un lecteur de carte, je me suis intéressé à  la méthode Batagllia présentée au paragraphe 2.1 Le principe est simple, on utilise une tête de lecture telle qu'on en trouve dans les lecteurs de K7 audio, sur laquelle on soude une prise jack elle-même branchée sur l'entrée micro d'une carte son. Un logiciel se charge alors d'interpréter le signal reçu en données intelligibles. L'auto-radio que j'avais au fond de mes cartons étant un CD, je me suis tourné vers la fausse K7 que j'utilise pour brancher mon lecteur MP3 dans la voiture.

Je ne vais pas détailler le processus entier, je vous renvoi plutôt vers une série de liens en fin d'article, outre bien sur Open Scilicium déjà  cité. Vous pouvez aussi regarder la vidéo suivante.

Côté résultats, la lecture de cartes marche plutôt bien. J'ai réussit à  lire des données sur toutes celles que j'ai essayés : carte bancaire, tickets de parking, cartes de fidélité, cartes d'accès etc... Il faut quand même attraper le coup de main pour passer la tête de lecture à  la bonne vitesse.

CMQuand aux billets de train, j'ai eu plus de mal, plusieurs lectures donnant parfois des résultats différents. J'ai tout de même réussit à  voir pas mal d'informations telles que les gares de départ et d'arrivée, le prix, le numéro de train etc...

Par contre, pas de numéro de carte bleue ! Bonne nouvelle ! Soit les données sont déjà  perdues (bande LoCo), soit elles ne sont pas présentes sur tous les type de billets. Ceux de mes tests ayant été acheté via internet et livrés à  la maison.

Voila, un petit hack simple et facile, mais il est toujours amusant de regarder ce que l'on n'est pas censés voir ;)

Liens


Commentaires du post original