POV Display
Introducere
Student: Tudurean George-Alexandru
Grupa: 336CC
Scurta prezentare:
ce face: un display circular ce se bazeaza pe efectul POV (Persistence of Vision)
ce scop are: scopul de a afisa diferite imagini prin intermediul unei benzi de led-uri
de unde mi-a venit o asemenea idee: ideea a pornit de la display-ul POV cilindric din cladirea campus (e in laboratorul de electronica, la etajul 3) si mi s-a parut interesant ca imaginile afisate erau dragute (cred ca era sigla facultatii daca nu ma insel) dar in acelasi timp pare ceva dispozitiv in care sa iti tai mainile
de ce e util: nu stiu sincer de ce sau daca e util, e mai mult cool decat util.
Descriere generală
😈 Pentru un efect de lunga durata/permanent a fenomenului POV te poti uita la soare pentru cateva minute
Disclaimer: nu sunt responsabil pentru daunele provocate de glumele mele
Functionalitate:
display-ul se foloseste de o banda de led-uri de 50 de cm avand 144leds/m / 2 = 72 de led-uri si de efectul POV (imaginile raman pe retina si dupa disparitia lor)
un motor DC invarte o tija de plastic pe care este lipita banda de led-uri pentru redarea imaginilor
imaginile ce se doresc a fi redate se vor trimite catre esp32 cu ajutorul modulului de wifi al acestuia
Schema bloc:
Hardware Design
Lista de piese:
Espressif ESP32-S3-DevKitC-1-N8R8
motor DC: 424-1/19-MOTOR-KIT Digilent
LED strip: Adafruit dotstar cu led-uri SK9822, 0.5m 144leds/m density
tija de plastic pe care sa fie lipite led-urile
level shifter 3V - 5V pentru LED strip
baterie 5V pentru microcontroller si LED strip
baterie 9V pentru motor
senzor Hall switch
Schema electrica:
Test initial:
Software Design
IDE folosit: VSCode + extensie pt esp32, ArduinoIDE si PlatformIO + ESP-IDF (da, mi-am pierdut mintile)
libs: Adafruit SDFormat, FatFS, PovLibrary, FastLED, WiFi (daca facea tot ce voiam eu, dar mna, am folosit doar Adafruit Dotstar pentru demo)
-
nu am ce surse si functii sa pun, doar am pus cap la cap bibliotecile folosite → de fapt am un gunoi pt demo:
#include <Adafruit_DotStar.h>
#include <Arduino.h>
// Because conditional #includes don't work w/Arduino sketches...
#include <SPI.h> // COMMENT OUT THIS LINE FOR GEMMA OR TRINKET
// #include <avr/power.h> // ENABLE THIS LINE FOR GEMMA OR TRINKET
#define NUMPIXELS 72 // Number of LEDs in strip
// Here's how to control the LEDs from any two pins:
#define TRIGGERPIN 9
#define DATAPIN 10
#define CLOCKPIN 11
Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BRG);
int head = 0, tail = -20; // Index of first 'on' and 'off' pixels
uint32_t movingColor = 0x00FFFF, color = 0xFF00FF; // purple and cyan
void setup()
{
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000L)
clock_prescale_set(clock_div_1); // Enable 16 MHz on Trinket
#endif
Serial.begin(115200); // For debugging
Serial.println("DotStar Simple");
strip.begin(); // Initialize pins for output
strip.show(); // Turn all LEDs off ASAP
for (int i = 0; i < NUMPIXELS; i++)
{ // Loop thru all pixels in strip...
strip.setPixelColor(i, color); // Set pixel's color (in RAM)
}
strip.setBrightness(255); // Max brightness
strip.show(); // Update strip to match
}
bool direction = true;
int trigger = HIGH;
int lastTrigger = HIGH;
void loop()
{
lastTrigger = digitalRead(TRIGGERPIN);
strip.setPixelColor(head, movingColor);
strip.setPixelColor(tail, color);
// move a "snake" of pixels along the strip up to the middle
if (trigger == HIGH && lastTrigger == LOW)
{
if (++head >= NUMPIXELS)
{
head = 0;
}
if (++tail >= NUMPIXELS)
{
tail = 0;
}
strip.setPixelColor(head, movingColor);
strip.setPixelColor(tail, color);
{
if (direction)
{ // going to the edge
if (tail >= 0)
{
strip.setPixelColor(tail, color);
}
strip.setPixelColor(head, movingColor);
if (++head > NUMPIXELS / 2 - 1)
{
direction = false;
--head;
}
else
{
++tail;
}
}
else
{ // going to the middle
strip.setPixelColor(head, color);
strip.setPixelColor(tail, movingColor);
if (--tail < 0)
{
direction = true;
++tail;
}
else
{
--head;
}
}
}
trigger = lastTrigger; // update trigger
strip.show(); // Update strip with new contents
}
}
Rezultate Obţinute
Nu se vede chiar bine in poza dar se observa efectul POV (da, poza e facuta in garaj):
Concluzii
Ma urasc, motiv pentru care am ales proiectul asta!
Would do it again tho (chiar am de gand sa termin tot ce imi propusesem at some point (asta daca nu dau cu proiectul de pamant de nervi))
Download
Daca aveti ceva death wish, trebuie descarcat PlatformIO, inclusa biblioteca AdaFruit_DotStar si adaugat gunoiul ala de demo. Oh si sa aveti o ragalie de ventilator overengineered ca al meu.
Jurnal
Imi pierd mintile
Imi vine sa plang dar nu pot, m-am obisnuit cu suferinta

A fost dragut la prezentare
Bibliografie/Resurse
proiecte de pe hackster (ceva lucrare la master a unora)
un chinez tare priceput la electronica de pe youtube
oameni random care au facut chestii de genul pe youtube
documentatia esp32 de la espressif, absolut oribil, daca nu o citesti ca pe o carte nu intelegi de ce la pagina 200000000 referentiaza setup-ul de pe prima pagina, sper sa devin un inginer la fel de prost la a scrie documentatie, sa sufere si altii din cauza mea
issue-uri de pe github-ul bibliotecilor (raspundeau creatorii lib-urilor si recunosteau cat de oribile sunt scrise, efectiv am gasit pull request-uri care rezolvau o singura linie, fara side-effects, efectiv nemerge-uite; cea mai trista experienta vreodata
forumuri cu oameni care am realizat dupa ce am citit thread-urile ca nu au nicio idee despre ce vorbesc. Efectiv embedded atrage cei mai big brained megamind oameni si in acelasi timp si pe cei mai delusional oameni din lumea asta
Export to PDF