Les collabos numériques

programme médiathèque de Redon

Les animations de la Vilaine Bidouille
à la Médiathèque de Redon
Saison 03 – Episode 07
Les outils numériques collaboratifs

programme médiathèque de Redon
programme médiathèque de Redon

Pour tous ceux qui n’ont pas eu la chance de participer à la séance de samedi dernier, voici un résumé des sujets abordés : 190306_collabos.

Prochaine étape, mettre en application ces outils pour la construction d’un robot programmé en Scratch.

Robot Scratch
Robot Scratch

 

 

 

 

 

 

Cyrille

Le microprocesseur, ce monstre de puissance qui passe son temps à attendre

Note : Cette dépêche n’a pas été créée ici mais à été copier-coller de  l’excellent article sur le site de LinuxFR.org une version améliorer de la première version sortie sur le site Zeste de savoir. L’auteur original est La dépêche est sorti sous licence CC-BY 4.0 obligent à citer l’auteur, et la licence et si elle à été modifier. D’ailleurs au passage n’hésiter pas à consulter les deux sites qui sont une mine d’informations. Sur ceux je vous laisse avec l’article en question .

—> []

Avez-vous déjà remarqué à quel point le microprocesseur de votre ordinateur est un composant extrêmement puissant, et à quel point le moindre accès aux données est une horreur de lenteur de son point de vue ?

Pour essayer de se représenter tout ça, on va imaginer que _vous êtes_ un cœur de microprocesseur, ralenti d’un facteur un milliard.

Or donc, vous êtes un cœur d’un microprocesseur moderne. Vous êtes avec d’autres collègues dans un open space; votre boulot – et vous n’avez pas le choix – c’est d’exécuter des instructions, c’est-à-dire pour vous de taper au clavier, une touche par impulsion d’horloge. Un processeur moderne peut être cadencé à 4 GHz, ce qui fait pour vous 4 frappes par seconde, ce qui est déjà rapide.

Et voici que vous avez besoin d’une information que vous n’avez pas. Zut, flûte, raalgamaziel, il vous faut la procurer.

Est-ce qu’elle est dans le cache L1 ? Vous prenez un peu plus d’une seconde (un peu plus d’1 ns ou 4 instructions) pour lire ce post-it sur votre bureau.

Non. Est-ce qu’elle est dans le cache L2 ? Vous prenez environ cinq secondes (environ 5 ns ou 20 instructions) pour parcourir la feuille à côté de votre clavier.

Toujours pas. Est-ce que par hasard elle serait dans le cache L3 ? Vous devez vous lever et prendre entre quinze et vingt secondes (15 à 25 ns soit 60 à 100 instructions) pour consulter ce schéma accroché à un mur.

Ça commence à puer cette histoire. Où diable peut se trouver cette information indispensable ?

Est-ce un résultat de calcul que doit vous donner un collègue (donc un autre cœur) ? Selon l’organisation de votre bureau (la topologie du processeur) et l’humeur dudit collègue, vous aurez la réponse dans entre quarante secondes et deux minutes vingt (40 à 140 ns soit 160 à 560 instructions).

C’est aussi l’ordre de grandeur du temps qu’il va vous falloir patienter pour récupérer une information planquée dans les banques de mémoire du bureau d’à côté : une grosse minute à plus d’une minute et demie (70 à 100 ns, soit 280 à 400 instructions). C’est déjà très long, même par rapport à votre schéma sur le mur du bureau.

Et si jamais vous n’avez toujours pas votre information, là c’est le drame. Parce que toute autre forme de stockage va être vraiment très lente à réagir par rapport à tout ce qu’on vient de voir.

Si vos données sont sur un SSD au format M2, cas le plus favorable, vous en avez pour une petite journée (au moins 5h30) de recherche à la bibliothèque (plus de 0.02 ms, soit plus de 20 000 ns… et donc 80 000 instructions).

Un SSD au format SATA est encore plus long, c’est comme si vos données étaient livrées par un coursier rapide : ça arrive vite, mais il faut quand même compter plus d’une journée et d’une nuit entières… (à la louche 100 μs, 400 000 instructions).

