This shows you the differences between two versions of the page.
pm:prj2024:amocanu:123588 [2024/05/27 17:58] ionut_radu.lazar |
pm:prj2024:amocanu:123588 [2024/05/27 18:37] (current) ionut_radu.lazar [Concluzie] |
||
---|---|---|---|
Line 48: | Line 48: | ||
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. | 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. | ||
+ | |||
+ | {{:pm:prj2024:amocanu:spate_suport_rotit.jpg?200|}} | ||
+ | {{ :pm:prj2024:amocanu:fata_suport_rotat.jpg?200|}} | ||
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). | 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). | ||
+ | {{ :pm:prj2024:amocanu:poza_chestie.jpeg?200 |}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | 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 o 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. | ||