This shows you the differences between two versions of the page.
pm:prj2023:apredescu:pov_display [2023/05/07 19:27] george.tudurean |
pm:prj2023:apredescu:pov_display [2023/05/30 20:57] (current) george.tudurean |
||
---|---|---|---|
Line 27: | Line 27: | ||
{{:pm:prj2023:apredescu:pov-display-pm.png?800|}} | {{:pm:prj2023:apredescu:pov-display-pm.png?800|}} | ||
+ | |||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | |||
- | <note tip> | ||
- | Aici puneţi tot ce ţine de hardware design: | ||
- | * listă de piese | ||
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | ||
- | * diagrame de semnal | ||
- | * rezultatele simulării{{:pm:prj2023:apredescu:pov-display-pm.png?200|}} | ||
- | </note> | ||
Lista de piese: | Lista de piese: | ||
* Espressif ESP32-S3-DevKitC-1-N8R8 | * Espressif ESP32-S3-DevKitC-1-N8R8 | ||
- | * motor DC cu senzor efect Hall: 424-1/19-MOTOR-KIT Digilent | + | * motor DC: 424-1/19-MOTOR-KIT Digilent |
* LED strip: Adafruit dotstar cu led-uri SK9822, 0.5m 144leds/m density | * LED strip: Adafruit dotstar cu led-uri SK9822, 0.5m 144leds/m density | ||
* tija de plastic pe care sa fie lipite led-urile | * tija de plastic pe care sa fie lipite led-urile | ||
- | * sursa/baterie pentru motor, microcontroller si LED strip | ||
* level shifter 3V - 5V pentru LED strip | * level shifter 3V - 5V pentru LED strip | ||
+ | * baterie 5V pentru microcontroller si LED strip | ||
+ | * baterie 9V pentru motor | ||
+ | * senzor Hall switch | ||
+ | Schema electrica: | ||
+ | |||
+ | {{:pm:prj2023:apredescu:pm_schematic.png?800|}} | ||
+ | |||
+ | Test initial: | ||
+ | |||
+ | {{:pm:prj2023:apredescu:test-led_strip.jpeg?800|}} | ||
===== Software Design ===== | ===== 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) | ||
+ | * algoritmi si structuri: Considerand ca biblioteca Adafruit Dotstar interfateaza banda de led-uri si ca biblioteca pov interfateaza display-ul pov in sine, am folosit de metode din aceste doua biblioteci pentru a realiza proiectul (biblioteca pov e un gunoi ordinar, la fel ca toate celelalte, am facut code review la toate bibliotecile, crapa tot, absolut oribil :-(:-(:-( | ||
+ | * nu am ce surse si functii sa pun, doar am pus cap la cap bibliotecile folosite -> de fapt am un gunoi pt demo: | ||
- | <note tip> | + | <code> |
- | Descrierea codului aplicaţiei (firmware): | + | #include <Adafruit_DotStar.h> |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | #include <Arduino.h> |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | // Because conditional #includes don't work w/Arduino sketches... |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | #include <SPI.h> // COMMENT OUT THIS LINE FOR GEMMA OR TRINKET |
- | * (etapa 3) surse şi funcţii implementate | + | // #include <avr/power.h> // ENABLE THIS LINE FOR GEMMA OR TRINKET |
- | </note> | + | |
+ | #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 | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | Nu se vede chiar bine in poza dar se observa efectul POV (da, poza e facuta in garaj): |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | {{:pm:prj2023:apredescu:gunoi_pov_tudu.jpeg?300|}} |
===== Concluzii ===== | ===== 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 ===== | ===== 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 ===== | ||
+ | <note important> | ||
+ | Imi pierd mintile :-( | ||
+ | </note> | ||
<note warning> | <note warning> | ||
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | Imi vine sa plang dar nu pot, m-am obisnuit cu suferinta :-(:-( |
+ | </note> | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | <note warning> |
+ | Am halucinatii dupa 2 zile nedormite :-(:-(:-( | ||
</note> | </note> | ||
- | |||
- | ===== Jurnal ===== | ||
<note tip> | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | A fost dragut la prezentare :-) |
</note> | </note> | ||
- | |||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | * proiecte de pe hackster (ceva lucrare la master a unora) |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * un chinez tare priceput la electronica de pe youtube |
- | </note> | + | * 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 | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||