Auteur : fabidouille

QuickRepair 1: Diffuseur huile essentielle

Les gens, Salutations 😉

Encore un format rapide, non que je fusse un homme pressé, ni même si occupé (un peu quand même), mais j’ai une nette tendance à agir plutôt que rédiger ici.

L’exercice est pourtant amusant, stimulant, alors je m’y prêterai encore.

Dernières occupations que j’aurais aimé narrer

Caméra de recul sur Mazda

Fort de l’expérience de démontage de la Mazda, mère d’un précédent article, j’ai voulu ajouter une caméra de recul au véhicule, en espérant qu’elle serait joliment intégrée au système de divertissement natif, comme si j’avais eu cette option à l’achat.

Spoiler: ça a fonctionné, brancher sur l’entrée analogique du connecteur principal sur lequel les RX/TX dont j’avais parlé lors de ce précédent article. Dans un futur article, je détaillerai la procédure, les références, ainsi que les détails quand à l’alimentation VCC de cette caméra, et les déboires pratiques que j’ai rencontré pour la fixer avec discrétion au dessus de la plaque d’immatriculation.

Ces déboires ont impliqué notamment ma familiarisation avec un logiciel de conception 3d axé pièces mécaniques, DesignSpark Mechanical.

Avec un peu de ceci

 

Puis un peu de cela:

Le but étant d’imprimer une pièce pour placer la caméra (de forme cylindrique, d’où le trou), avec des ergots sur les côtés pour clipser la pièce. La structure arborescente visible sur le deuxième dessin représente un pont pour permettre de contrer la gravité pendant l’impression.

Je rentrerai plus dans le détail une autre fois, ainsi d’ailleurs peut être que l’imprimante 3d que j’ai montée il y a déjà un an de dela, une Anet A8 lowcost mais efficace (à l’époque acquise pour 110 euros frais de port inclus).

Ressusciter DJI Phantom 4 et sa batterie

Un ami (qui se reconnaîtra, merci :mrgreen:) m’a donné un DJI phantom 4 qui ne vole plus, même avec une batterie fonctionnelle (que je n’ai pas) et une batterie non fonctionnelle.

Un projet en cours consiste en leur réparation.

Une bonne piste est concernant la batterie sera mise à l’oeuvre, dès qu’un peu de temps daignera me trouver.

Sujet de l’article

Alors, le quickie du jour, c’est donc un diffuseur d’huiles essentielles de qualité, le bien nommé Excelvan LM-S1, qui fonctionne par nébulisation. Plus précisément, un procédé qui évite l’échauffement d’une flamme, la vaporisation par ultrason, avec ou sans eau.

Comment donc alors?

Attendons le démontage.

Voilà, un bête moteur continu 5V, qui meut une micro pompe à air pour aspirer l’air de la fiole d’huile essentielle et la projeter dans les airs.

Au fait, pourquoi l’avoir démonté, ce diffuseur?

Bonne question!

Parce qu’il ne marche plus. Plus spécifiquement, il s’allume (la LED bleue en témoigne), mais il reste muet, silencieux, et inactif.

Réparation

.. plus simple que prévue, (mal 🙄 )heureusement!

Après avoir branché le moteur sur une source de tension 5V pouvant fournir jusqu’à 1A, le moteur restait désespérément muet.

En tenant d’exercer une rotation sur son axe avec mes doigts, j’ai senti une très forte résistance, probablement causée par des résidus graisseux/résineux d’huiles essentielles.

Une méthode consiste à tenter d’ouvrir le moteur (opération délicate), et d’y séparer les éléments (opération très délicate), dégraisser avec de l’alcool et enfin de remonter le tout (opération à peine surmontable).

J’ai préféré opter pour une solution plus ..efficace:

Étape 1: on nettoie au nettoyeur vapeur

Étape 2: on nettoie au WD40

Étape 3: on chauffe (c’est quand même bien d’enlever l’eau restante)

Pas trop quand même, moins longtemps que sur cette vidéo – le pistolet à air chaud était réglé à 300 degrés Celsius.

Étape 4: on teste si ça marche

Étape 5: on démonte, et au cas où, on diffuse un peu de WD40 (attention, éviter de respirer les vapeurs dans la mesure du possible)

 

Désolé pour la qualité des vidéos et le format portrait, la faute au nombre de mes mains (2).

Et voilà, un beau diffuseur tout neuf!

Mazdette!

Bonjour,

Pas mal de choses depuis la dernière fois, des choses non bidouillesques, des choses bidouillesques mais pas (encore?) racontées et une chose bidouillesque que je m’en vais vous raconter maintenant.

Satisfait possesseur d’une Mazda 2 2015 achetée neuve en septembre 2015, je me suis permis de la tweaker quelque peu, quelques mois après la première mise en circulation à l’aide de soft-tout-fait-qui-marchotte-mais-un-peu-fait-main-quand-même facilement trouvable sur l’Internet Mondial, comme disent certains.

Image result for mazda entertainment cmu

« Bien », tu me diras lecteur restant à convaincre, « mais pourquoi en étaler la dessus? »

Il se trouve qu’il y a quelques semaines de cela, j’ai réitéré l’opération pour ajouter -notamment- une fonctionnalité des plus intéressantes pour le grand utilisateur d’app android podcasts/deezer que je suis: Android Auto. AInsi que mettre une séquence de boot animé à la Matrix -parce que je le trouve joli- et un fond d’écran représentant un système stellaire imaginaire -pour la même raison-.

Après une partielle réussite, le seul défaut subsistant consistait en un défaut majeur d’affichage du lecteur audio legacy, que j’ai souhaité corriger en tweakant plus que le tweaker, et là les foudres de l’enfer commencèrent à pointer le bout de leur nez.

En effet, le jour même du retour d’une semaine de vacances -un dimanche, ce détail aura son importance plus tard-, je me lance dans cette « correction finale » qui se clôt par une impassible, fatale, implacable séquence de boot qui ne peut finir. Infinie déception.

Related image

Sans le décrire, le système sur lequel se base l’outil de tweaking mentionné plus haut ressemble aux autorun des anciens (et peut être actuels?) Windows.

L’outil lancé, il se manifeste en ouvrant via un simple appel de script sh (oui, le système audio/video/gps visé par ces modifications tourne sous un linux custom) des fenêtres sur l’écran embarqué dans la voiture pour manifester ses activités.

