drean a écrit :...la solution était assez évidente ( mais c'est souvent le cas quand le problème est résolu ).
Le fameux ‘Bon sang, mais c’est bien sûr !’. Je te rassure, ça me le fait aussi à chaque fois que je résout un problème
guillaume9344 a écrit : quelques idées : bases de données , i2c , spi , 1wire, inclusion flux video (pour motion par ex), monitoring, écriture de lib (en c
).....
C’est sûr que les idées ne manquent pas, le tout c’est d’en choisir une.
Leçon 7 : chiche, on ajoute 8 entrées analogiques cablées en SPI à la leçon 6 avec un seul composant externe et une dizaine de lignes de code ?
Le composant, un MCP3208 (8 x adc 12 bits SPI) et pour le câblage on peut se contenter de ca (trouvé sur le net pour pas avoir à dessiner
).
- jv.jpg (76.65 Kio) Vu 9285 fois
Et pour le code, la lib wiring-pi est déjà chargée, donc juste une fonction qui va dialoguer nativement avec le composant et retourner un tableau json.
- mcp3208.png (24.43 Kio) Vu 9285 fois
Fini
!
Suffit d’appeler la page http://adressedupi:port/adc pour avoir les valeurs.
Qui a dit que l'analogique et les liaisons SPI c'etait trop compliqué à mettre en œuvre ?
Le code fait un peu ‘barbu’, mais en lisant la datasheet du composant et la doc de la lib et ça devrait passer tout seul. Ca permet de démontrer que l'on peut aussi coder du javascript en utilisant une syntaxe de bas niveau très proche de C
Pour test, J’ai câblé toutes les entrées de mon 3208 au – , sauf la 1 qui est au + et la 0 qui est connectée à un générateur de fonction et qui me génère une tension variable de 0 à 3.3 v et ça donne ca :
{"adc":[2745,4095,0,0,0,0,0,0]}
{"adc":[531,4095,0,0,0,0,0,0]}
{"adc":[4040,4095,0,0,0,0,0,0]}
…
Avec un peu d’imagination vous devriez facilement pouvoir transformer ça en valeurs 'volts' ou valeurs réelles de capteurs analogiques et en vue graphique dynamique. A l’occase, je ferais peut être une nouvelle version de la leçon ‘oscilloscope’ pour utiliser la valeur réelle d’une tension analogique plutôt que d’utiliser une tension virtuelle générée par le serveur.
***********Edit**************
Comme je suis repassé pour corriger quelques fote dortografe, j'ajoute un petit +
//vous devriez facilement pouvoir transformer ça en valeurs 'volts' . C'est ballot, mais c'est la première chose qu'on m'a demandé. Le composant fait une conversion de la tension sur
12 bits, donc pour avoir directement la tension appliquée sur une entrée :
volt = (Uref / (2^
12 -1)) * data . Ou Uref est la tension de référence (3.3 volt si on suit le schéma) et data est la valeur numérique retournée par l'ADC. Si on prend l'exemple de valeur sur le cannal 0 de {"adc":[2745,4095,0,0,0,0,0,0]}, cela donne : (3.3/4095)*2745 = 2.212087912 volts (précis hein
).
Donc pour avoir directement des valeurs en volts avec 3 décimales dans le tableau json il suffit de remplacer la ligne :
x.adc
= ((b[1]&0x0F)<<8)+ b[2];
par
x.adc = ((3.3/4095) * ((b[1]&0x0F)<<8)+ b[2]).toFixed(3);
toFixed(3) c'est pour limiter a 3 décimales.