Et si votre information n’est toujours pas là… c’est la catastrophe.

S’il faut la faire venir depuis un disque dur mécanique ou par Internet depuis une connexion fibre, non seulement vous pouvez partir en vacances, mais en plus vous n’aurez jamais assez de congés payés pour patienter jusqu’à ce que votre donnée soit arrivée, puisqu’il vous faudra environ deux mois entre la demande et l’arrivée de ce dont vous avez besoin ! (un ordre de grandeur de 5 ms… soit 5 000 000 ns et 20 000 000 instructions !).

Un chiffre que l’on peut tripler si la connexion Internet est une liaison cuivre ; la présence d’un WiFi dans le circuit permet probablement de concevoir intégralement un enfant.

(Tant qu’on est dans les comparaisons bizarres, si vous exécutez le code d’un jeu vidéo, vous avez un budget de 16 666 666 secondes soit plus de six mois pour le calcul d’une image pour avoir un rendu fluide. C’est énorme… tant que les données sont en mémoire, cf ci-dessus).

Mais la véritable situation catastrophique dans laquelle vous allez être véritablement bloqué sans rien faire, c’est si par malheur votre code attend la réaction d’un humain : s’il est surpris, il va mettre au moins une seconde réelle à réagir, soit un milliard de secondes pour vous, ce qui équivaut à… près de 32 ans. Vous affichez la popup en débutant votre premier boulot, l’utilisateur clique quand vous commencez à penser à votre retraite. S’il est réactif.

Et voilà qui remets à notre échelle des unités très variées (ms, ns, parfois μs) que l’on utilise peu et donc appréhende mal surtout si elles sont mélangées ! J’espère ne pas m’être trop planté dans mes calculs, et que cette petite analogie filée vous aura permis de comprendre :

– La puissance réelle et affolante des microprocesseurs modernes ;
– Pourquoi on a plein de niveaux de cache, des pipelines et autres techniques pour que le processeur serve pendant les attentes, et pourquoi les SSD sont aussi agréables par rapport à des disques mécaniques ;
– Pourquoi c’est scandaleux que sur du matériel moderne on trouve des logiciels qui ne font rien de particulièrement complexe mais qui utilisent quand même tout le processeur.

Et ça c’est juste du côté matériel, sans même parler du rôle du système d’exploitation, qui va profiter d’une attente d’entrée/sortie pour changer de contexte ou mettre le processeur en veille. On comprends alors mieux l’intérêt des frameworks qui gèrent ces entrées/sorties de manière non bloquante.

Led Wars : La Revanche du Ruban de LED

Présentation

L’objectif est de réaliser divers animation avec un ruban de LED RGB .

Matériel Nécessaire

– Un ruban de LED de référence WS2811B SMD5050, de 150 LED, de 5
mètres de long à un prix d’environ 19 €.

La  LED RGB WS2812 utiliser sur le ruban de LED à une capacité de 16
777 216 couleurs affichable grâce au 3 leds (Rouge, Vert, Bleu) et
256 niveau de luminosités. Elle sont piloter numériquement à l’aide
d’un seul fil.

Par ailleurs 3 LED : rouge, vert, bleu et un contrôleur numérique qui
les pilotes sont intégrées dans la LED RGB WS2812.

– Une alimentation de puissance 50W, de tension 5V et de courant 10A
par exemple la MeanWell RS-50-5 d’un prix d’environ 15 €

– Un Arduino Uno d’un prix d’environ 20 €

– Un ancienne alimentation de PC enlevée de sa carte électronique

– Un cordon d’alimentation de PC

– Un câble USB pour connecter l’Arduino et le PC

– Un cordon d’alimentation pour alimenter l’Arduino

– Un cordon permettant de connecter le ruban de led à l’alimentation
et l’Arduino

Outillage nécessaire

– Un tournevis cruciforme

Câblage

Il existe deux configuration possible :

– Câblage en fonctionnement autonome, utiliser lors de l’usage normale
du Ruban de LED RGB
– Câblage connecter à l’ordinateur, utiliser pour développez le
programme sur l’IDE Arduino

