Innehållsförteckning:

LED POVstick med Bluetooth Low Energy: 10 steg (med bilder)
LED POVstick med Bluetooth Low Energy: 10 steg (med bilder)

Video: LED POVstick med Bluetooth Low Energy: 10 steg (med bilder)

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

Denna instruerbara visar dig hur du bygger en lightwriter -pinne med RGB -lysdioder som kan styras via BLE från din telefon!

Nu när den mörka årstiden börjar och du måste ta lång exponeringsbilder: Med den här pinnen kan du skriva din signatur i bilden, eller ett motiverande citat, eller en kärleksförklaring, en QR-kod, en webbadress eller många annat …

Den täcker flera utvecklingsämnen:

  • bygga hårdvaran
  • programmera Cypress BLE chipset med C
  • skapa din egen app för att styra den.

Steg 1: Hårdvara för BLE-LED-Stick

Hårdvara för BLE-LED-Stick
Hårdvara för BLE-LED-Stick
Hårdvara för BLE-LED-Stick
Hårdvara för BLE-LED-Stick
Hårdvara för BLE-LED-Stick
Hårdvara för BLE-LED-Stick
Hårdvara för BLE-LED-Stick
Hårdvara för BLE-LED-Stick

Till pinnen behöver du följande:

  • En cypress BLE-modul (CY8C4247LQI-BL583)
  • en WS2812b RGB-LED-Strip (64 LED från en 144 LED per meter remsa)
  • ett Li-Ion-batteri med en lämplig hållare (18650)
  • en tryckknapp
  • en bit brödbräda

Hårdvaran i själva pinnen är ganska enkel.

Cypress BLE-modulen är monterad på en brödbräda och lysdioderna, knappen och strömförsörjningen är precis anslutna till denna brödbräda.

Allt är monterat, limmat eller skruvat på en liten bit trälist, som själv delvis är införd i ett klart polyakrylrör. Men detta är inte ett måste. Jag ville montera allt inuti ett rör, men jag hittade inte en lämplig för BLE-modulen och batteriet som är ganska stora, jämfört med lysdioderna. För ett första skott behöver du inte akrylröret.

Steg 2: Elektronikmontering

Elektronikmontering
Elektronikmontering
Elektronikmontering
Elektronikmontering

Detta steg visar hur BLE-modulen är monterad och vilka stift som används för vilket ändamål.

Som i flera av mina instruktioner använde jag Cypress BLE Development Kit. CY8CKIT-042-BLE Snabbstartguide

Om du vill använda modulen på egen hand är allt du behöver ansluta strömkällorna och de använda stiften.

För vårt projekt använder vi bara stift 3.5 för att driva LED-Strip. Men självklart kan du ändra det med PSoC Creator.

Som du kan se på bilden av kretskortet lade jag till nålhuvuden i alla hörn av chippet men jag hoppade över VREF -stiftet.

På så sätt är modulen korrekt monterad och det är omöjligt att koppla ihop modulen.

Steg 3: Hur genererar man teckensnitt?

Hur genererar man teckensnitt?
Hur genererar man teckensnitt?

Jag tror att detta var ett av de mest intressanta problemen jag löste under det här projektet.

Naturligtvis kan man bara designa ett nytt teckensnitt och skriva det i en array, men det är verkligen mycket arbete!

Så vad gjorde jag?

Jag visste att jag behövde någon form av ASCII till hex-bitmap-konvertering. Och jag hade tur, för jag var inte den första med detta problem!:-)

Programvaran "GLCD Font Generator" gjorde precis rätt sak:

