[Tutorial] Arduino, Serial et ASCII

Publié: 18 septembre 2014 dans Tutoriaux
Tags:,

Bonjour à tous,

Aujourd’hui un petit article sur un sujet assez redondant sur le forum Arduino, à savoir l’ASCII et la différence en Serial.write() et Serial.print().

Rappels

Si vous lisez cet article c’est surement que vous débutez et il me semble indispensable pour bien comprendre la suite d’avoir de bonnes bases.

La liaison série, comme toute transmission de données, et toutes les données informatique en général, sont toujours en binaire. Quelque soit la façon dont vous remplissiez une variable, au fond du fond, dans la mémoire du microcontrôleur, ça sera toujours des 0 et des 1. Toutes les autres représentations (décimal, hexa, chaines de caractères …) ne sont que des représentation « de confort » uniquement la pour nous humains.

Pour en revenir à nos moutons, quand on transmet des informations par liaison série, on ne transmet que des 0 et des 1, soit un nombre. Dans le cas de ce type de liaison, on transmet les informations par paquet de byte ou d’octet (c’est la même chose), soit 8 bits, donc un nombre compris entre 0 et 255. Mais maintenant vous allez me dire « pourtant je peux bien faire des Serial.print(« Hello world ») ! Il sont où tes nombres ??! » J’y viens ;)

L’ASCII

Un terme que l’on maudit presque au début alors que c’est enfantin : l’ASCII c’est tout simplement une table qui pour un nombre donné, renvoi un caractère donné. Il s’agit simplement en fait de mettre d’accord des systèmes pour dire : tel nombre c’est un « A », tel nombre c’est un « z » etc … Voici la table ASCII :

Colonne CHR on retrouve les caractères disponibles, les autres colonne représente leur code ASCII sous différentes formes mathématique. Supposons que deux systèmes veuille communiquer, et que le système A veuille envoyer « Arduino » au système B. A va donc devoir envoyer 7 octets, chaque octet correspondant à une lettre, soit :

65,114,100,117,105,110,111

Quelques remarques :

- « Mais y’a que 128 nombre dans ta table ! » en effet, la table ASCII de base ne contient que 128 caractères. Il existe une table dite étendue qui en contient 255 mais qui n’est pas prise en charge par Arduino. C’est pour celà que si vous faites Serial.print(« Mesuré ») vous allez recevoir dans le moniteur série « Mesu » + un caractère bizarre car l’Arduino n’a pas la correspondance pour le « é »

- Vous noterez des choses bizarres au début de la table (jusqu’à 31). Ce sont des caractères spéciaux : il ne représente pas un caractère littéraire mais des sortes de signaux. Beaucoup ne sont quasiment plus utilisés, les 3 qui présentent une vraie utilité en Arduino sont le 0 (NULL), le 10 (Line Feed) et le 13 (Carriage Return). Les deux derniers sont automatiquement ajoutés en fin de chaîne lorsque vous faites un Serial.println(). Concrètement, lorsque que je vais faire Serial.println(« Arduino »), il sera envoyé :

65,114,100,117,105,110,111,10,13

Le LF+CR est utilisé un peu partout en programmation, il est un petit peu l’analogie du « Roger » en communication radio, signifiant la fin d’un message.

- Vous remarquerez que le chiffre 1 n’a pas le code 1 et ainsi de suite … Il y a donc une distinction entre les chiffres et les caractères de ces chiffres. C’est pour celà que dans certains codes que vous trouverez, il y aura des instructions du genre :

byte chiffre = Serial.read() – 48

Par exemple si j’ai envoyé le chiffre 8 en ASCII, soit 56, ça donne 56 – 48 = 8 => je récupère bien mon chiffre.

Vous devez donc maintenant comprendre que quelque soit la solution adoptée, il ne s’agit que d’une question d’interprétation et de représentation. Voyons maintenant comment on peut jouer avec tout ça sur Arduino.

Serial.write() Serial.print() Serial.read()

Serial.write() va envoyer ce qui est passé en argument brut de fonderie. Donc si j’écris Serial.write(48), il va effectivement envoyé 48 et de l’autre côté je recevrais donc 48. Libre à mon autre système d’interpréter cette donnée comme il l’entend, soit en regardant la correspondance dans la table ASCII et donc de comprendre que ce qu’il a reçu est le caractère « 0 », soit en prenant ce nombre comme il est, soit 48.

