Differences

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

Link to this comparison view

pm:prj2024:amocanu:123588 [2024/05/05 23:14]
ionut_radu.lazar [Descriere Sumara]
pm:prj2024:amocanu:123588 [2024/05/27 18:37] (current)
ionut_radu.lazar [Concluzie]
Line 6: Line 6:
 ===== Introducere ===== ===== Introducere =====
  
-==== Principiu ​==== +==== Principiul ​==== 
-Display-ul de tip Persistance of Vision (POV) se bazeaza pe iluzia optica care ne permite sa percepem ​un obiect chiar si dupa ce razele ​de lumina ​ce origineaza din obiect nu mai intra in ochi, pe retina.+Display-ul de tip Persistance of Vision (POV) se bazeaza pe iluzia optica care ne permite sa percepem ​lumina o perioada scurta de timp dupa disparitia ei. Astfel, daca un LED este stins/​aprins destul ​de rapid ochiul percepe ​lumina ​continua
  
-Cu acest lucru in minte, display-ul ​va fi alcatuit ​din mai multe LED-uri ​dispuse unul dupa celalalt, in linie, care apoi sunt rotite in jurul unei axe, trasand ​un cerc. Rotatia lor rapida, alaturi de aprinderea led-urilor potrivite, pot afisa orice imagine data (in limitele rezolutiei). [See the masterful diagram below]+==== Descriere Sumara a Ansamblului ==== 
 + 
 +Cu acest lucru in minte, display-ul ​este alcatuit ​dintr-o banda cu 12 LED-uri ​dispusa pe raza unui suport circular, care va fi montat pe un motor 
 + 
 +[See the masterful diagram below]
  
 {{:​pm:​prj2024:​amocanu:​principiu_pov_display.png?​200|}} {{:​pm:​prj2024:​amocanu:​principiu_pov_display.png?​200|}}
  
-==== Descriere Sumara ====  
-Pentru usurinta, pe elicea ce se va roti se va afla tot ansamblul uC, LED-uri, alaturi de o baterie ce le va alimenta. Elicea va fi invartita de un motor, alimentat la randul lui de o alta sursa de curent. 
  
-O problema ​ce poate aparea ​este viteza ​de rotatie ​neconstanta ​a motorului, care trebuie sa fie cunoscuta ​de uC pentru a ajusta imaginea ​LED-urilorVoi evita aceasta problema prin montarea unui magnet pe stativul proiectului, ​care va actiona ​un senzor magnetic amplasat pe elice de fiecare data cand o se termina o rotatie completa.+Micro-controller-ul ​ce comanda banda estede asemenea, plasat pe suportul ce va fi rotit, alaturi de un hall sensor care informeaza micro-controller-ul cand a fost completata o rotatie ​(cu un magnet fixat in apropiere, inafara ansamblului rotit).  
 + 
 + 
 +Pentru ​rezolva problema alimentarii componentelor in miscare folosesc o pereche receptor-transmitator de incarcare wireless prin inductie. Bobina receptorului este montata pe spatele suportului, centrat in jurul axului ​motorului, ​iar transmitatorul este atasat similar, pe suportul motorului. 
 + 
 + 
 +Atat motorul cat si transmitatorul sunt alimentate cu baterii AA 1.5V, motorul folosind 8 iar transmitatorul 4. Pe aceste doua fire am pus cate un intrerupator. 
 + 
 + 
 +Motorul este furat dintr-un aspirator de masina, si carcasa in care sta motorul si bateriile este facuta dintr-o teava de pvc si carcasa motorului. 
 +  
 +===== Componentele Necesare ===== 
 +Pentru proiectul meu am folosit urmatoarele:​ 
 +  * Arduino Nano 
 +  * banda LED adresabila WS2812b 
 +  * senzor Hall KY-003 
 +  * modul incarcare wireless transmitator ​ T3168 si receptor XKT-510 
 +  * motor 12V de tip necunoscut 
 +  * baterii AA 1.5V 
 +  * fire 
 +  * magnet 
 + 
 +Componente care nu au legatura cu cablajul: 
 +  * O rigla (din care este facut suportul ​pe care se invart LED-urile) 
 +  * teava de PVC (in care stau bateriile si care este stativ, <<nu recomand utilizarea lui ca stativ>>​ ) 
 +  * un aspirator ​de masina (avea deja suportul de motor & intrerupator)
  
-==== Utilizari ====  
-Un astfel de display nu exceleaza decat prin a fi **nice**, intrebuintarile lui limitandu-se la aplicatii simple, cum ar fi un ceas, display glisant de cuvinte sau animatii de rezolutie foarte mica. Totusi, este de conceput ca prin alaturarea mai multor astfel de display-uri se poate afisa gameplay, provenit de la alt sistem de calcul, al jocului Doom. So it may run doom: [[https://​canitrundoom.org/​]] 
 ===== Hardware Design ===== ===== Hardware Design =====
  
-==== Componente Necesare ​==== +La un capat al carcasei se afla senzorul Hall care detecteaza un magnet plasat pe carcasa. Acesta este conectat la pinul D2 al placutei arduino. Cand detecteaza magnetul este trimisa o intrerupere;​ in acest mod se calculeaza viteza de rotatie (necesara pentru timing-ul led-urilor) & se afla momentul in care se termina o rotatie.  
-Proiectul este impartit ​in 2 mari parti+ 
-  - **__Elicea__** ce contine: ​   +{{:​pm:​prj2024:​amocanu:​spate_suport_rotit.jpg?​200|}} 
-                   * LED-urile; +{{ :​pm:​prj2024:​amocanu:​fata_suport_rotat.jpg?​200|}} 
-                   * uC arduino Uno + 
-                   ​* un senzor magnetic ​ +Restul cablajului de pe suportul care se roteste este straight-forward:​ Se conecteaza GND-ul si VCC-ul receptorului la placuta Arduino, la linia de LED-uri si la senzor. Poate chiar mai simplu este cablajul din carcasa, in care doar am conectat firele unor carcase de baterii la transmitator respectiv motor. In cazul motorului am conectat doua carcase de baterii (voiam 8 baterii, now I am afraid for my life). 
-                   ​* o baterie ​ + 
-  ​-** __Cadrul__** ce contone: +{{ :​pm:​prj2024:​amocanu:​poza_chestie.jpeg?​200 |}} 
-                   ​servo-motorul ​   + 
-                   ​un magnet +===== Software Design ===== 
-                   * sursa de alimentare (pentru motor)+ 
 +Senzorul Hall, in momentul in care ajunge in dreptul magnetului, produce o intrerupere software care are scopul de a calcula perioada in care se produce o rotatie completa, respectiv momentul in care se produce 
 + 
 +<​code>​ 
 +attachInterrupt(digitalPinToInterrupt(2),​ hall_func, FALLING); 
 +</​code>​ 
 + 
 +Primul parametru este pinul folosit, al doilea functia apelata pentru tratarea intreruperii iar al treilea parametru momentul in care se produce intreruperea;​ cand valoarea citita de senzor trece din high in low, adica in primul moment in care este detectat magnetul (senzorul are 1 la iesire cand nu se detecteaza nimic) 
 + 
 +<​code>​ 
 +int step = 0; 
 +unsigned long time;  
 +unsigned long freq;  
 + 
 +void hall_func() { 
 +  ​step = 0; 
 + 
 +  unsigned long now = millis(); 
 +  freq = now time; 
 +  time = now; 
 +
 +</​code>​ 
 + 
 +Variabila step contorizeaza numarul de aprinderi ale benzii de LED-uri in rotatia respectiva. Folosindu-ma de functia millis() alfu perioada in care se face o rotatie completa (pe care o folosesc la calculul delay-ului dintre doua aprinderi de LED-uri) 
 + 
 +Mai jos o poza (pt ca nu pot video) cu rezultatul simplut al codului: 
 +{{ :​pm:​prj2024:​amocanu:​example.png?​200 |}} 
 +===== Modificari Posibile ===== 
 + 
 +Pentru o demonstratie mai serioasa si complexa decat cea a mea ar putea fi de folost adaugarea unui debouncer pentru output-ul senzorului (or at least pozitionarea mai apropiata a magnetului),​ evitarea functiei delay(), pentru posibilitatea unui delay mai scurt si folosirea timerilor pentru calculul rpm. 
 + 
 + 
 +===== Concluzie ===== 
 + 
 +Chiar daca nu este nici cel mai bun proiect, nici cel mai bun proiect folosind persistance of vision este cel putin un prototip reusit, a carui implementare poate fi imbunatatita substantial chiar si in forma lui curenta. Este extrem de rewarding munca la un proiect hands-on, let alone unul care are la baza timing precis, ca in acest caz.  
 + 
 +Mai jos lista de probleme ca sa terminam cum trebuie: 
 +  ​am topit un suport de baterii pentru ca le-am legat la receptor nu la transmitator 
 +  am rupt rigla (suportul care se roteste) cat timp se invartea (tot raul spre bine, era mult prea grea inainte) 
 +  * not really a problem, cea mai buna modalitate de a taia plastic este cu dalta incinsa 
 +  * am facut cablajul de vreo 3 ori, nu inteleg unde era scurt, se aprindeau ledurile fara firul de date conectat 
 +  second time s-a rupt rigla, l-am lipit cu hyper-glue, ar fi fost fatal sa nu, era iteratia finala. 
 +  am vrut putere, am primit putere: 8 baterii par cam multe, mom come pick me up I'm scared.
  
pm/prj2024/amocanu/123588.1714940075.txt.gz · Last modified: 2024/05/05 23:14 by ionut_radu.lazar
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