Les cartes programmables quelque soient leurs formes sont toutes dotées de multiple moyens de communiquer que ce soit avec des composants, des modules ou d'autres cartes. Je vais essayer de vous en expliquer le fonctionnement et vous montrer de petits projets qui les utilisent.

 

Alimentation

La prise USB permet d'obtenir une tension de 5V du PC pour votre carte, la prise jack accepte une tension comprise entre 7V et 12V et la broche Vin accepte aussi entre 7 et 12V, les deux dernières se situent avant le régulateur qui passe en 5V pour l'Arduino.

La broche 5V et la 3.3V sont des sorties pour alimenter vos modules mais limitées par le régulateur de votre carte,la 3.3V peut sortir jusqu'à 50mA, elle est surtout pour les petits modules.

Les GND fournissent une masse à vos modules.

La broche RESET permet de redémarrer votre carte

IOREF donne la tension de référence de la carte (5V sur Uno), AREF c'est pour les mesures, elle donne la tension analogique de référence afin d'améliorer la précision si elle est inférieure à 5V. 

Digitales

Ce sont les broches représentées par un numéro simple, avec ou sans le tilde (~), avec aucune lettre collée. Les RX et TX sont utilisables en digital aussi mais c'est déconseillé car elles sont reliées à la communication en série USB donc au téléversement des programmes et l'affichage dans le moniteur série.

Avec le mode digital, c'est très simple, c'est soit TOUT (HIGH -> 5V), soit RIEN (LOW -> 0V), et ça marche aussi bien pour recevoir du courant (pinMode(NUMERO_PIN, INPUT)) que pour en envoyer (pinMode(NUMERO_PIN, OUTPUT)). 

Pour envoyer une valeur entre HIGH et LOW sur une broche, il faut utiliser digitalRead(NUMERO_PIN) pour le mode INPUT et pour le mode OUTPUT, c'est digitalWrite(LOW); ou digitalWrite(HIGH);. HIGH et LOW ne sont pas des valeurs booléennes mais numériques, ne vous faites pas avoir dans vos if ou autre.

Attention: Le mode INPUT doit retourner une valeur stable et ce n'est pas le cas si on utilise un interrupteur connecté à 5V et GND, car quand le bouton n'est pas appuyé, ça revient à avoir un fil non connecté et les valeurs électriques d'un fil flottant ne sont pas stables, il est donc nécessaire de créer un pont entre 5V et GND pour envoyer une infime quantité d'énergie (mais stable) à la broche d'entrée à l'aide d'une résistance forte (10Kohms sont suffisants). Votre carte possède aussi une résistance interne pour ce cas, il faut juste remplacer INPUT par INPUT_PULLUP dans pinMode().

La broche n°13 est reliée à une LED sur la carte Arduino et permet de servir de témoin dans vos projets, il suffit de passer le pin en mode OUTPUT et de lui donner une valeur HIGH ou LOW.

J'ai créé le projet LED et interrupteur en digital sur un Arduino Uno afin de vous montrer l'utilisation de base des broches en digital.

 

UART (en série ou Serial)

Les broches 0 (RX) et 1 (TX) sont réservées pour la communication en série et elles sont reliées au RX et au TX de la prise USB donc au téléversement et au moniteur série. RX reçoit les données et TX les transmet. Il est fortement conseillé de garder ces broches pour la communication en série de la carte, elle est utile pour débugger et afficher des choses sur le moniteur série même si elles peuvent tout à fait être utilisées, il faut juste les libérer lors du téléversement d'un programme et le moniteur série ne sera pas utilisable ou alors directement lié au module que l'on branches sur 0 et 1.

Vous pouvez aussi choisir d'autres broches pour faire de la communication en série en utilisant la librairie SoftwareSerial. Attention: sur certaines cartes comme l'Arduino Mega, toutes les broches ne peuvent pas être utilisées pour de la communication en série (sur le Mega les pins autorisés pour RX sont: 10, 11, 12, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69), en revanche elle possède plusieurs liaison en série donc plusieurs RX et plusieurs TX). 

Sur les cartes Arduino ou Genuino, le débit maximum supporté par RX est de 57600 bauds et la broche 13 ne peut pas être utilisée comme RX.

Le projet Utilisation des commandes AT sur un HC05 utilise le protocole UART, vous pourrez voir les différentes façons d'utiliser la communication en série.

 

PMW

Ce sont des broches digitales mais elles ont un tilde (~) à côté du nombre, elles sont capables d'avoir une sortie analogique en imitant les variations de courants par des variations de largeur d'impulsions, les broches digitales n'ont que deux possibilités, c'est 5V ou c'est 0V, aucune broche en sortie sur une Arduino (les analogiques ne sont valables qu'en INPUT) n'est capable d'envoyer 2.5V, la PMW permet d'envoyer un clignotement entre 5V et 0V extremement rapide et calé dans le temps pour simuler une tension de 2.5V.

 

Analogiques

Elles possèdent un A collé au numéro pour mieux les reconnaître elles ne sont accessible qu'en INPUT, elles servent souvent pour les capteurs que ce soit de température, son ou autre.

Pour lire la valeur d'une entrée analogique, il faut utiliser la fonction analogRead(NUM_PIN) qui renvoi un entier compris entre 0 et 1023.

 

I2C (Inter-Integrated Circuit)

Les broches A4 (SDA: serial data) et A5 (SCL: serial clock) de l'Arduino Uno peuvent s'occuper du mode I2C, ça permet de relier beaucoup de capteurs, écrans OLED, et bien d'autres modules en utilisant simplement que deux fils grace à la bibliothèque Wire. Sur le Mega, il y'a des broches réservées, 20 pour SDA et 21 pour SCL. Il permet de brancher jusqu'à 127 modules différents en parallèle sur les deux mêmes fils.

L'I2C utilise un système de "Maître" (l'Arduino) et d' "Esclaves" (les modules). Chaque module possède une adresse unique (comme une adresse postale). L'Arduino envoie l'adresse du module avec qui il veut parler sur le fil, et seul ce module répond.

SPI (Serial Peripheral Interface)

C'est le protocole le plus rapide, il utilise également un système de Maître/Esclaves, mais au lieu d'utiliser des adresses logiques, il utilise un fil de sélection physique pour chaque module connecté. Sur un Arduino Uno les broches sont: 

10 SS Slave Select
11 MOSI Master Out Slave In
12 MISO Master In Slave Out
13 SCK Serial Clock + LED intégrée