Differences

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

Link to this comparison view

pm:prj2024:amocanu:123588 [2024/05/27 14:32]
ionut_radu.lazar [Descriere Sumara a Ansamblului]
pm:prj2024:amocanu:123588 [2024/05/27 18:37] (current)
ionut_radu.lazar [Concluzie]
Line 16: Line 16:
  
 {{:​pm:​prj2024:​amocanu:​principiu_pov_display.png?​200|}} {{:​pm:​prj2024:​amocanu:​principiu_pov_display.png?​200|}}
 +
  
 Micro-controller-ul ce comanda banda este, de 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). ​ Micro-controller-ul ce comanda banda este, de 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 a rezolva problema alimentarii componentelor in miscare folosesc o pereche receptor-transmitator de incarcare wireless prin inductie. 
  
-==== Descriere Sumara ====  +Pentru ​a rezolva problema alimentarii componentelor in miscare folosesc o pereche receptor-transmitator ​de incarcare wireless prin inductieBobina receptorului este montata pe spatele suportuluicentrat in jurul axului motorului, iar transmitatorul este atasat similar, pe suportul motorului.
-Pentru ​usurinta, pe elicea ce se va roti se va afla tot ansamblul uC, LED-uri, alaturi ​de o baterie ce le va alimentaElicea va fi invartita de un motoralimentat 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-urilor. Voi 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. 
  
-==== Utilizari ​====  +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. 
-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 micaTotusi, ​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, in factrun doom**: [[https://​canitrundoom.org/​]]+ 
 + 
 +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) 
 ===== 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.1716809573.txt.gz · Last modified: 2024/05/27 14:32 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