Lampe ADN

Lampe ADN

Lampe ADN

Lampe d'ambiance en forme d'Hélice ADN

Il faut

  • Microcontrôleur ESP8/266 monté sur une Firebeetle.
  • LEDs WS2812E
  • Un broker MQTT
80% Complete

Objectifs

Programmation de LEDs RVB en fonction des résultats d'une API.
Le questionnement de l'API se fait par un programme Python toutes les 10 minutes et le résultat est publié dans un topic sur un broker MQTT.

Le microcontrôleur pilotant les LEDs écoute un topic MQTT pour mettre à jour le nombre de LEDs allumées.

Cahier des charges

  1. La lampe doit pouvoir allumer un certain nombre de LEDs en fonction d'un évènement extérieur, comme un pourcentage.
  2. La lampe doit pouvoir s'éteindre et s'allumer toute seule.
  3. La gestion de l'API doit être portable.
  4. La gestion des retours de l'API doit pouvoir être mise à jour sans devoir recompiler le programme du microcontrôleur.

Pour faire ce projet d'allumage de LEDs il y a 2 solutions :

  1. Faire en sorte que tout soit géré par le microcontrôleur (requète vers l'API, gestion des retours, allumage/extinction des LEDs en fonction de la période de la journée et du retour de l'API).
  2. Faire en sorte que seul l'affichage du nombre de LEDs soit géré par le microcontrôleur.

Nous avons choisi la solution 1 car elle semble la plus flexible pour la durabilité du projet.

Au sujet des requêtes vers l'API

J'ai choisi l'API du site 2miners.com qui donne la balance d'un compte de minning, mais n'import quel API capable de donner un résultat numérique peut faire l'affaire (le nombre de voiture passant sur un rond-point, si tant soit peut cette API existe...) le solde d'un compte en banque, etc....

L'idée est d'indiquer de manière lumineuse quand la valeur est à 0 ou 100% de son maximum.

Création de la structure en bois

Création de la structure en bois

100% Complete
Le bois utilisé est du contreplaqué de 18 mm.

Les plans ont été fait pour être usinés en partie à l'aide d'une CNC, mais la majeur partie de l'assemblage et les finitions se font "à la mains" de façon tout à fait artisanale.

Il y a 3 pièces principales : un fond ouvrable dans lequel on va cacher le microcontrôleur et la plus par des fils, des parties assemblées tenant les bâtons de colle et la partie haute (ouvrable).

Les éléments de l'hélice ADN

Le principe :

  1. Découper le plus précisément possible des cercles de 25 mm de largeur dans un bois de 18 mm d'épaisseur (figure 1)
  2. Couper les cercles selon un angle de 30 ° par rapport à la verticale à l'aide d'une scie radiale (figure 2).
  3. Percer les éléments à l'aide d'un foret de 10mm pour faire passer les bâtons de colle.
  4. Assembler chacun des éléments le plus précisément possible pour faire la structure vrillée de l'hélice ADN.

Le fond

Il est constitué de 2 parties parfaitement identiques. (figure 3). Pour les maintenir l'une sur l'autre j'ai utilisé des aimants : ça permet de le démonter facilement si besoin.

L'usinage de ces deux parties se fait à l'aide d'une CNC en évidant une "poche" de 15 mm de profondeur.

Partie haute

Là encore il s'agit de 2 anneaux dans lesquels j'ai creusé une poche de 5 mm de profondeur parfaitement identique maintenus à l'aide d'aimants. C'est dans cette partie que passe le câblage électrique.

Le projet en images

Figure 1

Figure 1

Figure 2

Figure 2

Figure 3

Figure 3

Installation d'un broker MQTT

Installation d'un broker MQTT

0% Complete

a faire

Programme de requétage de l'API

Programme de requétage de l'API

100% Complete
Programme Python

#!/usr/bin/python3

# -*- coding:utf-8 -*-

import paho.mqtt.client

from datetime import timedelta

from datetime import datetime

import requests, requests_cache
if __name__ == '__main__':

    now = datetime.now()
    # Send request to 2minners API -------------------------------------------------------------------------------------

    requestCache2minners = requests_cache.CachedSession('/tmp/cache2Minners_10minutes',

                                                        expire_after=timedelta(minutes=10), backend='sqlite')

    url = 'https://eth.2miners.com/api/accounts/0xE31199939156Fe7286D831czdE2D4D0c8f7028a3196b'

    xml = requestCache2minners.get(url)

    miners = xml.json()
    # Calcul du restant avant versement --------------------------------------------------------------------------------   

balanceImpayee = miners['stats']['balance'] / 1000000000

    versement = 0.01    # cette valeur est défini via l'IHM de 2minners.com

    pourcent = int((balanceImpayee / versement) * 100)
    # Initialize the MQTT client ---------------------------------------------------------------------------------------

    client = paho.mqtt.client.Client(client_id='2minersAPI', clean_session=False)

    # Connection

    client.connect(host=<AdresseIP>, port=1883)
    # Mise à jour de la lampe ------------------------------------------------------------------------------------------

    # On l'éteind

    ret = client.publish("lumiere/lampeADN", "OFF")

    # si on est entre 9:00 et 22:00

    if( int(now.strftime("%H")) >= 9 ) and ( int(now.strftime("%H")) <= 22 ):

        # On l'allume à pourcent % (0 = tout eteind, 100 = tout allumé)

        ret = client.publish("lumiere/allume/lampeADN", pourcent)

Câblage des LEDs

Câblage des LEDs

100% Complete
Le câblage est simple mais long : les LEDs WS2812E sont vendu individuellement (par lot de 100), il faut donc les souder entre elles.

Je n'ai pas pu utiliser des LEDs précablée sur une bande car l'espacement des trous dans les différentes pièce ne tombe pas sur un espacement normalisé de LEDs. nous avons donc opté pour des LEDs individuelles que nous avons soudées ensemble.

L'ordre se fait en suivant les flèches indiquées au dos des LEds et en montant d'un coté de l'hélice pour redescendre de l'autre coté.