Une des premières actions prises alors fut alors d’activer la création d’un access point (AP) wifi par la voiture (l’utilisation standard est inversée: la voiture se connecte typiquement à un AP crée par un smartphone pour mettre à jour certaines données) et d’un accès SSH, démarche toujours assistée par l’outil de tweaking.

Opération faite sur l’autoroute de retour des vacances, bien sûr ni laptop ni téléphone au volant.

Cet accès m’a permis d’accentuer nettement la situation dramatique dans laquelle je m’embourbais, car il me délia l’accès au système de fichier, en tant que root, de la voiture.

La sagesse des premiers instants s’est alors vite estompée, car quelques opérations que je ne raconterai pas ici – qui impliquent chose à ne jamais, jamais faire de lancer un script qui parait bien trouvé au hasard d’un forum qui me causa la disparition pure et simple, sans backup, de fichiers critiques pour le système –  me firent dans un premier temps perdre l’autorun (aucune fenêtre ne s’ouvrait après l’insertion de clés USB dôtées de l’autorun), et dans un deuxième temps l’accès SSH.

Je me retrouvai avec le système de divertissement HS (sans GPS, audio, possibilité de modifier le comportement de l’éclairage de la voiture, etc…), qui essaye misérablement de booter sans y parvenir.

Le destin ayant toujours le moyen de garder le sourire, il s’arrangeât pour que cette mésaventure arriva le jour même des trois ans d’anniversaire de l’achat de ma voiture. Et la garantie était, bien entendue, de trois ans exactement.

Le lendemain matin, j’arrivai à la première heure, dépité, à mon concessionnaire Mazda qui m’annonça qu’en effet la garantie était dépassée depuis 8 heures.

Le responsable local tente la procédure de recovery qui consiste à mettre le système dans un mode spécial pour mettre à jour le firmware (en appuyant simultanément sur les boutons musique+mute+favoris), sans effet. Peut être est ce du à la suppression du fichier sm.conf, qui semble séquencer le démarrage post boot kernel de certains composants importants..

..puis un technicien dédié confirme, on m’annonce que cela n’est pas réparable, et qu’il faut commander le nouveau module entier.

Quelques mails et jours plus tard, un geste exceptionnel du constructeur me permettait d’obtenir un nouveau CMU (c’est le nom de la boite qui comprend l’écran, l’ampli audio, le SOC ARM (un Freescale iMX6, un cat /proc/cpuinfo permet de le trouver) orchestrant tout cela) avec un rabais de 80%, c’est à dire 263.84 euros TTC au lieu de 1099.34 euros HT (prix standard Mazda), sans la pose bien entendu.

Nouvellement motivé par ce gain de près de 300 euros, je m’attelle à la tâche de tentative de réparation du système dit irréparable.

Tout système linux ou même pas linux en général, qu’il soit compliqué (smartphone android, système audio/gps/video voiture, gros routeur, tvbox…) ou plus simple (sonnette) permet quasi systématiquement une communication série.

Une série de 0s et de 1s, échangée par deux fils, un pour transmettre (Tx) et un pour recevoir (Rx).

On branche le Tx du transmetteur sur le Tx du récepteur, le Rx du transmetteur sur le Rx du récepteur.

Le 0, c’est le niveau de la masse (GND), comme toujours.

Le 1, c’est soit une différence de potentiel de 5v ou de 3.3v par rapport à la masse. C’est ce qu’on appelle le signal TTL.

Il est capital de savoir si on parle avec des signaux 5v ou 3.3v, car si le périphérique comprend le 3.3v et qu’on lui parle avec un niveau TTL 5v, au mieux ça marche pas, au pire on casse tout.

On trouve aisément sur le net que sur le Freescale MX6,  il s’agit de TTL 3.3v :

Donc ma mission, acceptée par défaut, sera de

  1. démonter le CMU
  2. tenter la communication en mode TTY/console via l’UART (qui permet la communication série) pour
  3. restaurer les fichiers d’origines.. ah oui j’ai oublié cette partie.

Récupérer les fichiers d’origines

La commence une croisade, celle qui consiste à récupérer les fichiers critiques modifiées par l’outil de tweaking, puis malencontreusement supprimés, qui se sont avérés être:

  • /jci/opera/opera_home/opera.ini
  • /jci/scripts/stage_wifi.sh
  • /jci/sm.conf
  • /jci/opera/opera_dir/userjs/fps.js

Version brève:

  1. il faut récupérer dans un lieu mystérieux et miraculeux, c’est à dire ici. Pour chaque paire de fichier, il faut prendre le .up le plus volumineux. Ce .up est un .zip.
  2. il faut trouver où y sont cachés les fichiers miraculeux.

Comme il est dommage de faire simple quand on peut faire compliqué, cet endroit est dans le répertoire racine rootfs1upd\, on y trouve:

Dans le .dat du premier fichier .gz, à nouveau une archive cachée, on trouve un fichier si bien nommé: e0000000001. Dans lequel, qui se trouve être encore une archive cachée, qui contient un répertoire nommé: . .Oui, il se nomme point (« . »). Dans lequel on trouve l’arborescence rootfs du / du système.

N’oublions pas, une des archives est protégée par mot de passe. Et comme je suis sympa, voici le césame: 5X/9vAVhovyU2ygK (si, si).

Extraire la bête

En retirant la longue bande (en tirant vers 1, puis 2, …) en espérant accéder au démontage du CMU.

Et bien c’était une mauvaise idée, on y accède pas par là malgré une alléchante vis.

Il faut en fait déclipser la partie indiquée en rouge dans la photo suivante:

En faisant très attention à ne pas rayer/érafler le plastique, très fragile. J’ai utilisé le capuchon d’un stylo bic, très efficace et propre.

L’étape suivante est de déclipser la partie derrière l’écran, toujours même technique, cela part plus facilement.

On alors facilement les deux vis sous l’écran qu’il faut enlever avec une clé à douille avec une allonge (il faut un certain couple pour les desserrer) de taille 10.

Puis il suffit de déloger le CMU de son compartiment, en le tirant vers le haut (il faut un peu insister).

On remarque l’abondance de bandes adhésive (gros scotch marron) pour éviter de rayer la console en plastique, vu que le CMU est en métal.

On trouve des références techniques un partout plus ou moins claires sur le net, qui correspondent en vrac à des mazda 3, 6, CX-5, versions américaines, européennes, versions <2015 ou plus récentes, plus ou moins révélatrices de son modèle.

