Table des matières:

LED POVstick avec Bluetooth Low Energy : 10 étapes (avec photos)
LED POVstick avec Bluetooth Low Energy : 10 étapes (avec photos)

Vidéo: LED POVstick avec Bluetooth Low Energy : 10 étapes (avec photos)

Vidéo: LED POVstick avec Bluetooth Low Energy : 10 étapes (avec photos)
Vidéo: John Park's Light Paintbrush @adafruit @johnedgarpark #adafruit #CircuitPlayground 2024, Novembre
Anonim
LED POVstick avec Bluetooth Low Energy
LED POVstick avec Bluetooth Low Energy

Cette instructable vous montre comment construire un bâton de lightwriter avec des LED RVB qui est contrôlable via BLE depuis votre téléphone !

Maintenant que la saison sombre commence et que vous devez prendre des photos à longue exposition: avec ce bâton, vous pouvez écrire votre signature sur l'image, ou une citation de motivation, ou une déclaration d'amour, un QR-code, une adresse Web, ou plusieurs autres choses…

Il couvre plusieurs thèmes de développement:

  • construire le matériel
  • programmation du chipset Cypress BLE avec C
  • créez votre propre application pour la contrôler.

Étape 1: Matériel pour le BLE-LED-Stick

Matériel pour le BLE-LED-Stick
Matériel pour le BLE-LED-Stick
Matériel pour le BLE-LED-Stick
Matériel pour le BLE-LED-Stick
Matériel pour le BLE-LED-Stick
Matériel pour le BLE-LED-Stick
Matériel pour le BLE-LED-Stick
Matériel pour le BLE-LED-Stick

Pour le bâton, vous avez besoin des éléments suivants:

  • Un module BLE cyprès (CY8C4247LQI-BL583)
  • une bande de LED RGB WS2812b (64 LED à partir d'une bande de 144 LED par mètre)
  • une batterie Li-Ion avec un support adapté (18650)
  • un bouton poussoir
  • un morceau de planche à pain

Le matériel du bâton lui-même est assez simple.

Le module Cypress BLE est monté sur un morceau de maquette et les LED, le bouton et l'alimentation sont simplement connectés à cette maquette.

Le tout est monté, collé ou vissé sur un petit morceau de lamelle de bois, elle-même insérée en partie dans un tube en polyacryle transparent. Mais ce n'est pas un must. Je voulais tout monter à l'intérieur d'un tube, mais je n'ai pas trouvé de solution adaptée au module BLE et à la batterie qui sont assez gros par rapport aux LED. Pour un premier tir, vous n'avez pas besoin du tube acrylique.

Étape 2: Assemblage électronique

Assemblage électronique
Assemblage électronique
Assemblage électronique
Assemblage électronique

Cette étape vous montre comment le module BLE est monté et quelles broches sont utilisées dans quel but.

Comme dans plusieurs de mes Instructables, j'ai utilisé le kit de développement Cypress BLE. CY8CKIT-042-BLE Guide de démarrage rapide

Si vous souhaitez faire fonctionner le module seul, il vous suffit de connecter les sources d'alimentation et les broches utilisées.

Pour notre projet, nous n'utilisons que la broche 3.5 pour piloter la bande LED. Mais bien sûr, vous pouvez changer cela avec le créateur PSoC.

Comme vous pouvez le voir sur la photo du PCB, j'ai ajouté des têtes d'épingle dans tous les coins de la puce mais j'ai sauté la broche VREF.

De cette façon, le module est monté correctement et il est impossible de mal connecter le module.

Étape 3: Comment générer les polices ?

Comment générer les polices ?
Comment générer les polices ?

Eh bien, je pense que c'était l'un des problèmes les plus intéressants que j'ai résolus au cours de ce projet.

Bien sûr, on pourrait simplement concevoir une nouvelle police et l'écrire dans un tableau, mais c'est vraiment beaucoup de travail !

Alors qu'est-ce que j'ai fait ?

Je savais que j'avais besoin d'une sorte de conversion ASCII en hexa-bitmap. Et j'ai eu de la chance, car je n'étais pas le premier avec ce problème !:-)

Le logiciel "GLCD Font Generator" a fait ce qu'il fallait:

Parce que je voulais tirer le meilleur parti du bâton LED, j'ai importé la police dans une taille assez grande (~ 32 pixels). Si vous n'utilisez que des lettres majuscules, vous n'avez pas à vous soucier des ascendeurs, ce qui augmentera la taille de votre police visible de quelques pixels. Mais j'ai choisi d'utiliser à la fois des majuscules et des minuscules. (https://en.wikipedia.org/wiki/Ascender_%28typography%29)

Une fois que vous avez importé une police dans le générateur de polices GLCD, vous pouvez choisir de l'exporter dans différents formats.

J'ai essayé de l'exporter directement dans les en-têtes, ce qui était bien, mais pas parfait. L'exportation résultante est un tableau de courts métrages (16 bits) avec des valeurs octet-hex pour les colonnes de chaque caractère du premier caractère 128-ascii. Pas tout à fait ce que je voulais ou dont j'avais besoin…

