Indholdsfortegnelse:

LED POVstick med Bluetooth Low Energy: 10 trin (med billeder)
LED POVstick med Bluetooth Low Energy: 10 trin (med billeder)

Video: LED POVstick med Bluetooth Low Energy: 10 trin (med billeder)

Video: LED POVstick med Bluetooth Low Energy: 10 trin (med billeder)
Video: Mstick, Air Display Preview # T3-1 Smart LED Light POV by MOLT 2024, November
Anonim
LED POVstick med Bluetooth lav energi
LED POVstick med Bluetooth lav energi

Denne instruktør viser dig, hvordan du bygger en lightwriter -stick med RGB -lysdioder, der kan styres via BLE fra din telefon!

Nu hvor den mørke sæson starter, og du skal tage lange eksponeringsbilleder: Med denne pind kan du skrive din signatur ind i billedet eller et motiverende citat eller en kærlighedserklæring, en QR-kode, en webadresse eller mange andre ting…

Det dækker flere udviklingsemner:

  • at bygge hardware
  • programmering af Cypress BLE chipset med C
  • lav din egen app til at styre den.

Trin 1: Hardware til BLE-LED-Stick

Hardware til BLE-LED-Stick
Hardware til BLE-LED-Stick
Hardware til BLE-LED-Stick
Hardware til BLE-LED-Stick
Hardware til BLE-LED-Stick
Hardware til BLE-LED-Stick
Hardware til BLE-LED-Stick
Hardware til BLE-LED-Stick

Til pinden har du brug for følgende:

  • Et cypress BLE-modul (CY8C4247LQI-BL583)
  • en WS2812b RGB-LED-strip (64 lysdioder fra en strimmel på 144 lys pr. meter)
  • et Li-Ion batteri med en passende holder (18650)
  • en trykknap
  • et stykke brødbræt

Selve pindens hardware er ret simpel.

Cypress BLE-modulet er monteret på et stykke brødbræt, og lysdioderne, knappen og strømforsyningen er netop forbundet til dette brødbræt.

Alt monteres, limes eller skrues på et lille stykke træstrimmel, som selv delvist indsættes i et klart polyacrylrør. Men dette er ikke et must. Jeg ville montere alt inde i et rør, men jeg fandt ikke en passende til BLE-modulet og batteriet, som er ret store i forhold til lysdioderne. For et første skud behøver du ikke akrylrøret.

Trin 2: Elektronikmontering

Elektronikmontering
Elektronikmontering
Elektronikmontering
Elektronikmontering

Dette trin viser dig, hvordan BLE-modulet er monteret, og hvilke ben der bruges til hvilket formål.

Som i flere af mine instruktioner brugte jeg Cypress BLE Development Kit. CY8CKIT-042-BLE Hurtig startguide

Hvis du vil betjene modulet på egen hånd, er alt du skal tilslutte strømkilderne og de brugte stifter.

Til vores projekt bruger vi kun pin 3,5 til at drive LED-Strip. Men du kan selvfølgelig ændre det med PSoC Creator.

Som du kan se på billedet af printkortet, tilføjede jeg pinheads i alle hjørner af chippen, men jeg sprang VREF -pin over.

På denne måde er modulet monteret korrekt, og det er umuligt at afbryde forbindelsen til modulet.

Trin 3: Hvordan genereres skrifttyperne?

Hvordan genereres skrifttyperne?
Hvordan genereres skrifttyperne?

Jeg tror, at dette var et af de mest interessante problemer, jeg løste under dette projekt.

Selvfølgelig kunne man bare designe en ny skrifttype og skrive den i en matrix, men det er virkelig meget arbejde!

Så hvad gjorde jeg?

Jeg vidste, at jeg havde brug for en form for konvertering fra ASCII til hex-bitmap. Og jeg var heldig, for jeg var ikke den første med dette problem!:-)

Softwaren "GLCD Font Generator" gjorde det helt rigtige:

