ASCENSEUR

Introduction:

      Nous allons vous présenter un projet réalisé en cours avec l’assistance de nos professeurs d’électronique et de mécanique: réaliser un programme similaire au programme d’un ascenseur civil .Nous avons utilisé:

  • Un ordinateur

  • Le Controlboy 3

  • Des câbles pour réaliser la connection ordinateur/Controlboy 3

  • Un ascenseur de laboratoire

  • Des logiciels

  • Professeurs dans les moments difficiles

     Nous présenterons notre TPE sous forme de scéances.

SEANCE n°1

Installation:

Tout d’abord, pour pouvoir réaliser ce projet , nous avons dû installer notre poste de travail.
Pour se faire, nous avons dû connecté le Controlboy à l’ordinateur et installé le logiciel.
Evidemment, comme tout élève qui démarre dans ce genre de projet, nous avons dû avoir recours à nos professeurs.

Maintenant, nous avons procédé à la connection entre l’ ascenseur et le Controlboy.

Câblages:

Pour réaliser ce câblage, nous avons dû choisir des entrées et sorties suivant le schéma élaboré ci-dessous :

asc-image-entree-sortie.gif (16838 octets)

 

       Le PORTA.3 est particulier parce qu’il peut être déclaré comme entrée ou comme sortie.
Pour le déclarer comme entrée, il faut faire le masque suivant :

 

asc-image-masque.gif (7748 octets)

 

Programmation d'essai (consiste à écrire Controlboy 3 sur l’afficheur du Controlboy 3):

lcdinit ()    initialisation de l’afficheur lcd
Print « Controlboy 3 »

Programmation pour faire monter l'ascenseur:

Do
PORTB.4 = 1
PORTB.3 = 0
Do
Tempo(1)
Loop
Loop                                                                                                                                                         

SEANCE n°2

Après avoir consulter le dossier intitulé " Basic ", nous avons pu effectuer une programmation plus délicate.

Programmation : monter et arrêter à l'étage voulu

Do
Do
PORTB.4 = 1
PORTB.3 = 0
Loop until PORTA.3 =1
PORTB.4 = 0
PORTB.3 = 0
Do
Tempo(1)
Loop

Loop
 

valeur = PORTB donc monter ou descendre

boucle jusqu'à ce que valeur = PORTA



temporisation de sécurité

Progammation : monter et arrêter à l'étage voulu puis descente étage 1

Do

Do
PORTB.4 = 1
PORTB.3 = 0
Loop until PORTA.2 = 1
--> le controlboy 3 sort de cette boucle jusqu'à ce que l'ascenseur arrive à l'étage 3
PORTB.4 = 0
PORTB.3 = 0
Tempo (100)
--> temporisation d'écart entre l'enchaînement des deux boucles
Do
PORTB.4 = 0
PORTB.3 = 1
Loop until PORTA.0 = 1
-->le Controlboy 3 boucle jusqu'à ce que valeur = PORTA
PORTB.4 = 0
PORTB.3 = 0
Do
Tempo(100)
Loop

Loop

SEANCE n°3

                   Pour réaliser le programme suivant, nous avions dû choisir des portes correspondant aux boutons d’appel d’étage. Ces portes, nous les avons choisis sur l’ensemble des PORTE . Pour être plus en sécurité, nous avons choisi les ports E.0, correspondant à l’étage 1, E1, correspondant à l’étage 2, E4, correspondant à l’étage 3, E5, correspondant à l’étage 4 parce qu’elles sont protégées par des résistances.

         On a alors :

Etage 1 = E0
Etage 2 = E1 = 138
Etage 3 = E4 = 152
Etage 4 = E5 = 168


Nous avons tout d’abord étudié la fonction If … End .
Si l’on appuie sur le bouton de PORT E on sort de la boucle :

Do

Do

- Lire le Port E
- …

Loop until valeur --> On a alors testé la valeur et appelé la procédure pour le faire monter à « l’étage valeur ».
Si valeur = bouton 1
Alors ascenseur à l’étage 1
Fin si

Si valeur = bouton 2
Alors ascenseur étage 2
Fin si



Loop

Programmation pour monter à l'étage 2 grâce au bouton d'appel:

Do

Do
If PORTE.1 = 1 then
--> le Controlboy 3 effectue à condition que le bouton n°2 est enfoncé
PORTB.4 = 1
PORTB.3 = 0
End if
Loop until PORTA.1 = 1
--> boucle jusqu’à ce que l'ascenseur atteint l'étage 2
PORTB.4 = 0
PORTB.3 = 0
Do
Tempo(1)
Loop

Loop

SEANCE n°4

Programmation: appel étage puis descente à l'étage 1

Do

Do
If PORTE.1 = 1 then
PORTB.4 = 1
PORTB.3 = 0
End if
Loop until PORTA.1 = 1
PORTB.4 = 0
PORTB.3 = 0
Tempo(100)
Do
PORTB.4 = 0
PORTB.3 = 1
Loop until PORTA.0 = 1
PORTB.4 = 0
PORTB.3 = 0
Do
Tempo(1)
Loop

Loop


Pour réaliser le programme suivant, nous avons dû utilisé la fonction GOSUB qui renvoie à un sous-programme extérieur à la grande boucle. Ce sous-programme est introduit par un mot utilisé dans la boucle et est appelé « étiquette ».
Nous avons dû trouvé les valeurs du PORTE .Nous avons alors fait appel à une variable grâce au byte.


SEANCE n°5


Programmation : etage voulu + descente etage 1 à la suite quelque soit l'ordre d'appel

   ALGORITHME


Faire

Faire
PORTE = variable
Boucle jusqu’à ce que valeur de la variable > 0

Si variable = 138 alors
Etiquette etage 2
Fin si

Si variable = 152 alors
Etiquette etage 3
Fin si

Si variable = 168 alors
Etiquette etage 4
Fin si

Boucle

Etage 2 :
Faire

Si valeur = PORTE.1 alors
PORTB.4 = 1
PORTB.3 = 0
Fin si

Boucle jusqu’à ce que valeur = PORTA.1
PORTB.4 = 0
PORTB.3 = 0
Tempo(50)

Faire
PORTB.4 = 0
PORTB.3 = 1
Boucle jusqu’à ce que valeur = PORTA.0
PORTB.4 = 0
PORTB.3 = 0
Retour au programme

Etage 3 :
Faire

Si valeur = PORTE.4 alors
PORTB.4 = 1
PORTB.3 = 0
Fin si

Boucle jusqu’à ce que valeur = PORTA.2
PORTB.4 = 0
PORTB.3 = 0
Tempo(50)

Faire
PORTB.4 = 0
PORTB.3 = 1
Boucle jusqu’à ce que valeur = PORTA.0
PORTB.4 = 0
PORTB.3 = 0
Retour au programme

Etage 4 :
Faire

Si valeur = PORTE.5 alors
PORTB.4 = 1
PORTB.3 = 0
Fin si

Boucle jusqu’à ce que valeur = PORTA.3
PORTB.4 = 0
PORTB.3 = 0
Tempo(50)

Faire
PORTB.4 = 0
PORTB.3 = 1
Boucle jusqu’à ce que valeur = PORTA.0
PORTB.4 = 0
PORTB.3 = 0
Retour au programme

PROGRAMME

Do

Do
c = PORTE
tempo(1)
Loop until c > 0

If c = 138 then
Gosub etage 2
End if

If c = 152 then
Gosub etage 3
End if

If c = 168 then
Gosub etage 4
End if

Loop

etage 2 :
Do

If PORTE.1 = 1 then
PORTB.4 = 1
PORTB.3 = 0
End if

Loop until PORTA.1 = 1
PORTB.4 = 0
PORTB.3 = 0
Tempo(50)

Do
PORTB.4 = 0
PORTB.3 = 1
Loop until PORTA.0 = 1
PORTB.4 = 0
PORTB.3 = 0
Return

etage 3 :
Do

If PORTE.4 = 1 then
PORTB.4 = 1
PORTB.3 = 0
End if

Loop until PORTA.2 = 1
PORTB.4 = 0
PORTB.3 = 0
Tempo(50)

Do
PORTB.4 = 0
PORTB.3 = 1
Loop until PORTA.0 = 1
PORTB.4 = 0
PORTB.3 = 0
Return

etage 4 :
Do

If PORTE.5 = 1 then
PORTB.4 = 1
PORTB.3 = 0
End if