A l’opposé, si je fait Serial.print(48), le système va envoyé le code ASCII pour le « 4 » puis celui pour le « 8 ». Donc ici, contrairement au write() je vais d’une part envoyer deux octets au lieu d’un seul, et d’autre part je vais encoder ces caractères. Il sera donc transmis 52,56.

Je n’ai pas encore parler de la réception, car il n’y qu’une seule commande sur Arduino, c’est Serial.read(). Bizarre non ? Il devrait pourtant y avoir deux types de réception possibles puisque je peux recevoir les informations sous deux formats différents ? Alala décidément vous ne suivez rien :D

Serial.read() lit chaque octet reçu. Mais vous voyez bien que, que ce soit avec le write() ou le print() j’ai transmis des octets. Donc pourquoi devrais-je avoir deux modes de réception ? Il s’agit tout simplement à moi programmeur de mettre en forme les données reçus comme elles me conviennent. Reprenons mes exemples :

A => Serial.write(48) => un octet valant 48 est envoyé

B option 1 => byte nombre=Serial.read() => nombre vaudra 48

B option 2 => char caractère = Serial.read() => caractère vaudra … 48 ! Oui mais étant de type char il sera reconnu en tant que caractère dans le système. Si maintenant je veux afficher ce que j’ai reçu sur un écran dont la librairie hérite de print() :

monEcran.print(nombre) => affichera « 48 »

monEcran.print(caractère) => affichera « 0 »

Autre cas, je fais Serial.write(‘8′). Les apostrophes signifient au compilateur que je veux le caractère correspondant en ASCII. Il sera donc transmis un octet valant 56.

La vérité c’est qu’on pourrait très bien se passer de print() mais qu’il rend bien service ;) d’ailleurs je vais vous avouer un secret : print() utilise write() ;)

Et mes variables dans tout ça ?

Et bien du coup, maintenant que vous avez un peu assimilé tout ça vous devez avoir compris que du côté des variables on peut également un peu faire ce qu’on veut et qu’au final c’est toujours des 0 et des 1 et que tout n’est question que de représentation/interprétation. Concrètement, je peux déclarer la chaîne « Arduino » comme ceci :

char chaine[]= »Arduino »;

ou bien

char chaine[]={‘A’,’r’,’d’,’u’,’i’,’n’,’o’};

ou bien

char chaine[]={65,114,100,117,105,110,111};

puis faire

Serial.print(chaine);

Maintenant si je suis un peux maso :

byte chaine[]={65,114,100,117,105,110,111};

puis

for(int i=0;i<7;i++) Serial.write(chaine[i]);

Dans tous les cas, l’information transmise sera 65,114,100,117,105,110,111

Autre fonctions utiles

Quelques fonction que je ne vais pas détailler ici (une recherche google et vous saurez tout;) ) mais dont il est bon de connaitre l’existence :

atoi() => transforme une chaine en entier, donc à faire une conversion genre « 48 » en nombre 48

itoa() => transforme un entier en chaine de caractère, donc 48 en « 48 »

sprintf() => permet de construire des chaines de caractère et d’y insérer des variables (attention sur Arduino pas de prise en charge des float)

Conclusion

J’imagine qu’arriver ici vous avez peut-être un peu la tête qui tourne … Si vous ne savez pas quoi faire, posez vous deux minute et reprenez votre programme point par point : que vaut ma variable/chaine ? Comment va-t-elle être interprété ? Va elle être encodé en ASCII ? A la réception : comment je veux utiliser mes données ? Sous quelle forme ont-elles étaient envoyés ?

Vous verrez qu’en étant méthodique au début ça devient vite plus limpide ;)

[News] Débarquement sur Twitter

Publié: 12 septembre 2014 dans Non classé

Bonjour à tous,

Petite brève pour vous signaler mon débarquement sur Twitter, explications …

J’ai toujours trouvé Twitter d’une inutilité inimaginable pour le grand public, au sens Facebook du terme, genre « je viens de péter dans ma baignoire » ou « bébé a fait son premier rototo » et j’en passe … Mais il est vrai qu’il y a un domaine où Twitter a su se rendre utile pour moi, c’est pour l’information sous forme de microbloging. Hop j’ai juste une petite info à balancer, pas la peine d’en faire un article sur Rue89, et tous les téléphones ont aujourd’hui leur appli Twitter (sauf ceux qui sont restés sur 3310, mais je les envies parfois je dois avouer xD).

