10 choses à savoir avant de démarrer un projet Arduino
Avec la contribution de Rédacteurs nord-américains de DigiKey
2017-01-12
Vous avez pu constater qu'il est possible de réaliser des projets ludiques avec des cartes Arduino, et vous avez décidé de voir par vous-même. Vous avez donc commandé une carte Arduino, des fils de raccordement, une alimentation, des LED et un kit complet d'accessoires. Toutefois, voici quelques petits rappels qui vous feront gagner du temps et vous éviteront des frustrations.
Un de ces conseils peut même vous éviter d'abandonner et de jeter votre matériel tout neuf à la poubelle dans un accès de colère.
1 : Les produits Arduino sont bien adaptés pour l'expérimentation et l'apprentissage
Ils supportent exceptionnellement les petites tâches dédiées. Les produits Arduino sont similaires à une version d'expérimentation des composants d'un détecteur de fumée. Les microcontrôleurs de ces types d'applications ont une liste de tâches relativement courte. Votre thermostat n'a aucun besoin d'une capacité à faire fonctionner un système Linux ni à effectuer de grands calculs. Si vous voulez écrire du code pour des applications s'exécutant dans un système d'exploitation, pensez plutôt à utiliser un ordinateur monocarte comme Raspberry Pi ou BeagleBone Black.
Pour ceux qui veulent s'orienter dans des conceptions de type mobile ou Internet des objets (IoT), toutes les cartes Arduino sont portables, mais certaines sont mieux adaptées pour ce type d'application en raison de leur format réduit et de leur faible consommation énergétique. Les cartes Trinket et Gemma d'Adafruit, et Arduino Mini sont idéales pour ces types de projet.
2 : Écriture d'un programme
La programmation des cartes Arduino exige l'écriture d'un « sketch » dans l'environnement de développement Arduino et le téléchargement de ce sketch sur votre carte (Figure 1). Ces sketchs sont écrits en C et utilisent les mêmes structures de commande. Si vous n'avez rien compris à tout ce que je viens de dire, ne désespérez pas. C'est plutôt un point positif pour vous. C'est-à-dire que si vous avez une notion du langage C ou C++, l'écriture de sketchs vous sera très familière. Inversement, en apprenant comment écrire des sketchs, vous apprendrez également les notions de base du langage C. Vous êtes gagnant dans tous les cas.
Figure 1 : La programmation dans Arduino exige l'écriture de sketchs en C. Voici une capture d'écran d'un environnement de développement. (Source : DigiKey Electronics)
Une remarque sur l'environnement de développement Arduino : il ne dispose pas de débogueur intégré. Si vous avez l'habitude de corriger le code avec les débogueurs intégrés des environnements de développement comme Eclipse ou MPLAB, vous aurez juste à devenir plus astucieux. Vous devez utiliser des méthodes plus primitives pour le dépannage, comme l'insertion d'une ligne de code pour le renvoi de texte ou l'activation d'une LED lorsqu'une section du code est atteinte. L'absence de débogueur est probablement une bonne chose en ce qui concerne le développement de vos compétences en termes de résolution de problème.
3 : Utilisation de shields et d'accessoires de marque
Vous avez probablement acheté un produit Arduino parce que vous vouliez concevoir un projet et/ou en savoir plus sur l'électronique. Le processus d'apprentissage sera plus difficile si vos outils d'apprentissage ont une documentation insuffisante et un support médiocre. Il est conseillé de privilégier les leçons et les concepts, et non l'équipement de dépannage.
D'ailleurs, le dépannage est une partie essentielle et obligatoire du processus, mais vous ne devriez pas vous pénaliser dès le début.
Sparkfun, Adafruit et Seeed Studio sont d'excellents fournisseurs de shields et d'accessoires. Ils fabriquent non seulement d'excellents produits, mais leur popularité fait également partie intégrante de leur force. Si vous rencontrez un problème, il est plus que probable qu'une autre personne ait déjà rencontré le même problème et l'ait résolu, puis publié la solution dans un forum. Profitez-en.
4 : Garder trace des opérations tout au long de l'apprentissage et du développement
Il s'agit d'un point spécialement important vu que vous travaillez avec différentes itérations d'un même programme. Il est très facile de perdre le fil des événements dans une version et de leurs causes. Vous pensez peut-être ne pas avoir besoin de ces notes récapitulatives, mais croyez-moi, vous en aurez besoin. Le nombre de modifications et d'itérations que vous effectuez en seulement un week-end pour développer un projet peut atteindre des centaines.
Venant d'un milieu où l'utilisation de la CAO est très poussée, je conçois mes circuits dans DraftSight. L'outil Scheme-it® de DigiKey constitue une autre option (Figure 2). J'utilise DraftSight par habitude. Cependant, étant donné qu'un outil spécialisé comme Scheme-it est une bien meilleure option, je commence à migrer vers ce dernier.
Scheme-it offre l'avantage d'avoir une liaison directe au large stock de composants de DigiKey. Il présente également de nombreuses options de prise de notes. Vous pouvez placer des notes sur la feuille principale ou les associer à des composants spécifiques. Il est également basé cloud : vos données sont ainsi sauvegardées et toujours accessibles avec une connexion Internet. Autrement, vous pouvez conserver les notes et les schémas dans un carnet, mais je préfère réellement conserver toutes les données pertinentes au format électronique.
Figure 2 : Un circuit simple conçu à l'aide de Scheme-it de DigiKey. (Source : DigiKey Electronics)
5 : Pas de précipitation
Il faut d'abord maîtriser les techniques et les concepts individuels. Commencez par faire clignoter une LED en utilisant l'exemple « Blink » intégré dans l'environnement IDE Arduino. Puis, faites clignoter une LED que vous avez branchée à une sortie. Écrivez ensuite un sketch pour faire clignoter plusieurs LED simultanément. Puis, faites clignoter la LED en appuyant sur un bouton. Écrivez ensuite un sketch pour réaliser une lecture analogique à partir d'un potentiomètre afin de contrôler la vitesse de clignotement de la LED.
Toutes vos conceptions finales de projet sont simplifiables en des tâches réduites. Par exemple, vous pouvez obtenir un commutateur à commande thermique en combinant de petites tâches comme activer l'antirebond d'une pression de bouton, afficher la sortie sur un écran LCD, lire un capteur de température et faire clignoter une LED.
Votre projet est comme un mur de briques, où chaque brique constitue un concept acquis.
Et une dernière remarque : avant que vous ne considériez la LED qui clignote faiblement avec dédain, permettez-moi de vous dire une chose. Étant ingénieur électricien depuis plus d'une décennie, la première chose que je fais habituellement avec toute carte ou tout microcontrôleur que je reçois consiste à faire clignoter quelques LED. Ces indicateurs clignotants me signalent que j'ai initialisé la puce de manière au moins partiellement correcte et que je commence à exercer un certain degré de contrôle sur le matériel.
6 : Vérification du seuil de la fréquence d'horloge
La carte Arduino UNO a une fréquence d'horloge interne de 16 MHz. Cela équivaut à 16 millions de ticks d'horloge par seconde. Cela paraît beaucoup, mais considérez le cas suivant : chaque instruction ou commande de vérification d'un sketch utilise les ticks de l'horloge. Plus vous définissez de tâches à faire dans votre sketch, plus le nombre de cycles d'horloge de ces tâches augmente indéfiniment et rapidement. Et fait surprenant, l'Arduino rate les signaux d'entrée ou dépasse les impulsions de sortie en un rien de temps. Il ne dispose littéralement pas d'assez de temps pour réaliser toutes les tâches attendues.
Pour les tâches de base, cela est rarement un problème, mais à mesure que vos projets se développent, les problèmes peuvent surgir. Le seuil de la fréquence d'horloge devient réellement évident lorsque vous essayez de commander des moteurs pas-à-pas ou de gérer la contre-réaction d'encodeur de servomoteurs.
Si vous pensez dépasser les cycles d'horloge, il est préférable d'utiliser une carte Arduino Zero qui est dotée d'une horloge de 48 MHz.
Décharger certaines tâches du traitement vers un shield constitue une alternative au problème. Trinamic Motion Control propose le shield de commande de moteur pas-à-pas TOS-100 V1.1, spécialement conçu à cet effet.
7 : Comment utiliser les bibliothèques Arduino
Et si une grande partie du code dont vous avez besoin était déjà écrite et disponible ? Cela ne permettrait-il pas de considérablement accélérer la réalisation de votre projet ? Eh bien, ce code existe, il vous suffit de l'extraire et de le charger dans vos sketchs. Ces collections de code sont appelées bibliothèques.
Expliquer concrètement la définition des bibliothèques nécessitera plus de temps et d'espace qu'il n'en faut dans un article d'astuces, mais voici une analogie pour vous permettre d'avoir une idée du concept. Une bibliothèque est similaire à une boîte à outils destinée à un ensemble de tâches associées. Il vous suffit d'inclure les boîtes à outils contenant les outils dont vous avez besoin dans votre projet.
Par exemple, la bibliothèque « wire » (Figure 3) est incluse dans l'environnement de développement Arduino. Wire est une boîte remplie d'outils pour les communications série I2C. Les outils Wire automatisent la plupart des tâches impliquées dans les communications I2C. Vous pouvez vous-même écrire le code complet, ce qui est entièrement bénéfique pour l'expérience d'apprentissage, mais inutile si vous apprenez à utiliser les bibliothèques de manière efficace.
Figure 3 : Bibliothèque Wire incluse dans un sketch. (Source : DigiKey Electronics)
8 : Ports de base et communication parallèle
Distinguez les communications parallèles et, de manière spécifique, série. Recherchez la signification de l'acronyme UART (composant similaire à un téléphone série universel pour un microcontrôleur). Recherchez les termes SPI (interface périphérique série) et I2C. Atmel, l'entreprise qui fabrique les puces au cœur de la plupart des cartes Arduino, fournit plusieurs notes d'applications très utiles concernant les communications SPI et I2C. La plupart des capteurs et des autres accessoires que vous finirez par utiliser communiqueront avec votre carte Arduino par le biais d'une connexion série I2C ou SPI. L'apprentissage de ces techniques de communications simplifie considérablement l'utilisation de ces accessoires.
Faites attention aux accessoires, comme les écrans, qui nécessitent une communication parallèle dans les projets. Les ports COM parallèles utilisent de nombreuses broches par rapport aux ports COM série. Vous pouvez constater que le nombre de broches de votre carte Arduino n'est pas suffisant pour ce type de communication, et même si c'était le cas, vous pourriez finir par utiliser une telle quantité de broches qu'il n'en resterait plus aucune de disponible pour autre chose. Si vous souhaitez uniquement apprendre comment commander un écran LCD à communication parallèle, allez-y, mais les dispositifs de ce type peuvent être trop chargés en E/S pour les projets impliquant plusieurs dispositifs.
9 : Prise en compte des limites de mémoire
La plupart des débutants commenceront avec l'une des cartes de base comme UNO ou Trinket. Tôt ou tard, vous allez remplir la mémoire et dépasser la mémoire RAM. Le fait d'atteindre cette limite est bon signe. Cela peut sembler insensé, mais permettez-moi d'expliquer.
Les codeurs, qu'ils soient débutants ou expérimentés, établissent inévitablement du code désorganisé et dispersé qui accapare plus de ressources que nécessaire. Il existe presque toujours des méthodes pour alléger le code. L'objectif est de le compresser autant que possible pour optimiser le rendement des ressources disponibles. Pourquoi voudriez-vous tenter de résoudre ce problème avant de rencontrer un obstacle ? Atteindre la limite de mémoire vous force à devenir plus astucieux. Cela vous force à réévaluer les actions que vous avez déjà effectuées et à trouver des méthodes pour les améliorer. Si vous vous contentez de remplacer la carte par une autre avec plus de mémoire, vous passez à côté de cette expérience.
Plus tard, vous devrez peut-être acquérir une carte avec plus de RAM et plus de mémoire, mais ne vous précipitez pas.
Voici un petit conseil pour démarrer. Si vous constatez que votre mémoire RAM est insuffisante, essayez l'astuce suivante pour lire les chaînes de texte directement depuis la mémoire programme, au lieu de la mémoire RAM :
Serial.println(F(“votre texte ici”));
La macro F insérée entre parenthèses permet d'éviter que le texte soit chargé dans la mémoire RAM au démarrage du programme. La chaîne est lue directement depuis la mémoire Flash, au besoin.
10 : Certaines cartes Arduino n'intègrent pas de capacité USB native
Je sais qu'au premier abord, cela semble insensé. Certes, vous programmez votre carte Arduino en branchant le jack USB dont elle est équipée au port USB de votre ordinateur. Mais pour certaines cartes Arduino, plusieurs mécanismes logiciels astucieux fonctionnent en boucle en arrière-plan. Les cartes comme la Trinket d'Adafruit sont dotées d'un chargeur d'amorçage pré-installé permettant au microcontrôleur d'agir comme un dispositif USB pour charger les sketchs. Il s'agit d'un très bon principe de codage ad hoc.
La plupart des microcontrôleurs ne prennent pas en charge les communications USB de manière intrinsèque. En général, deux méthodes permettent de contourner cette situation, ainsi qu'une méthode moins courante utilisée par la carte Trinket. La première solution fréquente est de placer une puce séparée sur la carte pour gérer les communications USB. Cette puce convertit également les données de la connexion USB en un format lisible par l'UART du microcontrôleur principal. L'autre méthode courante implique un composant matériel séparé à brancher sur le microcontrôleur lorsque vous souhaitez communiquer avec le microcontrôleur via USB.
Je fais spécifiquement référence à la carte Trinket dans ce conseil, à cause d'un incident au travail où nous avons commandé des cartes Trinket pour les utiliser comme interface entre un PC exécutant LabVIEW et une boîte de commande expérimentale. À la livraison des cartes Trinket, nous avons réalisé qu'elles ne comportaient pas de matériel de commande USB intégré.
Le problème a été rapidement résolu. Il nous a suffi de commander plusieurs cartes Arduino UNO. Ces dernières incluent une puce ATmega dédiée intégrée pour gérer les communications USB. Il s'agissait d'un problème mineur qui aurait pourtant pu être évité si j'avais lu cette astuce avant de commander le matériel.
En bref, si vous pensez utiliser un port USB sur votre carte Arduino pour la connexion à un ordinateur, à une caméra ou à un lecteur USB, vérifiez que la carte que vous achetez inclut bien un contrôleur USB. Vous pouvez également ajouter une capacité USB avec un shield hôte USB.
Conclusion
Arduino s'avère être un excellent environnement d'apprentissage pour tout le monde, débutants comme ingénieurs, souhaitant coder et mettre en œuvre un système électronique. Cet environnement est à la fois ludique et pratique. De plus, avec les informations initiales appropriées et une approche adaptée, il peut offrir un processus d'apprentissage convivial. Mais, n'oubliez pas le conseil numéro 5, « Pas de précipitation ».

Avertissement : les opinions, convictions et points de vue exprimés par les divers auteurs et/ou participants au forum sur ce site Web ne reflètent pas nécessairement ceux de DigiKey ni les politiques officielles de la société.