Bentolux 2023

De Les Fabriques du Ponant
Aller à : navigation, rechercher

Page de travail de la Bentolux des eaux.

Réalisée en parallèle du Village de Bentolux du TN4 (22-26 mai 2023).

Introduction

Créer une Bentolux pour accompagner les animations autour des déchets dans les eaux. L'idée et d'aborder, en jouant, la destinations des eaux usées dans notre quotidien. La boîte doit permettre de piocher un "déchet" puis de dire où il termine, entre "station d'épuration" et "mers et océans". Enfin il faudra afficher la bonne réponse/"correction".

Cette Bentolux est réalisée avec appui sur [[1]] et le contenu pédagogique proposé pour le TN4, par Léo et Coline.

Montage

Matériel nécessaire

  • 1 planche de médium 3mm d'au moins -- par --
  • 1 carte Arduino Uno
  • 1 écran I2C 128x64 px
  • 1 potentiomètre
  • 1 anneau neopixel 24 LED
  • 2 boutons poussoirs
  • 2 servo moteurs pas à pas
  • câbles duponts MM et MF
  • 1 kit à souder

Réaliser la boîte

À l'aide de la découpeuse laser, couper les différentes parties de la Bentolux : Media:bento2023_etage3.svg et Media:Bentolux TN4 BREST.svg

Il suffira ensuite d'assembler chaque étage indépendamment.

(insérer photo de chaque étage)

Ne pas hésiter à utiliser de la colle à bois pour assurer le maintient des éléments entre eux.

À l'aide d'une imprimante 3D, imprimer 8 "clous". Ils seront aussi à coller aux emplacements prévus.

(insérer photo 'clous')

Il faudra également imprimer en 3D le cache écran. On le placera au moment de l'assemblage final.

Montage électronique

Bentolux 2023 fritzing fin.png

Code

Bibliothèques nécessaires

Code final et ressources

Mon code dans le fichier zip juste en dessous ! Je n'ai pas pris le temps de tout commenter, et rendre plus propre.

Media:Bento_dechetsdeseaux.zip

// Espace de travail

Idées et prise de notes

Réaliser une Bentolux en lien avec l'animation des eaux pour l'été 2023 (et après !).

Elle permettra de discuter de manière ludique du cycle de l'eau et de nos déchets dans tout ça.

Au lieu de faire un interrupteur par déchet, faire défiler avec potentiomètre sur l'écran et valider le déchet choisie > indique une couleur et dit vers quelles eaux va notre déchet (eaux domestiques/épuration ou océan/mer).

Pour convertir des images en bitmap https://www.mischianti.org/2021/07/14/ssd1306-oled-display-draw-images-splash-and-animations-2/ Il faudra copier sur le modèle de l'étoile du programme de test > sortir un code en byte sur le site et faire 'testdrawbitmap'

Ressource code pour potentiomètre https://arduino.developpez.com/tutoriels/arduino-a-l-ecole/?page=projet-10-le-potentiometre

Ressource code Neopixel https://arduino-france.site/adafruit-neopixel/ et https://arduino-france.site/neopixel-ring/

Branchement > 5V, D1, GND

Ressource gestion interrupteur https://www.locoduino.org/spip.php?article176 et https://arduino-france.site/bouton-poussoir/

Réussi à faire correspondre 'appuyer bouton 1' et neopixel rouge, puis 'appuyer bouton 2' et neopixel bleu. Problème : il faut rester enfoncé pour maintenir couleur.

Neopixel "tourne" pour patienter pour réponse. > utilisation du code "Exemples > Adafruit Neopixel > strandtest_wheel", retrait des lignes qui me sont inutiles et adaptation des couleurs.

Délai choix écran > permet de "valider" et fait tourner tel ou tel servo.

On ne peut pas faire les LED qui défilent + agir sur l'écran (trop d'actions en même temps, le neopixel prend le dessus). Si on voulait faire des plusieurs choses en même temps, voilà une source qui explique https://forum.arduino.cc/t/how-to-program-parallel-action-using-arduino-uno/629867/4

On va pour faire simple ne pas faire le défilement des LED.

Pour faire plus simple, au lieu d'avoir à sélectionner sur l'écran le type de déchet, simplement déjà dire la réponse/couleur.

Faire correspondre les valeurs au potentiomètre qui montrent sur l'écran la bonne réponse, la rotation du servo pour montrer la réponse.

Maintenant il faut bonne réponse + bonne couleur : si pot à 0 = bleu, si pot à 1024 = rouge.

Source LED et potentiomètre https://ardwinner.jimdofree.com/arduino/iii-les-leds/9-varier-la-luminosit%C3%A9-avec-un-potentiom%C3%A8tre/

Notes manuscrites et photos essais

Croquis nadia 1.jpeg Tableau leo 1.jpeg Croquis sarah 1.png

Schema scenar 1.jpeg Maison c2i.jpeg Fritzing1.png

Parties de code

Dessiner maison sur écran C2I 128 x 64 px :

  void tracerMaison(){
  // MAISON
  // toit
  display.drawLine(40, 32, 63, 0, WHITE); // Ligne du toit gauche
  display.drawLine(63, 0, 90, 32, WHITE); // Ligne du toit droite
  // Dessiner les murs
  display.drawRect(41, 32, 50, 32, WHITE);
  // Dessiner la porte
  display.drawRect(48, 48, 10, 16, WHITE);
  }

Faire allumer toutes les LED d'un neopixel 24 LED en blanc :

  #include <Adafruit_NeoPixel.h>
  #define NEOPIXEL_PIN 6
  #define NEOPIXEL_COUNT 24
  Adafruit_NeoPixel ring(NEOPIXEL_COUNT, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);
  void setup() {
  ring.begin();
  ring.show(); // Initialize all pixels to off
  }
  void loop() {
  // Allumer les 24 LED en blanc
  for (int i = 0; i < NEOPIXEL_COUNT; i++) {
  ring.setPixelColor(i, ring.Color(50, 50, 50));
  }
  // Mettre à jour le ring NeoPixel
  ring.show();
  }

Roue qui "Patiente" :

  #include <Adafruit_NeoPixel.h>
  #ifdef __AVR__
  #include <avr/power.h>
  #endif
  #define PIN 6
  // Parameter 1 = number of pixels in strip
  // Parameter 2 = Arduino pin number (most are valid)
  // Parameter 3 = pixel type flags, add together as needed:
  //   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
  //   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
  //   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
  //   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
  //   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
  Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800);
  // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
  // pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
  // and minimize distance between Arduino and first pixel.  Avoid connecting
  // on a live circuit...if you must, connect GND first.
  void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  #if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  // End of trinket special code
  strip.begin();
  strip.setBrightness(50);
  strip.show(); // Initialize all pixels to 'off'
  }
  void loop() {
  // Some example procedures showing how to display to the pixels:
  colorWipe(strip.Color(255, 255, 255), 50); // White
  colorWipe(strip.Color(0, 0, 0), 50); // Black
  }
  // Fill the dots one after the other with a color
  void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
  strip.setPixelColor(i, c);
  strip.show();
  delay(wait);
  }
  }

Attention : bien vérifier le nb de LED défini, la PIN branchée et le nom donné à l'anneau LED (ici strip, j'ai dû le changer en ring pour l'introduire dans mon code final).