
Comment concevoir une matrice LED WiFi
L'idée soutenue par le clientAlan Zhao
Introduction
Nous allons créer un téléscripteur boursier qui peut afficher les prix en temps réel de actions , crypto-monnaies , ETF , et indices .
Ce sticker de stock se compose de six matrices LED 8x32 disposées en mosaïque selon un motif de 2 colonnes x 3 rangées. Les matrices LED seront ensuite montées sur un cadre imprimé en 3D. Forfait Basic gratuit de Twelve Data est nécessaire pour obtenir les cours des actions en temps réel via l'API REST. Wemos D1 mini est utilisé comme contrôleur.
Parties
- Six de Matrice LED 32 x 8 ou Matrice LED 32 x 8 - Version Eco, légèrement moins chère
- Mini WeMos D1
- Petite carte PCB de prototypage
- Borniers
- Ruban adhésif double face très résistant
- Alimentation Mean Well 200 W 5 V 50 A
- Fils de calibre 18
- Condensateurs de 0,1 µF, 47 µF et 1000 µF
- Le condensateur de 1000 µF empêche le courant d'appel initial d'endommager les LED
- 0,1 µF et 47 µF sont les condensateurs de dérivation qui filtrent le bruit dans le signal CC
- Résistance de 470 ohms
- La résistance de 470 ohms empêche le pic de courant d'endommager le premier pixel LED
- Vis M3 (16 mm ou plus), écrous et rondelles
Consommation d'énergie
Chaque LED consomme environ 20 mA et 0,1 watt de puissance par couleur. Pour les 3 couleurs (RVB), une LED consomme environ 60 mA et 0,3 watt à pleine puissance (en blanc à 100 % de luminosité). Nous avons au total 1 536 LED (256 par matrice x 6), donc, la consommation électrique totale est de 92160 mA ou 92 A (1 536 LED x 60 mA par LED) et 460 watts (1 536 LED x 0,3 watt par LED) à pleine puissance.
Comme vous pouvez le constater, notre alimentation de 200 watts et 50 ampères ne suffira pas pour une consommation électrique complète. Le fabricant indique que le PCB de la matrice LED n'est pas conçu pour résister à la chaleur qu'il génère à pleine puissance, autrement dit Ce n'est pas un appareil utilisé pour l'éclairage . Par conséquent, vous ne devez JAMAIS l'utiliser à pleine puissance. Nous pouvons réduire la consommation d'énergie en réduisant la luminosité des LED et le nombre de LED allumées simultanément.
Cadre de montage
La matrice LED est fabriquée à partir d'un matériau flexible. Pour interconnecter les 6 matrices, un cadre est nécessaire pour le support. J'ai conçu et imprimé en 3D six supports à interconnecter en tant que cadre. J'ai ajouté des canaux de passage au support afin que les fils puissent être piégés et acheminés proprement à l'intérieur. Deux supports sont nécessaires pour monter une matrice LED ; 12 supports sont nécessaires au total. Les supports seront ensuite vissés ensemble avec quelques vis M3, écrous et rondelles. Des bouchons à vis sont également nécessaires pour visser les supports ensemble. Le bouchon à vis vous permet de connecter les supports dans les orientations en ligne et en colonne. Les fichiers STL sont fournis ci-dessous. Aucun support n'est requis pour les imprimer.
Une fois que vous avez tout monté, vous devriez avoir quelque chose qui ressemble à ce qui suit.
Contrôleur
WeMos D1 mini est utilisé comme contrôleur. D5 La broche est utilisée pour les données. Voir le schéma de câblage ci-dessous.
Assemblée
IMPORTANT : Testez chaque matrice LED pour détecter les défauts
Testez chaque matrice LED pour détecter les défauts. Il est plus facile de remplacer les matrices défectueuses maintenant qu'après leur montage. Vous devez vous assurer qu'il n'y a pas de pixels morts et que toutes les couleurs s'allument correctement.
Installer
Sélectionnez la carte appropriée dans le menu
Pour tester les couleurs, téléchargez le code ci-dessous sur le contrôleur et connectez chaque matrice LED à tester. Décommentez chaque ligne de
/** * Test de qualité de la matrice LED 32x8 * * par MakerAL.com 2021. */ // // Épingles // // Broche D5 // Configurations de cartes LED // // Matrice instanciée // https://learn.adafruit.com/adafruit-neopixel-uberguide/neomatrix-library // Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix( LARGEUR DU PANNEAU LED, HAUTEUR DU PANNEAU LED, BROCHE LED, NEO_MATRIX_HAUT + NEO_MATRIX_GAUCHE + NEO_MATRIX_RANGÉES + NEO_MATRIX_ZIGZAG, NEO_GRB); // Couleurs struct RVB { octet r; octet g; octet b; }; // Définir quelques couleurs que nous utiliserons fréquemment RVB désactivé = { 0 , 0 , 0 }; RVB blanc = { 255 , 255 , 255 }; RVB rouge = { 255 , 0 , 0 }; RVB jaune = { 255 , 255 , 0 }; RVB bleu = { 0 , 0 , 255 }; RVB vert = { 0 , 255 , 0 }; RVB bleu sarcelle = { 0 , 255 , 255 }; RVB violet = { 255 , 0 , 255 }; RVB rose = { 255 , 74 , 150 }; void setup () { matrice.begin(); matrix.setBrightness( 30 ); matrix.setTextWrap( false ); } void loop () { // Effacer l'écran, ne rien afficher //matrix.fillScreen(matrix.Color(off.r, off.g, off.b)); matrice.fillScreen(matrice.Color(rouge.r, rouge.g, rouge.b)); //matrix.fillScreen(matrix.Color(vert.r, vert.g, vert.b)); //matrix.fillScreen(matrix.Color(bleu.r, bleu.g, bleu.b)); //matrix.fillScreen(matrix.Color(blanc.r, blanc.g, blanc.b)); matrice.show(); délai( 5000 ); } |
Matrices LED
Les matrices LED sont disposées en mosaïque. Il existe différentes manières de les disposer en mosaïque. Ci-dessous, j'ai disposé les six matrices LED. J'ai trouvé que le câblage était plus simple et plus court avec cette configuration. Vous pouvez en savoir plus sur Bibliothèque Neomarix .
Les fils rouge et noir situés au milieu de la matrice LED servent à fournir une tension supplémentaire aux matrices LED connectées en guirlande. En raison de la chute de tension , les matrices LED peuvent afficher une luminosité inégale, des scintillements et des couleurs aléatoires. En fonction de la capacité de votre alimentation, cette alimentation peut devoir provenir d'une alimentation séparée.
La partie difficile
Ensuite, j'ai monté temporairement les matrices LED sur le cadre avec du ruban de peintre. Vous verrez que la première matrice est maintenant située dans le coin supérieur droit après avoir retourné tout le panneau. J'ai marqué chaque matrice avec des numéros sur du ruban de peintre pour éviter toute confusion.
Il est maintenant temps de tout câbler ensemble. Vous devez ajouter des rallonges de fils pour connecter les matrices entre les lignes et les colonnes, car les fils soudés en usine sont trop courts. J'ai choisi d'ajouter Connecteurs JST à tous les fils pour rendre le tout maintenable (désolé, mais je n'ai pas de photo pour montrer cela). Vous pouvez également dessouder les fils d'usine et en ajouter des plus longs.
Ne montez pas encore les matrices LED sur le cadre avec du ruban adhésif double face. Allez-y, téléchargez le code final dans les sections ci-dessous et testez tout d'abord. Encore une fois, il est beaucoup plus facile de résoudre le problème maintenant qu'une fois les matrices LED montées de manière permanente. Eh bien, de manière semi-permanente, avec du ruban adhésif double face, tout est toujours amovible, mais ce sera beaucoup plus difficile.
Une fois que tout fonctionne comme prévu, coupez le ruban adhésif double face en bandes plus courtes, appliquez-le sur le cadre et décollez-le. Alignez soigneusement la matrice LED avec le support et appliquez-la sur les bandes. Faites ceci une matrice LED à la fois. Cela prendra du temps. Soyez patient et faites attention aux fils en vous assurant de les faire passer à travers les trous et de ne pas les coincer dans les bandes.


API de stock
J'ai trouvé Douze données être un fournisseur d'API formidable pour les cours boursiers en temps réel. Il prend en charge les actions, les crypto-monnaies, les ETF et les indices. Leur Plan de base gratuit permet de 800 requêtes par jour avec un maximum de 8 requêtes par minute . Avec une limitation appropriée, je pourrais obtenir des prix en temps réel toute la journée sans dépasser la limite. Chaque recherche de symbole est considérée comme une requête, un appel par lot de 8 symboles correspond donc à 8 requêtes, ce qui est également le nombre maximum autorisé de requêtes par minute. Pour respecter la limite de 800 requêtes par jour, je peux effectuer un appel par lot de 8 requêtes sur une Intervalle de 15 minutes pour un total de 768 requêtes par jour (1 440 min par jour / 15 min x 8 requêtes).
Je suis tout à fait satisfait d'un taux de rafraîchissement toutes les 15 minutes. Si vous souhaitez une mise à jour plus fréquente des prix, réduisez le nombre de symboles ou payez pour un meilleur forfait. Je vous laisse le soin de calculer
Maintenant, inscrivez-vous à un Douze données compte et récupérez la clé API. Lire Documentations API ici .
Codage
Installer
Sélectionnez la carte appropriée dans le menu
/** Cotation boursière par MakerAL.com 2021. */ // Broche de données LED // Configurations de matrice LED // // Démarrer les configurations // // WIFI constante char * ssid = "votre-ssid" ; const char * password = "votre-mot-de-passe" ; // Informations sur l'API const String apiUrl = "https://api.twelvedata.com/quote" ; const String apiKey = "votre-clé-api" ; // Symboles boursiers const String symboles[] = { "SPX" , "DJI" , "IXIC" , "ARKK" , "AAPL" , "TSLA" , "DOGE/USD" , "BTC/USD" }; // Intervalle et durée du ticker non signé long lastTime = 0 ; non signé long timerDelayMins = 15 ; non signé longue durée du tickerSecs = 10 ; // // Fin des configurations // // Couleurs struct RVB { octet r; octet g; octet b; }; // Définir quelques couleurs que nous utiliserons fréquemment RVB blanc = { 255 , 255 , 255 }; RVB rouge = { 255 , 0 , 0 }; RVB jaune = { 255 , 255 , 0 }; RVB bleu = { 0 , 0 , 255 }; RVB vert = { 0 , 255 , 0 }; RVB bleu sarcelle = { 0 , 255 , 255 }; RVB violet = { 255 , 0 , 255 }; RVB désactivé = { 0 , 0 , 0 }; // // Matrice instanciée // https://learn.adafruit.com/adafruit-neopixel-uberguide/neomatrix-library // Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix( LARGEUR DU PANNEAU LED, HAUTEUR DU PANNEAU LED, COLONNE_TUILE LED, RANGÉE_TUILE LED, BROCHE_LED, NEO_MATRIX_HAUT + NEO_MATRIX_GAUCHE + NEO_MATRIX_COLONNES + NEO_MATRIX_ZIGZAG + NEO_TILE_HAUT + NEO_TILE_GAUCHE + NEO_TILE_COLONNES + NEO_TILE_PROGRESSIVE, NEO_GRB + NEO_KHZ800); // Client WIFI WiFiClient client; // Client HTTP HTTPClient http; // Résultats de l'API Résultats de l'API DynamicJsonDocument ( 4096 ) ; constante int symbolLength = ARRAY_SIZE(symboles); void setup () { Serial.begin( 115200 ); // Connecter le réseau WIFIConnect(); // Ignorer HTTPS //client->setInsecure(); // Début de la matrice matrix.begin(); // Informations sur la matrice showMsg( "Largeur de la matrice : " + String(matrix.width())); showMsg( "Hauteur de la matrice : " + String(matrix.height())); } boucle vide () { playLed(); // Obtenir les données boursières toutes les X minutes si (lastTime == 0 || (millis() - lastTime) > (timerDelayMins * 60 * 1000 )) { getStocks(); lastTime = millis(); } } void playLed () { // Si les résultats de l'API sont présents // https://arduinojson.org/v6/api/jsondocument/ si (!apiResults.isNull()) { // Parcourir tous les symboles avec un délai pour ( uint16_t i = 0 ; i < longueur_symbole ; i++) { const String symbole = symboles[i]; String nom = apiResults[symbol][ "symbole" ]; nom.replace( "/USD" , "" ); const float closePrice = apiResults[symbole][ "fermer" ]; const float percentChange = apiResults[symbole][ "pourcentage_change" ]; showMsg(nom); showMsg(Chaîne(prixferme, 5 )); showMsg(Chaîne(pourcentageChange, 5 )); showMsg( "--------" ); RVB priceColor = percentChange > 0 ? vert : rouge ; String plusSign = percentChange > 0 ? "+" : "" ; showStockPrices(nom, bleu, String(closePrice, 3 ), blanc, plusSign + String(percentChange, 3 ) + "%" , priceColor); délai(tickerDurationSecs * 1000 ); } } } void getStocks () { showMsg( "Obtention d'actions..." ); const String stockUrl = apiUrl + "?symbol=" + (implodeString(symboles, String( "," ))) + "&apikey=" + apiKey; showMsg( "URL boursière" ); showMsg(stockUrl); // https://arduinojson.org/v6/how-to/use-arduinojson-with-httpclient/ http.useHTTP10( true ); si (http.begin(client, stockUrl)) { int code = http.GET(); si (code == HTTP_CODE_OK) { showMsg( "Résultat obtenu :" ); //Charge utile de chaîne = http.getString(); //showMsg(charge utile); // https://arduinojson.org/v6/how-to/deserialize-a-very-large-document/ StaticJsonDocument< 1024 > filtre ; filtre [ "statut" ] = vrai ; pour ( uint16_t i = 0 ; i < symbolLength; i++) { const String symbole = symboles [i] ; filtre [symbole] [ "symbole" ] = vrai ; filtre [symbole] [ "fermer" ] = vrai ; filtre [symbole] [ "changement_en_pourcentage" ] = vrai ; } // Effacer les résultats précédents apiResults.clear(); // Renseigner les résultats ici // Utilisez getStream() au lieu de getString() pour une efficacité de la mémoire, // appliquer également un filtre pour minimiser la consommation de RAM deserializeJson(apiResults, http.getStream(), DeserializationOption::Filter(filter)); const String status = apiResults[ "statut" ]; showMsg( "Statut :" ); showMsg(statut); if (status == "error" ) { showMsg( "Impossible de lire les stocks, le taux de requêtes API a probablement été atteint" ); // Effacer les résultats précédents apiResults.clear(); } } // Déconnecter http.end(); } else { showMsg( "Impossible d'obtenir les stocks, probablement une erreur réseau" ); // Effacer les résultats précédents apiResults.clear(); } } void showStockPrices (Chaîne ligne1Texte, RVB ligne1Couleur, Chaîne ligne2Texte, RVB ligne2Couleur, Chaîne ligne3Texte, RVB ligne3Couleur) { matrix.fillScreen(matrix.Color(off.r, off.g, off.b)); matrix.setBrightness(LED_BRIGHTNESS); matrix.setTextWrap( false ); // Ligne 1 matrix.setCursor( 0 , 0 ); matrix.setTextColor(matrix.Color(line1Color.r, line1Color.g, line1Color.b)); matrix.print(line1Text); // Ligne 2 matrix.setCursor( 0 , 8 ); matrix.setTextColor(matrix.Color(line2Color.r, line2Color.g, line2Color.b)); matrix.print(line2Text); // Ligne 3 matrix.setCursor( 0 , 16 ); matrix.setTextColor(matrix.Color(line3Color.r, line3Color.g, line3Color.b)); matrix.print(line3Text); matrice.show(); } void networkConnect () { WiFi.begin(ssid, mot de passe); pendant que (WiFi.status() != WL_CONNECTED) { delay( 500 ); showMsg( "*" ); } showMsg( "Vous êtes connecté au réseau" ); printWifiStatus(); } void printWifiStatus () { // Imprimez le SSID du réseau auquel vous êtes connecté showMsg( "SSID: " + String(WiFi.SSID())); // Imprimez l'adresse IP de votre bouclier WiFi IPAddress ip = WiFi.localIP(); showMsg( "Adresse IP : " + ipToString(ip)); // Imprimer la force du signal reçu long rssi = WiFi.RSSI(); // -60 dBm et plus pour être considéré comme bon showMsg( "Intensité du signal : " + String(rssi) + "dBm" ); } Chaîne ipToString ( const IPAddress& ipAddress) { renvoie Chaîne(ipAddress[ 0 ]) + Chaîne( "." ) + \ Chaîne(ipAddress[ 1 ]) + Chaîne( "." ) + \ Chaîne(ipAddress[ 2 ]) + Chaîne( "." ) + \ Chaîne(ipAddress[ 3 ]); } const String implodeString ( const String valeurs[], String join) { String chaîne = "" ; pour ( uint16_t i = 0 ; i < symbolLength; i++) { chaîne += valeurs[i] + join; } retour chaîne ; } void showMsg (Chaîne msg) { Serial.println(msg); } |
Rechercher les symboles pris en charge par Douze Données :
Mettez à jour les variables ci-dessous et téléchargez le code.
-
ssid - votre point d'accès WiFi -
mot de passe - votre mot de passe WiFi -
Clé API - votre clé API Twelve Data -
symboles - un tableau de symboles -
minuteurDelayMins - intervalle pour récupérer les données de stock en minutes -
tickerDurationSecs - durée de chaque symbole à l'écran en secondes - // WIFI constante char * ssid = "votre-ssid" ; const char * password = "votre-mot-de-passe" ; // Informations sur l'API const String apiKey = "votre-clé-api" ; // Symboles boursiers const String symboles[] = { "SPX" , "DJI" , "IXIC" , "ARKK" , "AAPL" , "TSLA" , "DOGE/USD" , "BTC/USD" }; // Intervalle et durée du ticker non signé long timerDelayMins = 15 ; non signé longue durée du tickerSecs = 10 ;
- Branchez TOUJOURS l'alimentation lorsque le câble USB est également branché. Vous souhaitez éviter de consommer de l'énergie à partir du câble USB, car il ne gère pas un courant important. Une surcharge électrique endommagera l'USB, le microcontrôleur, la LED ou même l'ordinateur. Si vous devez couper l'alimentation en cas d'urgence, débranchez d'abord le câble USB, puis l'alimentation.
-
Enfin
Voici le produit final. Le contrôleur s'insère parfaitement dans la rainure du cadre. J'ai également appliqué de la colle chaude pour renforcer le ruban adhésif double face, mais j'ai trouvé que c'était un peu exagéré.
Vous pouvez soit accrocher le téléscripteur boursier MakerAL, soit le poser sur un support. Le fichier STL du support imprimable en 3D peut être téléchargé ci-dessous. Vous en aurez besoin de 4 et de les coller ensemble.
-
Clause de non-responsabilité
- Les LED génèrent de la chaleur et consomment probablement beaucoup d'énergie
- Une puissance insuffisante ou une surcharge électrique entraînera la fusion des fils et un incendie
- Les LED peuvent endommager vos yeux et entraîner des problèmes de santé
- Je ne serai pas responsable des dommages éventuels. Faites-le à vos propres risques
-
Références
Eric Jones
My name’s Eric and I just found your site btf-lighting.com.
It’s got a lot going for it, but here’s an idea to make it even MORE effective.
Talk With Web Visitor – CLICK HERE https://boostleadgeneration.com for a live demo now.
Talk With Web Visitor is a software widget that’s works on your site, ready to capture any visitor’s Name, Email address and Phone Number. It signals you the moment they let you know they’re interested – so that you can talk to that lead while they’re literally looking over your site.
And once you’ve captured their phone number, with our new SMS Text With Lead feature, you can automatically start a text (SMS) conversation… and if they don’t take you up on your offer then, you can follow up with text messages for new offers, content links, even just “how you doing?” notes to build a relationship.
CLICK HERE https://boostleadgeneration.com to discover what Talk With Web Visitor can do for your business.
The difference between contacting someone within 5 minutes versus a half-hour means you could be converting up to 100X more leads today!
Eric
PS: Studies show that 70% of a site’s visitors disappear and are gone forever after just a moment. Don’t keep losing them.
Talk With Web Visitor offers a FREE 14 days trial – and it even includes International Long Distance Calling.
You have customers waiting to talk with you right now… don’t keep them waiting.
CLICK HERE https://boostleadgeneration.com to try Talk With Web Visitor now.
If you’d like to unsubscribe click here http://boostleadgeneration.com/unsubscribe.aspx?d=btf-lighting.com
Eric Jones
Hey, my name’s Eric and for just a second, imagine this…
- Someone does a search and winds up at btf-lighting.com.
- They hang out for a minute to check it out. “I’m interested… but… maybe…”
- And then they hit the back button and check out the other search results instead.
- Bottom line – you got an eyeball, but nothing else to show for it.
- There they go.
This isn’t really your fault – it happens a LOT – studies show 7 out of 10 visitors to any site disappear without leaving a trace.
But you CAN fix that.
Talk With Web Visitor is a software widget that’s works on your site, ready to capture any visitor’s Name, Email address and Phone Number. It lets you know right then and there – enabling you to call that lead while they’re literally looking over your site.
CLICK HERE https://boostleadgeneration.com to try out a Live Demo with Talk With Web Visitor now to see exactly how it works.
Time is money when it comes to connecting with leads – the difference between contacting someone within 5 minutes versus 30 minutes later can be huge – like 100 times better!
Plus, now that you have their phone number, with our new SMS Text With Lead feature you can automatically start a text (SMS) conversation… so even if you don’t close a deal then, you can follow up with text messages for new offers, content links, even just “how you doing?” notes to build a relationship.
Strong stuff.
CLICK HERE https://boostleadgeneration.com to discover what Talk With Web Visitor can do for your business.
You could be converting up to 100X more leads today!
Eric
PS: Talk With Web Visitor offers a FREE 14 days trial – and it even includes International Long Distance Calling.
You have customers waiting to talk with you right now… don’t keep them waiting.
CLICK HERE https://boostleadgeneration.com to try Talk With Web Visitor now.
If you’d like to unsubscribe click here http://boostleadgeneration.com/unsubscribe.aspx?d=btf-lighting.com
Eric Jones
Hey, this is Eric and I ran across btf-lighting.com a few minutes ago.
Looks great… but now what?
By that I mean, when someone like me finds your website – either through Search or just bouncing around – what happens next? Do you get a lot of leads from your site, or at least enough to make you happy?
Honestly, most business websites fall a bit short when it comes to generating paying customers. Studies show that 70% of a site’s visitors disappear and are gone forever after just a moment.
Here’s an idea…
How about making it really EASY for every visitor who shows up to get a personal phone call you as soon as they hit your site…
You can –
Talk With Web Visitor is a software widget that’s works on your site, ready to capture any visitor’s Name, Email address and Phone Number. It signals you the moment they let you know they’re interested – so that you can talk to that lead while they’re literally looking over your site.
CLICK HERE http://talkwithcustomer.com to try out a Live Demo with Talk With Web Visitor now to see exactly how it works.
You’ll be amazed – the difference between contacting someone within 5 minutes versus a half-hour or more later could increase your results 100-fold.
It gets even better… once you’ve captured their phone number, with our new SMS Text With Lead feature, you can automatically start a text (SMS) conversation.
That way, even if you don’t close a deal right away, you can follow up with text messages for new offers, content links, even just “how you doing?” notes to build a relationship.
Pretty sweet – AND effective.
CLICK HERE http://talkwithcustomer.com to discover what Talk With Web Visitor can do for your business.
You could be converting up to 100X more leads today!
Eric
PS: Talk With Web Visitor offers a FREE 14 days trial – and it even includes International Long Distance Calling.
You have customers waiting to talk with you right now… don’t keep them waiting.
CLICK HERE http://talkwithcustomer.com to try Talk With Web Visitor now.
If you’d like to unsubscribe click here http://talkwithcustomer.com/unsubscribe.aspx?d=btf-lighting.com