Eftersom jag ville få ut det mesta av LED-pinnen importerade jag teckensnittet i en ganska stor storlek (~ 32 pixlar). Om du bara använder stora bokstäver behöver du inte bry dig om uppstigningar, vilket kommer att öka din synliga teckenstorlek ytterligare några pixlar. Men jag valde att använda både versaler och små bokstäver. (https://en.wikipedia.org/wiki/Ascender_%28typography%29)

När du har importerat ett teckensnitt till GLCD Font Generator kan du välja att exportera det i olika format.

Jag försökte exportera det direkt till rubriker vilket var bra, men inte perfekt. Den resulterande exporten är en uppsättning shorts (16bit) med byte-hex-värden för kolumnerna för varje tecken i det första 128-ascii-tecknet. Inte riktigt vad jag ville eller behövde …

Så jag importerade matrisen till ett öppet kontor kalkylblad. Sedan tog jag bort "0x" på tre av fyra värden och sammanfogade dem till ett 32bit långt värde. Jag fixade också fel endianess för de enskilda byte.

Den resulterande matrisen är en N*M -array med 32bit -värden. M är respektive tecken och N är kolumnerna som utgör bokstaven. I detta första utkast har alla tecken samma antal kolumner, det betyder att alla bokstäver är lika breda, som i det välkända Courier -teckensnittet. Små tecken som "i" eller "t" ser ut som att de går vilse i rymden.

Därför lade jag till en ny parameter i början av varje tecken för att berätta, hur mycket kolumner detta tecken har eller hur brett detta tecken är. Detta sparar minne och får texten att se bättre ut!

Steg 4: BLE -kontrollprogramvara

BLE -kontrollprogramvara
BLE -kontrollprogramvara

Principen för BLE-programvaran är mycket enkel:

  • I början gör det bara ingenting.
  • Via BLE kan du ställa in olika animationer eller texter som ska visas.
  • När du trycker på knappen visas de enskilda kolumnerna i animationen eller texten.
  • När texten visas fortsätter den att vänta igen.

Importera bara cypressprojektet till din PSoC-Creator och ändra det om du vill.

PSoC-4 har inte så mycket RAM och blixt för att kunna hålla hela RGB-bilder av teckensnitt. Därför behövde jag ett sätt att generera LED-innehållet dynamiskt från texten. Det är ganska enkelt, inget speciellt än så länge. Från en text med många bokstäver tar algoritmen en bokstav och konverterar den till en svart-vit-bitmappsgrupp. Sedan tar det varje kolumn i denna bitbok med en bokstav och istället för vitt skriver den den aktuella RGB-färgen till LED-matrisen. På så sätt kan du generera enfärgade texter eller genom en ytterligare funktion ändra färgen efter varje kolumn, varje bokstav eller till och med efter varje pixel.

En "bokstav" kan lagras i en enda bytevariabel medan en svartvit bitmapp måste lagras i någon form av en array.

Datastrukturen är följande:

String: newtext = "Hej";

Font: uint32 characters = {FirstCharacter_ColumnCount, FirstCharacter_FirstColumn, FirstCharacter_SecondColumn,… SecondCharacter_ColumnCount, SecondCharacter_FirstColumn,…… LastCharacter_ColumnCount,… LastCharacter_LastColumn}; Färg: uint32 rgbcolor = 0xHHBBGGRR; // Ljusstyrka, blå, grön, röd vardera som 8bit -värde

För att konvertera en sträng för visning gör vi följande:

getCharacter (): H (8bit)

getColumn (int i): kolumn (32bit) (i börjar med den första kolumnen, går till den sista.) om (bit i kolumn är 1) LED i Strip är inställd på färg. LED-Strip Array är 64 lysdioder med 32bit färger vardera!

Och om den här kolumnen visas fortsätter vi med nästa.

Det är så enkelt.

Steg 5: Första testet

Första testet
Första testet
Första testet
Första testet
Första testet
Första testet

Nu när programvaran körs är vi redo för de första testerna.

Det enklaste sättet att testa den inbäddade funktionen är med en Bluetooth -lågenergitestapp. Som de nordiska eller Cypress -apparna.

Nordic: nRF Connect for Mobile

Cypress: CySmart

Starta Pov-Stick och observera hur demosträngen kommer att visas. När detta är klart är det dags att starta appen. Sök på Povstick -enheten och klicka på anslut.

När anslutningen upprättats upptäcker appen automatiskt alla definierade tjänster och egenskaper.

Leta efter den första tjänsten (bör börja med 0000ccce …). Klicka på den för att öppna den och visa den första egenskapen (börjar med 0000ccc1). Tryck sedan på skrivknappen (eller ladda upp) och skriv en 01 till denna egenskap.

När du har tryckt på skicka startar POVstick Color-Knight-rider-animationen aka Larson Scanner med växlande färger.

Grattis du skickade ditt första värde via BLE!

Steg 6: Välj animeringar

Välj animeringarna
Välj animeringarna
Välj animeringarna
Välj animeringarna
Välj animeringarna
Välj animeringarna
Välj animeringarna
Välj animeringarna

I programvaran definierade vi en enum "e_Animation" med följande värden:

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;

Detta är de värden som är giltiga för ccc1 -karakteristiken. Om du vill se CandyCane-Animation måste du skriva en 4, 5 eller 6 till denna egenskap. De skiljer sig åt i färgerna.

Två speciella animationer är RGB_Control och TextAnimation. Om du valde att aktivera dessa visar pinnen uppenbarligen ingenting först. Men det erbjuder dig ytterligare alternativ för att styra pinnen med de andra tjänsterna.

Steg 7: RGB -kontroll

RGB -kontroll
RGB -kontroll
RGB -kontroll
RGB -kontroll
RGB -kontroll
RGB -kontroll
RGB -kontroll
RGB -kontroll

RGB-kontrollen kan mycket enkelt testas med CySmart App eftersom jag använde samma UUID för denna egenskap som i Cypress Demo.

Starta CySmart -appen och anslut till Povstick. Först måste du skriva en "0x0A" till ccc1 -karakteristiken.

0x0A är hex-värdet för 10, vilket är RGB-kontrollanimationen i enum.

Sedan kan du växla till RGB-LED-kontrollpanelen i CySmart-appen. Kanske måste du starta om appen för att komma till den här skärmen. Sedan kan du styra färgen på alla lysdioder med detta RGB-diagram.

Naturligtvis kan du också skriva värdena direkt i egenskapen.

Steg 8: Text_Animation Service och Persistent Storage Service

Text_Animation Service och Persistent Storage Service
Text_Animation Service och Persistent Storage Service

Dessa tjänster är inte så lätta att testa.

Tekniskt kan du också använda den nordiska appen för detta, men du måste veta vilka värden du ska skriva till vilken egenskap.

Så om du vill testa dessa bör du titta på PSoC -projektet, vilken egenskap har vilken UUID.

En viktig faktor är "Set-Speed" -egenskapen. Med denna egenskap kan du styra hur snabba animationerna är.

Med "Set_Animation" -egenskapen för PersistentStorageService kan du styra teckensnitt och färger på textsträngen. De giltiga värdena definieras i "povanimation.h", två typsnitt "mono" och "serif" och enfärgade och regnbågsfärgade. Värdena 0 och 1 visar texten med en fast färg, som kan styras via RGB_Control -karakteristiken. Värdena 2 och 3 ändrar färgen för varje kolumn och ger strängen en fin regnbåge.

"Write_Text_Service" är lite annorlunda. Du kan skriva en ny sträng till enheten genom att skriva enskilda tecken till "Set_Character" -karakteristiken. Vid varje skrivning får du ett meddelande om strängens nuvarande längd.

För att starta en ny sträng, skriv "true" till "Clear_String".

Detta är inte den bästa implementeringen, men det fungerar för alla strängar upp till 250 tecken utan att ändra MTU -storleken.

Visning av en ny sträng med start när knappen på povstick trycks in.

Steg 9: Starta Android -appen

Detta är ett viktigt steg, men långt utanför ramen för detta instruerbara. Förlåt för det!

Kanske kan jag ladda upp min test-app till play-butiken, men den är inte färdig eller kan släppas ännu.

Steg 10: Skriv meddelanden i bilder

Skriv meddelanden i bilder
Skriv meddelanden i bilder
Skriv meddelanden i bilder
Skriv meddelanden i bilder
Skriv meddelanden i bilder
Skriv meddelanden i bilder

Tja, det är därför jag bygger denna povstick i första hand: Att skriva meddelanden i bilder.

Du behöver ett stativ, en kamera med lång exponeringsfunktion och bra läge.

Ställ in kameran och justera exponeringstiden till 10 sekunder för ett första test.

Aktivera utlösningen och börja gå genom bilden, starta textdisplayen på pinnen.

Et Voila där är vi!

Med rätt kombination av LED-ljusstyrka, bländare och exponeringstid är det till och med möjligt att ta bilder i gryningen.

De tre bilderna i detta steg visar hela spektrumet av möjligheter.

I den första är lysdioderna överexponerade och skapar en magisk glöd. Men det är därför reflektionerna på marken är synliga och bakgrunden ganska bra.

Den andra bilden är exponerad för lysdioderna, men det lämnar bakgrunden helt svart.

Och den tredje visar ganska svaga lysdioder strax efter solnedgången. Lysdioderna är lika ljusa som på de andra bilderna, men miljön var så ljus att jag var tvungen att använda en låg bländare och en låg ISO så att lysdioderna verkar ganska mörka.

Gör det Glow Contest 2018
Gör det Glow Contest 2018
Gör det Glow Contest 2018
Gör det Glow Contest 2018

Andra priset i Make it Glow Contest 2018

Rekommenderad: