Radio-réveil en bois…

20171230_174605

Mon radio-réveil ayant presque rendu l’âme, j’ai voulu construire moi-même le nouveau, mais en bois !!! Enfin presque ….
Je suis parti d’une base de boite à bijou, en bois brut, trouvée au rayon « loisirs créatifs » d’une grande chaine.

Jolies boite certes.. mais un peu triste. Comme l’aspect extérieur devait être sympa (quasi la première chose que je vois le matin.. après ma femme bien évidement 🙂 ), j’ai profité de la possibilité offerte par formulor.de d’utiliser un contre-plaqué de bouleau de 0.8mm (Cf. mes autres réalisations avec un casing fabriqué à partir de plaques d’acrylique découpées sur CNC laser) afin de réaliser un plaquage avec découpe et gravures sur deux faces (dessus et frontale).

img_1275

 

Pour l’électronique, rien de révolutionnaire pour le coup. Je suis parti de mon expérience avec la « RadioDuino » de ma cuisine. Le hardware est donc bâti à partir d’un arduino (un nano cette fois), d’un afficheur lcd 4×20 piloté par bus I2C, d’un tuner FM si4703 vendu par Sparkun (piloté également par bus I2C) et un petit ampli mono classe D basé sur un TPA2005D1 qui délivre 1.4W sous 8ohms.

20171230_174059

 

 

 

 

 

 

 

Afin de minimiser le nombre de pins utilisés sur l’arduino j’ai utilisé le principe des boutons poussoirs en parallèles munis, en série, d’une résistance afin de créer une pont diviseur de tension. Au final un seul port analogique permet de mesurer une tension différente pour chacun des boutons.

img_1596

Le changement d’heure d’été/hiver est assuré comme sur la domotique par la lecture régulière (chaque jour pendant la nuit) d’une table de dates de passage d’un mode à l’autre (déjà utilisé sur la domotique).

Pour la partie soft, le plus dur a été de trouver une police de très grand taille (en réalité une police composé de 3×3 caractères). Je me suis inspiré de l’article suivant: https://forum.arduino.cc/t/lcd-bigfont-numbers-over-2-or-4-lines/44538/12
en utilisant cette possibilité offerte par les afficheurs (sur base de contrôleur Hitachi HD44780) de pouvoir définir jusqu’à 8 caractères personnalisés (stockés dans la table interne du contrôleur sur les caractères de 0 à 7). 

les 10 chiffres utilisés sont stockés au sein de 3 tableaux de 10×3 valeurs. Par exemple pour afficher le chiffre 4 selon l’extrait de code ci-dessous, il suffira d’envoyer les caractères suivants (3 par ligne):
255,16,255
4,2,255
16,16,2

 

 

Ici les caractères 2 et 4 font partie de ceux crées. 255 est un rectangle plein (symbole en bas à droite du tableau ci-dessous b11111111) et le 16 un espace (1 symbole de la 3ème colonne b10000).
table ascii interne du controleur:

hd44780_characters_map

 

 

 

 

L’intégralité du code est disponible comme pour mes autres projets sur GITHUB:

https://github.com/Chnalex/arduino/blob/master/radio_reveil.ino

img_1597

 

Horloge à mots

IMG_0928Pour la fin de l’année 2016, j’ai eu envie de créer une nouvelle horloge (ma dernière réalisation datant de fin 2013 avec une horloge à galvanomètre). Il y a quelques années j’avais lu cet article, dans la langue de Shakespeare, sur une horloge à mots . Le concept me plaisait et après une (très) longue gestation, j’ai décidé de concevoir la mienne, mais auf französisch !!
.
.

.,