Fordi jeg ville få mest muligt ud af LED-pinden, importerede jeg skrifttypen i en ret stor størrelse (~ 32pixel). Hvis du kun bruger store bogstaver, behøver du ikke bekymre dig om opstigninger, hvilket vil øge din synlige skriftstørrelse yderligere et par pixels. Men jeg valgte at bruge både store og små bogstaver. (https://da.wikipedia.org/wiki/Ascender_%28typography%29)

Når du har importeret en skrifttype til GLCD Fontgenerator, kan du vælge at eksportere den i forskellige formater.

Jeg forsøgte at eksportere det direkte til overskrifter, hvilket var godt, men ikke perfekt. Den resulterende eksport er en række shorts (16bit) med byte-hex-værdier for kolonnerne for hvert tegn i det første 128-ascii-tegn. Ikke helt hvad jeg ønskede eller havde brug for …

Så jeg importerede arrayet til et regneark med åbent kontor. Derefter fjernede jeg "0x" på tre af fire værdier og sammenføjede dem til en 32bit lang værdi. Jeg rettede også den forkerte endianess af de enkelte bytes.

Det resulterende array er et N*M -array med 32bit -værdier. M er det respektive tegn, og N er de kolonner, der udgør visningen af dette bogstav. I dette første kladde har alle tegn det samme antal kolonner, det betyder, at alle bogstaver er lige brede, som i den velkendte Courier -skrifttype. Små tegn som "i" eller "t" ser ud til at være tabt i rummet.

Derfor tilføjede jeg en ny parameter i begyndelsen af hvert tegn for at fortælle, hvor mange kolonner dette tegn har, eller hvor bredt dette tegn er. Dette sparer hukommelse og får teksten til at se bedre ud!

Trin 4: BLE -kontrolsoftware

BLE -styringssoftware
BLE -styringssoftware

Princippet for BLE-softwaren er meget let:

  • I begyndelsen gør det bare ingenting.
  • Via BLE kan du indstille forskellige animationer eller tekster, der skal vises.
  • Når du trykker på knappen, vises de enkelte kolonner i animationen eller teksten.
  • Efter at teksten er vist, fortsætter den med at vente igen.

Bare importer cypressprojektet til din PSoC-Creator, og rediger det, hvis du vil.

PSoC-4 har ikke så meget RAM og flash for at kunne gemme komplette RGB-billeder af skrifttyperne. Derfor havde jeg brug for en måde at generere LED-indholdet dynamisk fra teksten. Det er ret ligetil, intet særligt indtil videre. Fra en tekst med mange bogstaver tager algoritmen et bogstav og konverterer det til et sort-hvid-bitmap-array. Derefter tager det hver kolonne i dette bitmap på et bogstav og i stedet for hvidt skriver det den aktuelle RGB-farve til LED-arrayet. På denne måde kan du generere enkeltfarvede tekster eller ved hjælp af en ekstra funktion ændre farven efter hver kolonne, hvert bogstav eller endda efter hver pixel.

Et "bogstav" kan gemmes i en enkelt bytevariabel, mens en sort-hvid bitmap skal gemmes i en slags array.

Datastrukturen er denne:

String: newtext = "Hej";

Font: uint32 characters = {FirstCharacter_ColumnCount, FirstCharacter_FirstColumn, FirstCharacter_SecondColumn,… SecondCharacter_ColumnCount, SecondCharacter_FirstColumn,…… LastCharacter_ColumnCount,… LastCharacter_LastColumn}; Farve: uint32 rgbcolor = 0xHHBBGGRR; // Lysstyrke, blå, grøn, rød hver som 8bit værdi

For at konvertere en streng til visning gør vi følgende:

getCharacter (): H (8bit)

getColumn (int i): kolonne (32bit) (i starter med den første kolonne, kører til den sidste.) hvis (bit i kolonne er 1) LED i Strip er indstillet til farve. LED-Strip Array er 64 lysdioder med 32bit farver hver!

Og hvis denne kolonne vises, fortsætter vi med den næste.

Det er så let.

Trin 5: Første test

Første test
Første test
Første test
Første test
Første test
Første test

Nu hvor softwaren kører, er vi klar til de første tests.

Den nemmeste måde at teste den integrerede funktion på er med en Bluetooth lavenergitest -app. Ligesom de nordiske eller Cypress Apps.

Nordisk: nRF Connect for Mobile

Cypress: CySmart

Start Pov-Stick og observer hvordan demo-strengen vises. Når dette er færdigt, er det tid til at starte appen. Søg på Povstick -enheden, og klik på tilslut.

Når forbindelsen er etableret, finder appen automatisk alle definerede tjenester og egenskaber.

Se efter den første service (skal starte med 0000ccce …). Klik på den for at åbne den og vise den første egenskab (starter med 0000ccc1). Tryk derefter på knappen skrive (eller upload) og skriv en 01 til denne egenskab.

Når du trykker på send, starter POVstick Color-Knight-rider-animationen alias Larson Scanner med skiftende farver.

Tillykke, du sendte din første værdi via BLE!

Trin 6: Vælg animationerne

Vælg animationerne
Vælg animationerne
Vælg animationerne
Vælg animationerne
Vælg animationerne
Vælg animationerne
Vælg animationerne
Vælg animationerne

I softwaren definerede vi et enum "e_Animation" med følgende værdier:

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

Disse er de værdier, der er gyldige for ccc1 -karakteristikken. Hvis du gerne vil se CandyCane-animationen, skal du skrive en 4, 5 eller 6 til denne egenskab. De adskiller sig i farverne.

To særlige animationer er RGB_Control og TextAnimation. Hvis du valgte at aktivere disse, viser pinden naturligvis ikke noget i starten. Men det giver dig yderligere muligheder for at styre pinden med de andre tjenester.

Trin 7: RGB -kontrol

RGB -kontrol
RGB -kontrol
RGB -kontrol
RGB -kontrol
RGB -kontrol
RGB -kontrol
RGB -kontrol
RGB -kontrol

RGB-kontrol kan meget let testes med CySmart App, fordi jeg brugte den samme UUID til denne egenskab som i Cypress Demo.

Start CySmart -appen, og opret forbindelse til Povstick. Først skal du skrive en "0x0A" til ccc1 -karakteristikken.

0x0A er hex-værdien for 10, som er RGB-Control-animationen i enum.

Derefter kan du skifte til RGB-LED-kontrolpanelet i CySmart-appen. Måske skal du genstarte appen for at komme til denne skærm. Derefter kan du styre farven på alle lysdioder med dette RGB-diagram.

Selvfølgelig kan du også skrive værdierne direkte ind i karakteristikken.

Trin 8: Text_Animation Service og Persistent Storage Service

Text_Animation Service og Persistent Storage Service
Text_Animation Service og Persistent Storage Service

Disse tjenester er ikke så lette at teste.

Teknisk kan du også bruge den nordiske app til dette, men du skal vide, hvilke værdier du skal skrive til hvilken egenskab.

Så hvis du vil teste disse, bør du kigge på PSoC -projektet, hvilken egenskab har hvilken UUID.

En vigtig ting er "Set-Speed" -karakteristikken. Med denne egenskab kan du kontrollere, hvor hurtige animationerne er.

Med karakteren "Set_Animation" for PersistentStorageService kan du styre skrifttyperne og farverne på tekststrengen. De gyldige værdier er defineret i "povanimation.h", to skrifttyper "mono" og "serif" og enkeltfarvede og regnbuefarvede. Værdierne 0 og 1 viser teksten med en fast farve, der kan styres via RGB_Control -karakteristikken. Værdierne 2 og 3 ændrer farven for hver kolonne og giver strengen en flot regnbue.

"Write_Text_Service" er lidt anderledes. Du kan skrive en ny streng til enheden ved at skrive individuelle tegn til karakteren "Set_Character". Ved hver skrivning får du en besked tilbage om strengens aktuelle længde.

For at starte en ny streng skal du skrive "true" til "Clear_String".

Dette er ikke den bedste implementering, men det fungerer for enhver streng på op til 250 tegn uden at ændre MTU -størrelsen.

Visning af en ny streng med start, når der trykkes på knappen på povstick.

Trin 9: Start Android -appen

Dette er et vigtigt skridt, men langt uden for omfanget af denne instruerbare. Ked af det!

Måske kan jeg uploade min test-app til playbutikken, men den er endnu ikke færdig eller kan frigives.

Trin 10: Skriv meddelelser i billeder

Skriv beskeder i billeder
Skriv beskeder i billeder
Skriv beskeder i billeder
Skriv beskeder i billeder
Skriv beskeder i billeder
Skriv beskeder i billeder

Det er derfor, jeg i første omgang bygger denne povstick: At skrive beskeder i billeder.

Du skal bruge et stativ, et kamera med lang eksponeringsfunktion og en god placering.

Opsæt kameraet, og juster eksponeringstiden til 10 sekunder for en første test.

Udløs frigivelsen, og begynd at gå gennem billedet, start tekst-displayet på pinden.

Et Voila der er vi!

Med den rigtige kombination af LED-lysstyrke, blænde og eksponeringstid er det endda muligt at tage billeder ved daggry.

De tre billeder i dette trin viser det komplette spektrum af muligheder.

I den første er lysdioderne overeksponeret og skaber en magisk glød. Men det er derfor, reflektionerne på jorden er synlige, og baggrunden er ret god.

Det andet billede er udsat for lysdioderne, men det efterlader baggrunden helt sort.

Og den tredje viser temmelig svage lysdioder kort efter solnedgang. Lysdioderne er lige så klare som på de andre billeder, men miljøet var så lyst, at jeg måtte bruge en lav blænde og en lav ISO, så lysdioderne fremstår temmelig mørke.

Gør det til Glow Contest 2018
Gør det til Glow Contest 2018
Gør det til Glow Contest 2018
Gør det til Glow Contest 2018

Anden pris i Make it Glow Contest 2018

Anbefalede: