Un secret du Père Noël

Apprenez à programmer votre propre télécabine du Père Noël.

Maintenant que la station de ski de Redon a terminé sa saison, il est temps de vous révélé un secret :

Comment fonctionne la cabine téléphérique du Père Noël ?

Comme tous les ans, l’atelier Lever Le Rideau nous a permis d’avoir plus qu’un marché de Noël à Redon : la Station des 5000, le plus grand domaine skiable de Bretagne.

Et cette année, la Vilaine Bidouille a eu le droit de jouer en participant au montage de la cabine téléphérique du Père Noël. Vous savez, la boîte rouge dans laquelle vous avez enregistrer vos messages au service SAV du vieux barbu.

Du côté des lutins, ça donnait ça :

Mais comment ça marche ?

C’est simple, le gros bouton rouge au milieu de la cabinet est connecté à une carte Arduino Leonardo. Elle se fait passer pour un clavier USB pour un PC caché dans un petit meuble. Ce PC dispose d’une caméra USB de PS3 pour prendre de la vidéo et du son.

Quand on appuie sur le bouton, la carte Leonardo “tape” les lignes de commande Linux pour enregistrer une vidéo de 30 secondes. Elle gère aussi les relais des éclairages rouge et vert indiquant aux victimes bénéficiaires du Père Noël quand ils peuvent parler.

Liste du matériel :

Câblage à réaliser :

Suivez ce câblage, ou bien, téléchargez le sur Fritzing.

Programme de la Leonardo :

A téléverser dans la carte depuis votre ordinateur grâce au langage Arduino. Si vous ne savez pas faire, inutile d’aller plus loin dans l’article. Vous allez vous ennuyer.)

// Uniquement pour une carte Leonardo connectee par USB a un PC sous linux avec Guvcview
 // Lance une commande d enregistrement d une video de quelques secondes
 include "Keyboard.h"
 const int modeClavier = 2;
 const int bpRec = 3;
 const int outRecEnCours = 13;
 const int getReady = 12;
 const int auSuivant = 11;
 int etatBp = 0;
 int etatClavier = 0;
 int ordreRec=0;
 char altKey=KEY_LEFT_ALT;
 char f4=KEY_F4;
 char ctrl=KEY_LEFT_CTRL;
 void setup() {
   // initialisation
 //entrees
   pinMode(modeClavier, INPUT);
   pinMode(bpRec, INPUT);
   //sorties
   pinMode(outRecEnCours, OUTPUT);
   pinMode(getReady, OUTPUT);
   pinMode(auSuivant, OUTPUT);
   // initialisation des lampes
   digitalWrite(outRecEnCours, LOW);
   digitalWrite(getReady, LOW);
   digitalWrite(auSuivant, HIGH);
 }
 void loop() {
   if (digitalRead(modeClavier)==HIGH && etatClavier==0) {
     etatClavier=1;
     delay(200);
     Keyboard.begin();
   }
   if (digitalRead(modeClavier)==LOW) {
     etatClavier=0;
     Keyboard.end();
   }
   if (digitalRead(bpRec)==HIGH && etatClavier==1) {
     // Lampe tenez vous prets
     digitalWrite(auSuivant, LOW);
     digitalWrite(getReady, HIGH);
     // appel de console
     Keyboard.press(KEY_LEFT_CTRL);
     delay(100);
     Keyboard.press(KEY_LEFT_ALT);
     delay(100);
     Keyboard.press('t');
     delay(100);
     Keyboard.releaseAll();
     delay(1000);
     // appel de commande
     // prise de vue
     Keyboard.write('g');
     delay(50);
     Keyboard.write('u');
     delay(50);
     Keyboard.write('v');
     delay(50);
     Keyboard.write('c');
     delay(50);
     Keyboard.write('v');
     delay(50);
     Keyboard.write('i');
     delay(50);
     Keyboard.write('e');
     delay(50);
     Keyboard.write('z');
     delay(50);
     Keyboard.write(' ');
     delay(50);
     Keyboard.write('6');
     delay(50);
     Keyboard.write('y');
     delay(50);
     Keyboard.write(' ');
     delay(50);
     Keyboard.write('#');
     delay(50);
     Keyboard.write(')');
     delay(50);
     Keyboard.press(KEY_RETURN);
     delay(100);
     Keyboard.releaseAll();
     //gestion de la lampe
     digitalWrite(getReady, LOW);
     digitalWrite(outRecEnCours,HIGH); // allumage du panneau lumineux
     delay(28500);
     for (int i=0;i<3;i++) {
       digitalWrite(outRecEnCours,LOW);
       delay(250);
       digitalWrite(outRecEnCours,HIGH);
       delay(250);
     }
     digitalWrite(outRecEnCours,LOW);
     delay(1000);    
     // fermeture de guvcview
     Keyboard.press(KEY_LEFT_ALT);
     delay(100);
     Keyboard.press(KEY_F4);
     delay(100);
     Keyboard.releaseAll();
     delay(2000);
     // fermeture de la console
     Keyboard.press(KEY_LEFT_ALT);
     delay(100);
     Keyboard.press(KEY_F4);
     delay(100);
     Keyboard.releaseAll();
     digitalWrite(auSuivant,HIGH); // extinction du panneau lumineux
   }
 }
 /**/