Câblage en fonctionnement autonome

En mode autonome, l’Arduino est indépendant et utilise la même
alimentation que le ruban de LED RGB.

L’alimentation 230 V vers 5 V est intégré dans le boîtier d’une ancienne
alimentation de PC.

Le fil ou transite les donnée numérique pour piloter les LEDS du ruban
de LED RGB est branchée sur l’entrée 6 de l’Arduino. Il faudra
configurer la même entrée durant la phase de développement du programme.

Câblage en mode de connection avec le PC

En mode de connection avec le PC, l’Arduino utilise l’alimentation du PC
et sont programme peut être mis à jour.

Développement du programme

Pour développer le programme gérant l’animation du ruban de led vous
devez avoir deux chose : l’IDE Arduino ainsi que la bibliothèque
Adafruit NeoPixel.

Installation de l’éditeur Arduino

 Sous Debian

Pour installe l’IDE Arduino sous Debian GNU/Linux, ouvrer un terminale,
loguer vous en root :

$ su

Puis installer le paquet Arduino avec l’utilitaire `apt` via la commande
:

# apt-get install arduino

 Sous Windows

Rendez-vous sur la page de téléchargement de l’éditeur de programme Arduino.

Puis cliquer sur Windows Installer pour télécharger le programme
d’installation.

Une fois télécharger vous n’avez plus que à lancer le programme
d’installation.

Installation de la librairie Adafruit NeoPixel

Vous pouvez soit télécharger la librairie directement sur internet.
Décompresser l’archive. Renommer le dossier `Adafruit_NeoPixel-master`
en `Adafruit_NeoPixel`, puis copier le dossier dans le dossier
`~/sketchbook/libraries`.

Ou récupérer la librairie directement dans le dossier `librairie` du
répertoire source de cette documentation et le copier dans le dossier
`~/sketchbook/libraries`.

Vous pouver aussi directement le faire en ligne de commande.

En téléchargent sur le site :

$ wget https://github.com/adafruit/Adafruit_NeoPixel/archive/master.zip

$ unzip master.zip

$ mv Adafruit_NeoPixel-master/ ~/sketchbook/libraries/Adafruit_NeoPixel

Structure de base du programme

Voici la structure de base du programme qui gère le ruban de LED.

#include <Adafruit_NeoPixel.h> // Charge la librairie Neo Pixel d'Adafruit utilisé pour piloter le ruban de LED

#define PIXEL_PIN 6 // On définit le pin où est connecté la patte DATA du bandeau
#define PIXEL_COUNT 150 // On définit le nombre de LED compris sur le Ruban de LED soit 150 pour le ruban de 5m50

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800); // Paramètre l'objet strip qui correspond à toute les LED du ruban

void setup() {
strip.begin(); // Lance la connection
strip.show(); // Initialise toute les led à 'off'
}

/* Définition des couleurs */
int RED[3] = {255, 0, 0}; // Couleur Rouge
int GREEN[3] = {0, 255, 0}; // Couleur Verte
int CYAN[3] = {0, 255, 255}; // Couleur Cyan
int YELLOW[3] = {255, 125, 0}; // Couleur Jaune
int ORANGE[3] = {255, 40, 0}; // Couleur Orange
int PURPLE[3] = {255, 0 , 255}; // Couleur Violette
int PINK[3] = {255, 0, 100}; // Couleur Rose
int BLUE[3] = {0, 0, 255}; // Couleur Bleu
int WHITE[3] = {255, 255, 255}; // Couleur Blanche
int OFF[3] = {0, 0, 0}; // Éteint

void loop() {
strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale
}

Allumer toutes les led d’une même couleur

Voici la fonction pour allumer toute les leds d’une même couleur.

void allLeds(int COLOR[])
{
for(int i = 0 ; i < PIXEL_COUNT ; i++)
{
strip.setPixelColor(i, COLOR[0], COLOR[1], COLOR[2]);
}
strip.show();
}

Puis vous n’avez plus qu’à l’appeler dans la boucle principal du
programme. Et passer en argument de la fonction la couleur que vous
souhaiter utiliser.

Par exemple ci dessous j’ai allumer toute les led du ruban de la couleur
rouge. Je passe pour cela en argument le tableau RED à la fonction
`allLeds`.

void loop() {
strip.brightismes(100); // Règle la luminosité à 100 % de la luminosité maximale
allLeds(RED);
}

Allumer le ruban de LED moitiée d’une couleur, moitiée d’une autre

Voici la fonction pour allumer le ruban de LED moitiée d’une couleur,
moitiée d’une autre.

void allBicolor(int COLOR_LEFT[], int COLOR_RIGHT[])
{
for(int i = 0 ; i < PIXEL_COUNT/2 ; i++)
{
strip.setPixelColor(i, COLOR_LEFT[0], COLOR_LEFT[1], COLOR_LEFT[2]);
}

for(int i = PIXEL_COUNT/2 ; i < PIXEL_COUNT ; i++)
{
strip.setPixelColor(i, COLOR_RIGHT[0], COLOR_RIGHT[1], COLOR_RIGHT[2]);
}
strip.show();
}

 

Puis vous n’avez plus qu’à l’appeler dans la boucle principal du
programme. Et passer en arguments de la fonction la couleur de la
première moitiée du ruban de LED, et la couleur de la seconde moitiée du
ruban de LED.

Par exemple ci dessous j’ai allumer la moitiée du ruban de couleur cyan
et l’autre moitiée de couleur bleu.

void loop() {
strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale
allBicolor(CYAN,BLUE);
}

Allumer le ruban de LED d’une couleur de façon progressive

Voici la fonction pour allumer le ruban de LED d’une couleur de façon
progressive.

void progressiveUp(int temps, int COLOR[])
{
for(int lumi = 0 ; lumi < 100 ; lumi++)
{
for(int i = 0 ; i < 150 ; i++)
{
strip.setPixelColor(i, COLOR[0], COLOR[1], COLOR[2]);
}
strip.setBrightness(lumi);
strip.show();
delay(temps);
}
}

Puis vous n’avez plus qu’à l’appeler dans la boucle principal du
programme. Et passer en arguments de la fonction la couleur du ruban de
LED, et le temps entre les différent pallié de luminosité.

Par exemple ci dessous j’ai allumé le ruban de LED de couleur bleu avec
une durée de 10 ms par pallié de luminosité.

void loop() {
strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale
progressiveUp(10, BLUE);
}

Variation progressive d’une couleur à une autre

Voici la fonction pour faire varier le ruban d’une couleur à une autre.

void changeColor(int temps, int colorDebut[3], int colorFin[3])
{

int color[3] = {0};

color[0] = colorDebut[0];
color[1] = colorDebut[1];
color[2] = colorDebut[2];

while(color[0] != colorFin[0] || color[1] != colorFin[1] || color[2] != colorFin[2])
{

if(color[0] > colorFin[0])
{
color[0]--;
}
else if(color[0] < colorFin[0])
{
color[0]++;
}

if(color[1] > colorFin[1])
{
color[1]--;
}
else if(color[1] < colorFin[1])
{
color[1]++;
}

if(color[2] > colorFin[2])
{
color[2]--;
}
else if(color[2] < colorFin[2])
{
color[2]++;
}

delay(temps);
allLeds(color);
}
}

 

Puis vous n’avez plus qu’à l’appeler dans la boucle principal du
programme. Et passer en arguments de la fonction le temps de la
variation, la couleur de départ, la couleur d’arrivée.

Par exemple ci dessous le ruban de LED varie de la couleur bleu à la
couleur rouge par paliée d’une durée de 10 ms.

void loop() {
strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale
changeColor(10, BLUE, RED);
}

Faire déplacer une LED le long du fil

Voici la fonction pour faire déplacer une LED le long du fil.