Pour en revenir à mon cas, je me suis aperçu que je pourrais plus faire vivre mon blog par ce biais, car faisant beaucoup de choses en même temps j’en termine pas toujours et donc les articles ne débitent pas au rythme qu’ils devraient … Au moins la je pourrais montrer des choses et avoir un meilleur échange avec mes lecteurs.

Alors j’avais un compte Twitter depuis plusieurs années qui n’avait été créer que dans le seul but d’avoir les résultats des élections avant l’heure (bon tout le monde savait le résultat à l’avance mais curiosité oblige …). Je le réveille donc aujourd’hui dans le but de mieux vous faire partager mes avancés ;) cependant ça ne remet en cause en rien les articles « normaux » et j’espère avoir le temps d’en rédiger quelques uns bientôt !

Sur la colonne de gauche de la page d’accueil vous pouvez donc voir ma timeline Twitter et me suivre !

A bientôt :)

Salut à tous,

Micro news pour vous prévenir d’une nouvelle promo TI sur les eZ430-Chronos : -60%  !

Ce qui nous fait la montre à  23.2$ au lieu de 58$ !! Frais de port compris comme d’hab chez TI :)

Comme je l’ai précisé dans ma précédente news, bientôt programmable sous Energia (donc aussi facilement qu’une Arduino)

La news TI

Offre valable jusqu’au 14 juillet on dirait, donc ne trainez pas trop non plus ;)

A bientôt !

 

[News] Projets en cours

Publié: 8 juin 2014 dans Non classé

Salut la compagnie !

Longtemps que j’ai rien publié … Et pour cause plus j’avance sur mes projets plus j’en trouve d’autres à faire !!

Du coup je vous propose un petit tour d’horizon de ce qui m’occupe ces temps-ci, si quelque chose vous intéresse plus que le reste dîtes le moi j’essaierai de booster ce projet ;)

CNC v2

Un des sujets les plus visité sur mon blog et pourtant celui dont je suis le moins fier xD mon premier prototype n’est vraiment pas fiable, j’en ai marre de galérer … Du coup je pars sur une structure en profilé aluminium ! Et en fait au final c’est pas plus cher et bien plus facile à monter. Le truc c’est de passer par motedis.fr : vous pouvez commander les profilés à très bon prix et ils vous les taillent à la longueur souhaitez !!

Petit screenshot :

cncv2

Mais où sont les glissières me direz vous ? Et bien il n’y en a pas … J’ai « découvert » une propriété intéressante avec les roulements à bille de 19 mm, et les profilés alu en 20×20 :

_DSC3602

 

Les angles ne frottent pas ! Alors j’ai déjà essayé de faire un prototype, c’était vraiment pas mal, mais il y avait encore quelques points qui me chagrinaient et je pense avoir réussi à les résoudre, tout en ayant trouvé des moyens de réduire le budget. Alors autant vous le dire, tout compris ce sera très difficile de rester sous les 200€ … Quoique, hors broche (je me suis fait plaisir j’ai pris une Kress 1050) le budget pour le bâti d’après mes évaluations est de l’ordre de 130€. J’ai trouvé (je pense, pas testé encore) un bon plan pour des NEMA 23, et un moyen de gratter encore sur l’électronique. Donc peut-être bien qu’on peut rester sous les 200€ …

CC430 et Energia

J’ai bossé pendant plusieurs semaines sur le support des CC430 sur Energia. Les CC430 sont des msp430 combinés avec un CC1101 et d’autres modules très intéressant. Au passage on gagne en RAM et en flash. Ces µC sont vraiment passionnants. Pour l’instant les fonctions de bases semblent opérationnelles et j’ai développé une lib pour contrôler la partie RTC du chip (forum sur le sujet ici). J’ai également bidouillé une lib dérivée de celle de TI pour piloter le driver de LCD. Mon support de travail est évidemment une montre TI eZ430-Chronos. Au passage, voyant mes efforts sur le forum 43oh, un mec de TI m’a envoyé gratuitement une autre eZ430-Chronos !! :)

_DSC3598

Le sujet sur le forum 43oh 

J’ai également énormément bossé sur une lib pour la partie radio, que je voulais commune à Arduino, Energia, CC1101 et CC430. Mais j’ai un bug quelque part qui me rend fou et j’ai décidé de faire une pause avant la crise de nerf …

Pour m’aider dans le développement j’ai acheté deux boards de chez Olimex :

_DSC3597

_DSC3600

Fablab LABSUD à Montpellier

Après une visite hier je suis un membre du fablab de Montpellier :)

