This shows you the differences between two versions of the page.
pm:prj2021:amocanu:robohand [2021/04/25 22:26] gabriel.olaru created |
pm:prj2021:amocanu:robohand [2021/06/03 07:35] (current) gabriel.olaru |
||
---|---|---|---|
Line 8: | Line 8: | ||
---- | ---- | ||
=== Descriere generala === | === Descriere generala === | ||
- | Senzorii de flexare vor fi pusi pe degetele unei manusi purtate de un utilizator. Vor trimite input care va fi procesat de | ||
- | Arduino. Placa arduno va actiona servo-motoarele care vor actiona, la randul lor, degetele bratului robotice. | ||
- | {{:pm:prj2021:amocanu:iuli_schema_bloc_pm.png?200|}} | + | {{ :pm:prj2021:amocanu:overview_proiect_iuli.jpeg?200 |}} |
+ | |||
+ | Utilizatorul va avea in palma o telecomanda cu 4 butoane, una pentru fiecare deget cu exceptiua degetului opozant. Prin flexarea degetelor acesta va apasa butonul si va trimite o comanda mainii robotice care va flexa la randul ei degetul indicat de utilizator. | ||
+ | Cand utilizatorul va ridica degetul de pe buton (si nu va mai fi flexat) si degetul mainii robotice se va relaxa. | ||
+ | |||
+ | ** Schema Bloc ** | ||
+ | |||
+ | {{ :pm:prj2021:amocanu:schema_bloc_proiect_iuli.png?300 |}} | ||
---- | ---- | ||
=== Hardware Design === | === Hardware Design === | ||
Lista piese: | Lista piese: | ||
- | *Arduino UNO | + | * 2x Arduino UNO |
- | *Lenzori de flexare a degetului | + | * 2x Cablu Alimentare |
- | *Servomotoare | + | * 4x Butoane Push-Down |
- | *Misc: Fire, Breadbord, rezistente | + | * 4X Servomotoare |
+ | * Misc: Fire, Breadbord, Rezistente | ||
+ | * Mecanic: Sfoara, Manusa, Hot-Glue, Polistiren, Baghete Plastic | ||
+ | |||
+ | In implementarea proiectului s-au folosit 2 placi arduino uno, ce comunica prin protocolul I2C astfel: | ||
+ | * Prima placa (manusa) serveste pe post de master. Aceasta primeste inputul utilizatorului si il transmite mai departe. | ||
+ | * A doua placa (bratul) serveste pe post de worker. Aceasta primeste comanda de la manusa si actioneaza servomotoarele ce articuleaza degetele bratului mecanic. | ||
+ | |||
+ | Pentru comunicarea dintre cele doua placi Arduino a fost ales protocolul I2C deoarece permite adaugarea foarte usoara a mai multor brate mecanice ce pot fi controlate de aceeasi manusa, in cazul unei viitoare expansiuni. | ||
+ | |||
+ | Cele 4 butoane servesc la captarea inputului utilizatorului. Atunci cand acesta flexeaza degetul va apasa un buton. In revers, cand degetul nu va mai fi flexat, butonul nu va mai fi apasat. | ||
+ | |||
+ | Cele 4 servomotoare servesc la controlul fexiei degetelor mainii robotice. | ||
+ | |||
+ | ** Schema Electrica ** | ||
+ | {{ :pm:prj2021:amocanu:schema_proiect_iuli.png?300 |}} | ||
---- | ---- | ||
=== Software Design === | === Software Design === | ||
+ | Software-ul este descris din doua perspective: master respectiv worker. | ||
+ | |||
+ | Master (Manusa): | ||
+ | * Initializeaza starea butoanelor si asociaza acestora pinii digitali de pe placa arduino, setati ca input. | ||
+ | * Monitorizeaza continuu starea butoanelor. | ||
+ | * In cazul schimbarii starii unui buton (este luat in calcul si prevenit un posibil debounce), initializeaza comunicarea I2C si transmite codificat index-ul butonului si noua sa stare. Va incheia apoi comunicarea pentru a nu tine canalul ocupat. | ||
+ | * Codificarea: *codificare = ab = (10 * a + b) unde a = id_buton + 1; b = stare on(1)/off(0)* . | ||
+ | * Starea precedenta va fi stocata in memorie iar starea actuala va fi updatata. | ||
+ | |||
+ | Worker (Mana Robotica): | ||
+ | * Asociaza servomotoarelor pinii digitali capabili de PWM de pe placa. | ||
+ | * Seteaza servomotoarele la pozitia initiala. | ||
+ | * Initializeaza intreruperea aferenta primirii unei comenzi de la manusa. | ||
+ | * In cazul primirii unei comenzi: | ||
+ | * Decodeaza comanda. | ||
+ | * Flexeaza / Relaxeaza getetul corespunzator comenzii, dupa starea indicata de comanda, prin actionarea servomotoarelor. | ||
+ | |||
+ | Implementarea este una eficienta, cu putine delay-uri, fiind bazata pe intreruperi si pe trimiterea de mesaje strict necesare intre master si worker, fara congestia canalului de comunicare. | ||
+ | |||
---- | ---- | ||
=== Rezultate obtinute === | === Rezultate obtinute === | ||
+ | |||
+ | Toate functionalitatile prezentate au fost implementate, rezultand intr-un proiect interesant, usor de extins pe viitor. Functionalitatile sunt demonstrate in videoclipul din link-ul de mai jos. | ||
+ | |||
+ | [[https://www.youtube.com/watch?v=H2pjVKa9vBY]] | ||
+ | |||
---- | ---- | ||
=== Concluzii === | === Concluzii === | ||
+ | |||
+ | Implementarea proiectului a fost interesanta, imbinand atat programarea software si design-ul de circuite electrice cat si partea mecanica necesara constructiei mainii. Proiectul m-a ajutat de asemenea sa aprofunndez cunostintele dobandite pe parcursul cursului de PM, folosindu-se de concepte din majoritatea laboratoarelor: | ||
+ | * Intreruperi venite din exterior. | ||
+ | * PWM pentru controlul servomotoarelor | ||
+ | * Comunicarea dintre doua placi arduino, prin I2C (motivul alegerii I2C in defavoarea SPI este prezentat mai sus). | ||
+ | * Citirea starii butoanelor si tratarea schimbarii state-ului + tratarea debounceing. | ||
+ | Rezultatul este un proiect interesant, la care imi va face placere sa revin pentru a adauga functionalitati noi si pentru a-l extinde. | ||
+ | |||
---- | ---- | ||
=== Download === | === Download === | ||
+ | |||
+ | * Arhiva ce contine proiectul: {{:pm:prj2021:amocanu:olaru_gabriel_robohand.zip|}} | ||
+ | * Document pdf: [[https://ocw.cs.pub.ro/courses/pm/prj2021/amocanu/robohand?do=export_pdf]] | ||
+ | |||
+ | |||
---- | ---- | ||
=== Jurnal === | === Jurnal === | ||
+ | |||
+ | * 26.04 - Crearea paginii | ||
+ | * 08.05 - Realizarea schemei | ||
+ | * 10.05 - Comandarea componentelor | ||
+ | * 27.05 - Inceputul partii software in simulator. | ||
+ | * 01.06 - Circuitul | ||
+ | * 02.06 - Partea mecanica (bratul robotic) | ||
+ | * 03.06 - Finalizarea partii software, testarea si finalizarea proiectului. | ||
+ | |||
---- | ---- | ||
=== Bibliografie/ Resurse === | === Bibliografie/ Resurse === | ||
+ | |||
+ | * Laboratoarele OCW: [[https://ocw.cs.pub.ro/courses/pm]] | ||
+ | * State Change Detection: [[https://www.arduino.cc/en/Tutorial/BuiltInExamples/StateChangeDetection]] | ||
+ | * Realizarea schemei electrice: [[https://www.circuit-diagram.org/editor/]] | ||
+ | * Retailer: [[https://www.optimusdigital.ro/ro/]] | ||
+ | |||
---- | ---- |