Communiquer avec la bête

Alors, sur le net on trouve de tout.

De ceux qui conseillent de souder directement les Tx, Rx sur le PCB de la carte mère:

Ceux qui utilisent un programmeur pour réécrire la flash soudée qui contient le système.

Et, enfin, les sages qui peuvent se le permettre qui rusent en ajoutant des fils dans le connecteur qui contient des slots pour les Tx Rx:

Mais je vois pas de pins Rx et Tx sur mon PC, comment je fais Monsieur?

Alors en général, on utilise un convertisseur usb TTL, soit 5v (bon pour nous) soit 3.3v (pas bon pour nous).

On en trouve des centaines entre 1 et 2 euros frais de port inclus sur aliexpress avec les mots clés « TTL USB converter 3.3v ».

Mais la proposition de Mazda (80% de remise) était valable seulement 30 jours, je ne pouvais donc pas me permettre d’attendre ce convertisseur TTL.

Alors première solution envisagée: sortir un vieux laptop pentium 2 trouvée dans une poubelle avec un port série. Potentielle grosse erreur, car les niveaux TTL peuvent être 12v sur les PCs.

Autre solution, utiliser un arduino (qui n’en n’a pas quelques dizaines chez soi?) comme un convertisseur TTL.

En effet, les Arduino Uno sont composés d’un Atmel 328P (le micro controlleur) et d’un chip FTDI convertissant USB (vers PC) <=> série (vers microcontrolleur).

Une astuce, que j’ai essayé, consiste à court-circuiter la borne RST (reset) du microcontrolleur à la masse, pour « désactiver » le microcontrolleur, et n’activer que le chip FTDI USB série.

Astuce que j’ai essayé, qui n’a pas marché. Oui, c’est bien la peine que je vous la dévoile..

Ce qui a marché pour moi, simplement faire un programme (sketch) arduino suivant:

void setup(){
pinMode(0,INPUT);   
pinMode(1,INPUT); 
} 
void loop(){ 
}

Qui a marché.

Par contre, attention!

Les arduino uno fonctionnent avec un TTL égal à la tension d’alimentation, ici 5v.

Contre astuce 1: utiliser des circuits convertisseurs de niveau logique 5v<->3.3v trouvable pour moins d’un euro sur les sites asiatiques. Ou se le faire avec un pont diviseur de tension (résistances).

Contre astuce 2: Il se trouve que j’ai un vieux clone chinois d’Arduino, le Funduino qui a comme pouvoir magique d’avoir un switch physique qui permet de basculer ses niveaux TTL de 5v à 3.3v:

Il n’y avait plus qu’à connecter l’ensemble:

J’ai testé avec succès avec des fils classiques dupont de breadboards.

Ma technique: dénuder de 3 bons centimètres, faire passer le fil à l’intérieur de la fiche pour faire dépasser les fils et les rouler à l’extérieur, pour s’assurer que le contact se fasse (il n’y a pas d’encoche metallique dans la fiche, car ces pins ne sont pas sensées être utilisés).

Que le texte défile

Un putty/xshell/n’importe quel soft qui permet de communiquer en RS232 (série) 115200 bauds, 8 databits, pas de bit de parité, et 1 stop bit plus tard et la magie se passa.

Première déconvenue

Pour transférer en série les 4 fichiers textes mentionnés plus haut,

après avoir

  1. déactiver le watchdog timer noyau: echo 1 > /sys/class/gpio/Watchdog\ Disable/value
    (plus d’infos ici pour comprendre ce mecanisme watchdog et le lien avec /sys/class/gpio)
  2. et remonter le rootfs en écriture: mount -o rw,remount /

un

cat > lefichier

suivi d’un copie colle terminé par un ^D (control D) fit le job.

Après redémarrage toutefois, cela ne redémarrait toujours pas.

Première déconvenue, donc, et coucher à 1h50 du matin.

Soupir, espoir

Le lendemain, plein d’espoir, surgit l’ombre du failsafe.

Le failsafe est l’un des deux .up qui composent le firmware. Le failsafe est un système rudimentaire qui permet de mettre à jour le système, qui est normalement appelé par le process qui s’active avec la combinaison Musique+mute+favoris décrite plus haut, qui ne fonctionnait plus dans notre cas.

Il y avait une page sur le net qui expliquait comment forcer ce mode en hardware, ici.

Désormais, cette page débouche sur ce message obscur: « These web pages were intended for sharing information from Electrical Engineer to fellow Electrical Engineer. They have now been removed due to people who ignore warnings, erroneously think that they can pretend to be an experienced Electrical Engineer, and think that following a haphazard subset of steps in a dangerous process (that they were warned not to do) is somehow equivalent to performing all of them. »

Non intimidé, une recherche via le site – fabuleux dit en passant – web.archive.org (l’internet wayback machine) montre 14 snapshots entre juin 2016 et janvier 2018, le dernier qui montre l’information date du 8 mars 2017: https://web.archive.org/web/20170308064828/2x4logic.com/invokefailsafe.html

La on apprendre une procédure réservée aux initiés qui explique comment l’auteur a, à l’aide d’un bus pirate, forcé le boot depuis le failsafe. Et notamment il explique que le bloc boot-select est configurable via un état forçable dans mtd (mtdblock1).

Et oh surprise, un script configure_flash.sh trouvable dans le rootfs contient une fonction switch_ibc, qui en fonction de l’entier qu’on lui passe configure ce mtd : 1 boot normal (système de fichier linux rootfs), mais sinon (2 par exemple) : boot sur failsafe.

Bonheur

Après avoir injecté ce script par la procédure décrite plus haut, celle du chat raisonné, quel bonheur de voir le failsafe s’executer au prochain reboot, qui permet de réinstaller le firmware (les 2 fichiers up) placées judicieusement dans un clé usb branchée sur le système.

Et de voir la vie renaître sur cet écran:

Information intéressante finale numéro 1: ne pas oublier d’appuyer régulièrement sur la pédale d’embrayage, le voyant d’indicateur du bouton on/off de la voiture change d’état, et ça semble empêcher la mise en standby non souhaitable pendant le flashage du firmware

 

Information intéressante finale numéro 2: cette procédure semble pouvoir fonctionner dans tous les véhicules mazda un peu récents (>=2014), mazda 2, 3, 6, cx-5… et le user par défaut est user (avec droits root), le mot de passe jci

Reviving old wire-guided buggy

Bonjour, un article un peu spécial, puisqu’il s’agit d’un copie colle d’un article (assez ancien) fait dans le cadre d’un club maker dont je fais parti:

Goal is to present a bit what we did, what we have, what we’re aiming at in the short term..

Our first project

One of the toy attracted us, this one:

Our goal was clear, reviving this buggy and making it autonomous using an arduino.

First, after taking it apart, we tried to understand the original – simple – design:

But also that many wires were corroded making the car useless in its current condition.

Turned into this hand-made drawing schematics:

First, we tried to control the 6V 250ma DC motor via the TTL voltage given by arduino outputs using the only transistor we had,at this time an IRF520N (here).

Which we hooked to a 12V battery + DC motor:

But we didn’t get the results we expected,indeed motor was running very weakly, plus the transistor was getting very hot.

After some thoughts, we concluded looking at specs (page 3, characteristics graph on bottom left) that even if the graph is based on Vds = 50V, the Vgs we put is too low, as a consequence transistor is not « fully » in court circuit state (« passant ») => big internal resistance => big voltage. Also, current at this regime is low, thus low rpms. We needed 10V on the gate to have it working in its nominal regime, that’s much more than TTL arduino levels (5V).

So we ordered another transistor better suited for our low activation voltage.

At some point, we wanted to control both front motor (for steering) and rear motor (to move forwards/backwards).

So we ordered a LS293 component, containing 2 H bridges, but only after one of us reinvented H bridge principle.

We wanted to jump from breadboard prototyping to PCB soldering prototyping cards..

As we lacked experience in PCB prototype board usage at this point, our first attempt was a bit laborious and not the cleanest imaginable (from now on we’ll avoid soldered tracks):

But was functional!

… until the LS293 exploded..

We were a bit too excited to test the whole thing, that we bypassed basic checks such as how much current motors were asking for, and LS293 temperature.

It happened that an adhoc repair we did for the steering prevented the front motor from moving freely, and additional torque made the motor take more current than preliminary tests.

=> we went well beyond internal LS293 h-bridges max current specs

Consequence:

  • we modelised and 3d printed the broken part to have cleaner repair:

  • we realised our original schematics could be improved by enlarging ground plane, also used to dissipate heat
  • maybe we should use a DC motor with max current usage within our LS293 specs (sourire)
  • maybe we should use a servo/step motor, much better suited for steering than original DC motor

and here we are now, we’ll be back with latest updates!

Next steps

Once we have all basics working for our car, we want to plug one of the many sensors we have (ultrasonic, rgb, we have wide angle camera with RF transmission..), put basic AI (fitting in arduino’s atmel cpu), then using advanced controller (possibly configured via openpilot) and more advanced stuff (remote control via reinforcement learning running on PC..).

 

Sonnette sans fil – ébauche

A l’occasion d’une légère modification de ma sonnette (basique, sinon les quelques sonneries proposées, qu’on ne peut mettre à jour dixit le mode d’emploi) pour l’alimenter en USB (plutôt que les piles AA d’origine vite vidées), quelle fût ma surprise en voyant que le PCB fourmille de possibilités:

  • emplacement 2 pins avec label « MOTOR »
  • emplacement pour bouton pressoir afin de changer de « mode »
  • emplacement pour port USB… pour mettre à jour les sonneries pour une hypothétique version plus avancée, ou mieux une connection série (pour la brancher sur un arduino/raspberry.. pour être notifié de l’activation de la sonnette par sms via e.g. l’API smsapi.free-mobile.fr.. plein de possibilités!)

à creuser..

 

Danger de mort USB

Petit article coup-de-gueule : ou comment vouloir faire trop d’économies peut coûter cher!

Un adaptateur USB 220V/5V, c’est toujours pratique pour alimenter un arduino ou autre montage pour lequel une batterie n’est pas pratique (consommation trop importante, flemme de maintenir une batterie bien chargée..).

Fin 2014, je commande donc 5x adaptateurs, et tant qu’à faire les moins chers de l’un des sites sur lesquels j’ai l’habitude de commander. A l’époque, 12.05 € les 5, soit 2.41 € l’unité. Soit 2 pains au chocolat – ou 20, selon les sources ;).

Au moment ou ces lignes sont écrites (un peu plus de deux ans après l’achat mentionné), le court du chargeur low-cost a un peu monté, 3.12 € désormais. L’apparence extérieure n’a pas changé. J’espère que l’intérieur, lui, a changé. Mais pourquoi donc, oui, mais pourquoi?

L’extérieur

La première chose qui frappe, c’est le poids de la chose. C’est très léger. 

Et déshabillé, ça donne:

Et enfin, comparé à un chargeur fourni avec un téléphone relativement récent (moto X v2 de 2014):

Bon, très bien, c’est à la mode d’être léger… vraiment?

Ouvrons lui ses tripes

Avec une partie des sous-titres:

On a les 220V branché quasi-direct sur le condensateur de 400V/2.2uF (), par l’intermédiaire d’une résistance et d’une diode.

Le C945 P331 est un transistor (voir les specs ici), c’est à dire un interrupteur. On remarquera que la saturation max en courant sur le collecteur est donnée à 300mA. Pas énorme, surtout quand on se rappelle que l’USB 1/2 doit pouvoir faire passer du 500mA.

A l’occasion d’un article future, nous pourrons essayer de déterminer les valeurs théoriques du condensateur d’entrée et de filtrage (16V/20uF), pour les comparer aux valeurs employées ici. Qui sait, peut être pourrait-on être surpris?

Il y a quoi derrière?

 

Aie!

Comme on peut le voir, on en peut pas dire que basses (5V) et hautes (220V) tensions soient séparées ici.. Mais surtout, les lignes phase et neutre sont séparées de moins d’un millimètre !! Une invitation aux arcs électriques, avec joyeusetés qui s’ensuivent (incendies, électrisation ou pire..). Surveiller son taux d’humidité devient alors vital.

Conclusion

Pour la petite histoire, le premier de ces adaptateurs que j’ai tenté de brancher au secteur, sans charge aucune, a provoqué un effet sonore inattendu, un grand boom.

Ce qui participé au repos des ses 4 camarades, jusqu’au dépecage pour cet article.

