Exercices

Robot

Un robot doit se déplacer dans un bâtiment. Pour cela, il est programmé en Python et son modèle informatique est un objet nommé robot.

Il peut réaliser différentes actions en utilisant les méthodes suivantes :

  • avancer(d) : fait avancer le robot d’une distance d (en m)
  • reculer(d) : fait reculer le robot d’une distance d (en m)
  • pivoter(a) : fait pivoter le robot d’un angle a (en degrés, positif ou négatif)

 

Exemple : pour avancer de 3 mètres on écrit :

robot.avancer(3)

Écrire la séquence d’instructions qui doit permettre au robot d’atteindre la banane (chaque « case » mesure 1 mètre).

 

Pour rendre le robot un peu plus autonome, on lui ajoute un capteur : un détecteur de présence, placé à l’avant, et délivrant une information binaire : True si un mur se trouve devant le robot(à moins d’un mètre) et False dans le cas contraire.

On suppose que le bâtiment peut être découpé en « cases » de 1 mètre par 1 mètre.

La stratégie adoptée consiste à forcer le robot à longer un mur (celui de droite par exemple :

  • Tant que la case cible (la banane !) n’a pas été atteinte :
  • Si la case en face de lui est libre :
    • Le robot avance d’une case et se tourne vers sa droite
  • Sinon
    • Le robot se tourne vers sa gauche
Traduire cet algorithme en Python en utilisant les méthodes avancer et pivoter, ainsi que les structures algorithmiques.

 

 

Allumage d’un moteur

Le programme suivant permet de contrôler l’allumage d’un moteur.

La fonction marche permet de mettre le moteur en marche, tandis que la fonction arret permet de l’arrêter.

while True: # boucle infinie
   if boutonM:
      marche()
   if boutonA:
      arret()
Que se passe-t-il si l’utilisateur appuie sur les deux boutons simultanément ?
Correction

Le moteur est mis en marche, puis est aussitôt arrêté, puis remis en marche, … indéfiniment…

 

Modifier la ligne 4 afin que cela ne se produise pas.
Correction
while True:
    if boutonM: 
        marche()
    elif boutonA: 
        arret()

 

Compléter le chronogramme ci dessous.

Correction

 

Modifier le programme ci dessus afin qu’il fonctionne en mode « priorité au déclenchement » : si l’utilisateur appuie sur les deux boutons à la fois, le moteur doit être arrêté.
Correction
while True:
    if boutonA: 
        arret()
    elif boutonM: 
        marche() 

 

Thermostat

On souhaite allumer ou étendre un système de chauffage en fonction d’une température mesurée et d’une consigne.

La température est mesurée chaque minute. Si elle est inférieure à la température de consigne -10%, le chauffage est mis en route. Lorsqu’elle devient supérieure ou égale à la température de consigne +10%, alors le chauffage s’éteint.

Compléter le programme ci dessous (pour l’utilisation de la fonction time.sleep, consulter la documentation).
import time

while True:
    T = mesurerTemperature()
    if T > consigne * ..A.. :
        allumer()
    elif T < consigne * ..B.. :
        eteindre()
    time.sleep(..C..)
×
×
×

 

 

 

Contrôle d’un moteur à courant continu

Pour contrôler le sens de rotation d’un moteur à courant continu, on utilise un montage électronique appelé pont en H, composé de 4 transistors (des composants à semi-conducteur se comportant comme des interrupteurs). Ce circuit fournit 4 commandes possibles pour un moteur :

Arrêt (libre) Sens + Sens – Arrêt (freiné)

On désire écrire une fonction en Python pour chacun de ces 4 états :

  • stopper
  • avancer
  • reculer
  • freiner

Les 4 transistors sont commandés via les ports GPIO d’un nano-ordinateur de type Rasberry Pi, dont les numéros sont enregistrés dans 4 variables T1, T2, T3 et T4, dont la correspondance dans le pont en H est décrite ci-contre.

 

Depuis le Raspberry Pi, les ports GPIO peuvent être contrôlés en langage Python grâce à la commande suivante :

GPIO.output(numero_port, etat)
  • numero_port est un nombre entier désignant la broche physique du GPIO (ici permettant la commande d’un transistor : ouverture ou fermeture)
  • etat est un booléen correspondant à l’état logique (haut : True ou bas : False) du port (ici, l’état haut signifie que le transistor est saturé, c’est à dire équivalent à un interrupteur fermé)
Compléter chacune des 4 fonctions Python ci-dessous :
def stopper():
    GPIO.output(....)
    ....

def avancer():
    ....

def reculer():
    ....

def freiner():
    ....

 

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.