Clone DIY d’un sharp CE-125

Mon fils, pour qui j’avais construit un petit tank lorsqu’il avait 5 ans pour apprendre à programmer des séquences de déplacement, a bien grandi 😉 Maintenant du haut des ses 11 ans, il souhaite apprendre à programmer en BASIC sur mes vieux pocket-pc Sharp des années 80. Pour éviter de tripoter mes précieuses vieilleries, je lui ai trouvé sur ebay un pc-1262 ainsi que son périphérique « tout en un » un superbe ce-125 qui à l’époque était une sorte de mini rolls-royce avec son lecteur/enregistreur de microcassettes pour charger/sauvegarder les programmes et cerise sur le gâteau: son imprimante thermique non graphique affichant 24 caractères par ligne (la classe !!).
Toutefois, si le CE-125 est une belle petite bête qui vieilli bien, il souffre de plusieurs petits soucis: la sauvegarde magnétique peut rapidement devenir inopérante (courroies des vieux lecteurs de cassette, encrassement,) et surtout aucune conversion vers un format textuel quelconque pour modifier (sur un mac ou un pc) puis pour ré-injecter dans la pocket pc. Idem pour l’imprimante dont il est quasi impossible de trouver des pièces, sauf à en vampiriser une autre… mais bon les prix commencent à grimper….

L’idée a donc germé de pouvoir réaliser un clone maison pour a minima imprimer et sauvegarder les programmes en wave ou mp3.
Après de longues recherches, car il y a peu de prose sur le sujet,  j’ai pu trouver de concevoir et mettre en oeuvre mon projet. En l’occurence il s’agit du site http://pocket.free.fr qui m’a permis de découvrir la suite d’outils PocketTools (avec les sources) qui sont désormais maintenu sur une site allemand https://www.peil-partner.de/ifhe.de/sharp/. Cette suite est totalement bluffante, puisque qu’elle permet via un ensemble de binaires et de scripts d’enregistrer via le port Sharp pour magneto-cassette en format wav puis de convertir le fichier en texte. Elle permet également de faire l’inverse et de diffuser toujours via ce port d’interface sharp un fichier texte convertit en wav. Donc bien au delà de mes espérances !!! Et comme les sources sont en C Ansi, il est possible de tout compiler sous linux, donc sur un raspberry PI,en y ajoutant une carte carte son usb à pas cher 😉
En ajoutant un petit shield LCD 2×16 caractères comme celui-ci, il y a de quoi réfléchir une IHM minimaliste en python ….
La partie sauvegarde/chargement des programmes étant faite, il ne restait plus qu’à trouver comment imprimer….. J’ai pu trouver mon bonheur sur le site de Walter Fischer et en l’occurence de quoi connecter un Arduino, toujours à ce même port Sharp à 11 pins, afin sortir le le port USB/série de l’arduino. A partir de là rien de plus simple que d’utiliser une petite imprimante thermique comme celle d’adafruit qui fournit une bibliothèque simple d’emploi.

donc si l’on résume voila ce que cela donne sur le papier:

 

 

 

 

 

 

 

Pour l’arduino, je suis reparti du code de Walter Fischer en l’adaptant à mes besoins. C’est à dire, de faire en sorte que quelque soit le modele le pocket pc (hors série PC-1500 et hors série 1211) l’arduino puisque interpréter correctement la trame de synchro d’avant impression (de plus les pin utilisés diffèrent selon le modèle de pocket-pc) puis celle d’impression (qui utilise toujours les deux mêmes pin Dout pour la réception et ACK qui acquitte chaque bit reçu)

le code est dispo sur github comme à l’accoutumée:
https://github.com/Chnalex/arduino/blob/master/sharp_imp.ino

voici un premier test sans imprimante avec un script python coté raspberry pour écouter la sortie série de l’arduino:

Pour réaliser quelque chose de correct, j’ai fait l’acquisition d’un câble Sharp EA-129C (câble avec deux connecteur mâle 11-pin Sharp) et j’ai bricolé une plaque de test pour à la  fois sortir vers la carte son du raspberry (mic et ligne) et vers les pins de l’arduino. Pour la partie son je me suis inspiré de ce schéma