void ledUp(int temps, int color[3])
{
for(int i = 0 ; i < 150 ; i++)
{
strip.setPixelColor(i, color[0], color[1], color[2]);
strip.show();
strip.setPixelColor(i, 0, 0, 0);
strip.show();
delay(temps);
}
}

Puis vous n’avez plus qu’à l’appeler dans la boucle principal du
programme. Et passer en arguments de la fonction le temps de l’effet
ainsi que sa couleur.

void loop() {
strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale
ledUp(20, RED);
}

Faire allumée progressivement châque LED en mode chenillard

Voici la fonction pour faire allumée progressivement châque LED en mode
chenillard.

void chenillardUp(int temps, int color[3])
{
for(int i = 0 ; i < 150 ; i++)
{
strip.setPixelColor(i, color[0], color[1], color[2]);
strip.show();
delay(temps);
}
}

Puis vous n’avez plus qu’à l’appeler dans la boucle principal du
programme. Et passer en arguments de la fonction le temps de l’effet
ainsi que sa couleur.

void loop() {
allLeds(OFF);
strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale
chenillardUp(10, GREEN);
}

Ruche numérique

La ruche numérique

Le projet

Notre ruche numérique a pour objectif de donner à l’apiculteur des informations issues de sa ruche.

Les mesures et fonctionnalités  prévues

  • mesure des températures interne et externe
  • mesure des taux d’humidité interne et externe
  • poids (permet de se faire une idée de la quantité de miel produite)
  • comptage des abeilles sur la plateforme d’envol. (donnera un niveau d’activité)
  • historisation des mesures
  • administration du système via navigateur web
  • collecte des informations

Restrictions

Les ruches sont le plus souvent hors de portée des réseaux informatiques filaires ou hertziens, nous prévoyons donc un système non connecté à internet mais qui via un « hotspot » wifi (point accès wifi)  permettra la connexion de l’apiculteur passant voir sa ruche.

Réalisation

Le matériel

  • raspberry pi 3
  • caméra raspberry
  • carte additionnelle pour la sauvegarde de la date et heure
  • bloc support de piles pour l’alimentation
  • boîtier
  • capteurs (température, humidité, poids)

Les logiciels

  • distribution raspbian lite
  • motion pour les images
  • Mariadb pour la base de données
  • RaspAP pour le hotspot
  • un logiciel à trouver pour les mesures, probablement en cherchant du côté des projets de station météo à base de raspberry pi

Les opérations

Actions réalisées

  • Installation et mise à jour de la raspbian lite
  • installation RaspAP
  • Tests et configuration RaspAP
  • Installation Mariadb
  • Configuration compte root
  • Installation Motion
  • Configuration et tests Motion
  • Identification de la bibliothèque python à utiliser pour le comptage : pillow

Actions à réaliser

  • connexion motion avec mariadb,
  • installation des capteurs de mesure,
  • Configuration et tests des mesures,
  • montage général : boîtier, caméra, bloc piles,
  • Programmation  du comptage,
  • Programmation du site web pi-ruche,
  • Étalonnage du comptage
  • etc.

Comptage

Une très belle et très complexe solution aurait été d’utiliser des logiciels de reconnaissance de forme pour déterminer le nombre de silhouettes d’abeilles sur une image.

Sans parler de la complexité à mettre çà en place il est certain que les temps de traitement seraient trop longs avec un raspberry.

Nous procéderons à un  comptage statistique. On adoptera une plateforme d’envol claire afin de faire contraste avec les abeilles. Ensuite la bibliothèque pillow va nous fournir pour chaque image analysée un histogramme des pixels clarté et nombre.

A partir de là un étalonnage sera nécessaire pour obtenir un tableau comme celui-ci :

  • 0% de points sombres  0 abeilles
  • 5% de points sombres  x abeilles
  • 10% de points sombres  y abeilles
  • etc jusqu’à 100%

L’étalonnage se fera par un comptage manuel sur images fixes jpeg.

On essaiera mathématiquement de filtrer les problèmes de luminosité variable. On essaiera aussi d’éviter les problèmes de plateforme partiellement au soleil.

Historisation des données

On utilisera le SGBD Mariadb pour historiser les données acquises.

La table pourrait avoir les champs suivants :

  • date et heure de mesure,
  • température intérieure,
  • température extérieure,
  • humidité intérieure,
  • humidité extérieure,
  • nombre d’abeilles,
  • nom de l’image stockée.

Voilà ! Yapuka !

Merci pour vos suggestions et participations.

Animation de Noël

Panneau

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

CAISSE A SAVON

Samedi 9 juin 2018, la Vilaine Bidouille met de côté les outils numériques pour fabriquer une caisse à savon avec des restes d’ateliers.

atelier extérieur
Atelier extérieur
Prémontage
Prémontage

Securisation du périmètre
Securisation du périmètre
Premiers essais
Premiers essais

Retour sur le bizarbre

Bizarbre

arbreNous avions présenté rapidement notre Bizarbre dans un précédent article. 

Etant données les questions techniques qui nous ont été posées, voici le détail complet du tuto.

Matériel :

      un PC équipé de :

o    Processing

o    Arduino

      Une carte Arduino

      Une carte MPR121 de chez Adafruit

      Fils de cuivre rigides

      Des pommes

      Un câble USB

      De la connectique entre Arduino et MPR121

Logiciels et bibliothèques :

      Processing

      Arduino

Fichiers :

      Fichiers MP3 avec les histoires enregistrées

 

Etape 1 : Construire un arbre

Equipez vous d’une bibliothécaire munie d’une scie, de pots de peinture et de contre-plaqué épais. Laissez faire le temps. Et vous obtenez un belle arbre en bois.

Etape 2 : Suspendre les pommes

Il faudra une pomme par histoire et une supplémentaire pour faire la touche “stop”. Nous avons utilisé du petit fil de cuivre. La partie dénudée traverse la pomme pour assurer un bon contact avec le fruit. Nous avons utilisé des aiguilles à poisson pour percer les pommes.

Etape 3 : Préparer de la carte Arduino

La carte utilisée est une Duemillanove.

Au lancement de l’interface de programmation Arduino, il faut ajouter les bibliothèques suivante pour pouvoir communiquer avec les capteurs capacitifs MPR121

Etape 4 : Connecter l’Arduino à la MPR121

Câblage assez simple.

Connecter Vin à l’alimentation. Sur un Arduino, ça revient à alimenter en 5V.
Connecter GND à la masse commune à la puissance et aux données.

Connecter SCL à la fiche I2C clock SCL sur l’Arduino. Sur une UNO, c’est A5 ; sur une Mega, digital 21 ; sur Leonardo/Micro, digital 3.

Connecter SDA sur la fiche I2C data SDA sur l’Arduino. Sur une UNO, c’est A4 ; sur une Mega, digital 20 ; sur Leonardo/Micro, digital 2.

Etape 5 : Programmer la carte Arduino

Ouvrir l’interface Arduino (IDE) sur le PC et brancher la carte Arduino avec le câble USB.

Bien repérer le numéro de port de la carte. Pour ça, il y pleins de tutos sur internet. Inutile de surcharger celui-ci.

Télécharger la librairie master.zip pour que la carte Arduino puisse communiquer avec le capteur MPR121. Renommer le dossier décompressé en Adafruit_MPR121 et vérifier qu’il contient bien le fichier Adafruit_MPR121.cpp et Adafruit_MPR121.h.

Placer ce dossier Adafruit_MPR121 dans le dossier des librairies du logiciel Arduino arduinosketchfolder/libraries/. Si c’est votre première librairie, il faudra sans doute créer ce dossier. Arrêter et redémarrer l’IDE Arduino.

Si jamais vous avez un doute allez chercher l’info à la source chez Adafruit.

Tapez le programme suivant :

 

