View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Commander un relais à l'aide d'un BP avec une carte Arduino

ARDUINO - INITIATION - BP - PUISSANCE ON OFF
Par X. HINAULT - Créé le 03/03/2010

Présentation

Ce programme commande à l'aide d'un bouton poussoir un relais à partir d'une broche de la carte Arduino via un circuit intégré ULN 2803 (octuple amplificateur inverseur 500mA).

Voir également :

Matériel Nécessaire

L'espace de développement Arduino

  • ... pour éditer, compiler le programme et programmer la carte Arduino.

Le matériel suivant pour réaliser le montage associé

  • une plaque d'essai pour montage sans soudures,
  • des straps,
  • un bouton poussoir pour CI,
  • un CI ULN 2803,
  • un relais standard 12V,

Instructions de montage

  • Connecter sur la broche 2 (configurée en entrée) un bouton poussoir connecté à la masse (0V)
  • Connecter sur la broche 3 (configurée en sortie) une broche de commande du CI ULN2803

Le schéma théorique du montage

Le schéma théorique du montage

La diode représentée n'est pas obligatoire, mais a pour but de prévenir les problèmes de reset intempestif de la carte Arduino. Cela fonctionne bien quand même sans la diode.

ATTENTION : L'utilisation du 220V est dangereuse et nécessite impérativement de respecter des règles de sécurité précises. Les mineurs ne doivent en aucun cas utiliser du 220V sans la présence d'un adulte.

Le circuit du montage

Le schéma du montage à réaliser

Explication du programme

Structure globale du programme

Ce programme simple comprend :

  • une entête déclarative
  • une partie « configuration » qui ne sera exécutée qu'une fois (fonction setup( ) )
  • une partie constituée d'une boucle sans fin que le programme répètera à l'infini ( fonction loop( ) ) : c'est le coeur du programme.

Déroulement du programme

Le programme se déroule de la façon suivante :

  • Après avoir pris en compte les instructions de la partie déclarative,
  • puis après avoir exécuté la partie configuration ( fonction setup( ) ),
  • le programme bouclera sans fin ( fonction loop ( ) ), exécutant de façon répétée le code compris dans la boucle sans fin.

Le déroulement du programme

Au niveau de la partie déclarative :

Déclaration de constantes utiles

  • On déclare les constantes utiles dans le programme :
    • Déclaration des constantes utiles pour l'utilisation des boutons poussoirs :
const int APPUI=0; // constante état du BP - appui sur niveau bas
const int PAS_APPUI=1; // constante état du BP - relâché sur niveau haut

Déclaration des constantes de broches

  • Déclaration des constantes pour les broches utilisées dans le programme :
const int BP=2; //declaration constante de broche
const int RELAIS=3; //declaration constante de broche

Déclaration des variables globales

  • Déclaration des variables globales du programme : on déclare une variable de type boolean (type binaire) qui reflète l'état de la broche de commande du relais.
boolean etatRelais=0; // variable bit reflet état du relais

Au niveau de la fonction d'initialisation setup( ) :

Initialisation des fonctionnalités utilisées :

  • On initialise les différentes fonctionnalités utilisées :

configuration des broches utilisées :

  • Configuration des broches en sortie :
pinMode(RELAIS, OUTPUT); //met la broche en sortie
  • Configuration des broches en entrée :
pinMode(BP, INPUT); //met la broche en entree
  • Activation du rappel au + interne des broches en entrée si nécessaire :
digitalWrite(BP, HIGH) ; // activation du pullup de la broche en entrée

Au niveau de la boucle principale, la fonction loop ( ) :

  • On teste l'état du BP : lorsque le BP est appuyé, on inverse l'état de la broche de commande du relais.

if (digitalRead(BP)==APPUI) { // si appui sur BP

   etatRelais=!etatRelais; // inverse l'état du relais
   digitalWrite(RELAIS,etatRelais); // met la broche de commande dans l'état voulu

  delay (500); // pause anti-rebond - évite double prise en compte appui BP

} // fin if
 
  • Le programme recommence en boucle les instructions de la fonction loop( ).

Se reporter aux commentaires présents dans le programme pour plus de détails.

Mise en oeuvre du programme

Préparation du montage et programmation de la carte Arduino :

  • Commencer par réaliser le montage indiqué sur plaque d'expérimentation
  • Ensuite, programmer la carte Arduino avec ce programme (en bas de page) selon la procédure habituelle

Fonctionnement

  • Chaque appui sur le BP inverse l'état du relais : travail, repos, travail, repos, etc...

Le programme complet en langage Arduino :

A copier/coller directement dans l'éditeur Arduino


// --- Programme Arduino ---
// par X. HINAULT - Le 03/03/2010
// www.mon-club-elec.fr

// --- Que fait ce programme ? ---
/* commande à l'aide d'un bouton poussoir
un relais à partir d'une broche de la carte Arduino
via un ULN 2803 (octuple amplificateur inverseur 500mA)*/


// --- Fonctionnalités utilisées ---

// --- Circuit à réaliser ---
// Connecter  sur la broche 2 (configurée en entrée)  un bouton poussoir connecté à la masse (0V)
// Connecter  sur la broche 3 (configurée en sortie) une broche de commande du CI ULN2803

//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

// --- Déclaration des constantes ---

const int APPUI=0; // constante état du BP - appui sur niveau bas
const int PAS_APPUI=1; // constante état du BP - relâché sur niveau haut

// --- constantes des broches ---

const int BP=2; //declaration constante de broche
const int RELAIS=3; //declaration constante de broche

// --- Déclaration des variables globales ---

boolean etatRelais=0; // variable bit reflet état du relais

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage ---


// ------- Broches en sortie -------  

pinMode(RELAIS, OUTPUT); //met la broche en sortie

// ------- Broches en entrée -------  

pinMode(BP, INPUT); //met la broche en entree

// ------- Activation du rappel au + interne des broches en entrée si nécessaire -------  

digitalWrite(BP, HIGH) ; // activation du pullup de la broche en entrée

} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

// --- ici instructions à exécuter par le programme principal ---

if (digitalRead(BP)==APPUI) { // si appui sur BP

   etatRelais=!etatRelais; // inverse l'état du relais
   digitalWrite(RELAIS,etatRelais); // met la broche de commande dans l'état voulu

  delay (500); // pause anti-rebond - évite double prise en compte appui BP

} // fin if

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

//*************** Autres Fonctions du programme *************

// --- Fin programme ---