« STIC:STIC IV (2019)/Pomodor'Up » : différence entre les versions
m (→Images) |
m (→Images et code) |
||
Ligne 70 : | Ligne 70 : | ||
== Images et code == | == Images et code == | ||
[[Fichier:Circuitplayground-screenshot.png|vignette|Programme du Pomodor'Up]] | [[Fichier:Circuitplayground-screenshot.png|800px|vignette|Programme en "bloc" du Pomodor'Up]] | ||
<source lang="javascript"> | <source lang="javascript"> |
Version du 6 juillet 2020 à 21:34
Cet article est en construction: un auteur est en train de le modifier.
En principe, le ou les auteurs en question devraient bientôt présenter une meilleure version.
Introduction
Le projet Teach'Out consiste à créer un dispositif composé d'une carte Adafruit Circuit Playground Express (ou CPX) pour les enseignants et/ou accompagnateurs en sortie avec un groupe d’enfants. Le dispositif est basé sur les capteurs/émetteurs d’infrarouge déjà installés sur le circuit.
Problème
Durant les sorties scolaires, un grand nombre d'enfants sont accompagnés d'un petit nombre d'enseignants/accompagnateurs. Ce groupe se déplace dans la ville à pied ou en transports publics. À présent, les accompagnateurs n'ont aucun moyen rapide de vérifier que tous les enfants sont présents à tout moment. Ils doivent également assurer la sécurité des enfants lorsqu'ils doivent traverser la route.
Apports théoriques : à compléter.
Cahier des charges
Contexte
Ce dispositif est conçu pour être utilisé principalement en contexte scolaire. Cependant, il est facilement adaptable à un contexte de sortie familiale.
Public
Le public cible du dispositif Teach'Out sont les enseignants/accompagnateurs en sortie scolaire avec un groupe d'enfants et les enfants faisant partie de ce groupe.
Objectifs
L'objectif principal du dispositif Teach'Out est d'aider les enseignants/accompagnateurs à s’assurer que tous les enfants sont bien présents à tout moment. Teach'Out aide également à éviter des accidents de la route lorsqu’on veut traverser avec le groupe d’enfants, ainsi qu'à sensibiliser les enfants envers la sécurité routière.
Besoins et contraintes
- les besoins et contraintes de votre projet (matérielles, humaines, techniques ...)
Présentation du projet
Le dispositif est basé sur les capteurs/émetteurs d’infrarouge déjà installés sur le circuit, utilisés pour compter les élèves. La puissance de ces émetteurs étant limitée à des facteurs de distance/direction, les élèves doivent passer devant l'enseignant afin d'être correctement comptés. Les LEDs de la guirlande s'allument une par une, à chaque passage. Une couleur est associée à chaque dizaine d'unités afin d'améliorer la lecture de la part des accompagnateurs.
Informations additionnelles
- Tout autre item pertinent selon notre projet.
Solution
Dispositif et son fonctionnement
Composantes matérielles du dispositif :
Fonctionnalités de Teach'Out :
- possibilité de compter les élèves et voir s’ils sont tous présents ;
- messages/sons et lumières déclenchés par l’enseignant lorsqu’on doit traverser la route: si la lumière affichée sur la guirlande est verte cela signifie que l’on peut traverser ; si elle est rouge alors il ne faut surtout pas bouger.
Documentation
Prototypes
Difficultés
Test(s) de la solution
Wearable réalisé
Cognitive walkthrough
Test utilisateurs
Questionnaire
Discussion
Cette partie inclus deux sous parties :
- Discussion du design (et si c'était à refaire)
- Discussion des résultats de vos tests utilisateurs
Licence, fichiers et documentation
Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale 4.0 International.
- Fichiers :
Insérer ici vos fichiers ou les liens vers vos fichiers
- Documentation :
Insérer ici une petite documentation pour l'utilisation de l'objet si nécessaire
Images et code
//////////////////////// DEFINITION DES VARAIBLES ////////////////////////
let strip: light.NeoPixelStrip = null // definition des leds utilisees dans le strip
let volume = 0
let check = 0 // nombre de pomodoro effectues
// Variables liees au temps //
let minutes = 0
let tempsTravail = 0
let tempsPauseCourte = 0
let tempsPauseLongue = 0
// Variables liees au signalement de la pause
let pause2 = 0
let finPause = 0
// Definition des temps de travail et de pause (en minutes)
forever(function () {
minutes = 60000
tempsTravail = minutes * 25
tempsPauseCourte = minutes * 5
tempsPauseLongue = minutes * 15
})
//////////////////////// FONCTIONS DU POMODOR'UP (volume, mouvement, sons, lumieres, temps de travail et de pause) ////////////////////////
// gestion du volume (on/off)
input.buttonA.onEvent(ButtonEvent.Click, function () {
// desactiver le volume
if (volume != 0) {
music.jumpDown.playUntilDone() // feedback audio off
volume = 0
music.setVolume(volume)
}
// activer le volume
else {
volume = 500
music.setVolume(volume) // feedback audio on
music.jumpUp.play()
}
})
// Gestion du mouvement (si le pomodoro est secoue => mettre ces variables a 1)
input.onGesture(Gesture.Shake, function () {
pause2 = 1
finPause = 1
})
// periode de travail
function travail () {
// gestion de la lumiere sur le strip et le CPX
light.setBrightness(20)
strip.setBrightness(20)
light.setAll(0xff8000)
strip.setAll(0xff8000)
// gestion du volume
music.setVolume(volume)
// timer
pause(tempsTravail)
}
// signal de pause
function alarmePause () {
// gestion de la lumiere
light.setBrightness(255)
strip.setBrightness(255)
// alternance de lumieres jusqu'a ce que l'accelerometre soit declenche
while (pause2 == 0) {
// alternance lumiere
light.setAll(0x00ffff)
strip.setAll(0x00ffff)
pause(200)
light.setAll(0xffff00)
strip.setAll(0xffff00)
// declenchement de l'alarme
music.setVolume(volume)
music.baDing.play()
pause(100)
light.clear()
}
// mettre la variable fin de pause a 0 pour que la fonction se declenche a la prochaine pause
finPause = 0
}
// signal de fin de pause
function alarmeFinPause () {
// gestion de la puissance de la lumiere
light.setBrightness(255)
strip.setBrightness(255)
// si l'accelerometre n'est pas declenche => alternance de lumiere et signal sonore
if (finPause == 0) {
while (finPause == 0) {
light.setAll(0x00ffff)
strip.setAll(0x00ffff)
music.playTone(659, music.beat(BeatFraction.Half))
pause(50)
light.setAll(0x00ff00)
strip.setAll(0x00ff00)
music.setVolume(volume)
music.playTone(523, music.beat(BeatFraction.Half))
pause(50)
light.clear()
}
}
// si l'accelerometre est declenche => mettre pause2 a 0
if (finPause == 1) {
pause2 = 0
}
}
// definition de la pause
function pauseCourte () {
music.setVolume(volume)
pause2 = 0
// si la pause est a 0 => declencher l'alarme
if (pause2 == 0) {
alarmePause()
}
//si le pomodorup a ete secoue => lancer la pause
if (pause2 == 1) {
light.setBrightness(255)
strip.setBrightness(255)
light.setAll(0x00ff00)
strip.setAll(0x00ff00)
pause(tempsPauseCourte) // attendre le temps defini en amont avant de declencher l'alarme de fin de pause
alarmeFinPause() // appelle l'alarme de fin de pause
}
}
// meme fonction que "pauseCourte" avec un temps de pause plus long
function pauseLongue () {
music.setVolume(volume)
pause2 = 0
if (pause2 == 0) {
alarmePause()
}
if (pause2 == 1) {
light.setBrightness(255)
strip.setBrightness(255)
light.setAll(0x00ff00)
strip.setAll(0x00ff00)
pause(tempsPauseLongue)
}
}
//////////////////////// SEQUENCE POMODORO ////////////////////////
// declenchement avec le bouton B
input.buttonB.onEvent(ButtonEvent.Click, function () {
// definition des parametres de base
light.setBrightness(255)
check = 0
strip = light.createStrip(pins.A1, check)
music.setVolume(volume)
// feedback d'initialisation
music.powerUp.play()
light.setAll(0x00ff00)
pause(750)
// alternance travail - pause (3 fois)
for (let i = 0; i < 3; i++) {
// phase "travail"
travail()
// gestion des checks signalant les pomodoro
if (check >= 1) {
check = check + 2 // allumer 2 LEDs par pomodoro
} else {
check = 1 // allumer une seule LED au premier pomodoro
}
//activer les LEDs
strip = light.createStrip(pins.A1, check)
strip.setAll(0x00ff00)
//declenchement de la pause
pauseCourte()
}
// DERNIER POMODORO : travail + pause longue
travail() // phase travail
// ajout de la derniere coche
check = check + 2
strip = light.createStrip(pins.A1, check)
strip.setAll(0x00ff00)
//pause longue
pauseLongue()
pause(100)
// signal de fin
light.setBrightness(255)
strip.setBrightness(255)
light.setAll(0xffffff)
strip.setAll(0xffffff)
// musique de fin
music.playMelody("G C5 B A A G G - ", 300)
music.playMelody("G A G A G A G A ", 300)
music.playMelody("G A G A G A A A ", 300)
pause(2000)
// remise a 0 des elements
strip.setBrightness(0)
light.clear()
strip.clear()
})