Je tiens tout de même à signaler que la boutique m’a remboursé l’intégralité des 12.05 de cette commande. Je n’en n’ai pas recommandé pour constater l’évolution..

Si j’avais eu le cran de tester les autres adaptateurs, ou si ce moment arrive, alors il aurait été plaisant de vérifier la tenue en tension en montant la charge (le courant demandé).

Ah, chose intriguante, le pétard a bien l’inscription CE. Rassurant?

 

 

 

 

 

 

 

Cheap OSVR HDK 1.4 comfort improvement

After a long while spent on non-geek activities, I’m back, and this time (only?) in Shakespeare’s tongue. For those who understand it enough to understand they don’t understand it, but not enough to read this article (really?), please shout.

In short, I purchased an OVSR HDK 1.4 and I was clearly disappointed by the HMD (aka head mounted display) comfort, really a pain to hold for more than a minute. I tested some months ago Oculus Rift DK2, and DK2 was clearly putting much less stress on the face.

Also, the lens are really too close to the eyes, and I couldn’t see things sharp.

Actually, I did a small youtube video to show original foam padding provided in the kit: https://youtu.be/n5zIBtQKOf4.

Very thin padding, indeed. Here is a photo:

IMG_20160505_174322[1]

So I did quick (<40min in total) assembling&sewing to get a much more comfortable HMD, for ~14 euros.

IMG_20160505_193651[1]

 

 

  • What should I buy at my favorite DIY shop ?

1) insulation tape : needs to be thick, I picked ~17mm thick garage isolation (~6 €)

IMG_20160505_174334[1]

2) velcro tape (7 €)

IMG_20160505_174527[1]

3) microfiber rag (~1 €)

 

  • measure correct length of isolation tape and cut it

IMG_20160505_174355[1]

  • cut a 2nd bit of isolation tape, same length
  • cut velcro tape to get same length again, then stick it to one isolation tape only

IMG_20160505_174527[1]

  • stick the two isolation tapes to each other

IMG_20160505_175327[1]

  • now the lengthy part, if you are not used to do sewing: sew the microfiber rag to one side of velcro

IMG_20160505_175741[1]

IMG_20160505_181725[1]

Cut the rag so that you can turn it over the other side of the velcro:

IMG_20160505_185414[1]

  • Et voilà:

IMG_20160505_185531[1]

Récréation: 100 watts c’est bien, plus c’est mieux

Histoire de sortir des girons classico-traditionels des articles de ce blog, et parce que la liberté c’est important, voici un article issu d’une visite chez un bidouilleur de tous les extrêmes, que l’on nous appellerons dans ce cadre BleuDenBas, avec BleuDenHaut qui est également bidouilleur, non moins extrême, mais lui professionnel.

BleuDenBas n’en n’est pas à son coup d’essai en matière de bidouille facilement qualifiable de dangereuse, impliquant des effets physiques aux limites du grand public.

L’objectif était de pousser une matrice de LED donnée pour 100W.

Mon rôle d’un soir: prise de note pour témoigner d’une belle soirée.

La led. Le radiateur sous la led : Thermalright Macho Rev A, capable de dissiper 100W. Réhausseur de tension. Des blocs LiPo 3S et 4S 2350 mAh (25C), capable de débiter 58A sous 16.7V chacun.

L’histoire, comptée chronologiquement sous forme d’un tableau:

Tension infligée led(V) Puissance(W) Puissance lumineuse(Lux) Annotation
24.38 0 1
25.5 0 2
26.5 0.6 18 ?:’Suffisant pour penser’
27.1 5.4 35
28.08 13.4 80 BDH:’j’en ai marre des haribos’
28.5 18.8 107
29.08 26.1 137
30 40.8 194
30.20 45.3 220 BDH:’******[ça] montre trop lentement’
30.76 57 260 BDB’RAS’
31 70 305
31.4 76 310
31.8 87 360 changement de 2 3S à 2 4S (lipo)
32.3 103 400
32.9 125 460 BDB:’Ah ***.’ Limitation en courant?
33.37 140 480
34.1 185 580 Une douce brise tiède. Ventilation du radiateur activée. Radiateur chaud.
34.22 162 570 Changement de rendement
34.2 165 675 repositionnement luxmètre
35.62 184 720
35 201 760 BDB:’***! 200W.’. 31V aux bornes LiPo.
35.2 215 ? Le régulateur semble en saturation en courant (10A)
35.4 220 ? BDB:’Espèce de ***. Tu fais ***.’ (cassage de multimètre? eh non)
36 250 819
36.4 270 880
36.7 295 895
36.8 310 904
37.3 329 904
39.2 320 ?

 

chart

Envolées éthériques

De quoi parle t on aujourd’hui?

Ce qui est difficile avec un blog, c’est de prendre le temps de le maintenir à jour au détriment des avancées en mode plus « autiste ».

Mais cela permet aussi de s’arrêter un moment, pour prendre le temps de figer le passé récent.

Ceci dit, j’aimerais évoquer comment faire parler nos infatigables exécutants du terrain (que l’on pourra renommer Arduino, histoire de ne pas perdre le lecteur nouveau) avec leur grand frère beaucoup mieux doté, l’imprésentable Raspberry Pi.

Mon intérêt étant d’exposer le monde sensible accessible aux besogneux Arduinos à l’idéiste Raspberry Pi.

A ce stade, il apparaît essentiel de préciser les termes:

Idéiste:

1. [Chez Platon et ses héritiers] Ce qui appartient au domaine de l’intelligible et qui seul possède la perfection éternelle et la réalité absolue.

Plus concrètement, relier les Arduinos au Raspberry Pi (que je surnommerai Râ le temps de cet article) rend possible:

  • leur exposition (que l’on va rendre contrôlée, pour faire face aux vilains hackers de tout poil) au réseau des réseaux, possiblement mais pas forcément par l’entremise d’un serveur web hostée sur Râ
  • une plus grande puissance de traitement de l’information issue des Arduinos (nous verrons plus tard ce qu’on peut en faire)
  • un stockage potentiellement bien fait des infos issues des Arduinos (base NoSQL possiblement, mais pas forcément, hostée sur Râ)
  • l’accès à notre installation domotique par l’IA qui prend présentement, et discrètement, possession du monde

Bien, mais par quoi commence t on?

Alors j’aimerais un peu accélérer le rythme des articles, quitte à passer vite sur certains détails. Le cas échéant, toi lecteur qui reste toujours au centre des préoccupations de l’auteur de ce blog (si,si) ne doit pas hésiter à manifester des arrêts sur ceux ci si tu en ressens le besoin.

Donc, après un peu de reflexion, je me suis arrêté sur des modules RF à pas cher.

Les archi-utilisés NRF24L01 sont:

  • pas chers (entre 1.4€ et 3.6€ selon les modèles)
  • très bien documentés, il y a pas mal de librairies à la fois bas niveau et haut niveau qui les abstraient
  • consomment peu
  • fonctionnent bien sur Arduino et les Râ

Les modèles que j’ai moi même expérimentés:

  • le modèle avec antenne (3.6€)

RF1

  • le modèle avec PCB noir (1.5€)

RF2

  • le modèle avec PCB vert (1.6€)

RF3

 

Comparaison

Alors, pour avoir un peu expérimenté ces modules, voici mes conclusions malheureusement non étayées par des tableaux, chiffres, et autre argument solide (je n’ai pas pris le temps de faire tout ça).

D’un Arduino à un Râ, les meilleurs résultats furent de loin ceux entre 2 modules RF avec PCB vert. Oui, cette configuration était sensiblement plus efficace qu’entre 2 modules avec antenne, ou un module avec antenne et un module avec PCB vert.

Dans l’hypothèse ou les modules avec antenne seraient plus directionnels, j’ai également testé en orientant les antennes dans tous les sens sans mieux.

Oui mais

Ces modules étant sensés être mieux (donnés théoriquement pour une portée de 1 Km (!!)), étant plus chers, il semble que quelque chose pouvait toutefois clocher.

  • Alimentation

Tous ces modules s’alimentent en 3.3V. Les essais de votre serviteur se sont tous fait sur des clones d’Arduino nano à 3€ pièce, alimenté par USB (donc, rappelons le, en 5V).

Il y a deux régulateurs de tension dans ces Arduinos nano, un vers 5V et un vers 3.3V. Il semblerait que le régulateur 3.3V des clones utiisés soient dans le même chip gérant la conversion USB/série (CH340/341 dans notre cas), information non confirmée toutefois.

Quoi qu’il en soit, il semble crédible de mettre en cause l’efficacité du régulateur de tension vers 3.3V intégré.

Une piste à explorer est donc d’en utiliser un, et vérifier une possible amélioration.

  • Condensateur de découplage

Ce sujet est vaste, il pourrait être l’objet d’un futur article du blog.

Simplement, en électronique, il arrive qu’une partie d’un circuit ait un besoin non constant d’énergie, et « tire » ainsi plus ou moins d’électrons des lignes d’alimentation à une fréquence plus ou moins importante.

Nos modules RF fonctionnent à 2.4GHZ, et peuvent à la fois engendrer des interférences en amont du circuit, mais aussi peuvent être affectés par l’incapacité du régulateur qui fournit le 3.3V à fournir une belle tension constante, quelque soit la charge exigée par nos modules.

Un grand pouvoir (peut être le plus grand à vrai dire) d’un condensateur, c’est sa capacité à absorber, à lisser. Ou dit autrement, à « découpler » les parties du circuit en amont et en aval de celui ci. En effet, comme il stocke des électrons et les relâche avec la patience d’un sage à la blanche barbe, il s’oppose aux vives variations de charge.

Ainsi, placer un condensateur de 4.7 uF (ou plus) entre la borne d’alimentation VCC du module RF et la masse pourrait améliorer les choses.

Ceci sera fait, dans un prochain article cependant, histoire de ne pas alourdir celui ci.

On fait quoi avec nos modules RF

Différentes librairies utilisent pour manipuler nos NRF24L01.

J’espère que tu pardonneras l’absence d’étude comparative critique, nous partons directement sur la lib RF24, version stanleyseow : https://github.com/stanleyseow/RF24, un fork de la lib de maniacbug qui apporte notamment un support sur Râ.

On branche le module RF sur l’arduino

Arduino Module RF Couleur suggérée
GND GND Noir
3.3V VCC Rouge
9 CE Orange
10 CSN/CS Jaune
13 SCK Vert
11 MOSI Bleu
12 MISO Violet
2 IRQ Gris

On branche le module RF sur Râ

Module RF Couleur suggérée
GND GND Noir
3.3V VCC Rouge
GPIO25 CE Orange
GPIO8 CSN/CS Jaune
GPIO11 SCK Vert
GPIO10 MOSI Bleu
GPIO9 MISO Violet
pas branché IRQ Gris

GPIO

 

Si vous avez un modèle non +, le branchement est exactement le même (simplement, les lignes à partir de 27 ne sont pas présentes).

On code

Le code Arduino

[sourcecode language= »cpp »]
#include <SPI.h>
#include <RF24.h>

#define CE_PIN 9
#define CSN_PIN 10
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN,CSN_PIN);

const int PIRPin = 3;

void setup()
{

Serial.begin(9600);
Serial.println("RF module about to send..");

radio.begin();

radio.setRetries(15, 15);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.setCRCLength(RF24_CRC_8);
radio.setRetries(15,15);

radio.openWritingPipe(pipe);
}

void loop()
{
uint8_t toTransmit;

int PIRread = digitalRead(PIRPin);
if(PIRread == HIGH)
{
toTransmit = 1;
}
else
{
toTransmit = 0;
}

radio.write(&toTransmit,sizeof(toTransmit));
Serial.print("transmitting ");
Serial.println(toTransmit);
}
[/sourcecode]

Ce code n’amène pas moult discussions.
Il envoie simplement un entier qui est à 1 si le capteur branché sur la pin 3 (qui se trouve être un capteur de présence en l’occurrence) est à l’état haut, et 0 autrement.

Le reste est de la configuration. On peut cependant évoquer le PA max, pour un maximum de puissance en émission, la vitesse de transmission à 250 kbit/s, vitesse max qui permet une portée légérement plus importante.

Et chose importante, l’entier 64 bits donné à pipe peut être vu comme une référence du canal utilisé pour la transmission, il doit donc bien entendu être identique entre un émetteur et son récepteur.

Plutôt simple, donc.
Il se trouve que la taille de la payload envoyée a été empiriquement mesurée à 32 octets. Je n’ai pas encore cherché à comprendre le pourquoi, i.e. de quoi elle est composée.

nb: je ne décris pas comment installer la lib Arduino, chose relativement classique (copier les .h/.cpp dans le répertoire librairies de votre root de sketches arduino, propre à votre installation de l’IDE arduino).

Le code Râ

Il y a pas mal de façon d’aborder la chose sur notre mini ordinateur.

Activer le driver spi

Nous allons utiliser une lib qui utilise le driver SPI, pour cela il faut commencer par activer le driver SPI déactivé par défaut sur Raspbian.

Pour cela, on peut soit utiliser raspi-config qui permet de le faire via un menu, ou le faire « à la main ».

Faisons le à la main. En tant que root, modifier ce fichier /etc/modprobe.d/raspi-blacklist.conf pour commenter la ligne qui contient spi (et tant qu’à faire, celle qui contient i2c, qui pourra être utile par une suite..).

Ensuite, loader en tant que root ce module/driver : sudo modprobe spi-bcm2708.

Installer la lib RF24

Récuperer la lib RF24 depuis le github dont j’ai donné le lien plus haut (https://github.com/stanleyseow/RF24), aller dans RPi/RF24 puis un make/make install en tant que root installera la lib RF24 et les headers qui vont bien.

Implémenter l’utilisation de RF24 sur Râ

Alors la fainéantise c’est plutôt mal, même si c’est clairement discutable.

Cependant, les choses étant ce qu’elles sont, toi lecteur n’aura qu’une archive d’un work-in-progress pour faire tes tests.

test_RPI_RF24.tar

Un make à la racine de l’archivé detarré, decompressé produire le main, exécutable en tant que root.

[sourcecode]

pi@ffrp ~/gotoarduinoc/test $ sudo ./main
DBHandler initializing..
PING: PONG
DBHandler init OK
RFHandler initializing..
RFHandler init OK
read: 0 from pipe: 0
redis cmd: ZADD sensors:sensor_0_0 1420036719 1420036719:0
read: 0 from pipe: 0
redis cmd: ZADD sensors:sensor_0_0 1420036720 1420036720:0
read: 0 from pipe: 0
redis cmd: ZADD sensors:sensor_0_0 1420036721 1420036721:0

[/sourcecode]

Ce qui suit read:, à savoir 0 ou 1, est la valeur envoyée de l’Arduino.
Le lecteur attentif que tu es aura remarqué la présence de 3 adresses de pipe dans le code RFHandler.cpp, pour lire la valeur de 3 arduinos différents.
Aussi, tu auras remarqué que ce code en chantier met les valeurs lues dans une base NoSQL key/value Redis.

Mais pourquoi avoir arrêté en si bon chemin ce code?
Pour un avenir meilleur. La suite, dans un prochain article!

Bar Di Re Arduino : ze french connection

L’objectif de ce premier billet est de :

– présenter ce qu’on souhaite faire in fine

– commencer la partie technique très doucement, avec présentation de la photorésistance et comment l’exploiter

 

Un objectif

L’idée de départ est venue d’un vieux frigo, qui se ferme avec réticence.

Je souhaite savoir quand le frigo est mal fermé, pour pouvoir faire des choses sensées en conséquence. Par exemple, me notifier d’une manière ou d’une autre, mettre à jour un statut dans un dashboard accessible depuis le net, ou soyons fou un moteur qui prendrait le soin de fermer la porte à ma place.

Le Comment

Quelques minutes de recherche sur le web ont suffit à orienter sur la plateforme Arduino.

Il est très simple d’aborder le monde Arduino. Déjà, l’environnement de développement logiciel est ultra simplifié (on verra plus tard) et surtout entièrement centralisé.

Physiquement, l’Arduino est une petite carte tout en un, alimenté par câble USB standard, on branche les capteurs et les trucs qui bougent / font de la lumière sur les trous déjà présent et c’est fini. Du vrai plug&play! Pas besoin de programmateur hardware, pas besoin de régulateurs de tension et autre soudure.

Un lego électronique, en (beaucoup!) moins cher.

On adore.

Mais encore?

Suite du programme: il faut ensuite trouver les bons éléments à brancher dessus, faire un petit programme et s’enorgueillir du résultat.

  • que brancher dessus : capteur
  • comment faire marcher tout ça ensemble : le programme

Que brancher dessus?

Dans le cadre du premier projet, il s’agit de détecter une porte de frigo ouverte. Par chance, mon frigo moderne dispose d’une lampe, qui -oh miracle technique-  s’allume quand la porte est ouverte.

Il aurait été dommage de ne pas en profiter.

Ainsi, une photorésistance va faire l’affaire. Ce petit composant ressemble à ceci:

DSC_6842

Sa résistance varie en fonction de l’intensité de la lumière qui lui parvient.

DSC_6843_2

1.7 Kohms sous lumième ambiante,2 MOhms dans la quasi obscurité, un peu moins de 190 ohms à 2 cm sous une lampe philips donnée à 741 lumen. La mesure est faite avec un multimètre lowcost (le gentil facteur devrait prochainement apporter un instrument un peu plus précis, et original, surprise réservée aux fidèles lecteurs).

Histoire de ne pas répéter « photorésistance » moults fois dans ce blog, parce que je n’ai pas envie de répéter ce mot, et que j’ai la prérogative de mettre ce que je veux dans ce blog, je l’appellerai Brigitte.

Pour brancher la chose à l’Arduino, une pin de Brigitte sera à la masse (voltage 0V de référence), et on va souhaiter mesurer le potentiel sur l’autre pin.

On va ainsi mesurer la différence de potentiel entre la 2ème pin et la 1ère, ce qui est exactement la même chose qu’une tension.

On remarque que la seule chose que l’on peut mesurer avec un Arduino sur une de ses pins, c’est une tension. Et c’est tout.

Heureusement pour nous, il existe une loi facile à retenir en électronique (peut être la seule à connaitre par cœur): U = R * I, aussi connue comme la loi d’Ohm (oui, le même ohm qui mesure les résistances et on s’en doute, ce n’est pas une coïncidence).

U, c’est la tension entre 2 points. R c’est la résistance entre ces deux points. I, c’est la quantité de courant qui passe entre ces deux points. Pour les puristes, la réalité est plus complexe, car il faut aussi prendre en compte des comportements capacitifs, inductifs et autres joyeusetés non linéaires mais oublions ceci pour l’instant.

Nous disions, U = R * I. Donc la tension mesurée aux bornes de Brigitte est proportionnelle à la résistance de celle ci. Bingo, on va pouvoir mesurer ça avec l’Arduino.

J’en entends certains s’interroger à pensée haute.

Très bien, nous savons que l’on peut mesurer une tension au niveau d’une pin de l’Arduino et qu’il existe une tension aux bornes de Brigitte proportionnelle à la quantité de lumière qu’on souhaite mesurer, mais comment relier tout ça?

Il nous manque une dernière notion essentielle en électronique, en fait dérivée de la loi d’Ohm. Regardons un peu l’image suivante:

250px-Pont_diviseur_tension.svg2

 

La loi d’ohm donne : U = (R1+R2)*I, car c’est la même intensité qui passe dans un circuit donné (les choses se corsent quand le chemin se sépare en deux, mais on n’aura pas à se poser ce genre de questions avant très longtemps). Oh lecteur, si tu insistes pour avoir le pourquoi du comment de cette affirmation, alors Mario entrera en jeu (sans mauvais jeu de mot, bien entendu).

Bref, U = (R1+R2)*I. Nous avons aussi U=U1+U2 (c’est le même Mario que nous appellerons à la rescousse pour justifier ceci, si tu l’exiges). Quelques savantes opérations mathématiques plus tard (si tu ne vois pas lesquelles, alors tu ne lis probablement pas ces lignes), nous obtenons U2=(R2/(R1+R2))*U ou son sombre maléfique, U=(R1/(R1+R2))*U (on voit bien la symétrie, non?).

Lecteur, si tu me permets de continuer à te tutoyer, tu es invité à imaginer que le point en bas de l’illustration est à la masse, qui par définition/construction est le point dans un circuit au potentiel de référence « 0 V ».

Voilà, maintenant tu peux imaginer que le point en haut est fixé à une tension fixe, mettons 5 V. Elle même ne se comprend que par rapport à l’existence du potentiel 0 V, qui lui même, on le comprend aisément, est relié à la source d’énergie, l’alimentation du circuit, étiqueté soit masse (bien trouvé comme nom), soit dans les cas des piles familières (AA, AAA et cie) est appelé « – » par opposition au « + » qui est à 1.5 V, 9 V, 3.6 V selon le type de pile).

