• Aucun résultat trouvé

[PDF] Tutoriel Ambilight Arduino exemples pratique | Cours Arduino

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Tutoriel Ambilight Arduino exemples pratique | Cours Arduino"

Copied!
26
0
0

Texte intégral

(1)

Matériels : Raspberry Pi 3 Arduino nano

Ruban Leds Ws2812b. (3 borne « + » ; « Din » ; “-“)

Logiciel (liens de téléchargement en fin de page) : Arduino IDE : pour programmer l’Arduino Nano

Openelec : Os du Raspberry Pi (installent Kodi le Media center) Kodi : L’application media center

Hypérion : Add On pour Openelec pour la gestion des Leds

HyperCon : Logiciel Windows et mac au format .Ja (JavaScript) pour personnaliser notre installation en nombre de Leds, positionnement, départ 1ere Led, couleurs et bien d’autres réglages

BobLight Config Maker : Logiciel Windows identique à HyperCon pour la gestion de la configuration de l’installation (Boblight est un autre Add On qu’Hypérion mais est moins rapide) Le logiciel va uniquement nous permettre de générer le Préfix (ex. : 41 64 61 00 C2 97) du nombre de Leds. Une donnée primordiale à mettre dans le code de L’Arduino. Information importante, Hypérion compte les Leds de 0 a x (ex : 0 à 99) ce qui nous donnera 100 led car le « 0 » compte, alors que Boblight démarre à 1. Donc pour générer le bon préfix il faudra mettre une led de moins dans le logiciel Boblight pour qu’Hypérion et Arduino si retrouve tous.

(2)

Télécharger et installer Openelec sur la carte SD

Au passage si vous avez une télé récente, le câble HDMI gèrera la télécommande de la télé. Pratique pour naviguer dans Kodi.

Brancher un câble Ethernet sur le Raspberry Pi, car l’installation d’Hypérion et les configurations de celui-ci se gèreront en SSH.

Dans Kodi, aller dans L’onglet System  OpenELEC  Connexions Pour récupérer l’adresse IP attribuée au Raspberry Pi. Cette IP peut changer si le câble Ethernet est branché sur un ordi ou une box ou autre. Ne pas tenir compte si le réseau Wifi est détecté.

(3)
(4)

Toujours dans L’onglet System- OpenELEC allez à Service, SSH et activez le si ce n’est pas fait.

(En cas de problème dans un futur proche ou HyperCon ne voudrait pas se connecter en SSH, c’est ici qu’il faudra revenir et désactiver, activer SSH et Désactiver ou pas le mot de passe du SSH)

II Partie Leds

(5)

Mais en fait les Leds dans le ruban en ont 4 : le plus, le moins, le Din entrée d’information et le Do la sortie d’information pour la Leds suivante.

Une petite flèche indique le sens sur le ruban.

Je conseil de démarrer la première Led du ruban au niveau du pied de votre TV, pour les différents logiciels qui existent c’est souvent le point de référence, et tournez dans le sens horaire ou

trigonométrique. Pas d’importance les logiciels vous demanderont quel sens vous avez choisi.

HyperCon nous montre les Leds vue de face à la TV alors que Boblight nous les montre face au dos de la TV.

(6)

Dos à la TV je tourne dans le sens trigonométrique en partant du pied de la TV j’ai donc 29 Leds à droite du pied, 37 en remontant sur le côté droit de la TV (toujours le dos de la TV face à moi) ; en haut 63 Led, 37 sur le côté gauche et 29 pour finir et retourner au pied.

Le ruban de led consomme pas mal en ampérage, en gros les 5v fournis par le port USB du Raspberry risque d’être trop juste, donc on prend une alimentation autre en 5v continue (et surtout pas en alternatif). On pourait faire le calcul de l’intensité qu’il nous faudrait en comptant le nombre de Leds du ruban fois 3 car Rouge, vert, bleu pour une led qui demande en moyenne 0.20 à 0.40 mA si je ne dis pas de bêtise. Je n’ai pas fait le calcul mais mon alimentation fait 5v 2.5A et j’ai 195 Leds X 3. Et ça suffit.

