Wiki

Reso-nance numérique | Arts et cultures libres

Outils du site


Panneau latéral

projets:olo_220v:accueil

Ceci est une ancienne révision du document !


OLO 220V variation

  • Porteur du projet : resonance
  • Date : 2020
  • Licence : libre !
  • Contexte :
  • Fichiers : lien
  • Lien : lien vers un site éventuellement

Description

Olo en version 220v….

Jeu

Sur une interface representant les differentes lumieres.

On peut enregistrer une sequence en appuyant sur des boutons (ou interface photoresitance)

  • Si une premiere sequence de 10secondes a été enregistré elle joue en boucle… et progressivement le niveau lumineux decroit pour s'eteindre au bout d'un moment….
  • Si une deuxieme sequence de 3s est ajouté , elle s'additionne a la premiere et joue en boucle toutes les 3secondes…. et decroit aussi avec le temps…
  • etc…

Matériaux

  • ESP8266 (5€)
  • module gradateur 5v /220v pwm interrupt (3€)
  • adapateur 220v > 5v (1€) lien
  • douille E27 + ampoule halogene (4€)
  • prise 220v male (1€)
  • potentiomètre (1€)
  • jumpers divers
  • fils electriques 220v 0.75 (2€)
  • boite et colle chaude (??)
  • 1 kit Raspberry Pi (70€)
  • 1 routeur Wifi

Librairies gradateur

Pour le dimmer il faut utiliser la lib https://github.com/RobotDynOfficial/RBDDimmer

Ca clignote un peu quand on est pres du zero… il faut plutot se ballader entre 5% et 100% pour eviter ces clignotements…

Fonctionnement

Le code source est consultable sur le git du projet. Il est composé de C/Arduino pour les ESP8266, de python pour le serveur/backend et de javascript pour l'interface web.

ESP8266

câblage

Les ESP8266 sont alimentés en 5v via un petit convertisseur 230VAC → 5VDC dédié. Ils alimentent à leur tour un module dimmer avec détection du point zéro qui alimentera en PWM l'ampoule halogène. Un potentiomètre permet de contrôler manuellement l'ampoule et de désactiver la réception OSC.

ESP8266 dimmer Potentiomètre convertisseur 220VAC→5VDC
G GND patte externe -v
5v +v
3v3 VCC patte externe
A0 patte centrale
D1 PWM
D2 ZC

réseau

Les ESP8266 se connectent sur un routeur dédié dont le SSID et éventuellement mot de passe est défini dans le code :

static char* PSK = NULL;
static char* SSID = "bergen.olo";

Quand leur potentiomètre est au maximum, ils éteignent la lampe en attendant de recevoir des messages OSC. /[hostname]/light [valeur] : où [hostname] est light_ suivi d'un numéro (ex: light_10) [value] la valeur d'éclairage de 0 à 100 Ils répondent /ACK avec en premier argument leur nom d'hôte et en second la valeur changée. Ça permet de leur renvoyer automatiquement une valeur qui n'aurait pas été reçue en cas de wifi pas tip top. Par défaut les ESP envoient en broadcast, sauf s'il reçoivent l'OSC “/whoIsThere” : ils enverront alors à la dernière IP qui leur aura envoyé ce message et répondent en se présentant (/myID avec leur hostname)

Interface web

Un Raspberry Pi est utilisé pour servir une interface web via un script python3 utilisant flask et socketIO. L'interface présente 12 fenêtres sous forme de deux rangées de six cases. Si les ESP8266 représentant une fenêtre ne sont pas branchés, la case reste inactive. La déclaration des ESP8266 attendus se fait dans le fichier config.py où il est possible d'entrer sous forme de liste les identifiants des ESP8266 connectés : activeWindows = [0, 1, 2, 4, 5, 6, 7, 8, 10, 11] les numéros de 0 à 11 correspondant aux identifiants donnés aux lampes.

La génération de son côté client se fait par la librairie Tone.js qui permet de créer un oscillateur multiple et d'y ajouter de la réverb. Les réglages de l'oscillateur (ADSR, nombre d'oscillateurs, déphasage, forme d'onde) sont stockés dans le fichier static/js/index.js :

 var synth = new Tone.PolySynth(3, Tone.Synth, {
        "oscillator" : {
            "type" : "fatsine",
            "count" : 3,
            "spread" : 30
        },
        "envelope" : {
            "attack" : 0.1,
            "decay" : 0.1,
            "sustain" : 0.5,
            "release" : 0.4,
            "attackCurve" : "exponential"
        },
    }).toMaster();

Les notes utilisées pour chaque fenêtre sont réglable dans le fichier config.py :

notes = ["C", "D", "E", "G", "A"] # list of notes that will be played on the UI
startOctave = 3 # lowest octave to be played
playNotesOnUI = True # play sounds corresponding to lights on the UI when sequences are played
  • notes contient la liste des notes jouées (dans l'ordre)
  • startOctave correspond à l'octave la plus grave qui sera jouée
  • playNotesOnUI permet au serveur de faire jouer sur l'ensemble des téléphones connectés à l'interface web les notes correspondants à la séquence lue

Il est totalement impossible de garantir une lecture synchrone de ces sons avec les lumières sur le téléphone de chaque participant connecté.

Le tout peut devenir très vite cacophonique.

L'enregistrement d'une séquence débute avec le bouton startRec. L'utilisateur peut alors cliquer sur les icônes correspondant aux fenêtres qu'il veut allumer. Une pression maintenue correspondra à une lumière continue. Une fois la séquence voulue enregistrée, un appui sur le bouton stopRec clôturera l'enregistrement. La durée maximale d'enregistrement est réglable en ms dans le fichier config.py : sequenceMaxLength = 30000 Une fois atteinte, l'enregistrement est automatiquement clôturé, comme si l'utilisateur avait cliqué sur stopRec Le bouton play envoie la séquence au serveur qui commencera immédiatement à la lire en boucle. Le bouton remove uniquement la dernière séquence jouée depuis cet appareil tandis que le bouton clear effacera toutes les séquences en cours de lecture.

lecture des séquences

Chaque séquence est lue en boucle, atténuée à chaque itération. L'atténuation est réglable (en pourcent par itération) dans le fichier config.py :dampeningPerLoop = 10. Cette atténuation peut être renforcée par une atténuation additionnelle dépendant du nombre de séquences utilisant les mêmes lampes : si une séquence est la seule à utiliser certaines lampes, elle mettra plus de temps à disparaître. Ce paramètre est réglable dans config.py dampeningPerUser (0 = désactivé)

communication lampes/serveur

communication serveur/client

Idées design

Idée design tasseau + conserve.. :ololamp.blend

Materiaux

  • Boite de conserve
  • tasseau 2cmx2cm (scie bois) 2x20cm 2x15cm 1x25cm
  • tige fileté M4mm? (scie metal /lime /etau) 2x10cm
  • papillon ecrou M4
  • vis

Photos

/home/resonancg/www/wiki/data/attic/projets/olo_220v/accueil.1584527198.txt.gz · Dernière modification: 2020/03/18 11:26 de laurent