Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:alazar:infinity-mirror [2021/04/25 12:13]
andrei.pantelimon
pm:prj2021:alazar:infinity-mirror [2021/05/26 20:29] (current)
andrei.pantelimon
Line 1: Line 1:
 ==== Infinity Mirror ==== ==== Infinity Mirror ====
 +Student: Pantelimon Andrei\\
 +Grupa: 335CA
 === Introducere=== === Introducere===
 Proiectul consta in realizarea efectului de infinity mirror cu diferite efecte de lumina,\\ Proiectul consta in realizarea efectului de infinity mirror cu diferite efecte de lumina,\\
Line 21: Line 23:
   * PowerBank   * PowerBank
   * 1 Condensator   * 1 Condensator
 +
 +Pentru realizarea partii hardware am parcurs urmatoarele etape:
 +  - Am alimentat o parte din breadboard de la bateria externa si am legat banda LED
 +  - Am legat cele trei potentiometre pentru a realiza modul de reglaj manual al culorii
 +  - Am adaugat si butonul pentru a schimba intre modurile de operare alese
 +  - Am lipit banda LED in interiorul cercului de plastic
 +  - In spatele acestuia am fixat o oglinda taiata rotund
 +  - In partea din fata am lipit cu banda dublu adeziva un plexiglas peste care am aplicat\\ o folie de tip one-way mirror
 +  - La final, am asezat tot proiectul pe un gratar de metal ca suport
  
 {{:​pm:​prj2021:​alazar:​rsz_schema_pm.jpg?​750|}} {{:​pm:​prj2021:​alazar:​rsz_schema_pm.jpg?​750|}}
 +{{:​pm:​prj2021:​alazar:​proiect_pm.jpg?​750|}}
 === Software Design=== === Software Design===
 +Am realizat partea de software folosind Arduino IDE. Dupa ce am testat toate piesele am realizat\\ partea de schimbare a modului prin apasarea unui buton si apoi m-am decis la cele patru moduri de operare, si anume:
 +  - Modul Manual, in care banda lumineaza static pe o singura culoare ce se controleaza folosind\\ cele trei potentiometre ce reprezinta canalele de red, green si blue
 +  - Modul Strobe, ce realizeaza efectul de stroboscop prin stingerea si aprinderea foarte rapida\\ a intregii benzi cu culoarea alba
 +  - Modul Chase, in care ledurile se aprind pe rand si realizeaza 'un tur' al benzii.\\ Cand ajung de unde au plecat, alt sir porneste si realizeaza acelasi tur, sub alta culoare
 +  - Modul Twinkle, in care ledurile se aprind random, unul cate unul, si cu o culoare random generata
 +
 +<spoiler Cod Arduino>
 +<​code>​
 +#include <​Adafruit_NeoPixel.h>​
 +#define PIN 6
 +#define N_LEDS 36
 +
 +Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS,​ PIN, NEO_GRB + NEO_KHZ800);​
 +uint32_t greenishwhite = strip.Color(0,​ 64, 0, 64);
 +int countColor = 0;
 +int previous = 0;
 +
 +const int POT1 = A0; 
 +const int POT2 = A1; 
 +const int POT3 = A2;
 +
 +const int BUTTON = 7;
 +
 +int red = 0, green = 0, blue = 0;
 +int outputRed = 0, outputGreen = 0, outputBlue = 0;
 +
 +int count = 0;
 +
 +void setup() {
 +  strip.begin();​
 +  pinMode(BUTTON,​ INPUT_PULLUP);​
 +}
 +void loop() {
 +  int val = digitalRead(BUTTON);​
 +  ​
 +  if (val == 0) {
 +    delay(1000);​
 +    count++;
 +  }
 +
 +  if (count > 3) {
 +    count = 0;
 +  }
 +
 +  red = analogRead(POT1);​
 +  green = analogRead(POT2);​
 +  blue = analogRead(POT3);​
 +
 +  outputRed = map(red, 0, 1023, 0, 255);
 +  outputGreen = map(green, 0, 1023, 0, 255);
 +  outputBlue = map(blue, 0, 1023, 0, 255);
 +
 +  if (count == 0) {
 +    uint32_t currentColor = strip.Color(outputRed,​ outputGreen,​ outputBlue);​
 +    strip.fill(currentColor,​ 0, 36);
 +    strip.show();​
 +  }
 +
 +  if (count == 1) {
 +    Strobe(0xff,​ 0xff, 0xff, 1, 45, 0);
 +  }
 +
 +  if (count == 2) {
 +    chase(strip.Color(255,​ 0, 0)); // Red
 +    chase(strip.Color(0,​ 255, 0)); // Green
 +    chase(strip.Color(0,​ 0, 255)); // Blue
 +  }
 +
 +  if (count == 3) {
 +    TwinkleRandom(20,​ 100, false);
 +  }
 +}
 +static void chase(uint32_t c) {
 +  for(uint16_t i=0; i<​strip.numPixels()+4;​ i++) {
 +    strip.setPixelColor(i , c);
 +    strip.setPixelColor(i-4,​ 0);
 +    strip.show();​
 +    delay(30);
 +  }
 +}
 +
 +void Strobe(byte red, byte green, byte blue, int StrobeCount,​ int FlashDelay, int EndPause){
 +  for(int j = 0; j < StrobeCount;​ j++) {
 +    setAll(red,​green,​blue);​
 +    showStrip();​
 +    delay(FlashDelay);​
 +    setAll(0,​0,​0);​
 +    showStrip();​
 +    delay(FlashDelay);​
 +  }
 + ​delay(EndPause);​
 +}
 +
 +void setPixel(int Pixel, byte red, byte green, byte blue) {
 +   ​strip.setPixelColor(Pixel,​ strip.Color(red,​ green, blue));
 +}
 +
 +void setAll(byte red, byte green, byte blue) {
 +  for(int i = 0; i < N_LEDS; i++ ) {
 +    setPixel(i, red, green, blue); ​
 +  }
 +  showStrip();​
 +}
 +
 +void showStrip() {
 +   ​strip.show();​
 +}
 +
 +void TwinkleRandom(int Count, int SpeedDelay, boolean OnlyOne) {
 +  setAll(0,​0,​0);​
 + 
 +  for (int i=0; i<Count; i++) {
 +     ​setPixel(random(N_LEDS),​random(0,​255),​random(0,​255),​random(0,​255));​
 +     ​showStrip();​
 +     ​delay(SpeedDelay);​
 +     ​if(OnlyOne) {
 +       ​setAll(0,​0,​0);​
 +     }
 +   }
 + 
 +  delay(SpeedDelay);​
 +}
 +</​code>​
 +</​spoiler>​
 === Rezultate obtinute=== === Rezultate obtinute===
 +Proiectul este 100% functional. Initial acesta se porneste pe modul manual, iar la apasarea butonului\\ cicleaza prin diferitele moduri.\\
 +In Demo trec prin toate modurile, in modul manual modificand culorile benzii din potentiometre.\\
 +{{:​pm:​prj2021:​alazar:​final1andreipantelimon.jpg?​300|}}
 +{{:​pm:​prj2021:​alazar:​final2andreipantelimon.jpg?​300|}}
 +\\
 +[[https://​www.youtube.com/​watch?​v=8ZahN4mKZNc| Demo proiect]]
 === Concluzii=== === Concluzii===
-=== Download===+Fiind primul proiect de acest gen, mi-a luat mai mult decat ma asteptam, mai ales la partea\\ hardware pentru a obtine montajul dorit. In final mi-a iesit si sunt bucuros ca efectele sunt exact cum mi-am dorit. Pe viitor este posibil\\ sa mai alterez modurile de functionare pentru a obtine si alte efecte. :-D
 === Jurnal=== === Jurnal===
 +25.04.2021 : Alegere tema proiect si completare wiki cu schema initiala si componentele necesare\\
 +27.04.2021 : Sosirea pieselor si inceperea realizarii proiectului\\
 +29.04.2021 : Finalizarea proiectului\\
 +26.05.2021 : Realizare Demo si completare Wiki\\
 === Bibliografie/​Resurse=== === Bibliografie/​Resurse===
 +[[https://​www.instructables.com/​Arduino-controlled-RGB-LED-Infinity-Mirror/​|Ideea generala]]\\
 +[[https://​www.tweaking4all.com/​hardware/​arduino/​adruino-led-strip-effects/​|Efecte NeoPixel]]\\
 +[[https://​learn.adafruit.com/​adafruit-neopixel-uberguide/​arduino-library-use|Wiki Biblioteca NeoPixels]]\\
 +{{:​pm:​prj2021:​alazar:​infinity_mirror.pdf|}}
pm/prj2021/alazar/infinity-mirror.1619342006.txt.gz · Last modified: 2021/04/25 12:13 by andrei.pantelimon
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0