J'ai donc importé le tableau dans une feuille de calcul de calcul open office. Ensuite, j'ai supprimé le "0x" sur trois des quatre valeurs et les ai concaténées en une seule valeur de 32 bits. J'ai également corrigé le mauvais endianess des octets individuels.

Le tableau résultant est un tableau N*M de valeurs 32 bits. M est le caractère respectif et N sont les colonnes qui composent l'affichage de cette lettre. Dans ce premier brouillon, tous les caractères ont le même nombre de colonnes, ce qui signifie que toutes les lettres ont la même largeur, comme dans la célèbre police Courier. Les petits caractères comme "i" ou "t" semblent perdus dans l'espace.

Par conséquent, j'ai ajouté un nouveau paramètre au début de chaque caractère pour indiquer le nombre de colonnes de ce caractère ou sa largeur. Cela économise de la mémoire et améliore l'apparence du texte !

Étape 4: Logiciel de contrôle BLE

Logiciel de contrôle BLE
Logiciel de contrôle BLE

Le principe du logiciel BLE est très simple:

  • Au début, ça ne fait rien.
  • Via BLE, vous pouvez définir différentes animations ou textes à afficher.
  • Une fois que vous appuyez sur le bouton, les colonnes individuelles de l'animation ou du texte s'affichent.
  • Une fois le texte affiché, il continue d'attendre à nouveau.

Importez simplement le projet Cypress dans votre PSoC-Creator et modifiez-le si vous le souhaitez.

Le PSoC-4 n'a pas beaucoup de RAM et de flash pour pouvoir contenir des images RVB complètes des polices. Par conséquent, j'avais besoin d'un moyen de générer le contenu LED de manière dynamique à partir du texte. C'est assez simple, rien de spécial jusqu'à présent. À partir d'un texte avec de nombreuses lettres, l'algorithme prend une lettre et la convertit en un tableau bitmap noir-blanc. Ensuite, il prend chaque colonne de ce bitmap à une lettre et au lieu de blanc, il écrit la couleur RVB actuelle sur le réseau de LED. De cette façon, vous pouvez générer des textes monochromes ou par une fonction supplémentaire changer la couleur après chaque colonne, chaque lettre ou même après chaque pixel.

Une "lettre" peut être stockée dans une seule variable d'octet alors qu'un bitmap en noir et blanc doit être stocké dans une sorte de tableau.

La structure de données est la suivante:

Chaîne: nouveautexte = "Bonjour";

Police: uint32 caractères = { FirstCharacter_ColumnCount, FirstCharacter_FirstColumn, FirstCharacter_SecondColumn, … SecondCharacter_ColumnCount, SecondCharacter_FirstColumn, … … LastCharacter_ColumnCount, … LastCharacter_LastColumn }; Couleur: uint32 rgbcolor = 0xHHBBGGRR; // Luminosité, Bleu, Vert, Rouge chacun comme valeur 8 bits

Pour convertir une chaîne à afficher, nous procédons comme suit:

getCharacter(): H (8 bits)

getColumn(int i): colonne (32 bits) (je commence par la première colonne, s'étend jusqu'à la dernière.) if(bit in column is 1) LED in Strip est réglé sur color. LED-Strip Array est composé de 64 LED avec des couleurs 32 bits chacune !

Et si cette colonne est affichée, nous continuons avec la suivante.

C'est si facile.

Étape 5: Premier test

Premier test
Premier test
Premier test
Premier test
Premier test
Premier test

Maintenant que le logiciel fonctionne, nous sommes prêts pour les premiers tests.

Le moyen le plus simple de tester la fonction intégrée consiste à utiliser une application de test Bluetooth à faible consommation d'énergie. Comme les applications nordiques ou Cypress.

Nordique: nRF Connect pour mobile

Cyprès: CySmart

Démarrez le Pov-Stick et observez comment la chaîne de démonstration sera affichée. Une fois cette opération terminée, il est temps de démarrer l'application. Recherchez l'appareil Povstick et cliquez sur connecter.

Une fois la connexion établie, l'application découvre automatiquement tous les services et caractéristiques définis.

Recherchez le premier service (doit commencer par 0000ccce…). Cliquez dessus pour l'ouvrir et afficher la première caractéristique (commence par 0000ccc1). Appuyez ensuite sur le bouton d'écriture (ou de téléchargement) et écrivez un 01 pour cette caractéristique.

Une fois que vous avez appuyé sur envoyer, le POVstick lancera l'animation Color-Knight-rider alias Larson Scanner avec des couleurs changeantes.

Félicitations, vous avez envoyé votre première valeur via BLE !

Étape 6: sélectionnez les animations

Sélectionnez les animations
Sélectionnez les animations
Sélectionnez les animations
Sélectionnez les animations
Sélectionnez les animations
Sélectionnez les animations
Sélectionnez les animations
Sélectionnez les animations

Dans le logiciel, nous avons défini une énumération "e_Animation" avec les valeurs suivantes:

typedef enum { Knightrider = 0, ColorKnightRider, Rainbowswirl, Valueswirl, WS_CandyCane, WS_CandyCane_2, WS_CandyCane_3, WS_Twinkle, WS_Icicle, WS_ColorWheel, RGB_Control, TextAnimation, Animation_Max } e_Animation;

