7ARN360

1.  Enseignant

Thomas Ouellet FREDERICKS

2.  Contact

Courriel : thomas-ouellet_fredericks à uqac.ca

3.  Galerie

3.1  2015

4.  Introduction à Wiring

5.  Inventaire des fonctions

Les blocs :

void setup() { }
// BLOC D'INITIALISATION.


void loop() { }
// BLOC D'EXECUTION EN BOUCLE.

Le mode d'une broche :

pinMode( #broche , OUTPUT);
// Configurer la broche en tant que sortie.
// c'est a dire qu'elle peut controler le flux de courant.

pinMode( #broche , INPUT);
// Configurer la broche en tant qu'entree.
// C'est a dire qu'elle peut detecter le flux de courant.
// C'est le mode par defaut.

Activer le «pullup» d'une broche(ce qui est nécessaire pour certain circuits):

// Activer le pullup de la broche, ce qui est necessaire pour certain circuits.
pullup(#broche);

Contrôler la tension du courant d'une broche en mode OUTPUT (sortie) :

// Envoyer 5V a une broche (la broche doit etre en mode OUTPUT) :
digitalWrite( #broche , HIGH);

// Envoyer 0V a une broche (la broche doit etre en mode OUTPUT) :
digitalWrite( #broche , LOW);

Lire l'état d'une broche en mode INPUT (entrée) :

// Lire l'etat d'une broche en mode INPUT :
digitalRead( #broche);

// Envoyer 0V a une broche (la broche doit etre en mode OUTPUT) :
digitalWrite( #broche , LOW);

Contrôler le temps :

// Bloquer le code pendant x millisecondes :
delay(x);

6.  Allumer et éteindre une DEL

6.1  Allumer et éteindre la DEL de débogage

«debug_led» :

/*
DESCRIPTION

Allumer et eteindre la DEL de debogage
selon un intervalle fixe de 1000 ms.
*/

// DEBUG_LED
// Bloc de code qui permet d'identifier DEBUG_LED,
// i.e. la broche qui correspond a la DEL de debogage.
// Pour Arduino, DEBUG_LED correspond a la broche 13.
// Pour Wiring, DEBUG_LED est identifie par WLED.
#if defined(ARDUINO)
#define DEBUG_LED 13
#else
#define DEBUG_LED WLED
#endif

// BLOC D'INITIALISATION.
void setup() {

        // Configurer la broche DEBUG_LED en tant que sortie,
        // c'est a dire qu'elle peut controler le flux de courant.
        pinMode(DEBUG_LED, OUTPUT);

}

// BLOCK D'EXECUTION.
void loop() {

        // Envoyer 5V (ce qui allume la DEL) :
        digitalWrite(DEBUG_LED, HIGH);

        // Bloquer le code pendant 1 seconde (1000 ms) :
        delay(1000);

        // Envoyer 0V (ce qui eteint la DEL) :
        digitalWrite(DEBUG_LED, LOW);

        // Bloquer le code pendant 1 seconde (1000 ms) :
        delay(1000);

}

6.2  Allumer et éteindre une DEL branchée à une broche

Nous branchons une DEL et sa résistance à la broche 7. Nous devons remplacer toutes les mentions de «DEBUG_LED» par le numéro de la broche qui est 7.

/*
DESCRIPTION
===========
Allumer et eteindre une DEL branchee
a la broche 7 selon un intervalle fixe de 1000 ms.

CIRCUIT
===========
Broche 7 <-> resistance 150 ohms <-> DEL <-> GND
*/

// BLOC D'INITIALISATION.
void setup() {

        // Configurer la broche 7 en tant que sortie,
        // c'est a dire qu'elle peut controler le flux de courant.
        pinMode(7, OUTPUT);

}

// BLOCK D'EXECUTION.
void loop() {

        // Envoyer 5V (ce qui allume la DEL) :
        digitalWrite(7, HIGH);

        // Bloquer le code pendant 1 seconde (1000 ms) :
        delay(1000);

        // Envoyer 0V (ce qui eteint la DEL) :
        digitalWrite(7, LOW);

        // Bloquer le code pendant 1 seconde (1000 ms) :
        delay(1000);

}

6.3  Exercice : SOS en code morse lumineux

7.  Contrôler un relais DFRobot

7.1  Fonctions

7.2  Activer et désactiver le relais a chaque seconde

/*
DESCRIPTION
===========
Allumer et eteindre un relais DFRobot qui est branche
a la broche 8 selon un intervalle fixe de 1000 ms.

CIRCUIT
===========
Broche 8 <-> D de DFRobot Relay
Broche GND  <-> GND du DFRobot Relay
Broche 5V  <-> VCC du DFRobot Relay
*/

// BLOC D'INITIALISATION.
void setup() {

        // Configurer la broche 8 en tant que sortie,
        // c'est a dire qu'elle peut controler le flux de courant.
        pinMode(8, OUTPUT);

}

// BLOCK D'EXECUTION.
void loop() {

        // Envoyer 5V (ce qui active le relais) :
        digitalWrite(8, HIGH);

        // Bloquer le code pendant 1 seconde (1000 ms) :
        delay(1000);

        // Envoyer 0V (ce qui desactive la DEL) :
        digitalWrite(8, LOW);

        // Bloquer le code pendant 1 seconde (1000 ms) :
        delay(1000);
}

8.  L'interrupteur

8.1  Fonctions

8.2  Allumer et éteindre la DEL de débogage selon l'état de l'interrupteur

/*
DESCRIPTION
===========

Allumer et eteindre la DEL de debogage
selon l'etat d'un interrupteur

CIRCUIT
=======

Broche 9 <-> fil dénudé
GND <-> fil dénudé
*/

// DEBUG_LED
// Bloc de code qui permet d'identifier DEBUG_LED,
// i.e. la broche qui correspond a la DEL de debogage.
// Pour Arduino, DEBUG_LED correspond a la broche 13.
// Pour Wiring, DEBUG_LED est identifie par WLED.
#if defined(WIRING)
int DEBUG_LED = WLED;
#else
int DEBUG_LED = 13;
#endif

// BLOC D'INITIALISATION.
void setup() {

        // Configurer la broche DEBUG_LED en tant que sortie,
        // c'est a dire qu'elle peut controler le flux de courant.
        pinMode(DEBUG_LED, OUTPUT);

        // Configurer la broche 9 en tant qu'entree.
        // C'est a dire qu'elle peut detecter le flux de courant.
        pinMode(9, INPUT);

        // Activer le pullup de la broche 9,
        // ce qui est necessaire pour l'interrupteur
        pullup(9);
}

// BLOCK D'EXECUTION.
void loop() {

        // Le "if ... else if" suivant effectue cette operation :
        // Si la lecture de la broche 9 est LOW, allumer la DEL.
        // Sinon, si la lecture de la broche 9 est HIGH, eteindre la DEL.
        if ( digitalRead(9)  == LOW ) { // Si la lecture de la broche 9 est LOW
                digitalWrite(DEBUG_LED,HIGH) ; // allumer la DEL.

        } else if ( digitalRead(9) == HIGH )  { // Sinon, si la lecture de la broche 9 est HIGH
                digitalWrite(DEBUG_LED,LOW) ; // eteindre la DEL.
        }

}

9.  Contrôler un moteur à courant continu (CC ou DC motor en anglais)

9.1  Fonctions

9.2  Activer le moteur dans une direction, ensuite dans l'autre et ensuite le désactiver

/*
DESCRIPTION
===========
Controler un moteur branche a un
DFRobot Dual H-Bridge.

CIRCUIT
===========
Broche 7 <-> E1 du DFRobot Dual H-Bridge
Broche 6 <-> M1 du DFRobot Dual H-Bridge
Broche GND  <-> GND du DFRobot Relay
Broche 5V  <-> VD du DFRobot Relay

Brancher un moteur aux bornes M1+ et M1- du DFRobot Dual H-Bridge
Alimenter le DFRobot Dual H-Bridge avec une alimentation appropriee
*/


// BLOC D'INITIALISATION.
void setup() {

        // Configurer les broche 7 et 8 en tant que sorties,
        // pour pouvoir y controler le flux de courant.
        pinMode(7, OUTPUT);
        pinMode(6, OUTPUT);

}

// BLOCK D'EXECUTION.
void loop() {

        // Envoyer 5V a la broche 7 (E1) pour activer le moteur.
        // Envoyer 5V a la broche 6 (M1) pour que le moteur tourne dans une direction.
        digitalWrite(7, HIGH);
        digitalWrite(6, HIGH);

        // Bloquer le code pendant 1 seconde (1000 ms) :
        delay(1000);

        // Envoyer 5V a la broche 7 (E1) pour activer le moteur.
        // Envoyer 0V a la broche 6 (M1) pour que le moteur tourne dans l'autre direction.
        digitalWrite(7, HIGH);
        digitalWrite(6, LOW);

        // Bloquer le code pendant 1 seconde (1000 ms) :
        delay(1000);

        // Envoyer 0V a la broche 7 (E1) pour desactiver le moteur.
        digitalWrite(7, LOW);

        // Bloquer le code pendant 1 seconde (1000 ms) :
        delay(1000);
}

9.3  Exercice : allumer ou éteindre un moteur avec un interrupteur


// BLOC D'INITIALISATION.
void setup() {

        // CONFIGURER L'INTERRUPTEUR

        // Configurer la broche 9 en tant qu'entree.
        // C'est a dire qu'elle peut detecter le flux de courant.
        pinMode(9, INPUT);

        // Activer le pullup de la broche 9,
        // ce qui est necessaire pour l'interrupteur
        pullup(9);

        // CONFIGURER LE MOTEUR
        // Configurer les broche 6 et 7 en tant que sorties,
        // pour pouvoir y controler le flux de courant.
        pinMode(7, OUTPUT);
        pinMode(6, OUTPUT);

}

// BLOCK D'EXECUTION.
void loop() {

        // Le "if ... else if" suivant effectue cette operation :
        // Si la lecture de la broche 9 est LOW, faire tourner le moteur dans un sens.
        // Sinon, si la lecture de la broche 9 est HIGH, faire tourner le moteur dans l'autre sens.
        if ( digitalRead(9)  == LOW ) { // Si la lecture de la broche 9 est LOW
                digitalWrite(6, HIGH);
                digitalWrite(7, HIGH);
        } else if ( digitalRead(9) == HIGH )  { // Sinon, si la lecture de la broche 9 est HIGH
                digitalWrite(6, HIGH);
                digitalWrite(7, LOW);
        }

}

10.  Capteur de mouvement Parallax «PIR»

Extrait pour effectuer l'initialisation :


// Configurer la broche BROCHE_PIR en tant qu'entree.
// C'est a dire qu'elle peut detecter le flux de courant.
pinMode(BROCHE_PIR,INPUT);

Extrait pour effectuer une lecture :

// Lire l'etat d'une broche en mode INPUT :
int lecturePIR = digitalRead(BROCHE_PIR);

Exemple ; la DEBUG_LED s'allume si du mouvement est détecté par le PIR :

int BROCHE_PIR = 10;

int DEBUG_LED = 15;

void setup() {
        // Configurer la broche BROCHE_PIR en tant qu'entree.
        // C'est a dire qu'elle peut detecter le flux de courant.
        pinMode(BROCHE_PIR,INPUT);

        // Configurer la broche DEBUG_LED en tant que sortie,
        // c'est a dire qu'elle peut controler le flux de courant.
        pinMode(DEBUG_LED, OUTPUT);
}

void loop() {
        // Lire l'etat d'une broche en mode INPUT :
        int lecturePIR = digitalRead(BROCHE_PIR);

        // Le "if ... else if" suivant effectue cette operation :
        // Si lecturePIR est LOW, allumer la DEL.
        // Sinon, si lecturePIR  est HIGH, eteindre la DEL.
        if ( lecturePIR  == LOW ) { // Si lecturePIR  est LOW
                digitalWrite(DEBUG_LED,HIGH) ; // allumer la DEL.

        } else if ( lecturePIR == HIGH )  { // Sinon, si lecturePIR est HIGH
                digitalWrite(DEBUG_LED,LOW) ; // eteindre la DEL.
        }


}

11.  Capteur de lumière «DFRobot Ambient Light Sensor»

Le capteur de lumière est branché du côté de l'analogique et ne requiert aucune initialisation autre.

Extrait pour effectuer une lecture :

// Effectuer une lecture analogique d'une broche analogique :
int lectureLumiere = analogRead(BROCHE_LUMIERE);

À noter que la lecture du capteur de lumière rapporte une valeur entre 0 (noir total), 100 (lumière ambiante UQAC) et 1000 (lumière forte).

Exemple ; la DEBUG_LED s'allume la lecture de lumière dépasse 100 :

int BROCHE_LUMIERE = 0;

int DEBUG_LED = 15;

void setup() {


        // Configurer la broche DEBUG_LED en tant que sortie,
        // c'est a dire qu'elle peut controler le flux de courant.
        pinMode(DEBUG_LED, OUTPUT);
}

void loop() {
        // Effectuer une lecture analogique d'une broche analogique :
        int lectureLumiere = analogRead(BROCHE_LUMIERE);

        // Le "if ... else if" suivant effectue cette operation :
        // Si lectureLumiere  est plus grand que 100, allumer la DEL.
        // Sinon, si lectureLumiere  est plus petit ou egal a 100, eteindre la DEL.
        if ( lectureLumiere  > 100 ) { // Si lectureLumiere  est plus grand que 100
                digitalWrite(DEBUG_LED,HIGH) ; // allumer la DEL.

        } else if ( lectureLumiere <= 100 )  { // Sinon, si lectureLumiere  est plus petit ou egal a 100
                digitalWrite(DEBUG_LED,LOW) ; // eteindre la DEL.
        }
}

12.  Capteur de distance infrarouge

Le capteur de distance est branché du côté de l'analogique et ne requiert aucune initialisation autre.

Extrait pour effectuer une lecture :

// Effectuer une lecture analogique d'une broche analogique :
int lectureLumiere = analogRead(BROCHE_DISTANCE);

À noter que la lecture du capteur de distance rapporte une valeur entre 50 (loin) et 520 (proche).

Exemple ; la DEBUG_LED s'allume la lecture de distance dépasse 256 :

int BROCHE_DISTANCE = 1;

int DEBUG_LED = 15;

void setup() {


        // Configurer la broche DEBUG_LED en tant que sortie,
        // c'est a dire qu'elle peut controler le flux de courant.
        pinMode(DEBUG_LED, OUTPUT);
}

void loop() {
        // Effectuer une lecture analogique d'une broche analogique :
        int lectureDistance = analogRead(BROCHE_DISTANCE);

        // Le "if ... else if" suivant effectue cette operation :
        // Si lectureDistance est plus grand que 256, allumer la DEL.
        // Sinon, si lectureDistance est plus petit ou egal a 256, eteindre la DEL.
        if ( lectureDistance > 256 ) { // Si lectureDistance est plus grand que 256
                digitalWrite(DEBUG_LED,HIGH) ; // allumer la DEL.

        } else if ( lectureDistance <= 256 )  { // Sinon, si lectureDistance est plus petit ou egal a 256
                digitalWrite(DEBUG_LED,LOW) ; // eteindre la DEL.
        }
}

13.  Augmenter le nombre de broches 5V et GND

14.  Tout brancher

15.  Servomoteur

Importation de la logithèque (à faire une seule fois dans le code) :

#include <Servo.h>

Variables globales :

Servo servo1; // Une instance du servomoteur

Setup :

servo1.attach(BROCHE_SERVO); // Lier l'instance a une broche

Loop :

servo1.write(90); // Determiner l'angle du moteur

Exemple ; le moteur alterne entre trois angles à chaque seconde:

#include "Servo.h"

Servo servo1; // Une instance du servomoteur

void setup() {
        servo1.attach(11); // Lier l'instance a une broche;
}

void loop() {
        // Determiner l'angle du moteur a 90 degres
        myservo.write(90);

        delay(1000);

        // Determiner l'angle du moteur a 120 degres
        myservo.write(120);

        delay(1000);

        // Determiner l'angle du moteur a 30 degres
        myservo.write(30);

}

16.  Calendrier des prochains jours

17.  Travail final

Réaliser une page Web qui contient les éléments suivants :

Voici quelques exemples tirés d'un autre cours : http://wiki.t-o-f.info/EDM4640/Projets