Ca faisait un moment qu’ils existent mais comme j’habite à Alès et que leurs horaires d’ouverture étaient le mardi soir et le vendredi soir, c’était très difficile pour moi de m’y rendre … Mais ça, c’était avant comme dirait la pub, car désormais il y a également le samedi après-midi ! Bilan : une équipe super sympa de passionnés, présidée par M. Civade (j’étais ravi quand j’ai appris ça puisque son blog m’a particulièrement aidé dans mes débuts de CNC). Ils ont un équipement de fou, la mairie de Montpellier ayant besoin d’un fablab pour avoir des certifications « super ville high tech ». Dernière acquisition reçue la semaine dernière : une découpeuse laser 130W ! Et je vous raconte pas l’espace de travail de cet engin … Les locaux sont gigantesques et on trouve également des fraiseuses CNC, un plotter, une découpeuse vinyl, une salle électronique et bien évidemment plein d’imprimantes 3D.

Leur site : http://www.labsud.org

Nouvelle page « où acheter »

J’ai ajouté une nouvelle page pour recenser mes boutiques habituelles pas forcement connues et qui pourtant en valent sacrément le coup !

Librairie conversion température

J’ai créé une petite lib qui permet les conversions des thermocouples K t des pt100 :

https://github.com/battosai30/TempConvLib

Lib TMC222

Encore une librairie, qui permet elle de piloter un TMC222 qui permet de contrôler des moteurs pas à pas i2c. J’en avais besoin pour un projet je vous le fais partager :

https://github.com/battosai30/TMC222

Elle n’est pas super aboutie et je n’ai pas tout testé, une partie du fonctionnement du chip m’échappant encore … Mais elle fait le job pour le moment :)

En vrac

D’autres sujets à traiter :

- test d’un analyseur logique, copie chinoise des Saleae à – de 10€.

- tuto sur un débitmètre d’eau.

Autre matériel acquis :

Launchpad F5529

_DSC3596 _DSC3601

Touch BoosterPack

_DSC3599

Conclusion

Vous le voyez, beaucoup (trop) de sujets en développement, et encore je vous dis pas tout … Mais j’essaierai de traiter chaque sujet plus longuement ne vous inquiétez pas ;)

[News] Promos TI

Publié: 30 avril 2014 dans News
Tags:, , ,

Bonjour à tous,

 

Petite news pour vous signaler des promos chez Texas Instrument.

Elle concerne deux booster-pack (shield sauce TI) : 19.99$ – 50% !

- le LCD : un shield avec un LCD monochrome 96×96 + deux sliders capacitifs.

- et le capacitive sense.  9.99$ – 50% !

 

Et deux launchpads :

-le G2 : le plus basique.  9,99$ – 15%

- et le F5529  : plus puissant, usb … 12.99$ -15%

Et ces prix sont frais de port inclus ;)

 

 

Déjà que ces plateformes étaient plus qu’abordables :)

Je rappelle que le launchpad G2 c’est un peu l’Arduino de TI (en plus puissant et plus pratique  je trouve, le seul vrai reproche qu’on peu lui faire c’est les mémoires un peu justes, mais prenez le F5529 alors ;) ).

Je rappelle également qu’avec Energia vous disposez d’un environnement identique à Arduino pour les launchpad TI. D’ailleurs je vous prépare quelques surprises dans le domaine pour très bientôt (vous regretterez de ne pas avoir acheter une montre eZ430 quand je vous ai dis qu’elles étaient en promo ;))

Bref pour avoir les codes de réduc, les liens en boutique et la news complète c’est ici

A bientôt les amis !

Bonjour à tous,

C’est une question très courante quand veut débuter en Arduino (et donc en générale quand on veut aborder le monde des microcontrôleurs) : quelle carte choir ? UNO, MEGA, DUE, Nano ??!

Comprendre

Très souvent le débutant fait les mêmes erreurs qui le guide vers un mauvais choix de première carte :

- il a déjà un projet en tête : et oui mais l’Arduino, même si ça se veut être la plateforme de développement la plus simple à mon sens, ça reste de la programmation et de l’électronique. Et avant de vouloir courir il faut savoir marcher ! Très souvent sur le forum Arduino on croise des choses du genre « je voudrais faire un quadricoptère, mais je comprends pas ce que c’est que le PWM ». Bah oui mais ça peut peut-être sembler barbant mais commencer à jouer avec des led, des boutons, des photorésistance … Permet d’apprendre les bases indispensables et ça prend pas forcement plus de temps au final parce que ça va peut-être prendre du temps au départ mais qui sera vite rattrapé. Ne pensez pas que vous serez plus malin que les autres.

- « Je vais prendre celle qui en a le plus dans le slip au cas où » : perso, j’ai une MEGA, et elle ne m’a jamais servi … A moins d’avoir des projets bien particuliers, on peut faire énormément de choses avec une Nano ou une Micro, il existe des tas d’extensions possibles pour parer à toutes les situations. On croit bien souvent que le système est lent : croyez moi, le jour où vous amènerez votre UNO à ces limites, c’est soit que vous aurez atteint un certain niveau, soit que vous avez un code foireux ;)

Les fonctions de l’Arduino

Je pense qu’il est bien important de comprendre les fonctions de l’Arduino pour comprendre ce que l’on achète.

Tout d’abord il faut comprendre ce qu’est exactement Arduino : ce n’est pas juste un ensemble de carte, c’est un environnement : des cartes ET une interface de programmation. Ces cartes (puisque que c’est le sujet qui nous interesse ici), il y en a plusieurs mais le principe est toujours le même : on trouve un microcontrôleur (= le cerveau) et une série de composants nécessaires à son fonctionnement, le tout monté sur un circuit imprimé qui facilite le développement : bornier, possibilité d’empiler des « shields » pour ajouter des fonctions, entrées pour différentes alimentations … Donc une carte, c’est un ensemble de choses qui vont lui donner ces caractéristiques finales, mais le principal dans l’histoire reste évidemment le microcontrôleur : c’est lui qu’on va programmer et qui définit le plus les possibilités données à la carte.

Voyons maintenant ce que peut faire un microcontrôleur …

Les entrées/sorties digitales

C’est LA fonction première d’un microcontrôleur : avec une simple ligne de code, on peut passer une sortie du µC (microcontrôleur) à 5V ou à zéro volt. Quelle intérêt ? Alimenter une led au travers d’une résistance, faire sonner un buzzer, commander une électrovanne  un moteur … En gros c’est une sorte « d’interrupteur » : lumière allumée ou éteinte.

Maintenant on peut faire l’inverse : lire une entrée de l’Atmega. Est-elle l’état haut (=5V) ? Ou à l’état bas (=0V) ? Quelle utilité ? Détecter l’appuie sur un bouton, un son, un signal d’un détecteur infrarouge … Bref tout ce qui prend fourni des signaux tout ou rien (= « ma lumière est allumée ou bien éteinte ? »)

Les entrées analogiques

Une fonction également très importante d’un µC (s’il en est capable, ce qui est le cas de toutes les arduinos) est la mesure analogique : c’est très simple à expliquer, c’est comme si vous aviez un voltmètre. Une ligne de code et hop vous connaissez la tension sur tel ou tel pin analogique. Quelle utilité ? Lire tout un tas de capteurs : mesurer la luminosité, la température, l’humidité, la tension d’une batterie …

Les sortie PWM

La on va pouvoir générer une tension « pseudo variable » : en gros il s’agit de faire passer un pin de 0V à 5V puis de 5V à 0V très rapidement(tellement que c’est imperceptible pour l’être humain), et ce, avec une répartition du temps passé à 5V et à 0V variable mais bien évidemment commandée dans le code :

C’est comme un variateur de lumière : la luminosité varie simplement pour nous, mais si on dilatait le temps, on verrait des variations dans la luminosité car en réalité le courant circule un temps puis s’arrête. L’oeil humain n’étant pas assez rapide pour distinguer ces variations, l’illusion fonctionne. Le PWM c’est un peut pareil : un voltmètre lira effectivement une tension variable car la plupart sont équipés de filtre en entrée qui lissent les créneaux de tension. Mais il faut garder à l’esprit que ce n’est pas une réelle tension fixe : si le système sur lequelle on le branche est assez rapide, il ne verra que du 0V ou du 5V. Par exemple si je branche une sortie PWM sur une entrée analogique de l’Arduino, et bien vous aurez un coup une mesure à 0V et un autre à 5V.

Les ports de communication

Il existe trois principaux mode de communication : la liaison série, le SPI et l’i2c. Elles servent principalement à communiquer avec l’ordi (ça c’est pour la liaison série) et à communiquer avec d’autres composants (SPI et i2c). En fait derrière ces noms un peu barbares c’est toujours le même but : échanger des données (et qui sont toujours des 0 et des 1), il n’y a que la manière qui change. Je ne vais pas trop développer ce sujet, mais ce qu’il faut retenir :