Ainsi, si mettons R2 est la résistance de Brigitte, qui rappelons le est notre inconnue, il ne reste qu’une inconnue dans l’équation, R1.

Fixons arbitrairement R1 à 20 Kohms, par exemple.

Il n’y a plus d’inconnue: si on mesure U2, on mesure R2.

Ca tombe bien, c’était exactement notre but.

Un dernier point maintenant.

Tentons de glorifier un peu son rôle, à cette fameuse résistance R1, qui semble jouer un rôle fort ingrat, celui d’être l’intermédiaire à la relation entre Brigitte et Arduino.

Elle peut être explicitement ajoutée par le créateur pas forcément omniscient mais clairement omnipotent du circuit. Elle peut aussi être cachée par les tripes de notre Arduino. En effet, quand on programme l’Arduino, la première chose (ou quasi) que l’on fait, c’est dire pour chacune de ses pins utilisée si on souhaite le configurer en entrée (INPUT pour les francophones coincés) ou en sortie (OUTPUT). Dans notre cas, on aura compris que l’on souhaite configurer la pin de l’Arduino reliée à Brigitte en INPUT, et même à vrai dire en INPUT_PULLUP.

Lorsqu’une pin est configurée en INPUT_PULLUP, tout se passe comme si une résistance était placée entre la pin physique en question et la ligne d’alimentation 5V.

En INPUT_PULLDOWN, tout se passe comme si une résistance était placée entre la pin physique en question et la masse.

D’ailleurs, dans un article à venir, j’aimerais mesurer cette impédance interne pour valider ces propos.

Dans les deux cas, il s’agit de limiter le courant qui passe par cette pin, mais aussi de pouvoir faire un pont diviseur de tension « implicite ».

Si on peut ainsi théoriquement brancher Brigitte directement sur l’Arduino, on va quand même intercaler une résistance entre les deux. Comme on ne sait pas toujours ce qui se passe dans ces cas là (un court circuit est si vite arrivé), on s’assure qu’il y a un minimum de résistance entre les deux loustics.

Mettons 10 Kohms, parce que c’est plus que peu, et moins que beaucoup.

Maintenant, place à une petite galerie d’images pour confronter attentes théoriques et expérimentations.

DSC_6848

 

DSC_6846

 

DSC_6844

 

 

 

 

 

DSC_6850

Incroyable, on retrouve bien les 0.4 mA calculés 🙂

Pour référence, voici le code arduino qui fait tourner notre exemple:

int pinLecture = A0;
void setup()
{
 Serial.begin(9600); 
 pinMode(pinLecture, INPUT); 
}
void loop()
{
 int valeurLue = analogRead(pinLecture); 
 Serial.println("Valeur lue: ");
 Serial.println(valeurLue);
 delay(1000);
}

Conclusion

Si vous trouvez que cet article n’est pas très homogène, c’est normal. C’est mon premier article, que je trouve beaucoup trop long, trop ambitieux à tout vouloir décrire.

Se voulant exhaustif, son écriture s’est étalée sur une trop longue période.

Je n’oublie pas l’objectif initial de l’article, à savoir faire une alarme de frigo. Cependant, j’aimerais poursuivre ce blog avec des articles plus courts, et pas forcément dans une continuité.

Une bonne dizaine de thèmes trottent actuellement dans ma tête pour faire de prochains articles:

– tentative de réparation de matériels divers

– essayer de « vérifier » des principes élémentaires en électronique (mesurer charge/décharge d’un condensateur, mesure d’impédances internes)

– reverse engineering dans un premier temps simpliste de choses et d’autres (contrôleur, bus, protocoles)

– des mesures concrètes des transmetteurs RF low cost rRFL01 (j’en ai reçu une bonne dizaines dernièrement, de types différents), mesures de consommation, de portée

– faire de l’apnée en consommation du microcontrôleur au coeur de l’Arduino (dans un premier temps avec des astuces software, dans un deuxième temps en faisant subir une cure de régime à l’Arduino)

– finir le projet d’alarme de frigo, et en initier d’autres!

– et plein d’autres choses

 

N’hésitez pas à laisser vos messages/commentaires, je débute dans le petit monde des blogs et je prends tout ce qui pourrait améliorer le bonheur de toi, lecteur.