Il me fallait donc commencer par créer un ensemble de mots disposés plus ou moins en carré permettant d’afficher l’heure courante. Pour éviter de dériver vers une solution difficile à gérer, j’ai pris le parti d’afficher l’heure par bloc de 5 minutes. Ce qui, avec l’utilisation des mots  « QUART », « MOINS », « LE » et « ET » m’a permis de n’utiliser que 9 mots pour exprimer les minutes, soit 23 mots au total avec les heures.
23 ? plutôt pas mal…et pourquoi ? parce que 24-1=23  bien évidement !!!
Plus sérieusement, 23 mots à illuminer c’est comme 23 bits à 0 ou 1. Et 23 bits tiennent dans 3 octets (24 bits)….on en reparlera plus loin quand il s’agira de penser à électronique qui prendra tout cela en charge.
Comme le montre la copie d’écran du fichier Excel ci-dessus, il m’a fallu ensuite assembler ces mots d’une part pour former ce « presque carré » recherché, mais aussi, pour faire en sorte que les chiffres(mots) apparaissent dans le désordre (ma touche perso 😉 )
.
J’avais donc mon assemblage. Maintenant, il me fallait le rendre présentable et en faire quelque chose d’esthétique. Ayant vu une publicité pour des impressions de photos sur plaque de plexiglas (acrylique), j’ai pris le risque de m’aventurer vers cette solution, en partant du principe que la plaque devait offrir une légère transparence pouvant être rétro-éclairée avec une ou plusieurs leds très lumineuses.
Comme j’avais trouvé un sympathique cadre en bois pour servir de support à l’ensemble de l’horloge, il ne me restait plus qu’a créer une image de  30x30cm. Pour ce faire, j’ai utilisé le « clone » libre d’Illustrator, c’est à dire: Inkscape. J’ai utilisé du noir pour le fond et du blanc pour la police de caractère afin d’obtenir le contraste le plus élevé possible. Ne sachant pas ce que j’allais obtenir en rétro-éclairant, c’était plus prudent (et au final un peu plus « design » <- à prononcer « déssigne » comme feu mon grand-père).

IMG_0827Une bonne dizaine de jours plus tard, j’ai reçu ma plaque imprimée, que je me suis empressé de placer à l’intérieur du cadre. Un premier test avec une lampe de poche placée derrière a fini de me rassurer, le concept était bon !

Pour l’étape suivante, il fallait en premier lieu créer une boite à l’arrière du cadre afin d’y placer un cloisonnement en carton permettant de séparer chaque mot. Pour réaliser les parois de la boite, j’ai utilisé une chute de medium retaillée et collée à la colle vinylique. J’ai pu utiliser la même colle pour assembler les différents morceaux de carton. Pour le fond, qui a vocation à accueillir les leds, j’ai utilisé le même carton épais.

IMG_0820

IMG_0822

IMG_0825

IMG_0824

 

 

 

 

 

 

 .

 .

 .

.

.

.

.

.

IMG_0826


.

Passons maintenant à l’électronique, comme je l’évoquais précédemment, 23 mots étaient à gérer. J’avais testé précédemment, dans la V2 de la domotique, une solution permettant de réduire le nombre de pins utilisé en sortie en utilisant des registres à décalage. Pour rappel, le registre à décalage transforme, en entrée,  un signal « série » sur deux fils (horloge et signal) sur lesquels on fait transiter les 8 bits d’un octet, et, en sortie, il active (ou pas) 8 sorties en parallèle. Dans le cas de l’horloge, 3 registres à décalage chainés les uns à la suite des autres permettent d’illuminer chacun des 23 mots (le tout étant commandé par seulement 3 pins d’un arduino).
Ce qui permet d’utiliser l’un des plus petits arduino de la gamme: le « nano ».
Je n’ai pas pu utilisé le 74HC595 comme modèle de registre à décalage  (comme pour ma domotique). En effet, celui-ci étant surtout conçu pour de la logique et non de la puissance, il n’était pas en mesure de délivrer le courant nécessaire à une dizaine de LEDs en simultané. J’ai donc opté pour un TPIC6B595N qui est capable de fournir 150mA par pin de sortie (de quoi subvenir largement aux besoins du montage). La grosse différence entre ces deux composants vient des sorties. Sur le  TPIC6B595N, un « 1 » logique se traduit par une mise à la  masse et non un +5v comme sur le 74HC595. Cela demande juste de câbler les cathodes des LEDs vers les pins de sortie, l’anode étant commune et alimentée en +5V.
Comme pour l’horloge à galvanomètre, la partie temps réel, s’appuie sur un chip DS3231 packagé en breakout (beaucoup plus précis qu’un DS1307 -> il ne dérive que d’une à deux minutes par an).  Pour rappel la communication avec l’arduino se fait via le bus I2C.

Ce qui donne le schéma suivant:

Pour la conception du schéma, du PCB et sa fabrication, j’ai utilisé Fritzing.
Le service de gravure de PCB en ligne offert dans ce logiciel est un peu onéreux mais la qualité du produit reçu est vraiment bonne: gravure double couche, vernis protecteur, cuivre étamé

 horloge_leds_circuit imprimé

Le PCB après conception prêt à être envoyé au service de gravure offert par Fritzing

 

 

 

Voila ce que cela donne suite à la mise en place des composants (le résultat est plutôt compact).

IMG_0846

Puis avant câblage des différents blocs de leds:

 

 

 

 

 

 

 

 

 

 

 

Une petite vidéo montrant le démarrage de la « bête ».
Afin de vérifier le bon fonctionnement de chaque bloc de leds, ceux-ci sont allumés en cascade. De même lors de la synchro entre l’arduino et l’horloge temps réel, le mot « ET » est illuminé si l’opération c’est déroulée correctement (le mots « MOINS » l’étant si la synchro est impossible).

Le code source est relativement court (350 lignes).
Il est dispo ici.

Puissance 4 …robotisé…

IMG_0400

Le puissance 4….un grand classique de notre enfance et un projet qui a muri  presque 3 ans !

Tout a commencé en 2011 quand j’ai fais l’acquisition d’un bras robotisé piloté par une carte lynxmotion SSC-32. Cette carte à la particularité d’accepter en entrée un ensemble de commandes textuelles via un port série, et en sortie de piloter jusqu’à 32 servomoteurs (type modélisme). Le commandes sont très simples et prennent la forme suivante:
par exemple pour déplacer le servo n°2 à la position 750 (0.75ms soit 45°), il suffit de passer le séquence suivante « #2 P750 T1000 » (T<duree> représente le temps en ms que le servo prendra pour effectuer le mouvement). un peu de théorie sur la commande des servomoteurs: ici
De son coté, le bras est constitué d’un ensemble de 6 servos, il comprend une épaule (2 axes), un avant bras (1 axe), un bras un poignet (1 axe), et une pince (1 axe).

Mon premier projet était de faire commander le bras par ma réplique d’Apple I, et de laisser cette antique bécane gérer la logique des mouvements et l’IA. Bon, c’était sans compter sur sa terrifiante puissance de calcul à 1mhz. Sachant que je suis une tanche en assembleur, le programme devait tourner en basic, donc en interprété….résultat très décevant: juste pour l’IA il fallait de 1 à 3 min pour déterminer le coup à jouer.
Néanmoins, en faisant tourner le programme sur mon macbook, on pouvait obtenir ceci:

Avec un embryon de plateau de jeu réalisé avec des glissières en alu….

Ok, ce n’est pas l’idéal…. il était temps de réfléchir à quelque chose de plus « pro » qui utilise le vrai plateau de jeu d’un puissance 4, d’un distributeur de jeton (en prenant en compte le coté « rugueux » des jetons d’origine). Bref, du boulot en perspective….et puis d’autre projets sont apparus (domotique, radio, machine inutile + plein d’autres choses….).
2 ans et demi plus tard, après quelques tentatives infructueuses, j’ai décidé de reprendre le projet de zéro:

1) utiliser un plateau de jeu d’origine

La seule solution a été de surélever considérablement le bras pour que celui-ci domine le plateau et qu’il puisse déposer convenablement les jetons dans chacune des têtes de colonne. Solution mise en pratique par l’utilisation de pieds de table en acier de chez « Lee Roy Mèreline »
IMG_0409

 

2) les jetons et les distributeurs de jetons

Concernant les jetons, j’ai rapidement abandonné ceux d’origine pour un ensemble de cylindre que j’ai fait découper au laser dans le l’acrylique de 5mm d’épaisseur (formulor.de).
Le gros avantage réside dans le fait de pouvoir, dans une pile,  faire glisser sans difficultés le jeton du bas sans frottement (pour peu que la dite pile soit maintenue bien évidement).  Le distributeur pouvant, dans ce cas, prendre simplement la forme d’un parallélépipède vertical contenant la pile  et possédant une ouverture en bas suffisante pour en saisir un.
Ce qui donne:

3) L’électronique

Ayant pris un peu d’assurance avec les arduino’s, j’ai abandonné interfaçage avec mon « Apple I » et je suis parti sur une solution à base de « micro » (toujours pour son coté compacte). L’arduino micro étant comme tous ses grands frères très à l’aise pour communiquer sur un port série, il n’y avait donc aucun soucis à piloter la carte SSC-32 avec cette solution.