Loop until PORTA.3 = 1
PORTB.4 = 0
PORTB.3 = 0
Tempo(50)

Do
PORTB.4 = 0
PORTB.3 = 1
Loop until PORTA.0 = 1
PORTB.4 = 0
PORTB.3 = 0

Return


SEANCE n°6


PROGRAMME ASCENSEUR: monter ou descendre à l’étage demandé


Ce programme est composé de plusieurs parties :

Première partie : déclaration et initialisation des variables

Deuxième partie : programme

PREMIERE PARTIE :

Afin d’avoir un langage plus compréhensible dans le programme , nous avons défini
des variables :

Tout d’abord grâce à l’instruction « byte » :

byte etage,etage1,etage2,etage3,etage4,etageactuel

Cette instruction nous permet de déclarer des variables d’un octet.
   Puis il y a l’initialisation :

DDRD = 0 ' PD5=PD4=PD3=PD2=input
SCONF = 0x4C ' B,C = sorties
PACTL = 247 and PACTL
lcdinit()
print " Controlboy 3 "

« lcdinit » permet d’initialiser l’afficheur lcd
   Enfin nous pouvons nous-même définir des variables :

etage1 = 129
etage2 = 130
etage3 = 132
etage4 = 136


DEUXIEME PARTIE :

Do

etageactuel = PORTA
--> initialisation de l’étage actuel
Do
tempo(5)

Loop until PORTE <> 136 --> le Controlboy3 sort de la boucle si l’on appuie sur un bouton

If PORTE.0 = 1 then
etage = etage1
Print "etage1"
End if

If PORTE.1 = 1 then
etage = etage2
Print "etage2"
End if

If PORTE.4 = 1 then
etage = etage3
Print "etage3"
End if

If PORTE.5 = 1 then
etage = etage4
Print "etage4"
End if

If etageactuel > etage then
Gosub descendre
End if

If etageactuel < etage then
Gosub monter
End if

Loop

Descendre :

Do
PORTB.4 = 0
PORTB.3 = 1
Tempo(1)
Loop until etage = PORTA
PORTB.4 = 0
PORTB.3 = 0
Return

Monter :

Do
PORTB.4 = 1
PORTB.3 = 0
Tempo(1)
Loop until etage = PORTA
PORTB.4 = 0
PORTB.3 = 0
Return
 

SEANCE n°7

    Pour pouvoir allumer la lumière intérieure de l'ascenseur en cas d'obscurité, nous avons câblé une nouvelle entrée , le port A6.

Do

etageactuel = PORTA

Do
tempo(5)

Loop until PORTE <> 136

If PORTE.0 = 1 then
etage = etage1
Print "etage1"
End if

If PORTE.1 = 1 then
etage = etage2
Print "etage2"
End if

If PORTE.4 = 1 then
etage = etage3
Print "etage3"
End if

If PORTE.5 = 1 then
etage = etage4
Print "etage4"
End if

If etageactuel > etage then
Gosub descendre
End if

If etageactuel < etage then
Gosub monter
End if

Loop

Descendre :

Do
PORTB.4 = 0
PORTB.3 = 1
PORTA.6 = 1
Tempo(1)
Loop until etage = PORTA
PORTB.4 = 0
PORTB.3 = 0
PORTA.6 = 1
Return

Monter :

Do
PORTB.4 = 1
PORTB.3 = 0
PORTA.6 = 1
Tempo(1)
Loop until etage = PORTA
PORTB.4 = 0
PORTB.3 = 0
PORTA.6 = 1
Return
 

SEANCE n°8 et suivantes:

Lors des scéances suivantes nous avons préparé notre présentation de TPE et nous sommes allés chercher d'éventuelles images intéressantes pour notre exposé.

Conclusion:

La difficulté a été de pouvoir passer d’un programme à un autre plus difficile.
Pour se faire, nous avions dû lire et relire les documents-ressources mis à notre disposition ou demander de l’aide à nos professeurs. Notre but a été de pouvoir réaliser un programme d’ascenseur réel en y intégrant les quatre boutons d’appel mais nous avions voulu aller plus loin en y intégrant les priorités d’étage mais en vain.
Ce programme fut d’un niveau supérieur.