(7)

Arduino Broche 6 résistance 470 Ohm Din du ruban Port USB de ma TV  Raspberry Pi 3 USB Arduino Gnd (-)  Gnd du ruban

Arduino Vin / +  SURTOU PAS AU + DU RUBAN

Alimentation externe 5V (2.5A)  Au + du ruban

(8)
(9)
(10)

IV Logiciel HyperCon

HyperCon est un fichier au format .ja, Il faut l’ouvrir avec le logiciel JavaScript, Windows et Mac il fonctionne sur les deux. (J’ai eu des problèmes pour l’installer sur Windows 10, mais sur Win 7 et Mac OS pas de problème).

HyperCon permet de générer le fichier qui gèrera votre système personnalisé en fonction de plusieurs variables, type de Led utilisé, nombre de led, espacement, taille de la TV et bien d’autres… Le fichier sera transmis directement au Raspberry via le SSH. Mais on peut également le déposer et le remplacer manuellement dans la carte SD (sur mon Mac le Raspi apparait sur le réseau je peux donc cliquer déposer le fichier alors que sur mon Windows il n’apparait pas) Mais le mieux reste de le faire via SSH, on voit ça par la suite.

(11)

Réglage : Hardware :

Mètre comme sur l’imprime écran, Pour info :

Type : mètre Adalight car c’est la librairie qui sera utilisée dans l’Arduino. (Ne pas être tenté de mettre WS2812b car les transferts d’information se font via USB et non sur le GPIO (les PIN du Raspi) Output : mettre sur ttyUSB0 pour les Arduino nano (les uno, DEU et autre, sauf pour le Méga ou il faudra mettre ttyACM0 mais je n’ai pas testé)

Baudrate : c’est la vitesse de transfert via la liaison série du port USB, il doit être identique entre HyperCon et dans le code de L’Arduino (qu’on réglera après). 500 000 semble être un bon compromis, tout dépend du nombre de Leds. Mais pour 195 led impeccable.

RGB : Il se peut que la couleur soit inversée entre le rouge le vert et le bleu, c’est ici qu’on règle ça si le vert est à la place du bleu par ex. Pour ma part RGB correspond à mon ruban Led Ws2812b. Construction :

Je ne m’étale pas là-dessus, remplacer simplement les cases comme ce que vous avez fait derrière votre TV Attention la Led N°1 s’appelle 0 et non 1 dans le schéma. Attention.

Laissez les autres valeurs d’origine.

(12)

Je n’ai pas tout compris mais c’est une espèce de lissage pour accorder les leds qui se trouvent à proximité.

Laissez tout comme sur la photo. Quand tout fonctionnera augmentez la valeur du Updat Freq. Hz . Je l’ai mis sur 50 ça m’a minimisé l’effet de clignotement subtile quand les Leds reste sur les mêmes couleurs et ça m’a minimisé aussi le retard entre l’image et les Leds. J’ai toujours un tout petit décalage mais c’est carrément acceptable. Faites vos tests d’ajustement quand tout fonctionnera. Color Calibration :

Je n’y ai pas touché car tout est parfait, mais je crois que c’est pour faire des ajustements de couleur.

(13)

?? Laissez les valeurs d’origine.

Le GrabberV4L2 sert à récupérer un imprécran du Raspi pour le renvoyer sur HyperCon pour faire les ajustements avec une photo qui vient d’un film par ex. Mais je n’ai pas réussi. Je n’en n’ai pas eu besoin non plus.

Onglet External

(14)

Cochez ou décochez-les : MENU Vidéo Picture Etc. Ce sont les endroits où le système Adalight sera actif.

Booteffect :

Au démarrage du système vous pouvez choisir plusieurs styles de démarrage du genre un arc en ciel qui tourne, ou une simple couleur, faites votre propre style ou ne faites rien surtout avant de savoir si tout fonctionne.

Enfin onglet SHH

System

On a installé OpenELEC au début du tuto donc on se met dessus, (les autres sont pour d’autres OS) Mettre l’IP de votre Raspi que l’on a cherché en début de Tuto

Dans Kodi, aller dans L’onglet System- OpenELEC- Connexions Pour récupérer l’adresse IP Pour OpenELEC le Username est : root

Le Password est : openelec

Cliquez sur connect et les boutons grisés devraient apparaitre, si ce n’est pas le cas, vérifiez que vous êtes bien sous Openelec, le bon IP, et le bon Username et Password (si vous utilisez un autre comme LibreElec par ex, les Username et Password seront différents.) Si un message d’erreur apparaît c’est probablement que vous avez suivi un autre tuto qui vous a demandé de vous connecter au Raspberry pi en SSH via un terminal. Pour remettre tout ça à plat, dans Kodi allez désactiver et réactiver le SSH dans Système OpenELEC Service.

Donc... si les nouveaux boutons ne sont plus grisés mais bien actifs, on peut dire que le plus gros est fait.

(15)

Nous allons installer Hypérion sur le Raspi via le SSH.

Cliquez sur Inst./Upd. Hypérion. L’installation débute mais rien ne se passe, on dirait que ça à plantéééééé, Mais non il faut attendre 5, 6 min et une fenêtre va s’ouvrir après l’installation de l’application. (Il y en a qui vont se dire « ho mon ordi c’est une bête il n’a mis que 2 min, haha »). Quand tous vos paramètres ont bien été référencés, vos Leds mises au bon nombre et au bon endroit ect… cliquer tout en bas sur Create Hyperion Configuration. Hyperion compile le fichier propre à votre installation et paramètre. Enregistrez-le et cliquez sur Local Config Path, Allez chercher le fichier que l’on vient d’enregistrer et cliquez sur Send Config, le fichier va être envoyé sur le RaspberryPi. Cliquez sur Stop puis Start….

Rien ne se passe c’est normal il nous reste l’Arduino à préparer.

(16)

Copier-coller ce code dans L’IDE du logiciel Arduino (vérifiez bien d’avoir mis le bon type d’Arduino dans le logiciel et le bon port COM avant de téléverser).

(17)

Télécharger dans l’internet sur le Google par ex : La librairie Adafruit_NeoPixel.h et l’installer dans l’IDE Arduino,

Le Code à Copier (en rouge les lignes à modifier pour votre propre installation) : /* Modified and commented by ai.rs

(18)

* t4a_boblight

* (C) 2014 Hans Luijten, www.tweaking4all.com *

* t4a_boblight is free software and can be distributed and/or modified * freely as long as the copyright notice remains in place.

* Nobody is allowed to charge you for this code. * Use of this code is entirely at your own risk. */

#include "Adafruit_NeoPixel.h"

// DEFINITIONS

#define STARTCOLOR 0x333333 // LED colors at start #define BLACK 0x000000 // LED color BLACK

#define DATAPIN 6 // Datapin

#define LEDCOUNT 195 // Number of LEDs used for boblight

// LEDCOUNT value is local value in Arduino sketch, for hyperion it doesn't matter it sends prefx characters according to hyperion config

#define SHOWDELAY 200 // retard avant affichage Delay in micro seconds before showing default 200

#define BAUDRATE 500000// Serial port speed, 460800 tested with Arduino Uno R3 23400 za MEGA, 115200 nano

#define BRIGHTNESS 70 // luminosité en % Max. brightness in %

//Hyperion envoie des caractères préfixés en fonction du nombre de LEDs dans le fichier de configuration

// par exemple. Pour 181 LEDs il enverra 0xB4 et cheksum 0xE1

// Gardez à l'esprit si vous utilisez boblight config pour calculer le préfixe que Boblight compte des diodes de 1 et Hyperion de 0

// si vous avez des problèmes essayez +1 ou -1 diodes lors de la génération de caractères préfixés // valeurs pour gagner du temps: 178 B1 E4, 180 B3E6, 181 B4E1, 182 B5E0

(19)

// code hyperion

// _ ledBuffer [3] = ((ledValues.size () - 1) >> 8) & 0xFF; // Compteur de LED octet haut // _ledBuffer [4] = (ledValues.size () - 1) & 0xFF; // Compteur de LED faible octet // _ledBuffer [5] = _ledBuffer [3] ^ _ledBuffer [4] ^ 0x55; // Checksum

const char prefix[] = {0x41, 0x64, 0x61, 0x00, 0xC2, 0x97}; // Start prefix ADA char buffer[sizeof(prefix)]; // Temp buffer for receiving prefix data

// Init LED strand, WS2811/WS2912 specific

// These might work for other configurations:

// 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)

Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDCOUNT, DATAPIN, NEO_GRB + NEO_KHZ800);