- SPI ou i2c : ces deux modes permettent de communiquer avec presque autant de « clients » que vous voulez avec un seul port. Quelque part, deux i2c c’est inutiles, c’est comme avoir deux bouteilles de whisky qui ne se vide jamais.

- Série : deux points à retenir. Le premier, c’est que la plupart des Arduino n’ont qu’un seul port série et qu’il sert à la liaison avec le PC. A ce moment la, un composant (un Atmega32u4 pour les carte récentes, un FT-232 sur les anciennes) fait l’intermédiaire pour que le branchement se fasse en USB (mais sur le PC la carte apparaît bien comme un port série). C’est par ce biais que s’effectue la programmation, et éventuellement le dialogue avec la carte. On peut alors lui transmettre des commandes et elle peut nous envoyer des infos. On peut cependant exploiter ce port série pour communiquer avec d’autres clients, mais en liaison série il n’y a que deux dialogueurs (enfin en réalité on peut faire des dialogues à plusieurs, mais c’est assez complexe). Donc utiliser le port série pour communiquer avec une autre carte par exemple, c’est perdre la liaison avec le PC. Le second point c’est qu’il s’agit de série TTL à différencier du série RS-232 qu’on trouve sur les anciens PC maintenant (le fameux port COM). C’est presque la même chose mais les tensions n’ont rien à voir (0-5V pour le TTL et -12/+12V pour le RS-232) donc brancher du RS-232 sur une Arduino ça va la griller, et les polarités ne sont pas les mêmes (un 0 en TTL est un 1 en RS-232 et vice-versa). C’est pas forcement hyper important comme remarque mais c’est un point qui n’est pas forcement clair et le terme « série » est en générale utilisé à tord et à travers sans distinction.

A noter : dans toutes les fonctions que je viens d’évoquer, chacune n’est pas forcement disponible sur tous les pins du µC. Si je prends la UNO par exemple, j’ai 6 pins analogiques (qui sont aussi digitaux) : sur les autres pins de la carte je ne pourrais pas faire de mesures analogiques.

« Ouais mais tu nous emmerdes on sait toujours pas quoi choisir ! »

Tout ce blabla pour qu’on arrive à mon conseil : prenez une UNO (et pas une UNO cms). Pourquoi :

- elle a toutes les fonctions nécessaires et largement assez dans le slip pour faire tous ce que vous voulez.

- vous pouvez changer l’atmega : si un truc doit griller (et bien évidemment un débutant est le meilleur candidat à ce que ça arrive) c’est l’Atmega. Si vous prenez une Léonardo et que vous flinguez l’Atmega32u4, vous avez intérêt à avoir un pote bien équippé pour qu’il vous dessoude ça et en remonte un neuf … Donc si ça vous arrive toute la carte est bonne pour la poubelle. Alors qu’une UNO classique l’Atmega328P est monté sur un support et qu’ont peut l’enlever à la main. Donc en cas de mauvaise manip, il n’y a que ça à changer.

- ça vous servira toujours : il vaut mieux racheter plus tard une MEGA ou autre, une UNO on s’en sert toujours pour faire des test, programmer des Atmega pour les monter sur ses propres montages en standalone (comprenez qu’on peut juste prendre l’Atmega et le monter sur ses propres circuit intégré, ce que j’ai fait ici par exemple mais avec un Atmega328 en version cms = monté en surface)

Fortement déconseillée : la DUE. Ce n’est pas la même architecture au niveau du µC (c’est un ARM), pour faire simple : si sur la programmation ça ressemble à la même chose que sur une Arduino « normale », derrière ça n’a rien à voir. Donc bon nombre de librairies sont incompatibles, et pas grand monde (même la team Arduino) ne bosse dessus donc pas grand espoir que ça change. En plus elle est en 3,3V : envoyer 5V sur une entrée et bye bye le ARM … Même si le 3,3v est voué à se démocratiser (on voit même apparaître de plus en plus de 1,8V !) ça le rend plus vulnérables aux erreurs de débutants. En plus elle est chère (+ de 35€) … Si vous tenez à faire du ARM tout en gardant la simplicité de la programmation Arduino, prenez la Stellaris Lauchpad de Texas instrument : 9,9$ et compatible avec Energia, un logiciel de programmation basé sur Arduino.

Arduino UNO (Atmega328P au format DIP) => c’est elle qu’il vous faut !

Arduino UNO CMS ==> Pas bbbiiieeennnn

Où acheter ?

Alors je suis un grand acheteur sur ebay et dx.com. J’ai acheté énormément de matériel en provenance de Chine sur ces deux plateformes, jamais déçu. Alors oui je sais c’est pas cool pour les petits français. Mais bon regardez sous tous les appareils électroniques chez vous et ça sera marqué made in China …

Je vous recommande plutôt DX car sur ebay, on trouve un peu plus de choses « exotiques ». Car ce que vous achèterez si vous commandez en Chine, ce sont bien évidemment des clones (pas des copies puisque Arduino est OpenSource, comprenez que rien n’es breveté donc chacun peut dupliquer des cartes Arduino et les vendre) et les fabricants sont multiples et peuvent essayer de grappiller sur les composants : un régulateur moins costaud, un convertisseur USB-Serie moins performant … Et sur Ebay, on peut trouver plein de vendeurs différents avec pas forcement un bon suivi. Sur DX, il y a des commentaires sur tous les articles et ils n’ont pas 10 000 ref différentes pour la UNO. Ils ont bien plusieurs modèles de UNO, mais elle seront surement toutes fiables car ils ne s’amuseraient pas à en mettre des mauvaises car la note du produit serait fortement entachée. Après évidemment il faudra se montrer patient (2-3 semaines en moyenne).

Si vous êtes pressé ou que la Chine vous fait peur, bien sûr il y a des bonnes crèmerie en France : Semageek, Farnell, Snootlab … Et la vous aurait la vrai board officiel. Mais pour au moins 2 fois plus cher. A vous de voir !

Bonjour à tous,

Bon je suis pas encore sûr du nom (du tout même) mais je vais vous présenter un projet qui m’a vraiment pas mal occupé, même si on dirait pas forcement !

Principe

La philosophie de ce projet est très simple : je me suis rendu compte dans mon travail qu’on en revenait très souvent aux mêmes fondamentaux, et que même si idéalement il faudrait créer une ou plusieurs boards par projet, au final 90% du temps on fait toujours appel aux mêmes « briques » électroniques : un microcontrôleur en liaison avec des capteurs et des actionneurs.

J’ai donc entrepris de créer un ensemble de développement, capable de satisfaire un maximum de besoin et ayant une apparence professionnelle. Et c’est ce dernier point que j’ai particulièrement recherché car bien souvent dans le DIY on voit des projets avec des fils partout, des empilements de shield  … Bref pas propre !!

Pour ce faire, le cahier des charges s’est établi comme suit :

- l’ensemble doit pouvoir s’intégrer dans un boitier type DIN (j’en parle plus tard),

- une carte mère rassemblant µC + bouton + écran + buzzer + connecteur pour les autres board + protection/filtrage d’entrées analogiques + autre si la place,

- un prix abordable : et oui si c’est pour sortir l’ensemble à 150€ ça vaudra moins le coup …

- possibilité de brancher des shields pour étendre les fonctionnalités,

- de la place en façade et à l’arrière pour arranger les connecteurs et/ou les potars et/ou autre (led, boutons « cachés », photo résistance, récepteur IR …) comme on veux,

- open source et facile d’utilisation : je veux rester dans un environnement type Arduino.

Le choix du boitier

Je voulais un boitier de ce type :

C’est couramment sous cette forme qu’on trouve les contrôleurs du marché (temperature, vitesse moteur, humidité …). C’est facile à mettre en place et ça fait propre.

Alors j’en ai testé une palanquée … Car si ça peut paraître mineur, et bien ça ne l’est pas … Pourquoi ? Et bien essayez de prendre un boitier vide commercial et d’assembler différente carte dedans, tout en prenant en compte le fait que justement la configuration de vos carte à l’intérieur va changer, et qu’il faut également que vous preniez en compte le fait qu’il y a des connecteurs à installer …

Et puis surtout, trouver des boitiers de ce type, c’est pas une synécure …

Bref c’est un beau mic-mac et j’ai fini par en trouver un, et pas cher en plus (je ne l’avais pas mentionné mais évidemment le tarif est entré en ligne de compte) :

http://www.tme.eu/fr/details/op48x96l057/boitiers-de-panneaux/#

Vous pouvez y aller, c’est en Pologne mais je n’ai eu aucun problème et le matos est de qualité.

La carte mère

WP_20140128_002

Après moulte questionnement, j’en suis arriver à travailler avec un écran de Nokia5110 (PCD8544). Ce choix s’est fait par ses dimensions, sa résolution et son prix. Je ne voulais pas de 7-segment car trop gros, trop gourmand … Pas de caracterères LCD, pour quasiment les mêmes raisons. De plus le PCD8544 est bien documenté et plusieurs librairies existent.

Le micro est évidemment un Atmega328p :)

Pour l’instant on peut y souder 4 boutons. J’y ai ajouté une mémoire FM24C04B, pilotée en i2c. Pour résumer c’est une mémoire non volatile (comme l’EEPROM ou la flash) de 4kb qui peut supporter 10 puissance 12 écritures. Grosso-modo, même si vous écrivez sur le même segment toutes les ms, elle durera plus de 30 ans … Le rétroéclairage est piloté en PWM via un mosfet. Je n’ai pas intégrer de FT232RL surtout parce la place me manquait, et aussi parce qu’on en a pas forcement besoin en dehors de la programmation (qui peut se faire via le port ISP présent en plus).

Les entrées analogiques sont protégées et filtrées via un simple circuit RC + zener 5,1V.  Au passage il est possible de faire un diviseur de tension (pour interfacer avec une entrée 0-10V par exemple) en changeant la résistance de pull-down de 100k.

WP_20140128_003

WP_20140128_001

WP_20140307_001 WP_20140307_003 WP_20140307_004

 

WP_20140307_00'

Voici les fichiers eagle (pas forcement complet au niveau noms et valeurs des composants).

A noter également que je n’ai pas terminé les façades avant et arrière ce qui explique l’aspect

Carte alimentation

WP_20140128_004

Alors je vais être honnête, pour cette première version je visais un certain projet et je n’ai pas pu atteindre le degrés de « modularité pour tous » suffisant. Mais j’ai quand même créer une carte d’alimentation capable de prendre en charge suivant les composants soudés sur le PCB : 230VAC, 12VDC ou 36-15VAC/VDC. Elle comporte le FT232RL et un connecteur sur l’arrière pour envoyer i2c, 5V et 12V. Enfin il y a une entrée analogique vers A0.

L’avenir

Alors je compte pas m’arrêter la : je travaille déjà sur d’autres shields pour cette version 1.0 mais j’ai déjà la 2.0 dans la tête. Où j’en suis dans mon raisonnement :

- Microcontrôleur ARM M4 Tiva C TM4C123 le même que celui du launchpad Tiva C :

http://www.ti.com/ww/en/launchpad/launchpads-tivac.html

Pourquoi ? La puissance (je vous laisse regarder la fiche technique mais c’est une tuerie (80 mhz, 256k de flash 32 kb de RAM, 4x SPI, 4x i2c, port USB Host/Device/OTG …) et surtout, le point qui me fait faire vraiment ce choix, compatible avec l’IDE Energia, le Arduino-like pour les launchpad. Bon il ne prend pas tout en charge encore (notamment l’USB sous exploité), mais j’ai trouvé quelques « subterfuges » pour passer outre, j’en parlerai bientôt dans un autre article. Et TI est particulièrement actif dans le monde du DIY et collabore notamment beaucoup avec les developpeurs : les projets Energia par exemple vont pouvoir être importer dans Code Composer Studio v6. Avec les Stellaris et les Tiva C ils fournissent quantités de librairie, notamment en USB ce qui simplifie énormément le travail des codeurs. Le prix des launchpad est ridicule. Bref Texas Instrument semble une « bonne voie » dans laquelle s’engager :)

- ce choix me permet d’intégrer une horloge en temps réel puisque intégrée dans le Tiva C ;)

- possibilité d’utiliser d’autres écrans, d’autres configuration de clavier : besoin de plus de bouton ? un joystick ? d’un écran plus petit ? bref un petit coup de fer à souder et hop ;)

- ajout d’un ADC 24-bits, de la prise en charge Ethernet via ENC28j60 et d’un DAC : la nouvelle organisation que je prévois devrait me laisser plus d’espace, donc je vais pouvoir « gaver » l’ensemble pour accumuler un max de fonctionnalités, en tout cas il y aura la place sur le PCB.

Pour le reste comment je vois les choses : fourniture de cartes personnalisées : j’aimerais pouvoir proposer le concept à la vente, avec à la commande pouvoir décider de ce dont vous avez besoin. Pas besoin de l’ethernet ? Bin jle soude pas et le prix est déduit … Et vous recevez un « kit » qu’il ne reste plus qu’à programmer et qui fait pro. Et bien sûr le tout à un prix raisonnable évidemment ;)

Pour les intéressés il me reste pas mal de cartes (seeedstudio oblige) que je peux revendre ;)