WS2812B 8x32 256pixels
This commit is contained in:
@@ -69,6 +69,11 @@ Le projet avance en deux temps :
|
||||
- Rejeté : LED WS2812B individuelles sur PCB rond de 10 mm (se touchent au pas de 10 mm, pas de place pour le câblage).
|
||||
- Alternative possible : bande à 100 LED/m (pas de 10 mm), à condition que sa largeur soit ≤ 10 mm.
|
||||
|
||||
### Panneau de test acquis : WS2812B 8 × 32 (dossier `matrice_8x32/`)
|
||||
- Fils au dos : entrée `DIN` (rouge 5V, blanc GND, vert DIN + connecteur JST-SM), paire d'alim au milieu (rouge 5V, noir GND), sortie `DOUT` à l'autre bout.
|
||||
- Alimenté par une **alimentation d'établi** (5,0 V, limite ≈ 3 A) sur la paire du milieu ; l'Arduino Uno relie seulement données (pin 6 via 330 Ω) et GND (fil blanc).
|
||||
- Code : `matrice_8x32.ino` (FastLED), README pour débutants, schéma `schema_branchement.svg`.
|
||||
|
||||
### Chiffres clés
|
||||
- 320 LED adressées (8 × 40) → 960 octets de RAM sur Uno (2 Ko) : serré, envisager Mega ou ESP32.
|
||||
- Rafraîchissement ≈ 30 µs par LED → ≈ 10 ms pour tout le panneau.
|
||||
|
||||
@@ -0,0 +1,359 @@
|
||||
# Matrice LED 8 × 32 (WS2812B) avec un Arduino
|
||||
|
||||
Workshop « Vitrine pixels » : on allume un écran de **256 pixels** de couleur
|
||||
avec un Arduino, un seul fil de données et une alimentation d'établi.
|
||||
|
||||