int state; // Define current state

#define STATE_WAITING 1 // - Waiting for prefix #define STATE_DO_PREFIX 2 // - Processing prefix

#define STATE_DO_DATA 3 // - Handling incoming LED colors

int readSerial; // Read Serial data (1)

int currentLED; // Needed for assigning the color to the right LED

void setup() {

strip.begin(); // Init LED strand, set all black, then all to startcolor

strip.setBrightness( (255 / 100) * BRIGHTNESS );

(20)

setAllLEDs(BLACK, 0); setAllLEDs(STARTCOLOR, 5);

Serial.begin(BAUDRATE); // Init serial speed

state = STATE_WAITING; // Initial state: Waiting for prefix }

void loop() {

switch(state) {

case STATE_WAITING: // *** Waiting for prefix *** if( Serial.available()>0 )

{

readSerial = Serial.read(); // Read one character

if ( readSerial == prefix[0] ) // if this character is 1st prefix char { state = STATE_DO_PREFIX; } // then set state to handle prefix }

break;

case STATE_DO_PREFIX: // *** Processing Prefix *** if( Serial.available() > sizeof(prefix) - 2 )

{

Serial.readBytes(buffer, sizeof(prefix) - 1);

for( int Counter = 0; Counter < sizeof(prefix) - 1; Counter++) {

(21)

if( buffer[Counter] == prefix[Counter+1] ) {

state = STATE_DO_DATA; // Received character is in prefix, continue currentLED = 0; // Set current LED to the first one

} else {

state = STATE_WAITING; // Crap, one of the received chars is NOT in the prefix break; // Exit, to go back to waiting for the prefix

} // end if buffer } // end for Counter } // end if Serial break;

case STATE_DO_DATA: // *** Process incoming color data *** if( Serial.available() > 2 ) // if we receive more than 2 chars

{

Serial.readBytes( buffer, 3 ); // Abuse buffer to temp store 3 charaters

strip.setPixelColor( currentLED++, buffer[0], buffer[1], buffer[2]); // and assing to LEDs }

if( currentLED > LEDCOUNT ) // Reached the last LED? Display it! {

strip.show(); // Make colors visible

delayMicroseconds(SHOWDELAY); // Wait a few micro seconds

state = STATE_WAITING; // Reset to waiting ... currentLED = 0; // and go to LED one

(22)

} break;

} // switch(state)

} // loop

// Sets the color of all LEDs in the strand to 'color' // If 'wait'>0 then it will show a swipe from start to end void setAllLEDs(uint32_t color, int wait)

{

for ( int Counter=0; Counter < LEDCOUNT; Counter++ ) // For each LED {

strip.setPixelColor( Counter, color ); // .. set the color

if( wait > 0 ) // if a wait time was set then {

strip.show(); // Show the LED color

delay(wait); // and wait before we do the next LED } // if wait

} // for Counter

strip.show(); // Show all LEDs } // setAllLEDs

(23)

On va aller modifier quelques lignes dans ce code car on a tous une configuration différente : #define DATAPIN 6

Le chiffre 6 est notre sortie de la broche Arduino sur lequel on branche la résistance de 470ohm puis la borne Din du ruban.

#define LEDCOUNT 195

Le chiffre 195 est le nombre de Leds que vous avez en tout (Compter bien vos Leds).

#define BAUDRATE 500000

500 000 c’est notre Baudrate que l’on a réglé dans HyperCon l’onglet Hardware. (Il doit être identique)

#define BRIGHTNESS 70

(24)

const char prefix[] = {0x41, 0x64, 0x61, 0x00, 0xC2, 0x97}; C’EST CETTE LIGNE LA PLUS CHIANTE

Les chiffres entre les accolades correspondent au préfix, qui et propre à votre nombre de Leds et c’est là qu’on va utiliser le logiciel de Boblight (Windows) car il va générer notre préfix.

POUR RAPPEL

Boblight commence à compter les Leds à 1 alors que HyperCon démarre à 0, il y a donc un décalage de « un » et si vous vous trompez le préfix sera faux et la led N°1 n’existera pas donc votre Ambilight ne fonctionnera jamais.

Regardez bien sur la photo j’ai supprimé la dernière led, j’ai passé le 29 à 28 Leds en bas à gauche. Clique sur le petit Use Magique Word (histoire d’actualiser le logiciel) et le préfix est là. Pour ma part 41 64 61 00 C2 97

On retourne dans l’IDE Arduino et on remplace les nombres après le 0x par notre nouveau préfix. const char prefix[] = {0x41, 0x64, 0x61, 0x00, 0xC2, 0x97};

Et seulement maintenant on peut Televerser le code.

(25)

Liens utiles : Téléchargement

Arduino (sur Mac vous aurez un problème de reconnaissance de port COM pour reconnaitre l’Arduino) https://www.arduino.cc/en/Main/Software Librairie Adafruit_NoePixel https://github.com/adafruit/Adafruit_NeoPixel Code Arduino http://ai.rs/download/ArduinoAmbilightAdalightSketchHyperionBoblight.zip JavaScript https://www.java.com/fr/ Hyperion HyperCon

(26)

https://sourceforge.net/projects/hyperion-project/files/hypercon/HyperCon.jar/download

Documentation complète d’HyperCon (en anglais mais Google traduction fait le taf)

https://hyperion-project.org/wiki/HyperCon-Getting-started

OpenELEC

http://openelec.tv/get-openelec/category/7-raspberry-pi2-builds

Formatage de carte SD

https://www.sdcard.org/downloads/formatter_4/

Boblight (Générateur de Préfix)

https://code.google.com/archive/p/boblight/

Application pour Smartphone :

Hyperion (Pour allumer les Leds et faire une ambiance sympa)

Sybu Kodi (télécommande pour Kodi, il y en a surement d’autre mais. Gratuite et intuitive)

PuTTY (pour Windows sinon utiliser le terminal sur Mac Os)

http://www.putty.org/

ApplePi

http://the-raspberry.com/preparer-carte-sd-sur-mac

Tuto dont je me suis inspiré

https://ai.rs/reviews/rgb-delight-raspberry-pi2-arduino-nano-ws2812b-using-hyperion-on-openelec/ https://hyperion-project.org/wiki/HyperCon-Guide

https://cristianarcola.wordpress.com/2015/04/15/diy-ambilight-ws2812b-arduino-boblight-for-windows/

Références

Documents relatifs

Pourtant, le regard critique de l’artiste sur son travail et sur celui des autres est bel et bien présent à l’intérieur des œuvres contemporaines (ce serait

Le livret d’explication des ouvrages s’ouvre ainsi sur la section peinture ; les conseils et avertissements prononcés lors de l’ouverture du Salon et lors de la

Saisir la façon dont est prise en charge aujourd’hui l’architecture produite en situation coloniale par les acteurs du patrimoine invite à élargir la focale d’analyse

F or ea h neighbor entry in the neighbor table, whose link status is not uni-dire tional, a new route entry is re orded in the routing table where destination and next-hop addresses

Cependant, par sa dimension, par sa situation urbaine, par la publicité nationale qui a été donnée à cette opération, modeste en taille (114 logements), mais

The MISE approach (mediation information system engineering) aims at defining and designing a platform, dedicated to initiate and support any collaborative situation among

When a read request for line X accesses the L2 cache, if this is a miss or a prefetched hit (i.e., the prefetch bit is set), and if X and X + D lie in the same memory page, a

We need to show that, with high probability, there exists a mechanism that for any node p, transforms any trace in such a way that the coalition of faulty nodes receives the