Rendez-vous à l'adresse : https://amazon.quick-pi.org/ pour apprendre à programmer vos objets connectés en Python en réalisant les activités du Parcours 1.
Copier ci-dessous le code d'accès personnel que vous avez obtenu :
.........
Lisez la présentation pour programmer en Python , écrire, tester puis valider votre programme avec l'interface de FranceIOI.
Au fur et à mesure que vous expérimentez et validez vos programmes par simulation pour chaque cdcf, recopier votre script dans les cellules de code vides ci-dessous...
Lisez la présentation du buzzer et de la gestion du temps.
Écrire un programme qui active le buzzer pour jouer un son.
from quickpi import *
Écrire un programme qui joue la note "la", à la fréquence 440Hz, pendant une seconde.
from quickpi import *
Écrire un programme qui joue la mélodie “do ré mi ré do”, en jouant chaque note pendant 500ms, l'une après l'autre, puis éteint le buzzer.
Les fréquences des notes sont : Do : 523Hz, Ré : 587Hz, et Mi : 659Hz.
from quickpi import *
Lisez la présentation de la boucle de répétition avec l'instruction for
, des LEDs et de la gestion du temps.
Écrire un programme qui fait clignoter la LED cinq fois : c'est à dire l'allume pendant 1s, puis l'éteint pendant 1s, puis recommence quatre autres fois.
from quickpi import *
Écrire un programme qui allume en alternance les LED rouge et bleue pendant 500ms chacune : la rouge pendant 500ms, la bleue pendant 500ms, etc.
Chacune des LEDs doit être allumée 5 fois au total.
Tout doit être éteint à la fin.
from quickpi import *
Écrire un programme qui allume en alternance les LED rouge et bleue 5 fois au total, chaque fois pendant 500ms mais allumant la suivante 100ms avant d'éteindre la précédente : on allume la rouge au tout début, puis allume la bleue au temps 400ms, puis éteint la rouge au temps 500ms, puis allume la rouge au temps 800ms, etc.
from quickpi import *
Lisez la présentation de la boucle de répétition avec l'instruction for
, des LEDs et de la gestion du temps.
Écrire un programme qui dans l'ordre :
from quickpi import *
Écrire un programme qui dans l'ordre :
from quickpi import *
Écrire un programme qui joue la séquence suivante, où chaque tiret représente un état allumé de 500ms, et chaque point un état éteint de 500ms.
Notez que les deux lignes se jouent en même temps :
- LED rouge : -.-.-.--.-.-.
- LED verte : .......------
Les LEDs doivent être éteintes à la fin du programme.
from quickpi import *
Lisez la présentation de : la boucle infinie, l'instruction if, l'écran, le bouton poussoir et la manette.
Écrire un programme qui laisse l'écran vide au début, puis affiche le texte "Bonjour" dès que l'on appuie sur le bouton, et le laisse affiché.
Votre programme devra boucler indéfiniment, et tester en permanence si le bouton est enfoncé. Notez qu'un texte affiché à l'écran y reste jusqu'à ce que l'on affiche autre chose.
from quickpi import *
Écrire un programme qui :
from quickpi import *
Écrire un programme qui :
from quickpi import *
Lisez la présentation de la boucle infinie, de l'instruction if, du capteur de distance et du buzzer.
Écrire un programme qui allume le buzzer quand le capteur détecte un objet à moins de 100cm, et arrête le buzzer dès qu'il n'en détecte plus.
from quickpi import *
Écrire un programme qui allume le buzzer quand le capteur détecte un objet à moins de 500cm.
Le buzzer doit jouer un son à une fréquence égale à la distance de l'objet en centimètres. Il doit être éteint s'il n'y a pas d'objet à moins de 500cm.
from quickpi import *
Modifier le programme de la version précédente, avec la différence suivante : lorsque le bouton est enfoncé, la fréquence du buzzer doit être doublée.
from quickpi import *
Lisez la présentation des boucles imbriquées avec l'instruction for, des LEDs et de la gestion du temps.
Écrire un programme qui fait 3 fois ces deux étapes :
from quickpi import *
Écrire un programme qui fait 3 fois ces deux étapes :
from quickpi import *
Écrire un programme qui fait en même temps, et pendant 4 secondes au total :
from quickpi import *
Lisez la présentation de la boucle infinie, de l'instruction if/else, de la boucle de répétition avec l'instruction for
, du capteur de distance, du buzzer, et de la gestion du temps.
Écrire un programme qui, dès qu'un objet passe à moins de 30cm du capteur, fait dans l'ordre :
from quickpi import *
Modifiez le programme de la version précédente, pour qu'il arrête de jouer des bips dès qu'il n'y a plus d'objet.
S'il y a un bip en cours, il se termine, mais on ne joue pas le suivant.
from quickpi import *
Modifiez le programme de la version précédente, pour que lorsqu'un objet passe à moins de 10cm du capteur alors qu'une série de bips n'est pas en cours, alors il joue un bip en continu.
Au dessus de cette distance, il doit faire comme dans la version précédente.
from quickpi import *
Lisez la présentation du servomoteur, de la boucle infinie, de l'instruction if/else, de la boucle de répétition avec l'instruction for
, de la manette, du buzzer, des LEDs, et de la gestion du temps.
Écrire un programme qui met l'angle du servomoteur à 0°, puis lorsque l'on appuie sur le bouton :
from quickpi import *
Écrire un programme qui met le servomoteur à 10°, puis lorsque que le stick est appuyé :
Le programme doit ignorer les actions qui ne gardent pas l'angle entre 10° et 170°.
from quickpi import *
Modifier le programme de la version précédente, pour qu'il arrête au bout de 5s, puis selon l'angle du servo :
Le programme doit ensuite attendre 2s, puis éteindre les LEDs et tout recommencer.
from quickpi import *
Python permet de créer des programmes à partir d'instructions.
Par exemple, l'instruction droite()
peut faire déplacer un robot d'une case vers la droite.
Un programme formé d'instructions les unes en dessous des autres, exécute ces instructions l'une après l'autre.
from robot import *
droite()
haut()
droite()
Le programme ci-dessus fait déplacer le robot vers la droite, puis vers le haut, puis de nouveau vers la droite.
>>> Mélodie
Avec l'instruction if, on peut exécuter une instruction uniquement dans certaines conditions.
if caseMarquee():
peindre()
Par exemple, le programme ci-dessus teste le contenu de la case du robot, et ne la peint que si elle est marquée.
On peut aussi placer plusieurs instructions dans une instruction if, comme illustré ci-dessous :
if caseMarquee():
peindre()
droite()
>>> Quelle direction ? >>> Intrument
On peut utiliser une instruction if/else, pour effectuer des opérations différentes selon la situation. Par exemple :
if caseMarquee():
peindre()
else:
haut()
Dans le programme ci-dessus, si la case du robot est marquée, le robot la peint, sinon il ne la peint pas mais se déplace vers le haut.
>>> Instrument >>> Avertisseur >>> Servo_chronométré
On peut utiliser l'instruction while True :
pour répéter sans fin une séquence d'instructions, comme dans l'exemple ci-dessous, qui allume et éteint une LED toutes les 500 millisecondes :
while True :
allumerLED()
attendre(1000)
eteindreLED()
attendre(1000)
L'instruction while True :
exécute en boucle les instructions placées en dessous, indentées vers la droite, sans s'arrêter, jusqu'à ce que l'on interrompe l'exécution du programme.
Ce type de boucle est utile pour les programmes qui ne doivent jamais s'arrêter, par exemple le programme d'un système d'alarme, qui doit être actif en permanence.
>>> Quelle direction ? >>> Intrument >>> Avertisseur >>> Servo_chronométré
for
:¶Pour exécuter plusieurs fois la même instruction, on peut utiliser l'instruction for loop in range(...)
.
Par exemple, plutôt que de mettre 5 fois la même instruction :
droite()
droite()
droite()
droite()
droite()
On peut écrire la boucle suivante :
for loop in range(5):
droite()
On peut aussi mettre plusieurs instructions dans une boucle :
for loop in range(5):
droite()
haut()
>>> Alternance >>> Show lumineux 1 >>> Avertisseur >>> Servo_chronométré
Il est possible d'utiliser des boucles imbriquées, c'est-à-dire que l'on peut mettre des boucles for, à l'intérieur d'autres boucles for.
Par exemple :
for loop in range(5):
droite()
for loop in range(3):
haut()
droite()
Ce programme répétera 5 fois un déplacement d'1 case vers la droite, 3 cases vers le haut et 1 case vers la droite.
>>> Show lumineux 2
C'est à droite dans l'éditeur que vous allez écrire vos programmes en langage python.
Votre programme doit toujours commencer par la ligne from quickpi import *
.
Cette ligne de code permet de pouvoir utiliser les fonctions spécialement définies pour le module QuickPi.
Les fonctions et mots clés disponibles sont répertoriés dans des listes déroulantes.
Ensuite, vous écrivez les instructions de votre programme les unes en-dessous des autres.
>>> Mélodie
L'onglet EXPÉRIMENTER est en quelque sotre un "bac à sable". Il vous permet de mener des expérimentations avec les composants et les fonctions disponibles dans l'interface.
Un ou des composants sont mis à votre disposition sur l'interface.
Vous pouvez tester ces composants en cliquant dessus pour changer leur état.
Exemple : cliquer sur une LED pour l'allumer.
Pour exécuter votre programme, cliquez sur le bouton en bas à gauche de l'écran.
N'importe quel programme que vous concevez est exécuté entièrement, avec une simulation visuelle ou auditive du fonctionnement des composants.
>>> Mélodie
Votre mission consiste à concevoir un programme qui permet d'effectuer la tâche demandée dans l'énoncé.
L'onglet VALIDER permet une validation automatique des programmes soumis : grâce à un test, le programme présent dans l'éditeur est automatiquement évalué.
Voici comment fonctionne ce test :
Une ligne du temps (en secondes) est présente pour chaque composant disponible.
Cette ligne du temps apparaît en gris lorsque le composant est activé pendant la période, sinon elle n'apparaît pas.
Au fur et à mesure de l'exécution du programme, un curseur se déplace horizontalement et vérifie que l'état des composants est conforme à ce qui est attendu.
Dans l'exemple, la LED doit être initialement éteinte (état OFF), puis allumée (état ON, ligne grise) entre les instants 0 et 3, puis à nouveau éteinte à l'instant 3.
>>> Mélodie
sleep(milliseconds)
Cette fonction permet de stopper l'exécution du programme pendant une durée entrée en paramètre.
Cette durée est exprimée en millisecondes.
Exemple :
sleep(1000)
Pour stopper l'exécution du programme pendant une durée de 1 seconde.
>>> Mélodie >>> Alternance >>> Show lumineux 1 >>> Show lumineux 2 >>> Avertisseur >>> Servo_chronométré
Un buzzer est un composant qui produit un son lorsqu'il est soumis à un tension électrique. Un buzzer possède deux états :
Le son peut être toujours le même ou être paramétrable.
Fonctions disponibles :
turnBuzzerOn()
Cette fonction permet d'allumer le buzzer.
turnBuzzerOff()
Cette fonction permet d'éteindre le buzzer.
setBuzzerNote(buzzer, frequency)
Pour le buzzer entré en paramètre, cette fonction permet de produire un son à une fréquence donnée.
La fréquence est exprimée en Hertz.
Exemple :
setBuzzerNote("buzzer1", 264)
permet de jouer la note DO.
>>> Mélodie >>> Intrument >>> Avertisseur >>> Servo_chronométré
Une LED est un composant qui émet de la lumière quand il est parcouru par un courant électrique. Une LED possède deux états :
Une LED ne laisse passer le courant électrique que dans un seul sens.
On trouve des LEDs qui émettent de la lumière rouge ou de la lumière verte, ou d'autres couleurs encore.
Fonctions disponibles :
Les fonctions turnLedOn()
et turnLedOff()
permettent respectivement d'allumer et d'éteindre une LED.
Elles ne peuvent servir que lorsqu'il n'y a qu'une seule LED utilisée.
setLedState(led,state)
:
Cette fonction permet d'allumer ou éteindre une LED.
Elle prend en paramètre le nom de la LED et l'état à considérer, True pour l'allumer, False pour l'éteindre.
Exemple :
setLedState("led1",True)
toggleLedState(led)
:
Cette fonction permet d'inverser l'état de la LED entrée en paramètre sous forme de chaine de caractères.
Exemple :
toggleLedState("led1")
>>> Alternance >>> Show lumineux 1 >>> Show lumineux 2 >>> Servo_chronométré
Un bouton poussoir est un élément qui possède deux états, relevé et enfoncé.
Fonctions disponibles :
isButtonPressed()
Cette fonction renvoie True
si le bouton est enfoncé, et False
s'il est relevé.
Cette fonction est utilisée seulement lorsqu'il n'y a qu'un seul bouton pressoir sur le montage.
isButtonPressed(button)
Pour le bouton entré en paramètre sous forme de chaine de caractères, cette fonction renvoie True
si le bouton est enfoncé, et False
s'il est relevé.
Exemple :
isButtonPressed("button1")
```
**>>> [Quelle direction ?](#direction)**
L'écran de ce module est un petit écran monochrome de (132 x 33) pixels qui permet d'afficher deux lignes de 16 caractères. Fonctions disponibles :
displayText(line1, line2)
Cette fonction permet d'afficher deux lignes de texte sur un écran.
Elle prend en paramètre une ou deux lignes à afficher, sous forme de chaines de caractères.
Le paramètre de la deuxième ligne est optionnel.
Exemple : avec le code
displayText("Hello", "World !")
on affiche Hello sur la première ligne, et World ! sur la deuxième ligne de l'écran.
Une manette (stick en anglais) est un ensemble de 5 boutons, chacun correspondant à une direction : haut, droite, bas, gauche ou bien centre.
Il s'agit d'un seul composant, mais qui se programme comme 5 boutons différents :
Par exemple pour tester si la direction haut est enfoncée, on utilise :
buttonState("stick1.up")
>>> Quelle direction ? >>> Servo_chronométré
Ce capteur permet de mesurer la distance sans contact grâce à un capteur à ultrasons ou à laser. Il a une portée de 3 centimètres à 5 mètres. Fonctions disponibles :
readDistance(range)
Cette fonction renvoie la distance captée par le capteur de distance entré en paramètre. Cette distance est exprimée en centimètres.
Exemple :
readDistance("range1")
>>> Instrument >>> Avertisseur
Le Servomoteur est un petit moteur qui peut tourner précisément jusqu'à un angle donné, entre 0 et 180 degrés. On peut l'utiliser pour contrôler la direction des roues d'un petit véhicule, ou pour ouvrir ou fermer une barrière, etc.
Fonctions disponibles :
setServoAngle(servo, angle)
Cette fonction permet de modifier l'angle du servomoteur choisi. L'angle est exprimés en degrés, entre 0 et 180 degrés.
Exemple :
setServoAngle("servo1", 90)`
getServoAngle(servo)
Ce bloc permet de relire l'angle auquel on a réglé le servomoteur choisi. Ce n'est pas un capteur, mais simplement une mémorisation de la dernière valeur modifiée par une instruction.
On peut par exemple l'utiliser pour augmenter l'angle de 1 degré.
Exemple :
setServoAngle("servo1", getServoAngle("servo1") + 1)
Ce document, basé sur du contenu de France-IOI, est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International.
Pour toute question, suggestion ou commentaire : eric.madec@ecmorlaix.fr