/*********************************************************
Arbre  histoire pour la mediathque d’Allaire (cote arduino)
Auteur : Cyrille Laulier
        www.lebiosphere.net
Date   : le 26/02/2016

Ce programme Arduino va de paire avec le programme Processing
arbreAHistoires
Grace  une carte MPR121 de chez Adafruit, la carte Arduino
detecte le contact de la main d’un enfant sur un fruit.
Elle envoie ensuite le numero du fruit au PC via le port serie
Sur le PC, Processing regarde le numero et lance la lecture
de l’histoire correspondante
**********************************************************/
#include <Wire.h>
#include « Adafruit_MPR121.h »
// declaration de l’objet « cap » qui est le capteur MPR121
Adafruit_MPR121 cap = Adafruit_MPR121();

// Garder la trace du dernier contact touche
// pour savoir quand un bouton est « relache »
uint16_t lasttouched = 0;
uint16_t currtouched = 0;

void setup() {
 Serial.begin(9600);
 // adresse par defaut 0x5A, si alimentation 3.3V alors 0x5B
 // si cablage SDA alors 0x5C et si SCL alors 0x5D
 if (!cap.begin(0x5A)) {
   Serial.println(« MPR121 introuvable, verifier le cablage »);
   while (1);
 }
 Serial.write(0);
}

void loop() {
 // recuperation des touches appuyees
 currtouched = cap.touched();
 // controle de tous les contacts et envoi sur port serie
 for (uint8_t i=0; i<12; i++) {
   // it if *is* touched and *wasnt* touched before, alert!
   if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) {
     Serial.write(i);
   }
 }
 // pour tour suivant
 lasttouched = currtouched;
 delay(100);
}

 

 

Envoyez ce programme dans la carte Arduino.

Etape 6 : Connecter la MPR121 aux pommes

Câblage encore plus simple. On a dix pommes pour les histoires et une pomme “stop” qui interrompt toutes les lectures.

Pour la pomme “stop”, on plante un fil électrique rigide dans la pomme qu’on connecte à l’entrée 0 de la MPR121.

Pour les autres pommes, on fait pareil sur les entrée de 1 à 10. Dans notre cas, nous n’avions enregistré que 8 histoires. Alors nous n’avons câblé que 8 pommes en plus du “stop”.

Etape 7 : Préparer Processing

On oublie un peu l’électronique pour revenir sur le PC.

Installer et lancer Processing.

On importe la bibliothèque Minim pour pouvoir manipuler du son. Pour cela, dans l’interface Processing, il suffit d’aller dans le menu Sketch > Import Library… > Minim audio. C’est fait.

Etape 8 : Programmer Processing

Dans la fenêtre Processing, on va taper le programme. Le programme est le suivant :

import processing.serial.*;
import ddf.minim.*;

Minim minim;
AudioPlayer hist01,hist02,hist03,hist04,hist05,hist06,hist07,hist08,hist09,hist10;
Serial port;
int val;

void setup() {
 fullScreen();
 String arduinoPort= »COM3″;
 port=new Serial(this, arduinoPort, 9600);
 
 minim = new Minim(this);
 hist01 = minim.loadFile(« chewinggum.mp3 »);
 hist02 = minim.loadFile(« bouteille.mp3 »);
 hist03 = minim.loadFile(« chocolat.mp3 »);
 hist04 = minim.loadFile(« Saucisse.mp3 »);
 hist05 = minim.loadFile(« Minuscule.mp3 »);
 hist06 = minim.loadFile(« envers.mp3 »);
 hist07 = minim.loadFile(« envers.mp3 »);
 hist08 = minim.loadFile(« envers.mp3 »);
 hist09 = minim.loadFile(« histoire09.mp3 »);
 hist10 = minim.loadFile(« histoire10.mp3 »);
 //song.play();
}

