This shows you the differences between two versions of the page.
pm:prj2024:avaduva:ctudorache3101 [2024/05/19 00:10] ctudorache3101 [Hardware Design] |
pm:prj2024:avaduva:ctudorache3101 [2024/05/27 08:58] (current) ctudorache3101 [Rezultate Obţinute] |
||
---|---|---|---|
Line 24: | Line 24: | ||
Lista de piese:\\ | Lista de piese:\\ | ||
- | Motor Pas cu Pas 28BYJ-48 - 2 bucati\\ | + | <del>Motor Pas cu Pas 28BYJ-48 - 2 bucati</del>\\ |
- | Driver motor ULN2003 - 2 bucati\\ | + | <del>Driver motor ULN2003 - 2 bucati</del>\\ |
Senzor de Distanta Infrarosu 20-150 cm GP2Y0A02YK0F - 1 bucata\\ | Senzor de Distanta Infrarosu 20-150 cm GP2Y0A02YK0F - 1 bucata\\ | ||
Modul Slot Card Compatibil cu MicroSD - 1 bucata\\ | Modul Slot Card Compatibil cu MicroSD - 1 bucata\\ | ||
Line 37: | Line 37: | ||
{{ :pm:prj2024:avaduva:schema_pm_schema.png?800 |}}\\ | {{ :pm:prj2024:avaduva:schema_pm_schema.png?800 |}}\\ | ||
{{ :pm:prj2024:avaduva:schema_pm_bb.png?800 |}}\\ | {{ :pm:prj2024:avaduva:schema_pm_bb.png?800 |}}\\ | ||
+ | |||
+ | Pini utilizati:\\ | ||
+ | 1. Senzorul de distanta cu infrarosu utilizeaza pinul A0 deoarece el este un senzor analog.\\ | ||
+ | 2. Modulul de card SD utilizeaza pinii 10, 11, 12, 13 deoarece acestia sunt pinii desemnati de Arduino pentru protocolul SPI. Pinul 12 este pentru MISO, pinul 11 este pentru MOSI, pinul 13 este pentru SCK, iar pinul 10 este pentru CS. Cel din urma putea fi oricare altul, l-am ales pentru ca este aproape de ceilalti pini.\\ | ||
+ | <del>3. Cele doua drivere de motor utilizeaza pinii 2-5, respectiv 6-9.\\ | ||
+ | 4. Cele doua butoane utilizeaza pinii 0 si 1. Chiar daca acestia sunt pini si pentru RX/TX, acest lucru nu este o problema, deoarece nu utilizez interfata seriala in timp ce proiectul functioneaza, deci nu poate interactiona cu cele doua butoane.</del>\\ | ||
+ | |||
+ | |||
<html> | <html> | ||
<iframe width="560" height="315" src="https://www.youtube.com/embed/xbPt-Ky1KfM?si=5XfthstCc_yvhc7i" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> | <iframe width="560" height="315" src="https://www.youtube.com/embed/xbPt-Ky1KfM?si=5XfthstCc_yvhc7i" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> | ||
</html> | </html> | ||
- | <note tip> | ||
- | Aici puneţi tot ce ţine de hardware design: | ||
- | * listă de piese | ||
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | ||
- | * diagrame de semnal | ||
- | * rezultatele simulării | ||
- | </note> | ||
- | ===== Software Design ===== | ||
- | Design-ul software va fi realizat in Arduino IDE. | + | Dupa o analiza, am realizat ca motoarele pe care le utilizam erau prea slabe, avand un cuplu aproximativ de 40 N x mm. Astfel, am ales sa utilizez in locul lor motoare Nema 17, modelul 17HS4401, impreuna cu driverele A4988, care au un cuplu de 40 N x cm.\\ |
+ | \\ | ||
+ | Noua lista de piese:\\ | ||
+ | Motor Pas cu Pas 17HS4401 - 2 bucati\\ | ||
+ | Driver motor A4988 - 2 bucati\\ | ||
+ | Senzor de Distanta Infrarosu 20-150 cm GP2Y0A02YK0F - 1 bucata\\ | ||
+ | Modul Slot Card Compatibil cu MicroSD - 1 bucata\\ | ||
+ | Buton - 2 bucati\\ | ||
+ | Rezistenta 10kΩ - 2 bucati\\ | ||
+ | Condensator 100 uF - 1 bucata\\ | ||
+ | Fire\\ | ||
+ | Placa breadboard\\ | ||
+ | Arduino Uno\\ | ||
+ | \\ | ||
+ | Pini noi utilizati:\\ | ||
+ | 3. Driverele pentru motoare utilizeaza pinii 9-8 si 7-6.\\ | ||
+ | 4. Pinii pentru cele doua butoane vor fi mutati pe pinii 2 si 3.\\ | ||
+ | \\ | ||
+ | {{ :pm:prj2024:avaduva:schema_pm_nema_schema.png?800 |}}\\ | ||
+ | {{ :pm:prj2024:avaduva:schema_pm_nema_bb.png?800 |}}\\ | ||
- | <note tip> | + | ===== Software Design ===== |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | https://github.com/FraughtCoin/PM-3D-Scanner\\ |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | Aici se gaseste codul pentru proiect.\\ |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | \\ |
- | * (etapa 3) surse şi funcţii implementate | + | Am utilizat bibliotecile SPI.h, SD.h si GP2Y0A02YK0F.h. SPI.h si SD.h au fost utilizate pentru ca utilizez un adaptor de card SD care utilizeaza SPI. GP2Y0A02YK0F.h este o biblioteca pentru a facilita utilizarea senzorului de infrarosu cu acelasi nume.\\ |
- | </note> | + | \\ |
+ | Elementele de noutate reprezinta montajul fizic\\ | ||
+ | {{ :pm:prj2024:avaduva:montaj.jpg?500 |}}\\ | ||
+ | \\ | ||
+ | Desi nu am putut testa codul final deoarece proiectul nu este in stare functionala din cauza ansamblului care ar fi trebuit sa realizeze miscarea pe verticala. Totusi, am testat toate celelalte componente individual, acestea functionand conform planului (si motorul care are treaba cu ansamblul de miscare vertical functioneaza corect, doar ca nu funcitoneaza ansamblul).\\ | ||
+ | \\ | ||
+ | Explicatia codului:\\ | ||
+ | -void setup(): in setup() initiez toate componentele si pinii pe care ii utilizeaz, initiez cardul SD si caut un nume de fisier in care sa pot salva mai tarziu datele si resetez anumite valori la valoarea initiala, deoarece functia setup() va mai fi apelata si din alte parti din cod, pentru a putea reseta lucruri.\\ | ||
+ | -void loop(): in loop() avem codul care ruleaza; avand doua butoane, mi-am creat doua variabile globale, scanning si reseting, cu ajutorul carora setez anumite conditii in functie de care stiu ce sa fac cand apas un anumit buton (daca programul nu scaneaza si nu este in bucla de resetare, prin apasarea butonului de start pot incepe scanarea, butonul de start nemaifacand nimic daca aceste conditii nu sunt indeplinite); in timpul scanarii, motorul roteste discul cu 1 pas, dupa care senzorul scaneaza si citeste distanta care este scrisa pe cardul SD, lucru care se intampla de 200 de ori, numarul de pasi pentru o rotatie completa a motorului; apoi, motorul vertical ar ridica ansamblul cu 1 cm, dupa care procesul eset reluat, pana se ajunge la limita de 10 cm.\\ | ||
+ | -void rotateMotor(int pinNo, int steps, int vertical): aceasta funcie roteste motorul respectiv de un numar dat de pasi; daca vertical este 1, se vor tine minte numarul de rotiri pentru a putea da reset in cazul in care dorim sa nu mai scanam un obiect.\\ | ||
+ | -void writeToSD(double distance): functia scrie o valoare pe cardul SD. | ||
+ | -void resetPosition(): functia aduce ansamblul vertical in pozitia originala. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
- | </note> | ||
- | ===== Concluzii ===== | + | <html> |
+ | <iframe width="560" height="315" src="https://www.youtube.com/embed/CjBKlgUZORk?si=Soo4eqonb1_uNn3M" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> | ||
+ | </html> | ||
+ | |||
+ | ===== Concluzii ===== | ||
+ | Nu este atat de usor sa creezi ceva de la 0, este nevoie de o analiza o pieselor si componentelor disponibile, ce ofera fiecare in parte, cum se utilizeaza, ce necesita fiecare. De-a lungul proiectului, din cauza neatentiei la aceste detalii, am ajuns sa intampin o multitudine de probleme, de la piese care nu pot fi utilizate pentru scopul meu, pana la probleme la alimentarea acestora. Alimentarea poate sa fie o problema atat din punct de vedere al tensiunii, cat si al curentului. Este nevoie de o sursa capabila sa le ofere pe ambele. | ||
===== Download ===== | ===== Download ===== | ||