I. Présentation (très) rapide des ARDUINO
Les cartes arduino sont des cartes de prototypage rapide utilisant des micro-contrôleurs AVR de chez ATMEL.
Ces cartes disposent de connecteurs "femelles" dans
lesquels on peut "planter" des fils reliés à des capteurs
(interrupteurs, potentiomètres, etc...) ou des actionneurs (LED, servo,
etc...).
Il y a plusieurs modèles, entre autres:
I.1. Programmation ARDUINO
Ces cartes se programment en un langage également appelé arduino, qui est très proche du langage C et C++, mais propose des bibliothèques (des collections de fonctions "toutes faites") pour faciliter la vie de l'utilisateur. Le programme arduino est développé sur PC dans l'Environnement de Développement Intégré (EDI ou IDE) arduino et est chargé par un lien USB. Il faut donc un câble USB entre la carte UNO et MEGA et un port USB du PC sauf pour l'arduino Digispark qui se branche directement sur le port USB. Dans le jargon arduino, un programme s'appelle un "sketch".
Les bibliothèques sont appelées "libraries" en anglais. Très souvent, on utilise en français le terme "librairie", ou "lib", ce qui est incorrect, mais qui se comprend facilement.
Dans ces pages, je m'efforcerai d'employer le bon terme en
français, à savoir: "bibliothèque".
L'Environnement
de
Développement Intégré arduino sur le PC:
Tous les sketches arduino ont la même structure:
I.2. Miniaturisation ARDUINO
Ces cartes arduino sont très pratiques pour développer un prototype, mais elles restent encombrantes pour des applications en modélisme où la place est comptée.
Il existe cependant une solution: l'environnement
de développement arduino permet de développer des programmes (sketches)
pouvant être directement chargés dans des micro-contrôleurs
plus petits:
![]() |
![]() |
Les ATtiny84 et ATtiny85 ne sont pas des arduino,
au sens où il ne s'agit pas de carte de prototypage: il s'agit de puces
"nues". Par abus de langage, on les appelle arduino,
puisque ces puces peuvent être programmées en langage arduino
avec les mêmes outils de développements installés sur le PC.
En effet, les programmes peuvent être mis au point en
premier lieu sur une carte arduino
UNO, puis sont recompilés pour
l'ATtiny84 ou ATtiny85
avant d'être chargés dans la puce ATtiny84
et ATtiny85.
Cerise sur le gâteau, il n'y a pas besoin de programmateur spécifique pour charger le programme arduino dans l'ATtiny84 ou ATtiny85: c'est la carte arduino (UNO) qui sert de programmateur.
Limitations
des ATtiny84 et ATtiny85:
Malgré ces petites limitations, les ATtiny84 et ATtiny85 restent d'excellents micro-contrôleurs, très performants et permettent de réaliser facilement en environnement arduino des petites merveilles, fiables et très compactes.
I.3. Mise en oeuvre rapide des ARDUINO
Pour l'installation de tout le nécessaire pour créer des projets arduino avec des ATtiny84 et ATtiny85 et charger le programme, voir cet excellent lien (normal, j'y ai contribué :-) ), sur le site d'Alain CLAVERIE.
Note à l'attention des utilisateurs d'arduino sous Window$:
La version de compilateur avr-gcc livrée avec le pack d'installation 1.0.1 pour Window$ du site officiel arduino est trop ancienne pour travailler correctement avec les ATtiny84 et ATtiny85.
Il est donc fortement recommandé d'utiliser le pack d'installation arduino pour Window$ proposé sur le site d'Alain: il inclut directement une version récente du compilateur avr-gcc.
Pour les utilisateurs d'arduino sous Linux, ils peuvent conserver la version du pack d'installation 1.0.1 proposé sur le site officiel.
II. Programmation avancée des ARDUINO
II.1. Le problème à résoudre: ça bloque?
Sur le présent site, l'auteur ne va pas se focaliser sur la mise en oeuvre des arduino UNO, ATtiny84 et ATtiny85 (c'est très bien fait sur le site d'Alain), mais plutôt sur les aspects "programmation" et "organisation logicielle".
En effet, bien qu'abordable pour le débutant, la
programmation arduino souffre
d'un mal qui n'est pas assez
mis en évidence sur les différents forums arduino:
la plupart des fonctions et bibliothèques arduino
sont synchrones, c'est-à-dire "bloquantes". Par exemple, pendant un
delay(5000), l'arduino
est incapable de lire une impulsion RC
venant d'un récepteur à l'aide de la fonction pulseIn().
La conséquence est que bon nombre d'utilisateurs d'arduino se posent la question: mais comment faire en sorte que l'arduino fasse plusieurs choses "en même temps"?
Sur ce site, l'auteur va présenter des solutions pour qu'un arduino puisse faire beaucoup de choses "en même temps". Evidemment, compte-tenu du thème du site RC Navy, les applications seront orientées "modélisme radio-commandé".
II.2. Une solution: la programmation
asynchrone
La programmation asynchrone consiste "simplement" à ne pas attendre qu'un critère soit atteint avant d'exécuter la suite d'un programme arduino.
Sans rentrer dans le détail, cela consiste simplement à tester dans la boucle principale du programme un indicateur qui signale si le critère est atteint ou pas et de faire ou ne pas faire d'action en fonction de l'état de l'indicateur.
Afin d'aider l'utilisateur, l'auteur a développé pour arduino UNO, ATiny84, ATtiny85 et ATtiny167 toute une collection de bibliothèques asynchrones dédiées au modélisme capables de lire des impulsions issues de récepteur RC et capables de générer des impulsions pour piloter des servos ou des variateurs électroniques:
|
détection
des changements d'état des broches de l'arduino en interruption, |
|
lecture
d'impulsion
RC, |
|
génération
d'impulsion
RC, |
|
lecture
d'impulsion
RC et lancement de séquences prédéfinies de servos et/ou d'actions
courtes, |
|
port série logiciel compatible de <TinyPinChange> pour ATtiny84, ATtiny85, ATtiny167, UNO et MEGA. |
|
partie
émission pour port série unidirectionnel
à 200 bauds entre émetteur et récepteur RC. |
|
partie
réception pour port série unidirectionnel à 200 bauds entre émetteur et récepteur RC. |
|
génération en interruption d'un train PPM exactement identique à celui disponible sur la prise "écolage" d'un émetteur RC. |
|
lecture en interruption d'un train PPM, extraction du nombre de voies transportées et de leur largeur d'impulsion. |
|
permet d'utiliser n'importe quelle broche d'un ATtiny85 pour faire du PWM de manière logicielle. |
|
permet de calibrer l'oscillateur interne des ATtiny84 et ATtiny85 pour une utilisation fiable des ports séries logiciels <SoftSerial>. |
Comme il s'agit de bibliothèques, la complexité de la programmation est "cachée" dans les bibliothèques, (les boîtes jaunes-pailles dans la figure ci-dessus). L'utilisateur n'a plus qu'à inclure dans son sketch les bibliothèques, (par un #include <nom_de la_bibliothèque.h>) et à utiliser des fonctions prédéfinies et simples pour son application.
Ces fonctions prédéfinies constituent ce que l'on appelle
l'Application Programming
Interface (API)
ou Interface de Programmation
d'Application (IPA):
il s'agit de la partie visible
de la bibliothèque, on
appelle cela aussi les fonctions
publiques de la bibliothèque. Ce sont les seules dont l'utilisateur doit avoir
connaissance.
Toutes ces bibliothèques ont été testées pour l'arduino UNO par l'auteur et pour les arduino ATtiny84 et ATtiny85 par Alain et sont disponibles, avec aides et exemples commentés, sur la page: la collection de bibliothèques asynchrones.
II.3. Exemples de programmes asynchrones
La suite gratuite LibreOffice est complète et contient:
- Calc (Tableur, équivalent de Excel),Les mesures sont collectées à la volée et la courbe se crée en temps réel.
Depuis la version OpenDaqCalc V2.0, le nombre d'échantillon par seconde est affiché lors de l'acquisition des données.
int x = 0; int row = 0; void setup() { Serial.begin(115200); // opens serial port, sets data rate to 115200 bps Serial.println("CLEARDATA"); Serial.println("LABEL,Time,x,sin(x)"); } void loop() { Serial.print("DATA,TIME,"); Serial.print(x); Serial.print(","); Serial.println(sin(x*PI/180)); delay(200); row+=2; x+=2; if (row >= 360) { row=0; Serial.println("ROW,SET,2"); delay(200); } } |
Concernant OpenDaqCalc, il n'y a pas d'installation, il suffit juste de télécharger package OpenDaqCalc.zip (Version courante: V2.0), le copier sur le disque dur de votre machine (ça ne marche pas depuis une clé USB ou un CD/DVD).
Important: le chemin du répertoire de stockage ne doit pas contenir de caractères spéciaux tels qu'espaces ou caractères accentués.
Une fois le package OpenDaqCalc.zip décompressé, vous obtenez un répertoire OpenDaqCalc contenant tout le nécessaire pour Windows et pour Linux.
Aller dans le répertoire OpenDaqCalc et double-cliquer sur le fichier OpenDaqCalc.ods: Calc s'ouvre automatiquement et demande d'activer la macro contenu dans ce fichier. Cliquer sur "Activer les macros". - dans la liste "Nom de la macro", double-cliquer sur
"Main": l'interface d'accès au port série
s'ouvre.
Depuis la version OpenDaqCalc V2.0, un appui sur F3
lance directement l'interface graphique de la macro.
Note:
Pour que OpenDaqCalc puisse accéder au port série de la machine, la Serial Console de l'EDI arduino ne doit pas être ouverte.IV. Le debugger TinyDbg pour
arduino