IMG_0398

3) L’IHM

Interaction minimaliste mais fonctionnelle au maximum…donc un afficheur LCD 4×20 (sur bus I2c) pour indiquer les phases du jeu, et un ensemble « LED + bouton poussoir » au pied de chaque colonne numérotée de 1 à 7.
Pour intégrer le tout, je me suis à nouveau appuyé sur les possibilités offertes par formulor.de, j’ai donc dessiné et fait découper un assemblage de plaques d’acrylique de 3mm qui forment un réceptacle à jetons sous le plateau et qui se termine en console abritant les boutons et les leds, coté joueur. Les LEDs sont pilotées chacune individuellement par une sortie numérique. Les boutons poussoirs, pour leur part, sont montés sur des ponts diviseurs de tension et reliés en sortie à une unique entrée analogique de l’arduino (pour faire simple bouton1=0.5V, bouton2=1V, bouton3=1.5V, etc..)
IMG_0407
une petite démonstration par la pratique??

une partie gagnée

comme d’hab, un petit lien vers le source hébergé sur GitHub: https://github.com/Chnalex/arduino/blob/master/puissance4.ino

Horloge à galvanomètres

IMG_0848

Quoi de mieux qu’une petite horloge de bureau atypique, avec un look analogique (comble de la supercherie totalement numérique dans les faits).
Et comme afficher l’heure c’est bien mais que donner un semblant de prévision météo c’est mieux, pourquoi ne pas y adjoindre un capteur de pression atmosphérique ainsi qu’un capteur de température.

comme toujours, un arduino nano sera au cœur du montage pour son coté compact. Le pilotage des trois  galvanomètres (heures, minutes, secondes) est assuré par les sorties « analogiques » (qui n’ont d’analogique que le nom, puisqu’il s’agit de sorties PWM en réalité  <- modulation de largeur d’impulsion 0-5V avec une fréquence d’environ 500Hz). Mais, oh miracle de l’électronique à l’ancienne, le galvanomètre étant composé d’une bobine (et souvent d’une résistance en plus), celle-ci lisse le signal pour donner une valeur continue (l’idéal eut été d’y adjoindre un petit condensateur…mais cela fonctionne parfaitement sans). Pour la partie, horloge temps réel le même Module I2C pour pour la domotique est utilisé, idem pour le capteur de température où un DS18B20 Onewire sera installé.
IMG_0852

La petite nouveauté réside dans l’utilisation d’un capteur I2C BMP085 de chez Bosh (module bleu vertical à droite de l’image)

Donc au final beaucoup d’analogique piloté, une pincé d’I2C, un soupçon de Onewire,
ce qui donne ça… dans le boitier définitif:

IMG_0851

les trois boutons poussoirs visibles sur le dessus sont là pour régler/recaler manuellement l’horloge interne (cf code source), ils sont alimentés en +5V et chacun ferme un circuit de pont diviseur. La lecture de la valeur étant effectuée sur l’une des entrées analogiques.

Le source sur GitHub: https://github.com/Chnalex/arduino/blob/master/horloge-galvanometre.ino

 

useless machine – le grand n’importe quoi …

 

tout a commencé le jour où j’ai reçu un lien vers cette video : https://www.youtube.com/watch?v=Z86V_ICUCD4&html5=1&noredirect=1

je l’avoue, j’ai voulu faire la mienne…. c’était l’occasion rêvée pour commencer une première réalisation à base d’arduino

Photo 023 (Medium)La machine inutile par excellence…
– 1 arduino nano (pour le coté compacte)
-1 inter
-1 servomoteur avec un bras permettant d’action l’inter
– un afficheur LCD (encore plus inutile), histoire de tester la librairie LiquidCrytal
– un boitier fait maison en contreplaqué teinté façon 70’s

Photo 027 (Medium)

l’intérieur de la bête un peu fouillis…

 

 

 

Photo 026 (Medium)

 

 

Le bras prêt à surgir….

 

 

 

Photo 028 (Medium)

 

 

 

Le servomoteur

 

 

 

une petite vidéo de démo qui parle d’elle même pour ceux qui n’auraient pas encore saisi le concept.

 

le code source (d’une grande complexité 😉 ) qui fait un petit 9ko compilé
a retrouver sur mon espace sur GitHub: https://github.com/Chnalex/arduino/blob/master/useless-machine.ino