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 |

Simulateur d'un compteur de "pompe à essence"

Par X. HINAULT - Page créée le : 13/1/2011. Path:

1.  Présentation

L'appui sur un BP entraîne l'affichage du défilement du nombre de litres, du prix et du total à payer sur un afficheur LCD alpha-numérique. C'est un programme didactique qui montre comment réaliser simplement des calculs avec des nombres à virgules et comment les afficher sur un afficheur LCD alpha-numérique.

Ce programme utilise les fonctionnalités suivantes :

  • Utilise un afficheur LCD alphanumérique en mode 4 bits

Ressources utiles associées à ce programme :

2.  Matériel Nécessaire

2.1  L'espace de développement Arduino

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

2.2  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,

3.  Instructions de montage

  • Connexion du LCD sur les broches de la carte Arduino :
    • Connecter broche RS du LCD sur la broche 2
    • Connecter broche E du LCD sur la broche 3
    • Connecter broche D4 du LCD sur la broche 4
    • Connecter broche D5 du LCD sur la broche 5
    • Connecter broche D6 du LCD sur la broche 6
    • Connecter broche D7 du LCD sur la broche 7
  • Broche 8 : Un bouton poussoir connecté au 0V

4.  Le schéma théorique du montage

Le schéma théorique du montage (cliquer pour agrandir)

5.  Le circuit du montage

Le schéma du montage à réaliser (cliquer pour agrandir)

6.  Fonctionnement du programme

6.1  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.

6.2  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

7.  Explication du programme

7.1  Au niveau de la partie déclarative :

  • On déclare les variables utilisées par le programme
  • On déclare un objet LiquidCrystal correspondant à l'afficheur LCD

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

  • On teste rapidement le LCD (message "LCD OK")
  • On initialise l'affichage du LCD

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

  • A chaque passage, on teste l'état du bouton poussoir :
    • si le BP est appuyé, on incrémente le nombre de litres
    • on recalcule le total
    • on affiche le résultat
    • on prévoit une pause entre chaque prise en compte d'un appui

8.  Mise en oeuvre du programme

8.1  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

8.2  Fonctionnement

  • Lorsque l'on appuie sur le bouton poussoir, à tout instant, le total affiché correspond au calcul prix du litre x nombre de litre.

9.  Le programme complet en langage Arduino

A copier/coller directement dans l'éditeur Arduino

// --- Programme Arduino ---
// Trame de code générée par le générateur de code Arduino
// du site www.mon-club-elec.fr

// Auteur du Programme : X. HINAULT - Tous droits réservés
// Programme écrit le : 13/1/2011.

// ------- Licence du code de ce programme -----
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License,
//  or any later version.
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.

// ////////////////////  PRESENTATION DU PROGRAMME ////////////////////

// -------- Que fait ce programme ? ---------
 /* L'appui sur un BP entraîne l'affichage du défilement du nombre de litres
du prix et du total à payer sur un afficheur LCD alpha-numérique
 */


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

// Utilise un afficheur LCD alphanumérique en mode 4 bits

// -------- Circuit à réaliser ---------

// Connexion du LCD sur les broches de la carte Arduino :
// Connecter broche RS du LCD sur la broche 2
// Connecter broche E du LCD sur la broche 3
// Connecter broche D4 du LCD sur la broche 4
// Connecter broche D5 du LCD sur la broche 5
// Connecter broche D6 du LCD sur la broche 6
// Connecter broche D7 du LCD sur la broche 7

// Broche 8 : Un bouton poussoir connecté au 0V

// /////////////////////////////// 1. Entête déclarative ///////////////////////
// A ce niveau sont déclarées les librairies incluses, les constantes, les variables, les objets utiles...

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

// --- Inclusion des librairies ---

#include <LiquidCrystal.h> // Inclusion de la librairie pour afficheur LCD

// --- Déclaration des constantes utiles ---
const int APPUI=LOW; // constante pour tester état BP