Ce sont les valeurs qui sont valables pour la caractéristique ccc1. Si vous souhaitez voir CandyCane-Animation, vous devez écrire un 4, 5 ou 6 pour cette caractéristique. Ils diffèrent par les couleurs.

Deux animations spéciales sont le RGB_Control et le TextAnimation. Si vous choisissez de les activer, le stick n'affichera évidemment rien au début. Mais il vous offre des options supplémentaires pour contrôler le stick avec les autres services.

Étape 7: Contrôle RVB

Contrôle RVB
Contrôle RVB
Contrôle RVB
Contrôle RVB
Contrôle RVB
Contrôle RVB
Contrôle RVB
Contrôle RVB

Le RGB-Control peut très facilement être testé avec l'application CySmart car j'ai utilisé le même UUID pour cette caractéristique que dans la démo Cypress.

Démarrez l'application CySmart et connectez-vous au Povstick. Vous devez d'abord écrire un "0x0A" à la caractéristique ccc1.

0x0A est la valeur hexadécimale pour 10, qui est l'animation RGB-Control dans l'énumération.

Ensuite, vous pouvez passer au panneau de commande RGB-LED dans l'application CySmart. Vous devrez peut-être redémarrer l'application pour accéder à cet écran. Ensuite, vous pouvez contrôler la couleur de toutes les LED avec ce diagramme RVB.

Bien entendu, vous pouvez également écrire les valeurs directement dans la caractéristique.

Étape 8: Service Text_Animation et service de stockage persistant

Service Text_Animation et service de stockage persistant
Service Text_Animation et service de stockage persistant

Ces services ne sont pas si faciles à tester.

Techniquement, vous pouvez également utiliser l'application nordique pour cela, mais vous devez savoir quelles valeurs écrire sur quelle caractéristique.

Donc, si vous voulez les tester, vous devriez jeter un œil au projet PSoC, quelle caractéristique a quel UUID.

Un élément important est la caractéristique "Set-Speed". Avec cette caractéristique, vous pouvez contrôler la vitesse des animations.

Avec la caractéristique "Set_Animation" de PersistentStorageService, vous pouvez contrôler les polices et les couleurs de la chaîne de texte. Les valeurs valides sont définies dans "povanimation.h", deux polices "mono" et "serif" et une seule couleur et arc-en-ciel. Les valeurs 0 et 1 affichent le texte avec une couleur fixe, contrôlable via la caractéristique RGB_Control. Les valeurs 2 et 3 changent la couleur de chaque colonne et donnent à la chaîne un bel arc-en-ciel.

Le "Write_Text_Service" est un peu différent. Vous pouvez écrire une nouvelle chaîne dans l'appareil en écrivant des caractères individuels dans la caractéristique "Set_Character". À chaque écriture, vous recevrez une notification de la longueur actuelle de la chaîne.

Pour commencer une nouvelle chaîne, écrivez "true" dans "Clear_String".

Ce n'est pas la meilleure implémentation, mais cela fonctionne pour n'importe quelle chaîne jusqu'à 250 caractères sans changer la taille MTU.

L'affichage d'une nouvelle chaîne avec début lorsque le bouton du Povstick est enfoncé.

Étape 9: démarrez l'application Android

Il s'agit d'une étape importante, mais bien au-delà de la portée de cette instructable. Désolé!

Peut-être que je pourrais télécharger mon application de test sur le Play Store, mais elle n'est pas encore terminée ou publiable.

Étape 10: Écrire des messages en images

Écrire des messages en images
Écrire des messages en images
Écrire des messages en images
Écrire des messages en images
Écrire des messages en images
Écrire des messages en images

Eh bien, c'est pourquoi j'ai créé ce povstick en premier lieu: pour écrire des messages en images.

Vous avez besoin d'un trépied, d'un appareil photo avec fonction d'exposition longue et d'un bon emplacement.

Installez la caméra et réglez le temps d'exposition à 10s pour un premier test.

Déclenchez le déclencheur et commencez à parcourir l'image, en commençant l'affichage du texte sur le bâton.

Et voila nous y sommes !

Avec la bonne combinaison de luminosité LED, d'ouverture et de temps d'exposition, il est même possible de prendre des photos à l'aube.

Les trois images de cette étape montrent l'éventail complet des possibilités.

Dans le premier, les LED sont surexposées et créent une lueur magique. Mais c'est pourquoi les reflets au sol sont visibles et le fond est plutôt bon.

La deuxième image est exposée pour les LED, mais cela laisse le fond complètement noir.

Et le troisième montre des LED plutôt faibles peu après le coucher du soleil. Les LED sont aussi lumineuses que sur les autres photos, mais l'environnement était si lumineux que j'ai dû utiliser une faible ouverture et une faible sensibilité ISO pour que les LED paraissent plutôt sombres.

Concours Fais briller 2018
Concours Fais briller 2018
Concours Fais briller 2018
Concours Fais briller 2018

Deuxième prix du concours Make it Glow 2018

Conseillé: