Slowmoframe 2.0
Cadre avec effet de mouvements ralentis
Cadre avec effet de mouvements ralentis
Slowmoframe 2.0|1. Physique & Biologie|2. Programmation|3. Électronique & Électricité |4. Conception 3D|5. Suivi de projet
Le cœur du système est un microcontrôleur (un automate programmable) que vous allez devoir coder de manière ultra-optimisée. Oubliez les pauses classiques ! Vous apprendrez à programmer en mode "non-bloquant" à l'aide du temps système pour gérer simultanément, au millième de seconde près, le rythme des flashs lumineux et la danse des aimants.
Pour réussir à tromper le cerveau humain, notre premier ingrédient est un stroboscope : une lumière capable de clignoter à un rythme ultra-précis. Aujourd'hui, votre mission est de créer le prototype de ce stroboscope et d'en contrôler la vitesse.
Le matériel : Une carte programmable, une DEL (broche D2), un potentiomètre (broche A0) et un écran LCD I2C.
L'objectif : Faire varier la fréquence de clignotement de la DEL entre 1 Hz (1 flash par seconde) et 10 Hz (10 flashs par seconde) en tournant le potentiomètre.
L'affichage : L'écran LCD doit afficher en temps réel la fréquence sous la forme : Freq: X Hz.
La contrainte technique : L'écran ne doit jamais scintiller ni clignoter. Il ne doit se mettre à jour que si vous tournez le bouton !
Avant de foncer, l'automate a besoin de ranger ses boîtes à outils (les variables).
Créez des CONSTANTES de texte (DEL et POTENTIOMETRE) pour mémoriser vos branchements (D2 et A0).
Créez les variables numériques nécessaires pour stocker : la valeur brute du potentiomètre (val_pot), la vitesse choisie (frequence_clignotement) et la durée de la pause (demi_periode).
Dans l'initialisation, réveillez votre écran LCD et demandez-lui d'afficher le texte fixe "Freq:" sur la première ligne. Pourquoi ici ? Parce qu'on ne l'écrira qu'une seule fois !
Dans la boucle infinie, la carte va répéter ces actions des milliers de fois par seconde :
Lire : Récupérez la valeur du potentiomètre (qui donne un nombre brut entre 0 et 1023).
Convertir : Utilisez un bloc de conversion (transformer_la_valeur) pour transformer ce nombre brut (0-1023) en une fréquence humaine compréhensible (entre 1 et 10 Hz).
Si vous demandez à l'écran d'afficher la fréquence en boucle à toute vitesse, il va clignoter et devenir illisible.
L'astuce : Créez une variable magique nommée ancienne_frequence (initialisée à -1).
Le test logique : Ajoutez une condition : SI la frequence_clignotement actuelle est différente (!=) de l' ancienne_frequence, ALORS seulement vous écrivez la nouvelle valeur et les lettres "Hz" sur l'écran.
N'oubliez pas de mettre à jour l'ancienne_frequence.
Pour que le code reste propre, créez une fonction nommée Clignoter qui prend en entrée la fréquence choisie.
Attention au piège de la division : Pour calculer le temps de pause en millisecondes, la formule est : demi_periode=1000/frequence×2
Pour que l'ordinateur soit ultra-précis et n'oublie pas les chiffres après la virgule, forcez le à faire un calcul scientifique en utilisant un nombre à virgule (1000.0 ou le bloc de conversion float).
Allumez la DEL, attendez la demi_periode, éteignez la DEL, attendez à nouveau.
L'unité de mesure Hz (Hertz) représente le nombre d'actions par seconde. Si votre DEL clignote à 1 Hz, elle s'allume 1 fois par seconde. Si elle clignote à 10 Hz, elle s'allume 10 fois par seconde. Vos yeux commencent déjà à avoir du mal à voir les coupures ! Dans la prochaine activité, on montera à 80 Hz... et c'est là que la magie du SlowMoFrame commencera !
Bravo ! Vous avez réussi à faire clignoter une première DEL à la fréquence de votre choix grâce à votre premier potentiomètre. Mais les choses sérieuses commencent maintenant.
Ajoutez un deuxième potentiomètre et une deuxième DEL sur votre maquette.
Modifiez votre code pour que chaque potentiomètre gère sa propre DEL, à des fréquences différentes.
ATTENTION BUG ! Si vous tentez de dupliquer votre bloc Clignoter ou d'enchaîner deux blocs de délai à la suite, vous allez vous heurter à un mur informatique : vos DEL vont clignoter l'une après l'autre, le système va devenir d'une lenteur terrible, et tourner les boutons ne changera les fréquences qu'après plusieurs secondes d'attente.
Pourquoi votre code bloque-t-il ? À cause du bloc "Délai_ms(x)".
Imaginez un cuisinier devant gérer deux tâches en même temps :
Cuire des pâtes pendant 10 minutes.
Surveiller des steaks à retourner toutes les 2 minutes.
Utiliser le bloc "Délai_ms(x)", c'est comme si le cuisinier lançait le chronomètre des pâtes, puis fermait les yeux et s'arrêtait de bouger pendant 10 minutes sans rien faire d'autre. Que se passe-t-il pour les steaks ? Ils brûlent !
C'est exactement ce que fait l'automate : lorsqu'un bloc Délai est appelé, la carte s'endort. Elle devient totalement "aveugle" et refuse de lire votre deuxième potentiomètre ou d'allumer votre deuxième DEL tant que le temps n'est pas écoulé.
Pour que notre carte puisse faire plusieurs choses en même temps, nous devons changer sa manière de réfléchir. Au lieu de lui dire "attends sans rien faire", nous allons lui apprendre à regarder sa montre en permanence tout en continuant à travailler.
Pour cela, nous allons utiliser une variable magique de Tinkergen : "Temps de fonctionnement du système". Cette variable est un chronomètre qui compte les millisecondes qui défilent depuis le démarrage de la carte.
Pour réussir à vous passer du bloc Délai, vous allez devoir utiliser et combiner ces 3 notions dans vos blocs :
Le temps (Variable : temps) : C'est l'heure actuelle donnée par le chronomètre du système.
La fréquence (Variable : fréquence) : C'est la vitesse choisie avec le potentiomètre. Elle permet de calculer la période (le temps d'attente nécessaire entre deux clignotements) grâce à la formule :
période = 1000/fréquence
L'instant précis (Variable : tick) : C'est le moment exact où la DEL a changé d'état pour la dernière fois.
Pour remplacer le bloc Délai, vous allez devoir utiliser une condition "Si ... Alors".
Posez-vous cette question pour construire votre bloc :
Comment traduire en langage informatique : "Si le temps actuel moins l'instant du dernier flash est plus grand que la période attendue, alors je change l'état de ma DEL et je note le nouvel instant précis" ?
À vos blocs ! Montrez que vous êtes plus malins que l'automate et que vous pouvez maîtriser le temps réel.