// --- Déclaration des constantes des broches E/S numériques ---

const int RS=2; // Constante pour la broche 2
const int E=3; // Constante pour la broche 3
const int D4=4; // Constante pour la broche 4
const int D5=5; // Constante pour la broche 5
const int D6=6; // Constante pour la broche 6
const int D7=7; // Constante pour la broche 7

const int BP=8; // Constante pour la broche 8

// --- Déclaration des constantes des broches analogiques ---


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

int ligne=1, colonne=1; // variables de positionnement sur l'afficheur

float prixf=1.43; // variable à virgule pour le prix du litre
float totalf=0.0; // variable à virgule pour le prix à payer = prix du litre x nombre de litres
float nombreLitresf=0.0; // variable à virgule pour le nombre de litre

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

//------------ Création d'un objet afficheur LCD alphanumérique ----
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// initialisation LCD en mode 4 bits


// ////////////////////////// 2. 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 1 seule fois au démarrage du programme ---

// ------- Initialisation fonctionnalités utilisées -------  

// Initialisation de l'afficheur LCD
lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes
delay(10); // pause rapide pour laisser temps initialisation

// Test de l'afficheur LCD
lcd.clear(); // efface LCD
lcd.print("LCD OK"); // affiche texte
delay (1000); //pause
lcd.clear(); // efface LCD


// ------- Broches en sorties numériques -------  

// ------- Broches en entrées numériques -------  
 pinMode (BP,INPUT); // Broche BP configurée en entrée

// ------- Activation si besoin du rappel au + (pullup) des broches en entrées numériques -------  
 digitalWrite (BP,HIGH); // Rappel au + activé sur la broche BP configurée en entrée

// ------- Initialisation des variables utilisées -------  

// ------- affichage initial ------
lcd.clear();

// --- affichage des titres ----
ligne=1, colonne=1;
lcd.setCursor (colonne-1, ligne-1);
lcd.print("Prix   =");

ligne=2, colonne=1;
lcd.setCursor (colonne-1, ligne-1);
lcd.print("Litres =");

ligne=3, colonne=1;
lcd.setCursor (colonne-1, ligne-1);
lcd.print("Total  =");

//---- affiche le prix ----
ligne=1, colonne=10;
lcd.setCursor (colonne-1, ligne-1);
lcd.print(prixf,2); // affiche float avec 2 décimales

//---- affiche le nombre de litres ----
ligne=2, colonne=10;
lcd.setCursor (colonne-1, ligne-1);
lcd.print(nombreLitresf,2); // affiche float avec 2 décimales


totalf=nombreLitresf * prixf; // calcul du total = prix du litre x nombre de litres

//---- affiche le nombre de total ----
ligne=3, colonne=10;
lcd.setCursor (colonne-1, ligne-1);
lcd.print(totalf,2); // affiche float avec 2 décimales


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

////////////////////////////////// 3. 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 le BP est appuyé

  nombreLitresf=nombreLitresf+0.25; // incrémente le nombre de litre par 250 ml
  if (nombreLitresf>100) nombreLitresf=0; // Remise à zéro du nombre de litres à 100

  totalf=nombreLitresf * prixf; // calcul du total = prix du litre x nombre de litres

  //---- affiche le nombre de litres ----
  ligne=2, colonne=10;
  lcd.setCursor (colonne-1, ligne-1);
  lcd.print(nombreLitresf,2); // affiche float avec 2 décimales

  //---- affiche le nombre de total ----
  ligne=3, colonne=10;
  lcd.setCursor (colonne-1, ligne-1);
  lcd.print(totalf,2); // affiche float avec 2 décimales

  delay (100); // pause entre deux prises en compte de l'appui

}


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


// ////////////////////////// FONCTIONS DE GESTION DES INTERRUPTIONS ////////////////////


// ////////////////////////// AUTRES FONCTIONS DU PROGRAMME ////////////////////


// ////////////////////////// Fin du programme ////////////////////