|
||||
|
||||
> **Pas de panique** : il n'y a que **5 fils** à brancher. Lisez ce document
|
||||
> dans l'ordre, et faites vérifier votre montage avant de mettre sous tension.
|
||||
|
||||
---
|
||||
|
||||
## Sommaire
|
||||
|
||||
1. [Le matériel](#1-le-matériel)
|
||||
2. [Comment ça marche ?](#2-comment-ça-marche-)
|
||||
3. [Repérer les fils de la matrice](#3-repérer-les-fils-de-la-matrice)
|
||||
4. [Les 4 règles d'or](#4-les-4-règles-dor)
|
||||
5. [Régler l'alimentation d'établi](#5-régler-lalimentation-détabli)
|
||||
6. [Brancher, étape par étape](#6-brancher-étape-par-étape)
|
||||
7. [Installer le logiciel et téléverser](#7-installer-le-logiciel-et-téléverser)
|
||||
8. [Premier allumage : vérifier l'orientation](#8-premier-allumage--vérifier-lorientation)
|
||||
9. [Créer vos propres images](#9-créer-vos-propres-images)
|
||||
10. [Ça ne marche pas ?](#10-ça-ne-marche-pas-)
|
||||
11. [Petit lexique](#11-petit-lexique)
|
||||
|
||||
---
|
||||
|
||||
## 1. Le matériel
|
||||
|
||||
| Quoi | Combien | Remarque |
|
||||
|---|---|---|
|
||||
| Matrice LED WS2812B 8 × 32, souple | 1 | 256 LED, 32 × 8 cm |
|
||||
| Arduino Uno + son câble USB | 1 | |
|
||||
| Alimentation d'établi (de laboratoire) | 1 | réglable en tension **et** en courant |
|
||||
| 2 cordons banane → pince crocodile | 1 rouge + 1 noir | pour relier l'alimentation à la matrice |
|
||||
| Résistance **330 Ω** | 1 | bandes orange-orange-marron (entre 300 et 500 Ω, ça marche) |
|
||||
| Condensateur électrolytique **1000 µF**, 10 V ou plus | 1 | cylindre avec une bande « − » sur le côté |
|
||||
| Fils de prototypage (« Dupont ») mâle-mâle | 3 ou 4 | |
|
||||
| Petite plaque d'essai (breadboard) | 1 | facultatif mais pratique |
|
||||
| Ruban isolant (ou scotch d'électricien) | un peu | pour isoler le fil rouge non utilisé |
|
||||
|
||||
---
|
||||
|
||||
## 2. Comment ça marche ?
|
||||
|
||||
Chaque LED de la matrice contient une **minuscule puce électronique**.
|
||||
Les 256 LED sont reliées les unes aux autres en une seule longue **chaîne**.
|
||||
|
||||
L'Arduino envoie dans **un seul fil** (le fil de **données**) une longue liste
|
||||
de couleurs. La 1re LED garde la 1re couleur et fait passer le reste, la 2e garde
|
||||
la suivante, et ainsi de suite jusqu'à la 256e, un peu comme un paquet de cartes
|
||||
qu'on se passe de main en main. Ensuite, chaque LED garde sa couleur affichée
|
||||
jusqu'au prochain envoi.
|
||||
|
||||
Il faut donc **deux choses** à la matrice :
|
||||
|
||||
- **de l'énergie** (le courant électrique, en 5 volts) : elle vient de
|
||||
l'**alimentation d'établi** ;
|
||||
- **des informations** (les couleurs) : elles viennent de l'**Arduino**.
|
||||
|
||||
> **Pourquoi pas l'Arduino pour l'énergie aussi ?**
|
||||
> Une LED allumée en blanc à fond consomme environ 0,06 A.
|
||||
> 256 LED × 0,06 A = **plus de 15 A** ! Le port USB d'un ordinateur fournit
|
||||
> 0,5 A. On grillerait l'Arduino, voire le port USB de l'ordinateur.
|
||||
|
||||
---
|
||||
|
||||
## 3. Repérer les fils de la matrice
|
||||
|
||||
Retournez la matrice : les fils sont **au dos**. Il y a **trois groupes** de
|
||||
fils, et à côté de chaque fil, un petit texte est imprimé sur le circuit.
|
||||
|
||||
| Où | Fils | Texte imprimé | Rôle | On branche ? |
|
||||
|---|---|---|---|---|
|
||||
| À une extrémité | rouge, blanc, vert + connecteur | `5V` `GND` **`DIN`** | **Entrée** des données (Data IN) | **Oui** → vers l'Arduino |
|
||||
| Au milieu | rouge, noir (bouts dénudés) | `5V` `GND` | Arrivée de l'énergie | **Oui** → vers l'alimentation |
|
||||
| À l'autre extrémité | rouge, blanc, vert + connecteur | `5V` `GND` **`DOUT`** | **Sortie** des données (Data OUT) | **Non**, on n'y touche pas |
|
||||
|
||||
> ⚠️ **Lisez bien `DIN` / `DOUT`** sur le circuit : les deux connecteurs se
|
||||
> ressemblent ! Si on branche l'Arduino sur `DOUT`, rien ne s'allume (sans
|
||||
> danger, mais on perd du temps).
|
||||
|
||||
Une **fiche** est fournie avec la matrice : elle s'emboîte dans le connecteur
|
||||
`DIN` et donne trois fils rouge / blanc / vert à bouts libres.
|
||||
|
||||
**Code couleur des fils :**
|
||||
|
||||
| Couleur | Signification |
|
||||
|---|---|
|
||||
| 🔴 rouge | **+5 V** : le « plus » de l'énergie |
|
||||
| ⚫ noir ou ⚪ blanc | **GND** (masse) : le « moins », le retour du courant |
|
||||
| 🟢 vert | **Données** : les couleurs envoyées par l'Arduino |
|
||||
|
||||
---
|
||||
|
||||
## 4. Les 4 règles d'or
|
||||
|
||||
1. **5 volts, pas plus.** Au-delà de 5,5 V, les LED peuvent être détruites
|
||||
en une fraction de seconde. On règle l'alimentation **avant** de brancher.
|
||||
2. **Jamais le 5V de l'Arduino vers la matrice.** L'énergie de la matrice
|
||||
vient **uniquement** de l'alimentation d'établi.
|
||||
3. **Toutes les masses (GND) reliées ensemble.** L'Arduino et la matrice
|
||||
doivent avoir le même « zéro volt » de référence, sinon le signal de
|
||||
données n'est pas compris. Ici, c'est le fil **blanc** qui fait ce lien.
|
||||
4. **On câble hors tension**, et on fait vérifier avant d'allumer.
|
||||
|
||||
---
|
||||
|
||||
## 5. Régler l'alimentation d'établi
|
||||
|
||||
Une alimentation d'établi a deux réglages :
|
||||
|
||||
- **la tension** (en volts, V) : la « pression » électrique ;
|
||||
- **la limite de courant** (en ampères, A) : le maximum qu'elle accepte de
|
||||
fournir. C'est une **sécurité** : en cas de court-circuit ou d'erreur,
|
||||
elle bride le courant au lieu de laisser chauffer les fils.
|
||||
|
||||
**Procédure, sans rien brancher sur les bornes :**
|
||||
|
||||
1. Allumez l'alimentation, sortie désactivée si elle a un bouton `OUTPUT`.
|
||||
2. Tournez le bouton de **tension** jusqu'à lire **5,0 V** (entre 4,9 et 5,1).
|
||||
3. Réglez la **limite de courant** sur **3 A** (ou le maximum de l'alimentation
|
||||
s'il est plus petit, voir la remarque ci-dessous).
|
||||
- Selon le modèle, la façon d'afficher et de régler cette limite change :
|
||||
demandez à l'encadrant de vous montrer.
|
||||
4. **Éteignez** l'alimentation (ou désactivez la sortie).
|
||||
5. **Ne touchez plus au bouton de tension** pendant toute la séance.
|
||||
Un bouton tourné par erreur peut griller la matrice.
|
||||
|
||||
> **Si l'alimentation ne fournit que 2 A ou moins** : dans le programme,
|
||||
> baissez `COURANT_MAX_MA` (voir partie 7) à environ 80 % de cette valeur
|
||||
> (par exemple 1500 pour une alimentation de 2 A).
|
||||
|
||||
---
|
||||
|
||||
## 6. Brancher, étape par étape
|
||||
|
||||
**Tout est débranché** : alimentation éteinte, Arduino non relié à l'ordinateur.
|
||||
|
||||
### Étape A : l'énergie (alimentation → fils du milieu)
|
||||
|
||||
1. Cordon **rouge** : borne **+** de l'alimentation → fil **rouge** du milieu (`5V`).
|
||||
2. Cordon **noir** : borne **−** de l'alimentation → fil **noir** du milieu (`GND`).
|
||||
3. **Condensateur 1000 µF** entre ces deux fils, au plus près de la matrice :
|
||||
- sa patte côté **bande « − »** (la patte la plus courte) → fil **noir** ;
|
||||
- l'autre patte → fil **rouge**.
|
||||
|
||||
> Le condensateur est un petit **réservoir d'énergie** : il absorbe les
|
||||
> à-coups de courant quand beaucoup de LED s'allument d'un coup.
|
||||
> ⚠️ Il a un **sens** : branché à l'envers, il peut gonfler, voire éclater.
|
||||
|
||||
### Étape B : les données (Arduino → connecteur DIN)
|
||||
|
||||
4. Emboîtez la **fiche** dans le connecteur marqué **`DIN`**.
|
||||
5. Fil **vert** de la fiche → une patte de la **résistance 330 Ω**.
|
||||
L'autre patte de la résistance → broche **6** de l'Arduino (marquée `~6`).
|
||||
|
||||
> La résistance protège l'entrée de la 1re LED et adoucit le signal.
|
||||
> Une résistance n'a pas de sens : on peut la brancher dans les deux sens.
|
||||
|
||||
6. Fil **blanc** de la fiche → une broche **GND** de l'Arduino
|
||||
(il y en a trois, n'importe laquelle convient).
|
||||
7. Fil **rouge** de la fiche → **ne pas brancher.** Entourez son bout de
|
||||
ruban isolant pour qu'il ne touche rien.
|
||||
|
||||
### Étape C : vérifier
|
||||
|
||||
Comparez votre montage avec le [schéma](schema_branchement.svg) et cochez :
|
||||
|
||||
- [ ] Alimentation réglée sur 5,0 V, limite de courant réglée
|
||||
- [ ] + rouge → fil rouge du milieu ; − noir → fil noir du milieu
|
||||
- [ ] Condensateur : bande « − » côté noir
|
||||
- [ ] Fiche branchée sur **`DIN`** (pas `DOUT`)
|
||||
- [ ] Vert → résistance → broche 6
|
||||
- [ ] Blanc → GND de l'Arduino
|
||||
- [ ] Fil rouge de la fiche isolé, branché nulle part
|
||||
- [ ] **Rien** de branché sur la broche 5V de l'Arduino
|
||||
- [ ] Montage vérifié par l'encadrant
|
||||
|
||||
### Ordre d'allumage et d'extinction
|
||||
|
||||
| Allumer | Éteindre |
|
||||
|---|---|
|
||||
| 1. l'alimentation d'établi | 1. débrancher l'USB de l'Arduino |
|
||||
| 2. puis le câble USB de l'Arduino | 2. puis éteindre l'alimentation |
|
||||
|
||||
> Règle simple : **la matrice est alimentée avant de recevoir des données,
|
||||
> et le reste jusqu'à la fin.** Envoyer des données à une matrice éteinte
|
||||
> peut abîmer la première LED.
|
||||
|
||||
---
|
||||
|
||||
## 7. Installer le logiciel et téléverser
|
||||
|
||||
1. Installez l'**IDE Arduino** : <https://www.arduino.cc/en/software>.
|
||||
2. Installez la bibliothèque **FastLED** :
|
||||
menu **Outils → Gérer les bibliothèques…**, cherchez `FastLED`, cliquez
|
||||
**Installer**.
|
||||
3. Ouvrez le fichier [`matrice_8x32.ino`](matrice_8x32.ino)
|
||||
(**Fichier → Ouvrir…**).
|
||||
4. Branchez l'Arduino en USB (alimentation d'établi **déjà allumée**).
|
||||
5. Choisissez la carte : **Outils → Type de carte → Arduino Uno**.
|
||||
6. Choisissez le port : **Outils → Port** → celui qui mentionne « Arduino Uno ».
|
||||
7. Cliquez sur la flèche **→ Téléverser**.
|
||||
|
||||
Les réglages importants sont tout en haut du programme :
|
||||
|
||||
| Réglage | Valeur | À quoi ça sert |
|
||||
|---|---|---|
|
||||
| `PIN_DONNEES` | `6` | broche reliée au fil vert |
|
||||
| `LUMINOSITE` | `40` | de 0 à 255 ; 40 suffit largement (ces LED éblouissent !) |
|
||||
| `COURANT_MAX_MA` | `2500` | courant max en milliampères, **un peu sous** la limite de l'alimentation |
|
||||
| `INVERSER_X`, `INVERSER_Y` | `false` | orientation de l'image (voir ci-dessous) |
|
||||
|
||||
---
|
||||
|
||||
## 8. Premier allumage : vérifier l'orientation
|
||||
|
||||
Selon le sens dans lequel on pose la matrice, l'image peut apparaître
|
||||
retournée. La première animation (`animTestCoins`) allume un pixel dans
|
||||
chaque coin. Posez la matrice **face LED vers vous**, puis regardez :
|
||||
|
||||
```
|
||||
ROUGE ●· · · · · · · · · · · · · · · · ● VERT
|
||||
· · · · · · · · · · · · · · · · ·
|
||||
· · · · · · · · · · · · · · · · ·
|
||||
BLEU ●· · · · · · · · · · · · · · · · ● BLANC
|
||||
```
|
||||
|
||||
| Ce que vous voyez | Ce qu'il faut faire |
|
||||
|---|---|
|
||||
| Rouge en haut à gauche, vert en haut à droite | Rien, c'est parfait ✅ |
|
||||
| Rouge et vert inversés (gauche ↔ droite) | `INVERSER_X` → `true` |
|
||||
| Rouge et vert en bas | `INVERSER_Y` → `true` |
|
||||
| Les deux à la fois | les deux → `true` |
|
||||
|
||||
Puis re-téléversez. La deuxième animation (`animOrdreDesLeds`) montre le
|
||||
**trajet du signal** : un point orange parcourt les 256 LED dans l'ordre de la
|
||||
chaîne, en zigzag de colonne en colonne.
|
||||
|
||||
---
|
||||
|
||||
## 9. Créer vos propres images
|
||||
|
||||
Le programme est découpé pour que vous n'ayez à modifier **que la partie 5
|
||||
(les animations)** et la fonction `loop()`.
|
||||
|
||||
### Les outils de dessin
|
||||
|
||||
| Fonction | Effet |
|
||||
|---|---|
|
||||
| `pixel(x, y, couleur);` | colore le pixel de la colonne `x` (0 à 31) et de la ligne `y` (0 à 7) |
|
||||
| `effacer();` | éteint tout |
|
||||
| `montrer();` | **affiche** l'image (rien n'apparaît tant qu'on ne l'appelle pas !) |
|
||||
| `delay(100);` | attend 100 millisecondes (0,1 s) |
|
||||
|
||||
Le point `(0, 0)` est **en haut à gauche**, comme sur un écran d'ordinateur.
|
||||
|
||||
### Les couleurs
|
||||
|
||||
- **Par leur nom** (en anglais) : `CRGB::Red`, `CRGB::Orange`, `CRGB::Gold`,
|
||||
`CRGB::Pink`, `CRGB::Purple`, `CRGB::Turquoise`…
|
||||
([liste complète](https://github.com/FastLED/FastLED/wiki/Pixel-reference#predefined-colors-list))
|
||||
- **En rouge, vert, bleu** (de 0 à 255 chacun) : `CRGB(255, 120, 0)` = orange.
|
||||
- **En teinte, saturation, luminosité** : `CHSV(teinte, 255, 255)`.
|
||||
La teinte fait le tour de l'arc-en-ciel de 0 à 255 :
|
||||
0 rouge, 32 orange, 64 jaune, 96 vert, 128 cyan, 160 bleu, 192 violet, 224 rose.
|
||||
|
||||
### Dessiner en pixel art
|
||||
|
||||
Dans l'animation 5, le dessin est écrit **comme du texte**, une lettre par
|
||||
pixel :
|
||||
|
||||
```cpp
|
||||
const char* dessin[HAUTEUR] = {
|
||||
"..RR.RR..",
|
||||
".RBRRRRR.",
|
||||
".RRRRRRR.",
|
||||
".RRRRRRR.",
|
||||
"..RRRRR..",
|
||||
"...RRR...",
|
||||
"....R....",
|
||||
".........",
|
||||
};
|
||||
```
|
||||
|
||||
`.` = éteint, `R` rouge, `O` orange, `J` jaune, `V` vert, `C` cyan,
|
||||
`L` bleu, `M` magenta, `P` rose, `B` blanc.
|
||||
Remplacez par votre propre dessin. Gardez **8 lignes**, toutes de la même
|
||||
longueur, et mettez cette longueur dans `DESSIN_LARGEUR`.
|
||||
|
||||
### Exemple : votre première animation
|
||||
|
||||
```cpp
|
||||
void animMaPremiere() {
|
||||
for (int x = 0; x < LARGEUR; x++) { // x va de 0 à 31
|
||||
effacer();
|
||||
pixel(x, 3, CRGB::Gold); // un point doré sur la ligne 3
|
||||
pixel(x, 4, CRGB::Gold); // et juste en dessous
|
||||
montrer();
|
||||
delay(50);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Ajoutez ensuite `animMaPremiere();` dans `loop()`, puis téléversez.
|
||||
|
||||
---
|
||||
|
||||
## 10. Ça ne marche pas ?
|
||||
|
||||
| Symptôme | Causes probables | Solution |
|
||||
|---|---|---|
|
||||
| **Rien ne s'allume** | Fiche sur `DOUT` au lieu de `DIN` | Changer de côté |
|
||||
| | Alimentation éteinte ou sortie désactivée | Allumer, activer `OUTPUT` |
|
||||
| | Pas de GND commun | Vérifier le fil blanc vers le GND de l'Arduino |
|
||||
| | Mauvaise broche | Le fil vert doit aller sur la broche 6, ou changer `PIN_DONNEES` |
|
||||
| | Le téléversement a échoué | Lire le message en bas de l'IDE, vérifier carte et port |
|
||||
| **Seule la 1re LED fait n'importe quoi** | Résistance absente, ou faux contact sur le fil vert | Vérifier la résistance et le fil |
|
||||
| **Couleurs fausses** (rouge ↔ vert) | Mauvais ordre des couleurs | Dans `setup()`, essayer `RGB` au lieu de `GRB` |
|
||||
| **Couleurs aléatoires, scintillement** | GND commun absent ou mal serré | Revisser, revérifier le fil blanc |
|
||||
| | Fil de données trop long | Le garder court (< 50 cm) |
|
||||
| **Ça marche puis ça clignote / devient orange quand tout s'allume** | L'alimentation atteint sa limite de courant (le voyant `CC` s'allume) | Baisser `LUMINOSITE` ou `COURANT_MAX_MA` |
|
||||
| **L'image est à l'envers** | Orientation | Voir la [partie 8](#8-premier-allumage--vérifier-lorientation) |
|
||||
| **L'Arduino redémarre tout seul** | Le 5V de l'Arduino est relié à la matrice | Débrancher ce fil (règle d'or n° 2) |
|
||||
| **Ça chauffe, ça sent le brûlé** | Court-circuit ou condensateur à l'envers | **Couper l'alimentation immédiatement**, appeler l'encadrant |
|
||||
|
||||
---
|
||||
|
||||
## 11. Petit lexique
|
||||
|
||||
| Mot | Signification |
|
||||
|---|---|
|
||||
| **LED** | Diode électroluminescente : un composant qui émet de la lumière |
|
||||
| **WS2812B** | Modèle de LED RGB avec une puce intégrée, qu'on peut chaîner (on dit aussi « NeoPixel ») |
|
||||
| **RGB / RVB** | Rouge, vert, bleu : les trois lumières qui, mélangées, font toutes les couleurs |
|
||||
| **Pixel** | Un point de l'image : ici, une LED |
|
||||
| **Tension (V, volts)** | La « pression » électrique. Ici : 5 V |
|
||||
| **Courant (A, ampères)** | La « quantité » d'électricité qui circule. 1 A = 1000 mA |
|
||||
| **GND, masse** | Le « moins », la référence 0 V ; le chemin de retour du courant |
|
||||
| **DIN / DOUT** | Data IN / Data OUT : entrée et sortie des données dans la chaîne |
|
||||
| **Résistance (Ω, ohms)** | Composant qui freine le courant |
|
||||
| **Condensateur (µF)** | Petit réservoir d'énergie ; celui-ci a un sens (+ / −) |
|
||||
| **Bibliothèque** | Code écrit par d'autres, qu'on réutilise (ici FastLED) |
|
||||
| **Téléverser** | Envoyer le programme de l'ordinateur vers l'Arduino |
|
||||
| **Serpentin** | Câblage en zigzag des LED : une colonne descend, la suivante remonte |
|
||||
|
||||
---
|
||||
|
||||
## Pour aller plus loin
|
||||
|
||||
- **Chaîner deux matrices** : le connecteur `DOUT` de la première se branche
|
||||
sur le `DIN` de la suivante. Il faut alors une alimentation plus puissante,
|
||||
et ramener le 5V / GND à chaque matrice.
|
||||
- **Simuler sans matériel** : le site [Wokwi](https://wokwi.com) permet de
|
||||
tester un programme FastLED avec un Arduino et une matrice virtuels.
|
||||
- **Le projet final** (7 × 39 pixels) reprend exactement les mêmes principes :
|
||||
la fonction `XY()`, FastLED et une alimentation externe.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 126 KiB |
@@ -0,0 +1,387 @@
|
||||
/*
|
||||
* =============================================================================
|
||||
* MATRICE LED WS2812B 8 x 32 (256 pixels) — Arduino Uno + FastLED
|
||||
* Workshop « Vitrine pixels »
|
||||
* =============================================================================
|
||||
*
|
||||
* Avant de téléverser ce programme, lisez le README.md de ce dossier
|
||||
* et vérifiez le branchement avec schema_branchement.svg.
|
||||
*
|
||||
*
|
||||
* CE QUI CHANGE PAR RAPPORT À LA MAQUETTE 3 x 3
|
||||
* ---------------------------------------------
|
||||
* Sur la maquette 3 x 3, l'Arduino devait allumer lui-même chaque ligne,
|
||||
* très vite, l'une après l'autre (le multiplexage). Il fallait 12 fils.
|
||||
*
|
||||
* Ici, chaque LED (WS2812B) contient une minuscule puce électronique.
|
||||
* Les 256 LED sont reliées les unes aux autres en une longue CHAÎNE,
|
||||
* et l'Arduino ne leur parle que par UN SEUL FIL : le fil de données.
|
||||
*
|
||||
* Imaginez une file de 256 personnes qui se passent un paquet de lettres :
|
||||
* - l'Arduino envoie une longue suite de couleurs dans le fil ;
|
||||
* - la 1re LED garde la 1re couleur pour elle, et transmet le reste ;
|
||||
* - la 2e LED garde la couleur suivante, et transmet le reste ;
|
||||
* - … et ainsi de suite jusqu'à la 256e.
|
||||
* Puis chaque LED garde sa couleur affichée jusqu'au prochain envoi.
|
||||
* Plus besoin de balayage : chaque LED « se souvient » de sa couleur.
|
||||
*
|
||||
* L'avantage : un seul fil de données, et chaque LED peut avoir n'importe
|
||||
* laquelle de 16 millions de couleurs (256 niveaux de rouge × 256 de vert
|
||||
* × 256 de bleu), au lieu des 8 couleurs « tout ou rien » de la maquette.
|
||||
*
|
||||
*
|
||||
* BIBLIOTHÈQUE NÉCESSAIRE : FastLED
|
||||
* ---------------------------------
|
||||
* Dans l'IDE Arduino : menu Outils → Gérer les bibliothèques…
|
||||
* → chercher « FastLED » → Installer.
|
||||
* FastLED s'occupe d'envoyer les couleurs dans le fil, au bon rythme
|
||||
* (800 000 bits par seconde !). Nous, on se contente de remplir un tableau
|
||||
* de couleurs, puis de dire « envoie » avec FastLED.show().
|
||||
*
|
||||
*
|
||||
* ORGANISATION DU PROGRAMME
|
||||
* -------------------------
|
||||
* 1. Réglages : broche, taille, luminosité, limite de courant.
|
||||
* 2. Le tableau de couleurs (une case par LED).
|
||||
* 3. La fonction XY() : trouver le numéro d'une LED à partir de sa
|
||||
* position (x, y) sur la matrice.
|
||||
* 4. Les outils de dessin.
|
||||
* 5. Les animations. ← c'est ici que vous créez !
|
||||
* 6. setup() et loop().
|
||||
*/
|
||||
|
||||
// On charge la bibliothèque FastLED.
|
||||
#include <FastLED.h>
|
||||
|
||||
|
||||
// =============================================================================
|
||||
// 1. RÉGLAGES
|
||||
// =============================================================================
|
||||
|
||||
// Broche de l'Arduino reliée au fil VERT (DIN) de la matrice,
|
||||
// à travers une résistance de 330 Ω.
|
||||
#define PIN_DONNEES 6
|
||||
|
||||
// Taille de la matrice : 32 colonnes (largeur) × 8 lignes (hauteur).
|
||||
#define LARGEUR 32
|
||||
#define HAUTEUR 8
|
||||
#define NB_LEDS (LARGEUR * HAUTEUR) // = 256
|
||||
|
||||
// LUMINOSITÉ générale, de 0 (éteint) à 255 (maximum).
|
||||
// Ces LED sont TRÈS lumineuses : 40 suffit largement en intérieur,
|
||||
// et ça ménage les yeux… et l'alimentation.
|
||||
#define LUMINOSITE 40
|
||||
|
||||
// SÉCURITÉ : courant maximum autorisé, en milliampères (1000 mA = 1 A).
|
||||
// Une LED en blanc à fond consomme environ 60 mA.
|
||||
// 256 LED × 60 mA = 15 360 mA = plus de 15 A !
|
||||
// L'alimentation d'établi en fournit beaucoup moins (souvent 3 à 5 A).
|
||||
// FastLED calcule à chaque image ce que les LED vont consommer et baisse
|
||||
// automatiquement la luminosité si on dépasse cette limite.
|
||||
// → Réglez cette valeur UN PEU EN DESSOUS de la limite de courant de
|
||||
// l'alimentation (ex. : alimentation limitée à 3 A → 2500 mA ici).
|
||||
#define COURANT_MAX_MA 2500
|
||||
|
||||
// ORIENTATION de la matrice.
|
||||
// Selon la façon dont vous posez la matrice, la LED n° 0 peut se trouver
|
||||
// dans n'importe quel coin. Lancez l'animation animTestCoins() : le pixel
|
||||
// ROUGE doit être en HAUT À GAUCHE et le VERT en HAUT À DROITE.
|
||||
// - Si rouge et vert sont inversés (gauche/droite) → INVERSER_X à true
|
||||
// - Si rouge et vert sont en bas au lieu d'en haut → INVERSER_Y à true
|
||||
// (true = vrai, false = faux)
|
||||
#define INVERSER_X false
|
||||
#define INVERSER_Y false
|
||||
|
||||
|
||||
// =============================================================================
|
||||
// 2. LE TABLEAU DE COULEURS
|
||||
// =============================================================================
|
||||
//
|
||||
// leds[] est une liste de 256 cases, une par LED, numérotées de 0 à 255
|
||||
// dans l'ORDRE DE LA CHAÎNE (l'ordre dans lequel passe le fil de données).
|
||||
//
|
||||
// Chaque case est de type CRGB : une couleur faite de trois nombres,
|
||||
// rouge, vert, bleu, chacun de 0 à 255.
|
||||
// CRGB(255, 0, 0) = rouge vif
|
||||
// CRGB(255, 128, 0) = orange
|
||||
// CRGB(20, 0, 40) = violet sombre
|
||||
// CRGB::Black = noir (éteint) — FastLED connaît aussi les noms
|
||||
// CRGB::White, CRGB::Red, CRGB::Gold, CRGB::Pink… (noms anglais)
|
||||
//
|
||||
// Mémoire : 256 LED × 3 octets = 768 octets, sur les 2048 du Uno.
|
||||
CRGB leds[NB_LEDS];
|
||||
|
||||
|
||||
// =============================================================================
|
||||
// 3. DE LA POSITION (x, y) AU NUMÉRO DE LED
|
||||
// =============================================================================
|
||||
//
|
||||
// Pour dessiner, on préfère penser en coordonnées, comme sur une feuille
|
||||
// quadrillée :
|
||||
// x = colonne, de 0 (à gauche) à 31 (à droite)
|
||||
// y = ligne, de 0 (en haut) à 7 (en bas)
|
||||
//
|
||||
// Mais les LED, elles, sont numérotées dans l'ordre de la chaîne. Et cette
|
||||
// chaîne fait des ZIGZAGS (on dit « en serpentin ») : elle descend la
|
||||
// 1re colonne, remonte la 2e, redescend la 3e, etc.
|
||||
//
|
||||
// x=0 x=1 x=2 x=3
|
||||
// y=0 0 15 16 31 …
|
||||
// y=1 1 14 17 30
|
||||
// y=2 2 13 18 29
|
||||
// … … … … …
|
||||
// y=7 7 → 8 23 → 24
|
||||
// ↓ ↑ ↓ ↑
|
||||
//
|
||||
// Les colonnes PAIRES (0, 2, 4…) descendent, les colonnes IMPAIRES
|
||||
// (1, 3, 5…) remontent. La fonction XY() fait ce calcul pour nous.
|
||||
// (L'animation animOrdreDesLeds() permet de VOIR ce zigzag.)
|
||||
|
||||
uint16_t XY(int x, int y) {
|
||||
// Si la matrice est posée « à l'envers », on retourne les coordonnées.
|
||||
if (INVERSER_X) x = (LARGEUR - 1) - x;
|
||||
if (INVERSER_Y) y = (HAUTEUR - 1) - y;
|
||||
|
||||
if (x % 2 == 0) {
|
||||
// Colonne paire : la chaîne DESCEND.
|
||||
// On saute les x colonnes précédentes (x × 8 LED), puis on descend de y.
|
||||
return x * HAUTEUR + y;
|
||||
} else {
|
||||
// Colonne impaire : la chaîne REMONTE.
|
||||
// Même chose, mais on compte depuis le bas : (7 - y).
|
||||
return x * HAUTEUR + (HAUTEUR - 1 - y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// =============================================================================
|
||||
// 4. LES OUTILS DE DESSIN
|
||||
// =============================================================================
|
||||
//
|
||||
// Ces fonctions modifient le tableau leds[], mais n'allument rien tout de
|
||||
// suite ! Comme un peintre qui prépare sa toile en coulisses : on dessine
|
||||
// toute l'image, puis on la montre d'un coup avec FastLED.show().
|
||||
|
||||
// Colore un pixel. Si (x, y) est en dehors de la matrice, on ne fait rien :
|
||||
// on peut donc dessiner des formes qui « dépassent » sans risque
|
||||
// (pratique pour faire défiler une image qui entre et sort de l'écran).
|
||||
void pixel(int x, int y, CRGB couleur) {
|
||||
if (x >= 0 && x < LARGEUR && y >= 0 && y < HAUTEUR) {
|
||||
leds[XY(x, y)] = couleur;
|
||||
}
|
||||
}
|
||||
|
||||
// Éteint toute la matrice (dans le tableau seulement).
|
||||
void effacer() {
|
||||
fill_solid(leds, NB_LEDS, CRGB::Black); // fill_solid = tout remplir
|
||||
}
|
||||
|
||||
// Affiche réellement l'image : envoie les 256 couleurs dans le fil.
|
||||
// Ça prend environ 8 millisecondes.
|
||||
void montrer() {
|
||||
FastLED.show();
|
||||
}
|
||||
|
||||
|
||||
// =============================================================================
|
||||
// 5. LES ANIMATIONS
|
||||
// =============================================================================
|
||||
//
|
||||
// Comme pour la maquette 3 x 3, une animation est une suite d'images :
|
||||
// effacer / dessiner → montrer() → attendre (delay) → recommencer.
|
||||
//
|
||||
// À VOUS DE JOUER : copiez une animation, renommez-la, modifiez-la,
|
||||
// et ajoutez son nom dans loop() tout en bas.
|
||||
|
||||
|
||||
// --- Animation 1 : test des coins (orientation) ---
|
||||
// Un pixel de couleur dans chaque coin :
|
||||
// ROUGE en haut à gauche VERT en haut à droite
|
||||
// BLEU en bas à gauche BLANC en bas à droite
|
||||
// Si ce n'est pas le cas, changez INVERSER_X / INVERSER_Y (partie 1).
|
||||
void animTestCoins() {
|
||||
effacer();
|
||||
pixel(0, 0, CRGB::Red);
|
||||
pixel(LARGEUR - 1, 0, CRGB::Green);
|
||||
pixel(0, HAUTEUR - 1, CRGB::Blue);
|
||||
pixel(LARGEUR - 1, HAUTEUR - 1, CRGB::White);
|
||||
montrer();
|
||||
delay(3000); // 3 secondes pour regarder
|
||||
}
|
||||
|
||||
|
||||
// --- Animation 2 : l'ordre de la chaîne ---
|
||||
// Allume les LED une par une, dans l'ordre où le signal les traverse
|
||||
// (n° 0, 1, 2… 255), SANS passer par XY(). On voit le serpentin !
|
||||
void animOrdreDesLeds() {
|
||||
effacer();
|
||||
for (int i = 0; i < NB_LEDS; i++) {
|
||||
leds[i] = CRGB::Orange; // la tête du serpent
|
||||
montrer();
|
||||
leds[i] = CRGB(10, 3, 0); // laisse une trace très faible
|
||||
delay(15);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// --- Animation 3 : arc-en-ciel qui défile ---
|
||||
// Ici on utilise une autre façon de décrire une couleur : CHSV.
|
||||
// H (hue, la TEINTE) : de 0 à 255, fait le tour de l'arc-en-ciel
|
||||
// 0 = rouge, 32 = orange, 64 = jaune, 96 = vert, 128 = cyan,
|
||||
// 160 = bleu, 192 = violet, 224 = rose… puis retour au rouge.
|
||||
// S (saturation) : 0 = gris/blanc, 255 = couleur pure.
|
||||
// V (valeur, la LUMINOSITÉ) : 0 = noir, 255 = plein.
|
||||
// C'est souvent plus intuitif que RGB pour créer des dégradés.
|
||||
void animArcEnCiel() {
|
||||
for (int temps = 0; temps < 256; temps++) {
|
||||
for (int x = 0; x < LARGEUR; x++) {
|
||||
for (int y = 0; y < HAUTEUR; y++) {
|
||||
// La teinte dépend de la colonne (x × 8) et du temps qui passe.
|
||||
// Un byte revient tout seul à 0 après 255 : la teinte boucle.
|
||||
byte teinte = x * 8 + temps * 2;
|
||||
pixel(x, y, CHSV(teinte, 255, 255));
|
||||
}
|
||||
}
|
||||
montrer();
|
||||
delay(20);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// --- Animation 4 : la pluie ---
|
||||
// Des gouttes tombent au hasard et laissent une traînée qui s'estompe.
|
||||
void animPluie() {
|
||||
for (int image = 0; image < 200; image++) {
|
||||
|
||||
// fadeToBlackBy = « assombrir un peu » toutes les LED (ici de 25 %
|
||||
// environ, 64 sur 256). Les gouttes laissent ainsi une traînée.
|
||||
fadeToBlackBy(leds, NB_LEDS, 64);
|
||||
|
||||
// Faire descendre toute l'image d'une ligne : on recopie chaque ligne
|
||||
// dans celle du dessous, en partant du bas pour ne rien écraser.
|
||||
for (int y = HAUTEUR - 1; y > 0; y--) {
|
||||
for (int x = 0; x < LARGEUR; x++) {
|
||||
leds[XY(x, y)] = leds[XY(x, y - 1)];
|
||||
}
|
||||
}
|
||||
|
||||
// La ligne du haut s'éteint…
|
||||
for (int x = 0; x < LARGEUR; x++) {
|
||||
pixel(x, 0, CRGB::Black);
|
||||
}
|
||||
// … et de nouvelles gouttes apparaissent au hasard.
|
||||
// random(LARGEUR) = une colonne au hasard entre 0 et 31.
|
||||
for (int n = 0; n < 3; n++) {
|
||||
pixel(random(LARGEUR), 0, CRGB(0, 120, 255)); // bleu clair
|
||||
}
|
||||
|
||||
montrer();
|
||||
delay(60);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// --- Animation 5 : un dessin en pixel art qui défile ---
|
||||
// Le dessin est écrit comme du texte : une ligne de caractères par ligne
|
||||
// de pixels. Chaque lettre est une couleur (voir couleurDeLettre()),
|
||||
// et le point « . » est un pixel éteint.
|
||||
// → Dessinez le vôtre ! Gardez 8 lignes, et la même largeur partout.
|
||||
|
||||
#define DESSIN_LARGEUR 9
|
||||
const char* dessin[HAUTEUR] = {
|
||||
"..RR.RR..",
|
||||
".RBRRRRR.",
|
||||
".RRRRRRR.",
|
||||
".RRRRRRR.",
|
||||
"..RRRRR..",
|
||||
"...RRR...",
|
||||
"....R....",
|
||||
".........",
|
||||
};
|
||||
|
||||
// Traduit une lettre du dessin en couleur.
|
||||
CRGB couleurDeLettre(char lettre) {
|
||||
switch (lettre) {
|
||||
case 'R': return CRGB::Red;
|
||||
case 'O': return CRGB::Orange;
|
||||
case 'J': return CRGB::Yellow;
|
||||
case 'V': return CRGB::Green;
|
||||
case 'C': return CRGB::Cyan;
|
||||
case 'B': return CRGB::White; // B comme blanc
|
||||
case 'L': return CRGB::Blue; // L comme bLeu (B est déjà pris)
|
||||
case 'M': return CRGB::Magenta;
|
||||
case 'P': return CRGB::DeepPink; // P comme rose Pink
|
||||
default: return CRGB::Black; // « . » et tout le reste = éteint
|
||||
}
|
||||
}
|
||||
|
||||
// Dessine le dessin avec son coin haut-gauche en (departX, 0).
|
||||
void dessinerDessin(int departX) {
|
||||
for (int y = 0; y < HAUTEUR; y++) {
|
||||
for (int x = 0; x < DESSIN_LARGEUR; x++) {
|
||||
char lettre = dessin[y][x]; // la lettre en ligne y, colonne x
|
||||
if (lettre != '.') {
|
||||
pixel(departX + x, y, couleurDeLettre(lettre));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void animDessinQuiDefile() {
|
||||
// Le dessin entre par la droite (x = 32) et sort par la gauche
|
||||
// (x = -9, complètement hors de l'écran).
|
||||
for (int x = LARGEUR; x >= -DESSIN_LARGEUR; x--) {
|
||||
effacer();
|
||||
dessinerDessin(x);
|
||||
montrer();
|
||||
delay(70);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// --- Animation 6 : étincelles ---
|
||||
// Des pixels de couleur au hasard s'allument puis s'éteignent doucement.
|
||||
void animEtincelles() {
|
||||
for (int image = 0; image < 300; image++) {
|
||||
fadeToBlackBy(leds, NB_LEDS, 20); // tout s'estompe doucement
|
||||
// random(256) = une teinte au hasard.
|
||||
pixel(random(LARGEUR), random(HAUTEUR), CHSV(random(256), 200, 255));
|
||||
montrer();
|
||||
delay(15);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// =============================================================================
|
||||
// 6. SETUP ET LOOP
|
||||
// =============================================================================
|
||||
|
||||
void setup() {
|
||||
// On présente la matrice à FastLED :
|
||||
// - WS2812B : le modèle de LED
|
||||
// - PIN_DONNEES : la broche du fil de données
|
||||
// - GRB : l'ordre des couleurs attendu par ces LED (Vert, Rouge, Bleu
|
||||
// — eh oui, pas RGB ! Si vos rouges sortent verts, c'est ici.)
|
||||
FastLED.addLeds<WS2812B, PIN_DONNEES, GRB>(leds, NB_LEDS);
|
||||
|
||||
FastLED.setBrightness(LUMINOSITE);
|
||||
FastLED.setMaxPowerInVoltsAndMilliamps(5, COURANT_MAX_MA);
|
||||
|
||||
// Graine du hasard (voir la maquette 3 x 3 : on lit le bruit
|
||||
// électrique d'une broche analogique non branchée).
|
||||
randomSeed(analogRead(A0));
|
||||
|
||||
effacer();
|
||||
montrer();
|
||||
}
|
||||
|
||||
// La « playlist » des animations, jouée en boucle.
|
||||
// Mettez // devant une ligne pour sauter une animation.
|
||||
void loop() {
|
||||
animTestCoins(); // 1. orientation (à retirer une fois réglée)
|
||||
animOrdreDesLeds(); // 2. le serpentin de la chaîne
|
||||
animArcEnCiel(); // 3. arc-en-ciel
|
||||
animPluie(); // 4. pluie
|
||||
animDessinQuiDefile(); // 5. pixel art
|
||||
animEtincelles(); // 6. étincelles
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="860" viewBox="0 0 1200 860" font-family="Helvetica, Arial, sans-serif">
|
||||
<title>Branchement matrice WS2812B 8×32, Arduino Uno et alimentation d'établi</title>
|
||||
<defs>
|
||||
<pattern id="pix" x="60" y="55" width="30.625" height="30.625" patternUnits="userSpaceOnUse">
|
||||
<rect x="9" y="9" width="12" height="12" rx="1" fill="#2b2b2b"/>
|
||||
</pattern>
|
||||
<marker id="fleche" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto">
|
||||
<path d="M1 1 L9 5 L1 9 Z" fill="#cfcfcf"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<rect width="1200" height="860" fill="#ffffff"/>
|
||||
|
||||
<!-- ===================== MATRICE ===================== -->
|
||||
<text x="60" y="38" font-size="20" font-weight="bold" fill="#222">Matrice WS2812B 8 × 32 — vue de dos (côté fils)</text>
|
||||
<rect x="60" y="55" width="980" height="245" rx="6" fill="#141414"/>
|
||||
<rect x="60" y="55" width="980" height="245" rx="6" fill="url(#pix)"/>
|
||||
|
||||
<line x1="760" y1="150" x2="340" y2="150" stroke="#cfcfcf" stroke-width="3" marker-end="url(#fleche)"/>
|
||||
<text x="550" y="135" font-size="15" fill="#e6e6e6" text-anchor="middle">les données entrent par DIN et traversent les 256 LED</text>
|
||||
|
||||
<!-- pastilles imprimées : sortie DOUT (gauche) -->
|
||||
<g font-size="12" fill="#cfcfcf" text-anchor="middle">
|
||||
<text x="110" y="268">5V</text><text x="150" y="268">GND</text><text x="194" y="268">DOUT</text>
|
||||
<text x="490" y="268">5V</text><text x="550" y="268">GND</text>
|
||||
<text x="880" y="268">5V</text><text x="910" y="268">GND</text><text x="940" y="268">DIN</text>
|
||||
</g>
|
||||
|
||||
<!-- ===================== SORTIE DOUT (non utilisée) ===================== -->
|
||||
<g stroke-width="5" fill="none" stroke-linecap="round">
|
||||
<path d="M110 282 V340" stroke="#d62828"/>
|
||||
<path d="M150 282 V340" stroke="#bdbdbd"/>
|
||||
<path d="M190 282 V340" stroke="#2a9d3a"/>
|
||||
</g>
|
||||
<rect x="96" y="340" width="108" height="24" rx="3" fill="#222"/>
|
||||
<text x="150" y="390" font-size="14" fill="#555" text-anchor="middle">Sortie DOUT : ne rien brancher</text>
|
||||
<text x="150" y="408" font-size="13" fill="#888" text-anchor="middle">(sert à chaîner un 2e panneau)</text>
|
||||
|
||||
<!-- ===================== ALIMENTATION (fils du milieu) ===================== -->
|
||||
<g stroke-width="6" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M490 282 V440 H530 V586" stroke="#d62828"/>
|
||||
<path d="M550 282 V420 H590 V586" stroke="#1a1a1a"/>
|
||||
</g>
|
||||
|
||||
<!-- condensateur entre 5V et GND -->
|
||||
<line x1="490" y1="352" x2="506" y2="352" stroke="#777" stroke-width="2"/>
|
||||
<line x1="534" y1="352" x2="550" y2="352" stroke="#777" stroke-width="2"/>
|
||||
<rect x="506" y="340" width="28" height="24" rx="5" fill="#1f4e9c"/>
|
||||
<rect x="524" y="340" width="10" height="24" fill="#c9d6ee"/>
|
||||
<text x="529" y="356" font-size="13" font-weight="bold" fill="#1f4e9c" text-anchor="middle">−</text>
|
||||
<text x="474" y="340" font-size="14" font-weight="bold" fill="#1f4e9c" text-anchor="end">Condensateur 1000 µF</text>
|
||||
<text x="474" y="358" font-size="13" fill="#1f4e9c" text-anchor="end">bande « − » côté GND (fil noir)</text>
|
||||
<text x="474" y="375" font-size="13" fill="#1f4e9c" text-anchor="end">patte + côté 5V (fil rouge)</text>
|
||||
|
||||
<!-- ===================== ENTRÉE DIN ===================== -->
|
||||
<g stroke-width="5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M880 282 V340" stroke="#d62828"/>
|
||||
<path d="M910 282 V340" stroke="#bdbdbd"/>
|
||||
<path d="M940 282 V340" stroke="#2a9d3a"/>
|
||||
</g>
|
||||
<rect x="866" y="340" width="88" height="22" rx="3" fill="#222"/>
|
||||
<rect x="870" y="364" width="80" height="22" rx="3" fill="#3a3a3a"/>
|
||||
<text x="966" y="358" font-size="13" fill="#555">connecteur de la matrice</text>
|
||||
<text x="966" y="381" font-size="13" fill="#555">+ fiche fournie (rouge / blanc / vert)</text>
|
||||
|
||||
<g stroke-width="5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M880 386 V420" stroke="#d62828"/>
|
||||
<path d="M910 386 V524" stroke="#bdbdbd"/>
|
||||
<path d="M940 386 V440 H990 V452" stroke="#2a9d3a"/>
|
||||
<path d="M990 492 V524" stroke="#2a9d3a"/>
|
||||
</g>
|
||||
<!-- fil rouge isolé -->
|
||||
<rect x="872" y="418" width="16" height="16" rx="2" fill="#f2c94c"/>
|
||||
<text x="864" y="431" font-size="13" fill="#b00020" text-anchor="end">fil rouge : NON branché, isolé (scotch)</text>
|
||||
|
||||
<!-- résistance -->
|
||||
<rect x="981" y="452" width="18" height="40" rx="6" fill="#e8d3a8" stroke="#a88a52"/>
|
||||
<rect x="981" y="460" width="18" height="4" fill="#e67e22"/>
|
||||
<rect x="981" y="468" width="18" height="4" fill="#e67e22"/>
|
||||
<rect x="981" y="476" width="18" height="4" fill="#8b4513"/>
|
||||
<rect x="981" y="484" width="18" height="3" fill="#c9a227"/>
|
||||
<text x="1010" y="468" font-size="14" font-weight="bold" fill="#7a5a1e">Résistance 330 Ω</text>
|
||||
<text x="1010" y="486" font-size="13" fill="#7a5a1e">(300 à 500 Ω)</text>
|
||||
|
||||
<!-- ===================== ARDUINO ===================== -->
|
||||
<rect x="760" y="520" width="300" height="190" rx="10" fill="#00878f"/>
|
||||
<rect x="800" y="526" width="230" height="18" rx="2" fill="#1b1b1b"/>
|
||||
<rect x="903" y="529" width="14" height="12" fill="#d4af37"/>
|
||||
<rect x="983" y="529" width="14" height="12" fill="#d4af37"/>
|
||||
<text x="910" y="562" font-size="14" font-weight="bold" fill="#fff" text-anchor="middle">GND</text>
|
||||
<text x="990" y="562" font-size="14" font-weight="bold" fill="#fff" text-anchor="middle">~6</text>
|
||||
<text x="910" y="625" font-size="22" font-weight="bold" fill="#fff" text-anchor="middle">Arduino Uno</text>
|
||||
<rect x="820" y="686" width="130" height="16" rx="2" fill="#1b1b1b"/>
|
||||
<rect x="853" y="688" width="14" height="12" fill="#d4af37"/>
|
||||
<text x="860" y="678" font-size="13" font-weight="bold" fill="#fff" text-anchor="middle">5V</text>
|
||||
<path d="M852 712 L868 728 M868 712 L852 728" stroke="#d62828" stroke-width="3"/>
|
||||
<text x="880" y="745" font-size="13" fill="#b00020">5V de l'Arduino : NE PAS relier à la matrice</text>
|
||||
<!-- USB -->
|
||||
<rect x="736" y="598" width="34" height="38" rx="3" fill="#b8b8b8"/>
|
||||
<path d="M736 617 H700 V790" stroke="#555" stroke-width="5" fill="none" stroke-linecap="round"/>
|
||||
<text x="700" y="812" font-size="14" fill="#333" text-anchor="middle">câble USB → ordinateur</text>
|
||||
<text x="700" y="830" font-size="13" fill="#777" text-anchor="middle">(alimente l'Arduino + téléversement)</text>
|
||||
|
||||
<!-- ===================== ALIMENTATION D'ÉTABLI ===================== -->
|
||||
<rect x="300" y="500" width="330" height="210" rx="10" fill="#e9ecef" stroke="#adb5bd" stroke-width="2"/>
|
||||
<text x="465" y="526" font-size="16" font-weight="bold" fill="#333" text-anchor="middle">Alimentation d'établi</text>
|
||||
<rect x="318" y="540" width="160" height="96" rx="4" fill="#1d2b1d"/>
|
||||
<text x="398" y="578" font-size="28" font-weight="bold" fill="#7dff7d" text-anchor="middle" font-family="monospace">5.00 V</text>
|
||||
<text x="398" y="618" font-size="20" fill="#ffb347" text-anchor="middle" font-family="monospace">3.00 A</text>
|
||||
<circle cx="345" cy="672" r="16" fill="#666"/>
|
||||
<circle cx="420" cy="672" r="16" fill="#666"/>
|
||||
<text x="345" y="702" font-size="11" fill="#555" text-anchor="middle">tension</text>
|
||||
<text x="420" y="702" font-size="11" fill="#555" text-anchor="middle">courant</text>
|
||||
<circle cx="530" cy="600" r="13" fill="#d62828" stroke="#7a0f0f" stroke-width="2"/>
|
||||
<circle cx="590" cy="600" r="13" fill="#1a1a1a" stroke="#000" stroke-width="2"/>
|
||||
<text x="530" y="637" font-size="15" font-weight="bold" fill="#d62828" text-anchor="middle">+</text>
|
||||
<text x="590" y="637" font-size="15" font-weight="bold" fill="#1a1a1a" text-anchor="middle">−</text>
|
||||
<text x="560" y="660" font-size="12" fill="#555" text-anchor="middle">bornes de</text>
|
||||
<text x="560" y="675" font-size="12" fill="#555" text-anchor="middle">sortie</text>
|
||||
|
||||
<!-- ===================== LÉGENDE ===================== -->
|
||||
<rect x="40" y="470" width="236" height="250" rx="8" fill="#f8f9fa" stroke="#dee2e6"/>
|
||||
<text x="56" y="496" font-size="15" font-weight="bold" fill="#222">Code couleur des fils</text>
|
||||
<line x1="56" y1="520" x2="90" y2="520" stroke="#d62828" stroke-width="6" stroke-linecap="round"/>
|
||||
<text x="100" y="525" font-size="14" fill="#333">rouge = + 5 V</text>
|
||||
<line x1="56" y1="548" x2="90" y2="548" stroke="#1a1a1a" stroke-width="6" stroke-linecap="round"/>
|
||||
<text x="100" y="553" font-size="14" fill="#333">noir = GND (masse)</text>
|
||||
<line x1="56" y1="576" x2="90" y2="576" stroke="#bdbdbd" stroke-width="6" stroke-linecap="round"/>
|
||||
<text x="100" y="581" font-size="14" fill="#333">blanc = GND (masse)</text>
|
||||
<line x1="56" y1="604" x2="90" y2="604" stroke="#2a9d3a" stroke-width="6" stroke-linecap="round"/>
|
||||
<text x="100" y="609" font-size="14" fill="#333">vert = données</text>
|
||||
<text x="56" y="642" font-size="13" fill="#555">Tous les GND sont reliés :</text>
|
||||
<text x="56" y="660" font-size="13" fill="#555">Arduino ↔ fil blanc ↔ matrice</text>
|
||||
<text x="56" y="678" font-size="13" fill="#555">↔ fil noir ↔ borne − de l'alim.</text>
|
||||
<text x="56" y="702" font-size="13" font-weight="bold" fill="#b00020">Alim. réglée sur 5,0 V maxi !</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.0 KiB |
Reference in New Issue
Block a user