Skip to main content

Nous allons découvrir ensemble ce qu’est l’Arduino et à quoi cela peut-il servir. Nous apprendrons ensemble les bases du langage de programmation de l’Arduino, ainsi que quelques notions de POO (programmation orienté objet) qui peuvent s’avérer très utiles lorsque vos codes commencent à être compliqués.

Bien entendu, nous apprendrons comment utiliser les capteurs les plus répandus ainsi que des bases en électroniques pures. De plus, des cours complémentaires sur des composants standards (diode, diode Zener, transistor PNP/NPN…) apparaîtront.

L’équipe de rédaction de SimpleDuino s’efforcera de mettre à jour ces cours, et en y ajoutant les liens nécessaires vers des cours et tutoriels complémentaires.

Si vous avez des questions ou remarques particulières, n’hésitez pas à entrer en contact avec nous en écrivant à [email protected] ou en posant directement votre question sur le forum.

I) L’Arduino

1°) Historique

L’Arduino est une carte programmable développée autour d’une puce AtMega328 (pour l’Arduino UNO) produite par la société Atmel. D’autres modèles de carte Arduino existent. Ces modèles vous sont décrits dans la partie suivante.

L’Arduino a été créée par Massimo Banzi en 2005. Massimo Banzi, professeur de design à, souhaitait rendre ludique et facile l’apprentissage de la programmation des microcontrôleurs à ses élèves, débutants en informatique, afin de rendre les objets intelligents. Il décida, avec ses associés, d’inventer une carte programmable fonctionnant sous un langage de programmation simple et accessible à tous.

Image du prototype Arduino

Image du prototype Arduino

2°) Tableau comparatifs des différents modèles

Tableau comparatifs des principaux modèles (non exhaustif)

Tableau comparatifs des principaux modèles (non exhaustif)

3°) Cartographie des entrées/sorties de l’Arduino UNO

Etant l’Arduino le plus utilisé par les débutants, nous allons voir ensemble la cartographie de l’Arduino UNO afin de vous expliquer comment lire un schéma électronique. La lecture des autres cartes étant similaire, je vous laisse explorer le site d’Arduino afin de savoir ce que nos chères cartes ont dans le ventre. Vous pouvez retrouver le schéma électronique de l’arduino UNO ici. Les schémas de toutes les cartes Arduino se trouvent sur leur site. N’hésitez pas à être curieux !

Voici une vue d’ensemble de l’arduino UNO :

Schema_Arduin_UNO_explicatif

Schema Arduino UNO explicatif

Vous pouvez remarquer qu’il se trouve deux puce AtMega. Une AtMega 16u2 qui permet de convertir les données USB en données série, et la puce AtMega 328p qui est le microcontrôleur.

Sur les Arduino, quel que soit la carte, deux types d’entrées/sorties sont à différencier. Les entrées/sorties numériques et les entrées analogiques.

  • 1: Régulateur de tension 12V-5V DC
  • 2: Quartz
  • 3: Entrées analogiques
  • 4 et 5: Entrées/Sorties numériques
  • 6: Pins d’alimentations

Les parties précédemment énoncées désignent les éléments indispensables au fonctionnement d’un arduino. Grâce à ces éléments, il est possible de refaire soit même un arduino afin d’en minimiser la taille ou d’en optimiser les performances. Vous pouvez aller visiter le tutoriel suivant https://simple-duino.com/realiser-arduino-maison/ pour apprendre à réaliser un arduino.

II) Le langage Arduino

1°) Installation et découverte de l’IDE Arduino

L’IDE Arduino est un logiciel permettant de générer un code et de l’implémenter sur le microcontrôleur. Vous pouvez télécharger le logiciel Arduino IDE sur le site officiel d’Arduino.

Une fois téléchargé, lancez l’assistant d’installation, et suivez les instructions.

a) Décomposition de l’environnement de travail

L’IDE Arduino se décompose en 5 zones.

  • Zone 1: Bouton de téléversement
  • Zone 2: Bouton de lancement du port série. En cliquant sur ce bouton le port série va s’ouvrir. De cette fenêtre vous pourrez lancer des actions via des commandes envoyées sur l’Arduino par l’ordinateur.
  • Zone 3: Zone de code. C’est dans cette zone que vous allez écrire le code à implémenter sur l’Arduino.
  • Zone 4: Console de débogage. La console vous permet de visualiser où se situent les erreurs et quels sont les types d’erreurs.
  • Zone 5: Information de la configuration de l’IDE. Vous avez une vue d’ensemble de la carte que vous avez sélectionné et du port auquel vous vous êtes rattachés.
IDE Arduino explicatif

IDE Arduino explicatif

b) Le code Arduino

Le code Arduino est basé sur le langage C. Il est cependant arrangé pour qu’il soit plus simple à utiliser et par conséquent il demande moins de temps pour l’apprendre. Seul la logique de programmation est commune à tous les langages, que ce soit du Java, du C#, du C++, etc… Mais n’ayez pas peur, ce n’est pas très compliqué.

Nous allons énoncer les principales fonctions que vous devez connaître. Des explications supplémentaires se trouvent dans les tutoriels du site.

pinMode(pin, INPUT/OUTPUT);

Cette fonction permet de définir les pins comme étant des pins d’entrée ou de sortie.

digitalWrite(pin, etat);

« etat » peut être « HIGH/LOW », ou un nombre compris entre 0 et 255 pour les PWM reconnaissable avec le ~.

digitalRead(pin);

Récupère l’information (0 ou 1) d’un pin numérique.

analogRead(pin);

Récupère l’information d’un pin analogique.

III) Notions d’électroniques

1°) Loi d’Ohm, loi des Mailles, loi des Noeuds

Toute l’électronique, ou électricité en général, repose sur trois loins fondamentales qui sont la loi d’Ohm, la loi des Mailles et la loi des Noeuds.

a) Loi d’Ohm

La loi d’Ohm est la loi qui lie l’intensité, la tension et la résistance.

Loi d'Ohm

Loi d’Ohm

Avec:

  • U: Volt
  • R: Ohm
  • I: Ampère

Vous pouvez manipuler cette loi dans le sens que vous voulez, permettant ainsi de déduire des valeurs de résistances à mettre en série avec une LED par exemple. Cette loi va également beaucoup vous servir pour résoudre vos problèmes de dimensionnement de composant en complément des lois des mailles et des nœuds.

b) Loi des Mailles

La loi des mailles est une loi permettant d’établir des équations d’une maille fermée.

La loi des Mailles assure:

Loi des Mailles

Loi des Mailles

c) Loi des Noeuds

La Loi des nœuds dans un circuit est présente dès lors que votre montage comporte plusieurs branches. Le lieu de rencontre de ces « branches » s’appelle un « nœud ».

La loi des noeuds assure:

Loi des Noeuds

Loi des Noeuds

2°) Les entrées-sorties numériques

Les entrées et sorties numériques (digitales) se traitent de manière similaire. Il s’agit d’un signal binaire (0-5v). Dans un cas l’arduino est capable de générer un signal carré d’amplitude 5v, et dans l’autre l’arduino est capable d’interpréter un signal reçu en créneaux de 5v.

Vous pouvez trouver plus d’informations sur ce tutoriel expliquant les entrées et sorties numériques.

3°) Les entrées analogiques

Contrairement aux broches numériques, les broches analogiques ne fonctionnent qu’en entrée.  Il est impossible de générer un signal analogique (signal dont les variations sont continues dans les temps) à l’aide d’un arduino. Vous en avez sans doute tous déjà utilisé, les GBF permettent de générer de tel signaux, qu’ils soient sinusoïdaux, en créneaux ou en triangles.

Une donnée analogique va être, dans la quasi-totalité des cas, générée par un capteur (température, luminosité, humidité…). En effet, le capteur va fournir une image de la tension en fonction du temps. La fonction permettant de récupérer cette valeur avec l’arduino est :

analogRead(analog_pin);

Vous pouvez trouver plus d’informations sur ce tutoriel expliquant les entrées analogiques.

4°) La fonction PWM (Pulse Width Modulation)

La fonction Pulse Width Modulation (PWM) est un signal dont on fait varier le rapport cyclique afin que la fréquence varie.

Définition du rapport cyclique

Définition du rapport cyclique

Le rapport cyclique est défini comme:

Formule Rapport Cyclique

Formule Rapport Cyclique

Avec:

  • ton: temps à l’état haut
  • T: Période du signal
  • a: Nombre compris entre 0 et 1 (souvent on parle en %)

Imaginez que vous avez devant vous une diode. Plus le rapport cyclique est grand, plus l’intensité lumineuse de la diode sera importante. Le temps à l’état haut correspond au temps auquel la diode va s’allumer, puis le temps à l’état bas correspond au temps auquel la diode va s’éteindre. C’est cet enchainement d’état qui fait varier la fréquence et donc l’intensité lumineuse pour une LED, ou la vitesse de rotation pour un moteur par exemple.

La fonction PWM permet de faire varier ce rapport cyclique, et donc la fréquence de l’état haut. Pour se faire, nous utilisons la fonction « digitalWrite(nomPin, pwm) », où « pwm » désigne un nombre compris entre 0 et 255 qui correspond au rapport cyclique du signal.

Explication PWM

Explication PWM

On pourrait faire l’amalgame avec une entrée « analogique », mais gardez à l’esprit que nous ne travaillons qu’avec des signaux binaires, donc avec une amplitude fixe.

5°) Les fonctions delay(), millis()

La gestion du temps est une chose très délicate et difficile à assimiler. Vous allez souvent (tout le temps ?) être confronté à la manière dont vous allez gérer le temps. Faut-il que mon programme puisse faire quelque chose pendant une attente ? Comment puis-je simuler une horloge ?

La fonction que vous allez utiliser va dépendre de la tâche que vous souhaitez réaliser. La fonction « delay() » fait une pause dans le programme, et il est impossible de demander au microprocesseur de faire une action pendant cette pause. On « gèle » le déroulement du programme.

Nous préférerons utiliser la fonction « millis() » bien qu’elle soit beaucoup plus difficile à comprendre. Cette fonction va compter, sans jamais s’arrêter, le temps d’exécution du programme. C’est pourquoi il faut utiliser des conditions pour savoir quand vous souhaitez réaliser une action.

Vous pouvez donc vous demander comment détecter qu’une seconde c’est bien écoulée !

Pour cela il faut se repencher un peu dans les mathématiques et se rappeler la notion de la division euclidienne. La division euclidienne est une division qui a deux entiers appelés dividende et diviseur, associe deux entiers nommés quotient et reste. Justement, nous allons utiliser cette propriété mathématique. L’outil mathématique « modulo » (%) va effectuer cette opération.

Reste = millis() % 10000;
if(Reste == 0) {Serial.println("BOUM");}

Quand millis() est égal à 10000, 20000, 30000, etc… le « reste » sera égal à zéro. Ce qui signifiera que 10 secondes se seront écoulées. Si millis() n’est pas égal à 10000 ou un multiple de 10000, alors « reste » ne sera pas égal à zéro. Donc la boucle « if » ne sera pas exécutée.

Bien entendu, vous n’êtes pas obligé d’utiliser la fonction millis() uniquement pour cette utilisation. Mais grâce à ça, vous pouvez effectuer des actions pendant ces « attentes ».

IV) Les protocoles de communication

1°) La liaison série

La liaison série, aussi qualifiée de « UART » en anglais pour « Universal Asynchronous Receiver Transmitter », est un protocole essentiel dans la programmation Arduino. En fait, vous ne le savez peut-être pas mais chaque fois que vous appuyez sur « Téléverser », l’IDE Arduino va transmettre une série d’instruction à la puce (Atmega328P dans le cas d’un UNO) afin de la reprogrammer.

L’un des avantages majeurs de la liaison série, c’est sa simplicité de mise en œuvre. En effet, puisque l’Arduino embarque directement une librairie dédiée, il n’y a absolument aucune difficulté à initier une telle communication. Cela permet de « débuger » rapidement des programmes en visualisant à l’écran des variables que nous aurons auparavant demandé à l’Arduino d’afficher sur le port série. Cependant, la liaison série ne se limite pas seulement à des opérations de débogage et son utilisation peut être bien plus poussée. C’est le cas notamment lors de l’utilisation du module SM130, un lecteur RFID, qui fonctionne via le protocole série. Vous retrouverez un tutoriel sur notre site à l’adresse suivante: https://simple-duino.com/utilisez-les-datasheets-et-decouvrez-le-module-sm130/

Dans la continuité, l’utilisation des modules tels que les ESP8266 permettant la transmission/réception d’information par wifi requiert une bonne connaissance du protocole série. Vous trouverez un premier tutoriel sur ces modules en suivant le lien suivant: https://simple-duino.com/decouvrez-la-communication-wifi-low-cost-avec-arduino/

Il est essentiel de comprendre que la liaison série constitue un excellent outil de développement tout autant qu’un protocole de communication à part entière. Une fois que cette notion est maitrisée, on gagne largement en temps de développement puisqu’on peut alors localiser bien plus facilement les points critiques de notre programme.

2°) Les liaisons SPI et I2C

Parfois, la liaison série ne permettra pas d’interagir avec des circuits intégrés ou des modules bien spécifiques. En fait, c’est une situation qui est assez récurrente même. Généralement, ces modules utilisent la communication I2C plus que SPI. Un exemple concret de communication SPI (Serial Peripheral Interface) pourrait être le shield officiel Arduino. Il utilise en effet les six pins situés absolument à droite de votre Arduino UNO (ceux qui sont regroupés au-dessous de la vis de fixation).

Pour l’I2C, les applications sont bien plus courantes et les exemples d’utilisations bien plus nombreux. En fait, nous nous sommes très souvent retrouvé face à des circuits à contrôler via I2C, c’est le cas notamment de convertisseurs Analogiques/Numériques ou encore de circuits RTC (Real Time Clock).

Un protocole I2C, pour Inter-Integrated circuit, fonctionne en fait sur le principe de maitre/esclave. On a un module maitre, dans notre cas l’Arduino, et plusieurs modules esclaves dont les adresses sont différentes. Bien souvent, l’adresse I2C du circuit est spécifiée dans la documentation et n’est pas modifiable. Il arrive cependant que certains pins aient été prévus sur les circuits pour modifier quelques bits de l’adresse. Le protocole I2C utilise deux fils, SDA (Serial Data Line) et SCL (Serial Clock Line). Vous le comprendrez donc aisément, on a une ligne de donnée et une ligne d’horloge. Pour faire simple, à chaque fois que la ligne SCL passe à l’état Haut, l’état actuel de la ligne SDA est transmis au circuit intégré. Si SDA est à 0, le circuit reçoit donc 0 et si SDA est à 1, le circuit reçoit un 1.

Bien entendu, le protocole n’est pas aussi simple que ça. Vous vous souvenez qu’il est question d’adresse mais aussi d’acquittement des données, de bit de Start, de Stop, etc… Heureusement, Arduino va nous permettre de simplifier grandement le travail grâce à la librairie Wire.h dont vous pourrez retrouver un exemple d’application en suivant le lien suivant: https://simple-duino.com/module-ds1307-chez-sparkfun/.

V) Composants et modules

1°) Les diodes, LED

a) Diodes et diodes Zener

Les diodes sont des semi-conducteurs permettant de protéger un circuit. En effet, ce composant ne laisse passer le courant que dans un sens, le bloquant dans l’autre jusqu’à ce que la tension du circuit soit supérieure à la tension de claquage de la diode auquel cas la diode se détruit.

Schéma diode

Schéma diode

La diode Zener est quant à elle faite pour ce type d’utilisation. Cette diode, souvent montée en parallèle du composant auquel elle lui est rapportée,  va faire office de coupe circuit lorsque la tension parcourant le circuit est trop importante et risque de détériorer le composant à protéger. La diode Zener, va, à ce moment-là « claquer » et le courant va ainsi passer à travers elle plutôt que le composant monté en parallèle.

Schéma diode Zener

Schéma diode Zener

Une des utilisations intéressantes est la mise en place d’une diode Zener de 5v en parallèle d’un fils branché à un Arduino afin d’éviter des « retours » de courant supérieurs à 5v risquant de détériorer la carte.

b) LED

Une LED (DEL en français, diode électroluminescente) est un semi-conducteur capable d’émettre de la lumière lorsque d’un courant la parcourt. La LED ne laisse passer le courant que dans un sens.

Les LED fonctionnent souvent avec des courants faibles. C’est pourquoi l’utilisation de résistance est obligatoire. La valeur de la résistance nécessaire est obtenue grâce à la loi d’Ohm énoncé auparavant. Les datasheets des constructeurs fournissent les informations nécessaires au calcul de cette résistance.

Schéma diode électroluminescente

Schéma diode électroluminescente

2°) Les résistances et potentiomètres

a) Les résistances

Une résistance est un composant passif permettant de protéger un composant en abaissant la tension ou le courant le traversant.

Chaque résistance est référencée grâce à sa valeur qui peut être lue en observant ses bandes de couleurs.

Code couleur résistance

Code couleur résistance

De plus, il est possible de monter en série et en dérivation un ensemble de résistance permettant ainsi d’obtenir de nouvelles valeurs.

  • En série: La valeur de la résistance équivalente des résistances montées en série s’additionne:

Req_Serie

  • En parallèle: La valeur de la résistance équivalente des résistances montées en parallèles s’obtient de la manière suivante:

Req_Parallele

b) Les potentiomètres

Les potentiomètres sont des résistances variables. Il en existe deux sortes, les linéaires et les rotatifs.

Les deux potentiomètres fonctionnent sur le même principe. Un curseur, dont nous définissons sa position, se déplace sur une piste en carbone. La distance du fil entre la broche d’entrée et le curseur défini une valeur de résistance que l’on va noter R1, et une seconde valeur de résistance R2 est définie entre le curseur et la broche de sortie. Il ne resta plus qu’à appliquer un pont diviseur de tension.

Schéma potentiomètre rotatif

Schéma potentiomètre rotatif

Eh oui !  Un potentiomètre est un pont diviseur de tension variable !

3°) Quelques composants utiles

a) Les condensateurs et bobines

b) Les transistors et relais

Les transistors sont des semi-conducteurs à jonction PN qui, lorsqu’il est commandé, permet d’être utilisé comme interrupteur. Il existe deux types de transistors, les PNP et les NPN. Les plus utilisés sont les transistors NPN, c’est pourquoi nous expliquerons essentiellement le fonctionnement de ce type de transistor.

Chaque transistor possède trois broches.

  • B: Base
  • C: Collecteur
  • E: Emetteur
Schéma des transistors

Schéma des transistors

En appliquant un courant sur la base, le passage entre le collecteur et l’émetteur s’effectue.

c) Les AOP (Amplificateur Opérationnels)

d) Capteur de température

e) Capteur de luminosité (photorésistance, photodiode)

Les capteurs de luminosité sont des composants électroniques permettant de générer une grandeur physique (résistance, intensité) en fonction de son exposition à la lumière. Les deux grandes familles de capteur de luminosité sont :

  • Les photorésistances
  • Les photodiodes

La photorésistance est une résistance variable en fonction de son exposition à la lumière.

Si vous souhaitez découvrir comment utiliser dans un projet une photorésistance, je vous encourage à aller visiter ce tutoriel.

La photodiode est un semi-conducteur capable de générer une intensité en fonction de son exposition à la lumière. L’intensité générée par la photodiode est souvent de l’ordre du µA ou mA. Vous le savez très bien maintenant, la seule grandeur physique que l’arduino est capable de mesurer est une tension. C’est pourquoi il est nécessaire de convertir l’intensité générée par la photodiode en tension. Pour réaliser cette action on utilise généralement un montage à transimpédance (convertisseur courant-tension).

Montage à transimpédance avec photodiode

Montage à transimpédance avec photodiode

De plus, ce montage à transimpédance permet d’amplifier le signal afin qu’il puisse être interprété par l’arduino.

Remarque : L’AOP à besoin d’être alimenté en 5v (Vcc) et -5v (Vdd). La tension de -5v n’est pas naturelle. Il est néanmoins possible de l’obtenir en utilisant un composant « lmc7660 ».

4°) Des modules intéressants

Lors de la réalisation de vos projets, vous serez souvent confronté au choix technologique à utiliser pour transmettre des données. Par exemple lors de l’utilisation d’un pupitre, manette de commande pour contrôler votre mécanisme. Nous allons voir ensemble les avantages et inconvénients de chacune des technologies suivantes.

a) Modules Wifi

Grâce à la miniaturisation et à la diminution du coût des composants, la technologie wifi est devenue quelque chose de relativement simple à mettre en œuvre, notamment grâce aux modules ESP8266. Ce sont des modules qui coûtent entre 1$ et 3$ et qui sont pilotables via liaison série en transmettant simplement des commandes « AT », un standard en communication série. La porte du signal est de l’ordre d’une quinzaine de mètres mais dépend fortement de l’agencement des pièces.

L’utilisation de tels modules se révèle être un peu complexe au début mais devient rapidement simplissime face à la complexité de plus gros modules et plus coûteux comme le wifi shield officiel d’Arduino.

Vous pourrez retrouver un premier tutoriel sur les modules wifi ESP8266 sur notre site.

b) Module Bluetooth

L’avantage majeur du Bluetooth, c’est que presque tout le monde possède aujourd’hui un smartphone capable d’échanger des données en Bluetooth. L’un des inconvénients cependant, c’est la faible portée du signal Bluetooth (qui est cependant gage de sécurité dans certains cas).

Tout comme pour le wifi, il existe des modules low-cost et qui fonctionne par liaison série grâce à des commandes « AT ». L’un de ces modules serait alors le HC-05.

c) Module RF (radiofréquence)

Bien souvent, la radiofréquence se révèle être le moyen de communication le plus simple et rapide à mettre en œuvre. Un détail peut-être qui pourrait pourtant avoir un intérêt important, le signal radio est l’un des seuls capables d’évoluer dans un milieu aquatique. On trouve des kits émetteur/récepteur radiofréquence pour quelques euros sur internet et leur utilisation reste relativement simpliste comme en témoigne ce tutoriel disponible sur notre site.

 

L’Arduino n’a pas de limite, il répond à votre imagination.


Voilà ! Vous voici prêt pour concevoir et développer vos propres systèmes électroniques, domestiques ou autres. N’hésitez pas à laissez vos commentaires mais aussi à partager vos connaissances sur le forum.


Grégoire A., Thomas A., Fabien A.

Grégoire Aubret

Co-fondateur SimpleDuino, Co-fondateur SimpleDomo. Ingénieur de l'Ecole Catholique des Arts et Métiers (ECAM).

One Comment

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.