void draw() {
 if (port.available() > 0) {
   val=port.read();
 }
 background(map(val,0,10,0,255));
 rect(40,(val+1)*50-10,360,20);
 if (val==1) {
   hist01.rewind();
   hist01.play();
 }
 if (val==2) {
   hist02.rewind();
   hist02.play();
 }
 if (val==3) {
   hist03.rewind();
   hist03.play();
 }
 if (val==4) {
   hist04.rewind();
   hist04.play();
 }
 if (val==5) {
   hist05.rewind();
   hist05.play();
 }
 if (val==6) {
   hist06.rewind();
   hist06.play();
 }
 if (val==7) {
   hist07.rewind();
   hist07.play();
 }
 if (val==8) {
   hist08.rewind();
   hist08.play();
 }
 if (val==9) {
   hist09.rewind();
   hist09.play();
 }
 if (val==10) {
   hist10.rewind();
   hist10.play();
 }
 if (val==0) {
   hist01.pause();
   hist02.pause();
   hist03.pause();
   hist04.pause();
   hist05.pause();
   hist06.pause();
   hist07.pause();
   hist08.pause();
   hist09.pause();
   hist10.pause();
 }
 val=99;
}

 

Enregistrer ce programme sous le nom de arbreHistoires_processing.pde.

On peut l’optimiser. Si j’avais eu 200 histoires avec 201 pommes, j’aurais utilisé la programmation orientée objet.

On voit que le programme appelle des fichiers joints. Vous pouvez enregistrer vos propres histoires ou les récupérer sur mon site Google. Il faut les coller dans le même dossier que le fichier du programme arbreHistoires_processing.pde.

Etape 9 : Connecter le PC

Le plus facile de tous les câblages. Il faut s’assurer que l’IDE d’Arduino ne tourne pas sur le PC. Il faut brancher la carte Arduino au PC via le câble USB. Et lancer le programme arbreHistoires_processing.pde en appuyant sur la flèche “Play” de Processing. Pensez à monter le son.

Etape 10 : Faire un lâcher d’enfants

Tout est dans le titre. Les enfants vont toucher une pomme. Au simple contact, le PC va commencer la lecture de l’histoire associée. Il suffit d’appuyer sur la pomme “STOP” pour faire silence.

Etape 11 : Penser à la suite

Comme chaque bidouille, elle laisse un sentiment d’imperfection une fois réalisée. Une frustration. En fait, c’est nul. Ce n’est pas comme ça qu’on aurait dû avoir une approche complètement différente. On voit les fils qui dépassent de partout, les enfants mangent les pommes, ça monopolise un PC et des enceintes, l’erreur de câblage est facile à faire, il n’y a pas d’image…

Aussi, je fais un appel à contribution. Qui est motivé pour :

      Trouver le moyen de connecter un haut-parleur directement à l’Arduino ?

      Forger des pommes en or (ou accessoirement en bronze) ?

      Trouver un moyen de cacher les câbles, voire les cartes électroniques, dans l’épaisseur du bois de l’arbre ?

      Rendre la carte Arduino capable de gérer les sons et les images sans PC ?

      Connecter l’Arduino à un vidéo projecteur ?

      Concevoir un shield pour brancher toutes les petites cartes électroniques à l’Arduino sans fils ?

      Raconter de nouvelles histoires d’arbres ?

Pour toute question, truc qui ne marche pas, bug, difficultés et autre, n’hésitez pas à vous retrousser les manches et à suer sang et eau pour obtenir un résultat satisfaisant. Ou bien passez nous voir à la Vilaine Bidouille.

Cyrille Laulier, www.lebiosphere.net

 

Ma douche sauvée par la Bidouille d’Allaire

J’ai acheté une paroi de douche et une porte coulissante en verre sur le bon coin.
Je pensais avoir fait une bonne affaire, mais pas tant que ça :
ayant posé le placo, fait la plomberie, monté la paroi de douche, posé le carrelage ; je pensais pouvoir bientôt terminer la douche !!!

Mais voilà, au moment du montage de la porte, nous réalisons qu’il manque deux supports en plastique qui tiennent et guident une roulette dans une gorge…..

Je me précipite alors sur internet pour retrouver cette pièce manquante, impossible à trouver !

J’avais cependant trouver les roulettes sur un site ukrainien mais il me manquait les deux supports !

L’histoire se termine bien grâce à l’atelier Bioduille d’Allaire du Vendredi soir à la Médiathèque qui parvient à modéliser et imprimer ces deux pièces maîtresses, une gauche et une droite, symétriques !
Comme quoi, c’est bien utile ces petites bidouilles !

 

Sandrine