la thése
la thése
la thése
Or, dans notre vie quotidienne, l’énergie fossile est un élément essentiel pour
tous les moyens de transports, soit terrestres, maritimes ou aériens, ou les usagers de
ces moyens sont obligés de s’approvisionner en énergie dans des endroits baptisés
« stations–services ».
1
Toutefois, la« carte mère » sur laquelle sont montés les microprocesseurs, les
contrôleurs de périphériques (RAM, Disque dure, EEPROM..etc). Avec les progrès de la
miniaturisation, et la généralisation de l’utilisation des ordinateurs, les besoins les plus
courants sont standardisés et on a pu disposer toute une carte mère au sein d’une
seule et même puce, appelée « Microcontrôleur ». L’usage de microcontrôleurs est
actuellement en plein développement dans toute l’informatique industrielle, et à tous
les degrés de complexité (de 8 pattes à près de 200 pattes). On trouve une multitude
de modèles de microcontrôleurs et leur choix dépend de l’application voulue (à
réaliser).
2
Chapitre 1 Description d’une station self service
1.Introduction :
Dans ce chapitre nous allons faire une étude d’une station Self-service d’une
manière générale, où on va détailler le fonctionnement d’une seule pompe et la
manière dont le comptage du carburant se fait.
1
Chapitre 1 : Description d’une station self-service
La figure ci-dessous montre que la station « Self- Service » commande tous les blocs à
distance par un chef pompistes qui peut contrôler tous les postes disponibles.
2
Chapitre 1 : Description d’une station self-service
3
Chapitre 1 : Description d’une station self-service
Chaque poste dispose une seule pompe, pour un seul type de carburant par
poste, et le pistolet qui permet la possibilité de faire la distribution du carburant
(figure 1.5)
4
Chapitre 1 : Description d’une station self-service
5
Chapitre 1 : Description d’une station self-service
4. Fonctionnement de la pompe :
Comment ?
Dans notre étude (on utilise un codeur rotatif de type incrémental avec un
moteur à courant continué), le disque est placé sur un capteur à fourche (émission et
réception infrarouge) le disque ayant des trous lorsqu’il tourne il coupe l’émission
infrarouge.
6
Chapitre 1 : Description d’une station self-service
Ce qui nous intéresse de plus c’est les pompes (moteurs) puisque la puissance
d’écoulement et le débit du carburant influent directement sur la rotation du disque.
Donc sur la mesure du nombre de litre. La société NAFTAL utilise deux types de
moteurs pour le pompage :
Deuxième moteur :
Ce type de moteur est celui utilisé dans notre cas, puisque chaque litre
du carburant est l’équivalent de 75 impulsions, donc il facilite notre travail
du point de vue conversion litre/impulsion.
3m3 /h
50 L/1min.
1 L/1.2s.
7
Chapitre 1 : Description d’une station self-service
Après passage du liquide dans les déférents dispositifs : électrovanne, filtre, dégazeur
et un clapet anti-retour empêchant tout retour du liquide vers le dégazeur.
8
Chapitre 1 : Description d’une station self-service
6. Conclusion :
9
Chapitre 2 Généralités sur la carte Arduino, LCD
et codeur rotatif.
Le système Arduino est une carte électronique (figure 2.1) basée autour
d’un microcontrôleur et de composants minimum pour réaliser des fonctions
plus ou moins évoluées à bas coût. Elle possède une interface USB pour la
programmer. C’est une plateforme open-source qui est basée sur une simple carte
à microcontrôleur (de la famille AVR), et un logiciel, véritable environnement
de développement intégré, pour écrire, compiler et transférer le programme vers
la carte à microcontrôleur. Arduino peut être utilisée pour développer des
applications matérielles industrielles légères ou des objets interactifs (création
artistiques par exemple), et peut recevoir en entrées une très grande variété
de capteurs. Arduino peut aussi contrôler une grande variété d’actionneurs
(lumières, moteurs ou toutes autres sorties matériels). Les projets Arduino
peuvent être autonomes, ou communiquer avec des logiciels sur un ordinateur
(Flash, Processing ou MaxMSP). Les cartes électroniques peuvent être fabriquées
manuellement ou bien être achetées pré assemblées le logiciel de
développement open-source est téléchargeable gratuitement.
10
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
2. Critère de choix :
module Arduino peut être assemblée à la main, et même les cartes Arduino
pré-assemblées coûtent relativement moins de 25 Euros (microcontrôleur
inclus...).
12
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
Microcontrôleur Atmega328
Tension de fonctionnement 5V
13
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
Alimentation :
La carte Arduino UNO peut être alimentée par l’USB ou par une alimentation externe.
La source est sélectionnée automatiquement. La tension d’alimentation extérieure
(hors USB) peut venir soit d’un adaptateur AC-DC ou de piles. L’adaptateur peut
être connecté grâce à un jack (prise d’alimentation) de 2.1mm positif au centre. Le
14
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
raccordement vers un bloc de piles peut utiliser les bornes Gnd et Vin du
connecteur d’alimentation (POWER).
Mémoire :
Entrées et sorties :
15
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
16
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
4. Microcontrôleur ATMega328 :
Le modèle UNO de la société ARDUINO est une carte électronique dont le cœur
est un microcontrôleur ATMEL de référence ATMega328. Ce dernier est un
microcontrôleur 8bits de la famille AVR dont la programmation peut être réalisée en
langage C.
17
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
Digital I/O (entrées-sorties Tout Ou Rien)= 3 ports PortB, PortC, PortD (soit 23 broches
en tout I/O)
Chaque temporisateur peut être utilisé pour générer deux signaux PWM. (6 broches
OCxA/OCxB)
PWM= 6 broches OC0A (PD6), OC0B (PD5), 0C1A (PB1), OC1B (PB3), OC2A (PB3), OC2B
(PD3)
18
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
Gestion bus I2C = le bus est exploité via les broches SDA(PC5)/SCL(PC4).
L'utilisation des périphériques intégrés (Entrées Sorties , Timers, ...) repose sur
l'exploitation (lecture/écriture) de registres internes. Ces registres (8 bits), sont décrits
par un nom, y compris dans la programmation en C. Cette section fournit quelques
détails importants sur les registres internes du microcontrôleur ATMega328
Notation : par la suite, pour un registre nommé R, la notation R.n désigne le bit de
rang n du registre R. Le bit R.0 est le bit de poids faible de R.
19
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
Direction des ports : si le bit DDRB.2 vaut 1 alors la broche PB2est une sortie TOR.
Ecriture des sorties TOR: si une broche est configurée en sortie (DDRx.n=1) alors
l'écriture du bit PORTx.n permet de définir l'état de la sortie (0 ou 1).
Lectures des entrées TOR: si une broche est configurée en entrée (DDRx.n=0) alors la
lecture du bit PINx.n permet de connaître l'état de l'entrée.
Ex: DDRB.4=0(donc PB4en entrée), lire PINB.4 permet de connaître l'état de l'entrée
PB4.
20
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
L'interruption externe 1 est activé par le INT1 broche externe. Le niveau et les arêtes
sur l'axe de INT1 externe qui activent l'alarme sont définis dans le tableau ci-dessous.
21
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
ISC01 ISC00
22
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
Un signal PWM est défini par son rapport cyclique (le temps au niveau haut par
rapport à la période totale) mais aussi par sa fréquence. Grâce à l’environnement de
programmation simplifié, une PWM s’obtient sur une Arduino avec la fonction
analogWrite utilisé sur une patte numérique digitale 3, 5, 6, 9, 10 ou 11.
Est une technique pour fournir une puissance électrique à une charge qui a une
réponse relativement lente. Le signal d'alimentation est constitué d'un train
d'impulsions de tensions de telle sorte que la largeur des impulsions individuelles de
contrôler le niveau de tension efficace à la charge. Les deux signaux AC et DC peuvent
être simulés avec PWM. Dans ces notes, nous allons décrire l'utilisation de PWM sur un
Arduino pour les LED de contrôle et moteurs à courant continu.
Le train d'impulsions PWM agit comme un signal de courant continu lorsque les
périphériques qui reçoivent le signal ont un temps de réponse électromécanique qui
est plus lente que la fréquence des impulsions. Pour un moteur à courant continu, le
stockage d'énergie dans les enroulements du moteur atténue efficacement les salves
d'énergie fournie par les impulsions d'entrée de sorte que le moteur subit une entrée
de puissance électrique plus ou moins grande en fonction de la largeur des impulsions.
Pour une LED, en utilisant PWM fait que la lumière est allumée et éteinte à la
fréquence que nos yeux peuvent détecter. Nous percevons tout simplement la lumière
plus ou moins brillants en fonction de la largeur des impulsions à la sortie PWM.
23
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
Le rapport est appelé le rapport cyclique des impulsions à ondes carrées. La tension
La fréquence de la PWM
Cette fréquence est fixe, elle ne varie pas au cours du temps. Pour la carte UNO
elle est d’environ 490Hz.
24
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
5 La liaison série
25
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
Le deuxième est la liaison semi-duplex. En fait, c'est un peu lorsque l'on communique
à quelqu'un avec un talkie-walkie. L'un parle pendant que l'autre écoute. Nous
n'utiliserons pas ce type de communication.
Le dernier est la liaison full-duplex. Là, c'est un peu comme le téléphone, chacun peut
parler et écouter en même temps ce que l'autre dit. Avec Arduino, c'est de ce type de
communication que nous disposons. Ce qui est bien pratique afin d'éviter d'attendre
que l'on ait réceptionné ce que l'ordinateur envoie pour ensuite lui émettre des
données.
26
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
comme le Mini, le Pro, le Pro Mini ne prennent pas en charge l’USB et nécessitent un
adaptateur pour se connecter à un ordinateur et convertir les signaux TTL en USB.
Certains périphériques série utilisent le standard RS-232 pour la connexion série. Ils
ont en général un connecteur à neuf broches, et un adaptateur est nécessaire pour les
utiliser avec l’Arduino. La norme RS-232 est un protocole de communication ancien qui
utilise des niveaux de voltage incompatibles avec les broches numériques de l’Arduino.
Les afficheurs à cristaux liquides, autrement appelés afficheurs LCD, sont des
modules compactes nécessitent peu de composants externes pour un bon
fonctionnement. Ils consomment relativement peu (de 1 à 5 mA), sont relativement
bons marchés et s'utilisent avec beaucoup de facilité. Ils sont très utilisés dans les
montages à microcontrôleur, et permettent une grande convivialité. Ils peuvent aussi
être utilisés lors de la phase de développement d'un programme, car on peut
facilement afficher les valeurs de différentes variables.
27
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur
L’Arduino/LCD/codeur rotatif
28
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
6.2 Brochage :
1 Vss - Masse
Lecture ou écriture
5 R/W TTL L : Écriture
H : Lecture
7 D0 TTL
8 D1 TTL
9 D2 TTL
10 D3 TTL
Bus de données bidirectionnel 3 états (haute impédance lorsque E=0)
11 D4 TTL
12 D5 TTL
13 D6 TTL
14 D7 TTL
29
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
Code
Instructions Description Durée
RS R/W D7 D6 D5 D4 D3 D2 D1 D0
Efface l'ensemble de la
mémoire de donnée sans
Effacer toucher au générateur de 1,64
0 0 0 0 0 0 0 0 0 1
Afficher caractères. Ramène le curseur ms
en position « home », à
l'adresse 00.
Afficher
Met l'affichage en ou hors
commande
fonction l'affichage (D), le
marche / 0 0 0 0 0 0 1 D C B 40 µs
curseur (C), le clignotement du
arrêt
curseur (B).
30
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
Définit l'adresse de la DD
Set DD RAM RAM. Les données de la DD
0 0 1 A6 A5 A4 A3 A2 A1 A0 40 µs
adresse RAM sont envoyées après
cette commande.
Écrire des
Ecrit des données dans la DD
données à CGI 1 0 D7 D6 D5 D4 D3 D2 D1 D0 40 µs
RAM ou la CG RAM.
ou DD RAM
31
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
X : indifférent
32
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
33
Chapitre 2 : les Généralités sur L’Arduino/LCD/codeur rotatif
Les avantages:
Le codeur incrémental est de conception simple (son disque ne comporte que
deux pistes) donc plus fiable et moins chère.
Les inconvénients:
Il est sensible aux coupures du réseau : chaque coupure du courant peut faire
perdre la position réelle du mobile à l'unité de traitement. Il faudra alors
procéder à la réinitialisation du système automatisé.
Il est sensible aux parasites en ligne, un parasite peut être comptabilisé par le
système de traitement comme une impulsion délivrée par le codeur.
8. Conclusion
Il existe des instructions simples pour éviter de programmes les registres qui
contrôlent les groupes du bouches(B,C et D) et les interruptions externes cette
options nous a permis d’éviter de programmer le comptage en testant l’état du port
cela nous a fait gagne de temps et bien sur beaucoup d’espace mémoire. Un autre
avantage apporté par cette option est que le registre de comptage peut recevoir des
impulsions et s’incrémente même si le microcontrôleur exécute d’autre tache
34
Chapitre 3 Partie logiciel et réalisation pratique
1. Introduction :
Après avoir présenté la station service et la carte Arduino UNO, nous passons à la
partie réalisation, où nous allons aborder la maquette et l’interface graphique qui
permet de contrôler et gérer la station Self-service.
2. Etude et réalisation :
Afficheur paramètre
Recevoir des Comptage 3
données d’un pc à
travers une interface
graphiqueFigure 3.1 Schéma bloc dune Pompe a essence
35
Chapitre 3 :partie logiciel et réalisation pratique
2.1 Application :
Il est à signaler que notre étude peut avoir plusieurs applications tell que :
Pour notre étude on a opté pour une station self-service, il est demander donc :
Marche/Arrêt
LCD1 : nombre de litres
Utilisation
(pistolet)
36
Chapitre 3 :partie logiciel et réalisation pratique
3.1 Alimentation :
37
Chapitre 3 :partie logiciel et réalisation pratique
Présentation
Schéma
Puissance
Transformation de tension
Redressement
Filtrage principal
ondulée. Les condensateurs de filtrage sont montés en parallèle avec la sortie du pont
de diodes
Régulation
Pour fonctionner correctement l’entrée du régulateur doit être alimentée par une
tension non seulement redressée mais aussi filtrée grâce au montage avec
condensateurs que nous venons de présenter. Donc le régulateur intégré 7812 utilisé
sert pour fournir une tension stabilisée de 12 V à sa sortie pour alimenter le moteur à
courant continu.
Circuit imprimé
39
Chapitre 3 :partie logiciel et réalisation pratique
Un opto-coupleur
coupleur est considéré comme un élément de transfert de signal dont
l'entrée et la sortie sont électriquement isolées
isolé s l'une par rapport à l'autre par un
couplage optique. La figure ci-dessous
dessous illustre le principe de fonctionnement d'un
opto-coupleur.
3.2.3 Contrôle
ontrôle du moteur par opto-coupleur
opto :
40
Chapitre 3 :partie logiciel et réalisation pratique
On peut contrôler la vitesse d’un moteur par une interface ( figure 3.7 )
composé par un transistor et Opto-coupleur, cette carte est utiliser pour protéger le
notre système de commande. Dans notre cas, la vitesse du moteur est contrôlé par la
PWM générée par l’ARDUINO.
Circuit imprimé :
Le radiateur est collé sur le transistor pour une meilleur dissipation de chaleur
41
Chapitre 3 :partie logiciel et réalisation pratique
Pour notre cas, le disque contient 75 orifices, or une rotation complète équivalente à
un litre.
75 impulsions 1 litres.
42
Chapitre 3 :partie logiciel et réalisation pratique
Le signal arrive à la broche 2 de la carte ARDUINO doit avoir une forme carrée
pour que le microcontrôleur puisse le traité, dans ce cas se signal doit varier entre 0
et 5v. Le codeur rotatif contient un circuit imprimé qui a le rôle d’un circuit de mise en
forme. Le circuit est une interface électronique (qui est inclue dans le codeur)
amplifie ce signal puis le convertit en signal carré qui est alors transmis à un
système de traitement .
4. Partie logiciel :
43
Chapitre 3 :partie logiciel et réalisation pratique
Début
Conversion Litres/dinars
Arrêt du système
Remise à zéro
44
Chapitre 3 :partie logiciel et réalisation pratique
Visual Basic est un des langages les plus utilisés pour l'écriture d'applications
commerciales. Il a également été très utilisé dans le monde de l'ingénierie et de la recherche
appliquée en raison de sa capacité à permettre des développements très rapides et très
efficients permettant ainsi aux scientifiques de se consacrer davantage à l’algorithmique et
moins aux aspects formels du codage.
45
Chapitre 3 :partie logiciel et réalisation pratique
Notre système est commandé par une interface développée par le visuel
basic.net. C’est une interface simple et pratique qui permet de commander les
distributeurs à distance. Elle est composée de :
* Trois fenêtres (essence sans plomb, super et gasoil), où chacune est dotée de
quatre distributeurs. Le prix unitaire est affiché dès le démarrage du système.
* Un bouton de remise à zéro, qui sert à la réinitialisation des afficheurs dès le
démarrage.
* Un bouton qui sert à l’envoi de la consigne vers l’afficheur via le port série.
Cette consigne est sauvegardée au même temps dans une base de données.
46
Chapitre 3 :partie logiciel et réalisation pratique
Début
Introduction de la consigne
Envoie de la donnée
Sauvegarde de la donnée
47
Chapitre 3 :partie logiciel et réalisation pratique
48
Chapitre 3 :partie logiciel et réalisation pratique
1 :l’horloge
4 : box du prépaiement
4.3.1 L’IDE
49
Chapitre 3 :partie logiciel et réalisation pratique
Début
Arrêt du moteur.
Remise à zéro
50
Chapitre 3 :partie logiciel et réalisation pratique
int moteur = 4;
int led = 5;
int ledPin = 3;
float b; // b= la consigne
float total=0;
float prixUnitaire=20;
float nombreDelitres=0;
float arr=total/prixUnitaire;
#include <LiquidCrystal.h>
pinMode(moteur, OUTPUT);
pinMode(led, OUTPUT);
51
Chapitre 3 :partie logiciel et réalisation pratique
Serial.begin(115200);
lcd1.begin(16, 2);
lcd2.begin(16,2);
lcd3.begin(16,2);
lcd3.print( prixUnitaire);
lcd1.clear();
lcd1.setCursor(0,1);
lcd1.print(nombreDelitres);
lcd2.clear();
lcd2.setCursor(0,1);
lcd2.print("0.00");
//Side 1
lcd3.clear();
lcd3.setCursor(0,1);
52
Chapitre 3 :partie logiciel et réalisation pratique
while (Serial.available() == 0) ;
//Side 2
b = Serial.parseFloat();// la consigne
{ junk = Serial.read() ; }
digitalWrite(moteur, HIGH);
digitalWrite(led, HIGH);
analogWrite(ledPin, 255);
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est
sous tension
void loop(){
lcd1.setCursor(0, 1);
lcd1.print(nombreDelitres);
lcd2.begin(16, 2);
53
Chapitre 3 :partie logiciel et réalisation pratique
lcd2.print(nombreDelitres*a);
{digitalWrite(moteur, LOW);
digitalWrite(led, LOW);
delay(10000);
// cette fonction est appelée à chaque fois que l'interruption a lieu selon le mode
configuré (LOW, CHANGE, RISING, FALLING)
54
Chapitre 3 :partie logiciel et réalisation pratique
Une base de données est la pièce centrale des dispositifs informatiques qui servent à la
collecte, le stockage, le travail et l'utilisation d'informations. Le dispositif comporte un
système de gestion de base de données (abr. SGBD) : un logiciel moteur qui manipule
la base de données et dirige l'accès à son contenu. De tels dispositifs comportent
également des logiciels applicatifs, et un ensemble de règles relatives à l'accès et
l'utilisation des informations.
La manipulation de données est une des utilisations les plus courantes des ordinateurs.
Les bases de données sont fréquentes dans les secteurs de la finance, des assurances,
des écoles, de l'administration publique et les médias.
55
Chapitre 3 :partie logiciel et réalisation pratique
Il y une multitude de logiciels pour la création des bases de données, on cite à titre
d’exemple : MySQL, DB2, interbase, Access…..etc. dans notre cas, la base de donnée
du système conçu par « ACCESS » est relié directement à l’interface graphique, pour
enregistrer toutes les opérations faites par le chef pompiste.
5. Conclusion :
Le projet se trouve prêt à l’utilisation dans les stations Self- services, avec des
adaptations adéquates. La gestion de ce projet est assurée par une interface conçu
par le visuel basic qui nous a beaucoup aider malgré les difficultés rencontrer. En
premier lieu, on a tenté de construire une interface avec le Matlab, chose qui n’était
pas facile, où on a trouvé des difficultés sur la synchronisation de l’envoi des données.
Pour cela on a opté pour le visuel basic.
57
Conclusion générale
Comme toute réalisation ne peut être à l’abri de difficulté, l’interface qui gère
l’ensemble des fonctions de ce système avait pris la majorité du temps, et surtout la
connexion entre PC et la carte Arduino. Les différents algorithmes développés dans ce
travail ont été implémentés en langage IDE, ce qui le rend intéressant pour d’autres
applications.
Et dans tout ça, nous n’avons pas manqués de renforcer les notions théoriques avec
des implémentations concrètes dans des langages comme l’IDE et Visuel Basic.
Enfin, on peut dire que les résultats obtenus dans ce travail sont satisfaisantes, et le
sujet reste ouvert pour toutes améliorations souhaitées.
58
Annexes
1. L’afficheur LCD
1.1 La mémoire
L'afficheur possède deux types de mémoire, la DD RAM et la CG RAM. La DD RAM est
la mémoire d'affichage et la CG RAM est la mémoire du générateur de caractères.
La DD RAM est la mémoire qui stocke les caractères actuellement affiché à l'écran.
Pour un afficheur de 2 lignes de 16 caractères, les adresses sont définies de la façon
suivante :
L'adresse 00H correspond à la ligne du haut à gauche, 0FH à droite. L'adresse 40H
correspond à la ligne du bas à gauche, 4FH à droite. La zone invisible correspond à la
mémoire de l'afficheur (48 caractères). Lorsqu'un caractère est inscrit à l'adresse 27H,
le caractère suivant apparaît à la ligne suivante.
Le générateur de caractère est quelque chose de très utile. Il permet la création d'un
maximum de 8 caractères ou symboles 5x7. Une fois les nouveaux caractères chargés
en mémoire, il est possible d'y accéder comme s'il s'agissait de caractères classiques
stockés en ROM. La CG RAM utilise des mots de 8 bits de large, mais seul les 5 bits de
poids faible apparaissent sur le LCD. Ainsi D4 représente le point le plus à gauche et D0
le point le plus à droite. Par exemple, charger un octet de la CG RAM à 1Fh fait
apparaître tous les points de cette rangée ; charger un octet à 00h éteint tous ces
points. Les 8 lignes d'un caractère doivent être chargées dans la CG RAM.
1.2 Commande d'un afficheur LCD
*Mode 8 bits :
Dans ce mode 8 bits, les données sont envoyées à l'afficheur sur les broches D0 à D7.
On place la ligne RS à 0 ou à 1 selon que l'on désire transmettre une commande ou une
donnée. Il faut aussi placer la ligne R/W à 0 pour indiquer à l'afficheur que l'on désire
effectuer une écriture. Il reste à envoyer une impulsion d'au moins 450 ns sur l'entrée E,
pour indiquer que des données valides sont présentes sur les broches D0 à D7.
L'afficheur lira la donnée sur le front descendant de cette entrée.
Si on désire au contraire effectuer une lecture, la procédure est identique, mais on place
cette fois la ligne R/W à 1 pour demander une lecture. Les données seront valides sur
les lignes D0 à D7 lors de l'état haut de la ligne E.
*Mode 4 bits :
Il peut, dans certains cas, être nécessaire de diminuer le nombre de fils utilisés pour
commander l'afficheur, comme, par exemple lorsqu'on dispose de très peu de broches
d'entrées sorties disponibles sur un microcontrôleur. Dans ce cas, on peut utiliser le
mode quatre bits de l'afficheur LCD. Dans ce mode, seuls les 4 bits de poids fort (D4 à
D7) de l'afficheur sont utilisées pour transmettre les données et les lire. Les 4 bits de
poids faible (D0 à D3) sont alors connectés à la masse. On a donc besoin, hors
alimentation de sept fils pour commander l'afficheur. Les données sont alors écrites ou
lues en envoyant séquentiellement les quatres bits de poids fort suivi des quatres bits de
poids faible. Une impulsion positive d'au moins 450 ns doit être envoyée sur la ligne E
pour valider chaque demi-octet.
2. programme Visual basic
Imports System
Imports System.Threading
Imports System.IO.Ports
Imports System.ComponentModel
Imports System.Data.OleDb
Public Class Form2
Public connstring As String = "Provider=microsoft.ace.oledb.12.0; data
source=C:\Users\karim\Desktop\Base de données4.accdb"
Public conn As New OleDbConnection
'------------------------------------------------
Dim myPort As Array
Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading
errors during receiveing of data
'------------------------------------------------
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
myPort = IO.Ports.SerialPort.GetPortNames()
ComboBox1.Items.AddRange(myPort)
Button3.Enabled = False
conn.ConnectionString = connstring
If conn.State = ConnectionState.Closed Then
conn.Open()
Else
MsgBox("close")
End If
End Sub
'------------------------------------------------
Private Sub ComboBox1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
End Sub
'------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
End Sub
'------------------------------------------------
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs)
End Sub
Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs)
End Sub
Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal
e As System.EventArgs)
End Sub
Private Sub RichTextBox2_TextChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs)
End Sub
Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As
System.EventArgs)
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Private Sub GroupBox7_Enter(ByVal sender As System.Object, ByVal e As
System.EventArgs)
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
TextBox1.Text = Now
End Sub
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
End Sub
Private Sub Button37_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button37.Click
Form3.ShowDialog()
End Sub
Private Sub Button38_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button38.Click
Process.Start(“ e-mail")
End Sub
Private Sub Button39_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button39.Click
Form4.ShowDialog()
End Sub
Private Sub Button40_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button40.Click
Me.Close()
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles TextBox1.TextChanged
End Sub
Private Sub Button2_Click_2(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
SerialPort1.PortName = ComboBox1.Text
SerialPort1.BaudRate = 115200
Button3.Enabled = True
SerialPort1.Open()
SerialPort1.Write(RichTextBox1.Text & vbCr)
End Sub
Private Sub Button3_Click_1(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
SerialPort1.Write(RichTextBox2.Text & vbCr)
SerialPort1.Close()
Button3.Enabled = False
MsgBox("l'envoi sur port série est terminé avec succès", MsgBoxStyle.Information,
"port série")
Dim num1 As String
Dim num2 As String
Dim num3 As String
num1 = RichTextBox1.Text
num2 = RichTextBox2.Text
num3 = num2 / num1
RichTextBox3.Text = num3
If RichTextBox2.Text = "" Then
MsgBox("SVP entrez une valeur de prépaiement !", MsgBoxStyle.Critical, "Error")
End If
Try
Dim SqlQuery As String = "INSERT INTO sansplomb (prix,prépaiement,litres,heure)
VALUES ('" & RichTextBox1.Text & "','" & RichTextBox2.Text & "','" &
RichTextBox3.Text & "','" & TextBox1.Text & "')"
Dim SqlCommand As New OleDbCommand
With SqlCommand
.CommandText = SqlQuery
.Connection = conn
.ExecuteNonQuery()
End With
MsgBox("le sauvegarde sur les bases de données est terminé avec succés ",
MsgBoxStyle.Information, "Base de données")
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub Button4_Click_1(ByVal sender As System.Object, ByVal e As
System.EventArgs)
End Sub
Private Sub Button1_Click_2(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
SerialPort1.PortName = ComboBox1.Text
SerialPort1.BaudRate = 115200
Button6.Enabled = True
SerialPort1.Open()
SerialPort1.Write(RichTextBox1.Text & vbCr)
End Sub
Private Sub Button6_Click_1(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
SerialPort1.Write(RichTextBox6.Text & vbCr)
SerialPort1.Close()
Button6.Enabled = False
MsgBox("l'envoi sur port série est terminé avec succès", MsgBoxStyle.Information,
"port série")
Dim num4 As String
Dim num5 As String
Dim num6 As String
num4 = RichTextBox1.Text
num5 = RichTextBox6.Text
num6 = num5 / num4
RichTextBox5.Text = num6
If RichTextBox6.Text = "" Then
MsgBox("SVP entrez une valeur de prépaiement !", MsgBoxStyle.Critical, "Error")
End If
Try
Dim SqlQuery As String = "INSERT INTO sansplomb (prix,prépaiement,litres,heure)
Dim SqlCommand As New OleDbCommand
With SqlCommand
.CommandText = SqlQuery
.Connection = conn
.ExecuteNonQuery()
End With
MsgBox("le sauvegarde sur les bases de données est terminé avec succés ",
MsgBoxStyle.Information, "Base de données")
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub Button5_Click_1(ByVal sender As System.Object, ByVal e As
System.EventArgs)
End Sub
Priva
With SqlCommand
Private Sub GroupBox1_Enter_1(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles GroupBox1.Enter
= ""
End Sub
End Class
Public Class Form4
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
If TextBox1.Text = "karim" And TextBox2.Text = "*********" Then
TextBox1.Enabled = False
TextBox2.Enabled = False
Timer1.Start()
If TextBox1.Text = "" Then
MsgBox("Pas de nom d'utilisateur", MsgBoxStyle.Critical, "Error")
MsgBox("Nom d'utilisateur invalide et / ou mot de passe !", MsgBoxStyle.Critical,
"Error")
End If
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Timer1.Tick
ProgressBar1.Increment(35)
If ProgressBar1.Value = ProgressBar1.Maximum Then
Timer1.Stop()
Try
Shell("C:\Users\karim\Desktop\Base de données4.accdb")
Catch ex As Exception
Process.Start("C:\Users\karim\Desktop\Base de données4.accdb")
Bibliographie
[2] http://arduino.cc/
[3] http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-vb-
net