Voici l’ensemble, dans un boitier que j’ai fait découper au laser dans de l’acrylique comme j’en ai l’habitude chez formulor.de.
On y retrouve donc, la plaque « à trous », l’imprimante, l’arduino et le rasberry pi muni de son shield lcd (mais que l’on ne voit pas, car il est face contre terre

Le programme en python est plutôt simple, il ne sert qu’à gérer la sauvegarde et le chargement via le truchement de deux scripts mis en oeuvre lors de la compilation de PicketTools (csave et cload -> à l’identique des commendes lancées sur le pocket pc) et qui sont appelés par la commande python os.system(commande).
L’ihm permet de naviguer entre les menu, choisir le modèle de pocket pc, saisir un nom pour le fichier au sauvegardé ou lister les fichiers présents sur la clé usb montée sur /media/usb0. Afin d’éviter d’avoir à gérer le montage démontage des clés depuis le scripts python, j’ai installé usbmount qui gère cela très et de manière automatique

le code du script:
https://github.com/Chnalex/arduino/blob/master/sharp_lcd.py

et hop, une petite video de sauvegarde

une autre d’un chargement

et une petite dernière de l’impression

retrofit radio 70’s – DAB+

img_2196

Avec l’arrivée imminente du DAB+ dans ma région, ainsi qu’après le coup de jeune de l’agencement de notre cuisine (merci ikea), il est état temps de revoir le concept de ma radio DIY.

Comme j’avais envie de quelque chose qui ressemble à une vraie radio, mais qui devait avoir un peu de style (sans faire trop industriel ni trop plastique), je me suis mis à la recherche d’une radio ancienne. Après de longues recherches sur Ebay + Leboncoin et plusieurs hypothèses d’aspect (40’s, 50’s, 60’s, 70’s ou 80’s) mon choix s’est porté sur une radio typée 70’s pour trois raisons: c’est la dernière décennie où il était possible de trouver un boitier bâti avec des matériaux un peu nobles (bois, acier chromé), la généralisation du transistor depuis le milieu des années 60 faisait que les boitiers n’étaient pas trop volumineux (pas envie d’un truc de la taille d’un demi lave-vaisselle au milieu de la cuisine) et enfin, les formes de la hifi au sens large de cette décennie (70’s) était plutôt anguleuses et moins extravagantes que dans les 60’s où l’arrivée des moulages plastiques avait généré de nombreuses formes façon bio-design que l’on retrouva dans le monde de l’automobile des 90’s (bof bof).
C’est donc pour une poignée d’euros (une quarantaine) que j’ai pu acquérir via un vendeur belge (ebay) un magnifique poste KOYO 1661 qui marchait encore.
Mais il m’a fallu le désosser…..Argh !!!

img_2195

 

img_2194

img_2200

Je lui ai offert ensuite une nouvelle jeunesse !

 

 

 

 

ponçage des bois au grain 400 pour enlever le vernis hors d’âge, puis à la paille de fer pour l’aspect.
Passage au vernis nitrocellulosique en bombe + paille de fer + nouvelle couche de vernis pour redonner un fini bien lisse et satiné (façon bois ciré).

 

Pour les parties noires… un petit coup de peinture en bombe « noir mat » avec masquage du reste.

 

 

 

 

 

 

 

Certes, l’aspect extérieur cimg_2197ompte beaucoup dans cette opération, mais ce n’est pas l’essentiel. Le but reste quand même de capter le DAB+ dans ma cuisine !
Pour ce faire, je me suis tourné vers une solution pré-packagée, enfin presque…
Il s’agit en l’occurence d’un shield pour arduino baptisé dab shield et dialoguant via un port spi. Celui-ci est vraiment de bonne facture et possède deux gros avantages: il est livré avec une bibliothèque (ce qui est bien pratique) et son tuner embarqué est comptable DAB+ et FM ! Par contre, la bibliothèque est plutôt gourmande et j’ai du utiliser un arduino uno rev2 (basé sur un ATmega4809) que j’avais sous la main et qui offre une capacité de stockage 50% supérieur à un arduino uno classique. Ce n’est pas non plus folichon, on passe de 32kB à 48 kB, mais c’est suffisant pour héberger le programme qui dépasse les 30kB. Cerise sur le gâteau, la connectivité wifi permettra par la suite de potentiellement prendre le contrôle de l’arduino à distance (changer de station radio par exemple)

Bon recevoir la radio c’est bien, mais encore faut-il choisir une station, afficher ses caractéristiques (fréquence, nom etc..) et le principal: l’entendre. Pour réaliser ces trois opérations, l’idée était donc d’utiliser un encoder rotatif pour réaliser les opérations de navigation et de validation, un afficheur LCD  et enfin un ampli class D mono pour le son.

 

img_2192

Je m’attarde un peu plus sur l’écran LCD. J’ai voulu tester (et franchement, ça vaut le coup) un écran dit « intelligent » piloté par un port série. J’ai choisi un nextion NX4827T043 pour ce faire.

Alors comment cela fonctionne ? C’est plutôt simple: via un soft propriétaire sous windows (merci vmware sur mon mac) on conçoit un ensemble d’écrans avec différents types de zones (image, texte, texte défilant, barre de progression, vu-mètre…). Chaque écran (frame) possède son propre agencement de composants. Une fois l’ensemble conçu, il est compilé dans le soft puis transmis via le port série dans l’afficheur. Une fois cette opération faite, le port série permet d’interagir avec l’afficheur (changement d’écran, affichage de données dans les zones définies, etc..). coté Arduino la bibliothèque EasyNextionLibrary permet de simplifier au maximum ces opérations.

NB: pour le look, j’ai voulu reproduire l’aspect des vieux magnétoscopes avec leurs afficheurs VFD

Voila ce que cela donne en récupérant des données FM-RDS depuis le shield DAB et en les injectant dans l’afficheur via le port série.

img_2210Début de l’intégration de l’ensemble dans le  boitier :

vue de l’arrière:

img_2208

Voici le résultat final :-)) en situation dans la cuisine

img_2230

comme toujours, le code est dispo sur github:

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

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

 

Domotique revisitée ;-)

IMG_0926La première version de ma domotique m’a accompagné pendant 3 ans, mais il était temps de faire évoluer tout cela !!!

D’une part pour ces relais qui n’arrêtaient pas de « claquer » à chaque action sur les volets ou à chaque déclenchement du chauffage, et d’autre part pour cette interface graphique façon « minitel » d’un autre temps 😉

Ce qui a donné un cahier des charges en deux parties:
– trouver un moyen de remplacer les relais par une autre solution
– avoir une véritable interface graphique digne de ce nom

Les relais:
pour la V1 de la domotique j’avais utilisé deux cartes de 16 relais où chacune des 32 entrées de commande était relié à un pin de l’arduino méga. Au delà du problème de bruit des relais, cela utilisait un trop grand nombre de sorties du microcontrôleur (à mon gout). Pour réduire ce nombre, il fallait passer par un système permettant un quelconque multiplexage des commandes. J’ai cherché à utiliser en premier lieu une solution basée sur une carte avec des relais sur bus I2C. J’en ai trouvé facilement un modèle 8 relais en vente sur Ebay. Si cette solution était intéressante du point de vue du nombre de pin utilisés (2 pins: SDA et SCL), cela ne résolvait en rien mon problème de bruit.

DSCF4892Je suis donc tourné vers une solution en deux partie. La première partie a consisté a utiliser une carte équipée de 8 relais « OMRON SSR G3MB-202P ». Ces relais sont des SSR (Solid State Relay), c’est à dire qu’il sont composés de composants électroniques ne faisant pas appel à des pièces mécaniques (donc pas de bruit !! 😉 ). Plus précisément, il s’agit d’un opto-coupleur (led+detecteur) qui commande un ensemble de transistors MOSFET en mode relais.
C’est la solution idéale dans mon cas, plus de bruit, pas de mécanique, donc, virtuellement inusable.
Concernant la deuxième parie de ma solution, il fallait que je trouve un moyen de réduire le nombre de pins utilisés, pour cela, je me suis intéressée aux registres à décalage. Derrière ce gros mot se cache un composant simple d’emploi qui permet de transformer un signal série en signal parallèle. Pour être plus clair, on envoie un signal d’horloge sur une patte et sur une autre on envoie les différents bits constituant un octet, en conséquence le composant va retranscrire cet octet en activant ou pas (0 ou 1) 8 pattes de sortie. Le registre à décalage le plus commun est le 74HC595, il a l’avantage d’être facilement chainable (on peut en commander 4 à la suite avec les mêmes fils), et de fonctionner très bien avec la bibliothèque « ShiftOut » développée pour les arduino.
domotique1_bb

Le schéma ci-dessous montre comment à partir de 5 fils (+5V; 0V; data; clock; latch) commander 32 sorties. Ce qui signifie qu’avec quatre 74HC595, il est possible de commander 4 cartes de 8 relais, le tout à partir de 3 pins (hors alim). Afin de réaliser quelque chose de compacte, j’ai souhaité faire mon propre circuit PCB plutôt que d’utiliser une plaque de prototypage et une multitude de fils volants. Je l’ai conçu avec le logiciel Fritzing qui permet de faire toutes les étapes depuis le schéma, en passant par le PCB, jusqu’à la demande de fabrication sur le net.
domotique1_circuit imprimé

Comme le montre ce dessin du PCB, je l’ai fait graver en double couche afin de minimiser sa taille. En bas se trouvent les entrées (2 pins d’alim+3 pins) et au milieu, chaque barre fourni l’alim et la commande de 2 cartes relais (+-12345678).

.
.
.

.

.

.

Et voila le résultat: Les 4 cartes et le PCB en dessous (en blanc). Le relais 1 de la quatrième carte est activé dans cet exemple.

IMG_0319

L’interface graphique:

J’ai cherché pendant plusieurs mois une solution simple et peu onéreuse permettant d’avoir une interface graphique correcte, mais sans grand succès. Jusqu’au jour où je suis tombé sur un billet expliquant comment utiliser une liaison serie entre un arduino et un Raspberry Pi afin d’utiliser le Raspberry pi comme carte graphique HDMI moyennant un programme en python coté Pi interprétant les commandes passée sur le port série par l’arduino. Si c’est encore trop obscur, lisez l’article, le principe y est bien expliqué.
Le plus dur a été d’apprendre à programmer en python pour analyser les trames série, gérer l’écran tactile (vu comme une souris USB par le RasPi), afficher des images, rafraichir l’écran et renvoyer des trames à l’arduino en retour de toute action. Le code du programme python est dispo ici (le corps du programme commence à partie de la ligne 422).
Encore merci à Gilles pour sa maquette d’interface graphique 😉
La vidéo ci-dessous montre le fonctionnement de la chose:

L’énorme avantage d’un Raspberry Pi comme carte graphique est d’avoir pu réduire au maximum le code utile du coté de l’arduino. Par rapport à la V1 de la domotique le code passe d’environ 1700 lignes à 850. Avec cette nouvelle version la tache principale de l’arduino est désormais d’exécuter les taches planifiées (volets), et de gérer le chauffage.
Le code est dispo ici

L’ensemble de l’électronique avant remontage 😉

IMG_0457

Afficheur moto 2

IMG_0258une petite modification de ma réalisation précédente…
Et oui, l’écran OLED, c’est très bien de nuit ou au fond du garage… mais en pleine journée, ce n’est pas vraiment l’idéal. Pour être franc, c’est totalement illisible !!

Je me suis donc tourné vers la plus simple des solutions: un écran LCD simple de 4×12.
Pour éviter un nombre de fils trop important, j’ai utilisé un petit module LCD-I2c afin de ne cabler que 4 fils entre le boitier et l’afficheur (+5v;GND;SDA;SCL)

A noter que ce type de d’écran n’est pas des plus fréquent. Ce sont les 4×20 que l’on trouve le plus facilement. Néanmoins, dans mon cas, la place libre entre mon compte-tour et le tachymètre étant plutôt restreinte, j’ai du opter pour cette version moins large.

Pour afficher la valeur du rapport engagé, je me suis tourné vers la possibilité qu’offre le HD44780 (chip le plus courant utilisé dans les afficheurs LCD en mode caractère) de créer jusqu’à 8 caractères personnalisés. Ensuite, il suffit de combiner ces caractère spéciaux pour créer un caractère « géant » sur 3 lignes et 4 colonnes.

le code source est dispo ici comme d’habitude 😉