Vous êtes sur la page 1sur 4

Chapitre 3

LES APPLICATIONS DE LA CARTE ARDUINO


I. LES ENTREES/SORTIES NUMERIQUES
I.1. Les entrées parallèles
Ces entrées sont utilisées pour :
- Connaître l’état des divers éléments : commutateurs, poussoirs, roues codeuse,
codeuse capteur TOR.
- Pour vérifier la présence ou l’absence de tension sur certains dispositifs au moyen de photocoupleur
d’isolement (voir figure 1 de l’annexe)
l’annexe).
- Pour scruter un clavier de commande.

 Le problème de rebondissement
ndissement :
Lors de fermeture ou ouverture d’un commutateur on a ce problème de rebondissement.
C'est-à-dire l’ouverture
ure ou la fermeture du contact ne se fait pas immédiatement mais qu’elle est assortie
d’une multitude d’oscillations parasites (quelques m
microsecondes).

Les solutions :
- par un montage d’anti-rebondissement
rebondissement (figure ci
ci-dessous).
- Par programmation.

Avec ce montage on peut programmer l’utilisation d’un bouton de la manière suivante :


int pin_LED = 13; // port numérique associé à la LED intégrée
int pin_button = 2; // port numérique lié au bouton poussoir
int state = LOW; // variable d'état de la LED

void setup() {
pinMode(pin_LED, OUTPUT); // réglage du port de la LED en mode SORTIE
pinMode(pin_button,, INPUT); // réglage du port du bouton en mode ENTREE
}

void loop() {
if (digitalRead(pin_button) == HIGH) { // si le bouton est pressé ...
state = !state; // ... inversion de la variable d'état de la LED (allumée<
(allumée<->éteinte)
}
digitalWrite(pin,
(pin, state); // action sur la LED (allumage ou extinction)

// Suite du programme ... simulé par une instruction d'attente


delay(100);
}

LFEEA2-FST E. FEKI
1
I.2. Les sorties numériques parallèles

 Commande LED (voir la figure 2 de l’annexe)

 Command de relais (voir les figures 3 et 4 de l’annexe)


 Commande directe de charges reliées au secteur (voir la figure 6 de l’annexe).
 Commande directe de charges alimentées en continu (voir la figure 7 de l’annexe).
 Commande directe d’afficheurs à LED (7 segments)
Exemple faire un programme qui est capable d’afficher les chiffres de 0 à 9 en utilisant un afficheur
7 segments a cathode commune (afficher le chiffre 4 à titre d’exemple)

Pour alléger le programme : on utilise un tableau de codage précisant, pour chaque chiffre à afficher, quels
sont les segments à allumer

LFEEA2-FST E. FEKI
2
Exemple : Utilisation d’un afficheur LCD en mode 4 bits. (voir figure 8 de l’annexe)

#include <LiquidCrystal>
// Définition du mode de connexion de l’afficheur ; ici en mode de 4 bits avec R/W à la masse
…………………………………………

void setup()
{
// type d’afficheur ici 2 lignes, 16 caractères
lcd.begin(16, 2) ;
}

void loop()
{
//positionnement du curseur ligne0, colonne 5
lcd.setCursor(5, 0);
// Affichage du mot « Arduino »
lcd.print(« Arduino ») ;
lcd.setCursor(5,1) ;
//Affichage du temps de fonctionnement du programme exprimé en secondes
lcd.print(millis()/1000) ;
}
II. LES ENTREES/SORTIES ANALOGIQUES :
capteurs, potentiomètres, gradateurs et moteurs
II.1. Les entrées analogique : Utilisation d’un capteur délivrant une tension analogique

Exemple : mesure de la température au moyen d’un LM35 utilisant l’arithmétique en virgule flottante
LM 35 (10mV / °C)

#define capteur 4
float temperature;
float tension;
void setup()
{
serial.begin(9600);
}
void loop()
{
tension = ((analogRead(capteur) * 4.9)/1024); // conversion en tension réelle
temperature = tension/0.01 ;
serial.println(" Temperature : ") ;
serial.print(temperature) ;
delay(1000);
}
LFEEA2-FST E. FEKI
3
II.2. Les sorties analogiques PWM
PWM : signal permettant de doser avec une grande efficacité la puissance appliquée a des charges
alimentées sous une tension continue (ou analogique).
La tension en PWM a plus de performance car on utilise des transistors de commutation (faible dissipation).

Exemple1 : faire varier la luminosité d’une LED en PWM à partir d’un potentiomètre.

Exemple d’application : commande d’un servo-moteur

/*
Commande de servo-moteur par impulsion Nanomaître 2015
Le servo est connecté au pin 8 de l'arduino */

int periode=20000;// période entre chaque début d'impulsion en microsecondes


int pinServo=8; // variable pour le pin connecté à la commande du servo

void setup() {
pinMode(pinServo,OUTPUT);// on prépare le pin en mode OUTPUT
digitalWrite(pinServo,LOW); // on l'initialise à l'état bas
}

//boucle principale
void loop() {
for (int angle=0;angle<=180;angle+=20){//on fait varier l'angle de 0 à 180° par tranche de 20°
setAngle(angle);// on appelle la fonction setAngle définie plus bas
}
}

//fonction setAngle pour envoyer les impulsions


void setAngle(int a){
int duree=map(a,0,179,1000,2000);// on transforme l'angle en microsecondes et on stocke dans la
variable duree
digitalWrite(pinServo,LOW);//on met le pin à l'état bas

// la boucle qui suit est nécessaire


// pour laisser le temps au servo d'aller à sa position
for (int t=0;t<300;t++){
digitalWrite(pinServo,HIGH);// on envoie l'impulsion
delayMicroseconds(duree); // pendant la bonne durée
digitalWrite(pinServo,LOW); // on stoppe l'impulsion
delayMicroseconds(periode-duree); // on attend le temps restant pour atteindre la période
}
}

LFEEA2-FST E. FEKI
4

Vous aimerez peut-être aussi