STIC:STIC IV (2019)/Pomodor'Up

De EduTech Wiki
Aller à la navigation Aller à la recherche

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.


Pomodor'Up est un dispositif tangible servant à mettre en œuvre facilement et rapidement la méthode pomodoro.

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.

Il s'agit d'une mini-maquette de notre projet Teach'Out.
Il s'agit d'une mini-maquette de notre projet Teach'Out.

Informations additionnelles

  • Tout autre item pertinent selon notre projet.

Solution

Dispositif et son fonctionnement

Composantes matérielles du dispositif :

  • Une carte CPX programmée avec le logiciel MakeCode
  • Une bande Adafruit Neopixels composée de 30 LED

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

By-nc.png 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

Programme en "bloc" du Pomodor'Up
//////////////////////// DEFINITION DES VARIABLES ////////////////////////

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()
})

Bibliographie