Pour ceux qui ne seraient habitué à ce site, je sais que le code n’est pas optimisé. Vous remarquerez que j’utilise l’entrée 2 comme indicateur de mode clavier. Sans cela, il est difficile de modifier le programme de la carte depuis certains PC. Le port USB servant déjà à l’émulation de clavier plug&play.

Bug de la vidéo

Sur nos vidéos, nous avons constaté un décalage entre le son et l’image de presque 1.166 secondes. Plutôt que de chercher l’origine du problème, j’ai préféré corriger les vidéos par paquet grâce à l’outil Linux ffmpeg. Attention, c’est en ligne de commande.

Etape 1 : Ouvrir un terminal (sous linux évidemment)

Tapez CTRL+ALT+T

Etape 2 : Naviguer vers le dossier contenant les vidéos

Avec la commande “cd” retrouvez le dossier. Vérifiez qu’il contient bien les fichiers *.mkv avec la commande “dir”.

image.png

Etape 3 : La ligne de commande magique

Mesurez bien le temps de décalage entre le son et l’image grâce à un logiciel comme Kdenlive par exemple. Pour moi, ce décalage est de 1.166 seconde. Ensuite, c’est le saut de la foi. Tapez la ligne suivante :

for i in .mkv; do ffmpeg -i "$i" -itsoffset 1.166 -i "$i" -vcodec copy -acodec copy -map 0:1 -map 1:0 "${i%.}.mp4"; done
image.png

Etape 4 : Contrôle

Normalement, de nouveaux fichiers vidéos *.mp4 ont été créés. Il faut vérifier que le son est bon.

Amusez-vous !

Animation de Noël

La Vilaine Bidouille cherche des volontaires pour monter une animation de Noël. Ce serait une adaptation du parcours électrique en mode “fourchette à fondue géante”. Au lieu d’avoir un anneau qui passe autour d’un fil de fer tordu, la fourchette doit passer dans une fente usinée dans un grand panneau sans toucher les bords. Pour la déco, le départ serait une casserole de fondue et l’arrivée la bouche d’un savoyard.
La Vilaine Bidouille cherche donc des gens avec un bon coup de pinceau, un goût prononcé pour la menuiserie, l’électronique ou la programmation. Lever Le Rideau nous met à disposition une cabane type “marché de Noël”. Y-a-plus qu’à !
Quelques croquis de l’idée de base pour exciter votre imagination.

Panneau
Visuel du panneau

Parcours
Autre parcours possible

Photo
Inscription par photo

Système
Schéma de principe du système