Difference between revisions of "3D Scanner Holder"
(→3D modelovanie) |
(→Držiak) |
||
(61 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | == | + | == Prečo? == |
Pri používaní '''3D Davis scanner''' [http://www8.hp.com/us/en/campaign/3Dscanner/overview.html?jumpid=va_t1345uf8k6] sme zistili, že jemná manipulácia s malým objektom je náročná a komplikuje skenovanie, preto sme sa rozhodli uľahčiť si robotu a vyrobiť otáčavý držiak na malé objekty. | Pri používaní '''3D Davis scanner''' [http://www8.hp.com/us/en/campaign/3Dscanner/overview.html?jumpid=va_t1345uf8k6] sme zistili, že jemná manipulácia s malým objektom je náročná a komplikuje skenovanie, preto sme sa rozhodli uľahčiť si robotu a vyrobiť otáčavý držiak na malé objekty. | ||
− | == Postup == | + | ==Postup == |
Vytvoríme si v 3D programe držiak, ktorý sa umiestni na motorček (steper, alebo servo), ktorý bude ovládaný pomocou arduina, aby sa vedel otáčať o presne definovaný uhol dokopy o 360° okolo vertikálnej osi. | Vytvoríme si v 3D programe držiak, ktorý sa umiestni na motorček (steper, alebo servo), ktorý bude ovládaný pomocou arduina, aby sa vedel otáčať o presne definovaný uhol dokopy o 360° okolo vertikálnej osi. | ||
Držiak by mal plošinu, ktorá by sa vedela otáčať ešte aj o 90° okolo horizontálne osi. Keďže program si vyžaduje, skenovanie aj z hora, čo je samozrejmé a namsieto toho, aby sa manipulovalo s kamerou, sa skenovaný objekt otočí o po horizontálnej osi a tak sa následne otáča. | Držiak by mal plošinu, ktorá by sa vedela otáčať ešte aj o 90° okolo horizontálne osi. Keďže program si vyžaduje, skenovanie aj z hora, čo je samozrejmé a namsieto toho, aby sa manipulovalo s kamerou, sa skenovaný objekt otočí o po horizontálnej osi a tak sa následne otáča. | ||
− | |||
− | === | + | ==Čo k tomu potrebujeme?== |
− | V programe FreeCAD sme si vytvorili model držiaka. | + | |
− | + | '''Hardware'''- hmotné veci: motor, arduino + súčiastky, držiak, krabička. | |
+ | '''Software'''- program ktorý bude spracovávať analógový signál z joysticku a ovládať motor, ktorý bude otáčať podnos. | ||
+ | |||
+ | |||
+ | == Motor == | ||
+ | |||
+ | Na tento projekt sme použili 5 žilový krokový motor z tlačiarne napájaný ''12 V'' DC (typ: msgb048a54 01). Jeho veľkosti sú prispôsobené všetky vyrobené časti. Tento motorček je veľmi výhodný v tom, že sa dokáže jednoducho ovládať a vykonávať jeden krok čo je v prípade nášho krokového motora 1/51 z celej otáčky [[File:motor.png|200px|thumb|center|vizualizácia krokového motora, použitého v tomto projekte]] | ||
+ | |||
+ | == Držiak == | ||
+ | V programe [https://www.freecadweb.org/wiki/Download FreeCAD] sme si vytvorili 3D model držiaka. Vďaka technológii 3D tlače, dokážeme veľmi jednoducho vytvoriť to čo potrebujeme a tak sa vyhneme známemu problému pri zostavovaní ľubovoľnej aparatúry "''držiak držiaku držiaku...''" | ||
+ | tu je link na stiahnutie súbor pre FreeCad [https://ulozto.sk/!xWyAagrgKzm2/drziak6-fcstd stiahnúť tu] | ||
+ | |||
+ | Držiak sa skladá z nasledujúcich častí: | ||
+ | |||
+ | ===Základňa=== | ||
+ | |||
+ | Slúži na držanie krokového motora v stabilnej polohe a taktiež drží aj nosnú časť na ktorej je klzná plocha. [[File:základňa.png|200px|thumb|center|základňa]] | ||
+ | |||
+ | |||
+ | ---- | ||
− | + | ===Nosná časť=== | |
− | Slúži na držanie | + | Slúži na držanie Klznej plochy a je umiestnená na základni prostredníctvom koľajničky, ktorá dovoľuje jemnú manipuláciu, aby ozubené kolesá do seba správne zapadli.[[File:nosná_časť.png|200px|thumb|center|nosná časť]] [[File:n+n.png|200px|thumb|center|nosná časť + základňa]] |
− | + | ---- | |
− | + | ===Klzná plocha=== | |
− | + | Aby sa celý systém mohol otáčať musí mať malé trenie, najjednoduchším riešením je klzné ložisko- keďže sú materiály dostatočne tvrdé a hladké, nie je to problém. Klzná plocha je umiestnená na nosnej časti.[[File:klzna_plocha.png|200px|thumb|center|klzna plocha]] [[File:z+n+k.png|200px|thumb|center|základňa + nosná časť+ klzná plocha]] | |
+ | ---- | ||
− | + | ===Ozubené koleso na osi motorčeka=== | |
− | + | je to jednoduché ozubené koleso prispôsobené na upevnenie o krokový motor, má 12 zubov. [[File:ozub.png|200px|thumb|center|ozubené koleso]] [[File:m+o.png|200px|thumb|center|ozubené koleso umiestnené na krokovom motore]] [[File:b+m+o.png|200px|thumb|center|umiestnenie krokového motora v základni ]] | |
− | + | ---- | |
− | + | ===Veža=== | |
− | Veža je umiestnená na klznej ploche, na ktorej je na spodnej strane ozubené koleso ktoré má | + | Veža je umiestnená na klznej ploche, na ktorej je na spodnej strane ozubené koleso ktoré má 27 zubov, čo je viac oproti ozubenému kolesu ktoré je umiestnené na motorčeku, tým je zabezpečený prevod do pomala 2,25:1. Cez stred ozubeného kolesa je diera, ktorá slúži na to aby dochádzalo iba k rotácii okolo vertikálnej osi. Veža je tak pohyblivá o 360° okolo vertikálnej osi. Taktiež sú na nej ramená, ktoré držia podnos. [[File:veža.png|200px|thumb|center|veža]] [[File:z+n+k+v+o.png|200px|thumb|center|veža umiesnená na klznej ploche]] |
+ | ---- | ||
− | + | ===Podnos=== | |
− | Posledná časť držiaka, na ktorý sa pokladá objekt, ktorý chceme skenovať. Pomocou jednoduchého kĺbu sa dá otáčať okolo horizontálnej osi. | + | Posledná časť držiaka, na ktorý sa pokladá objekt, ktorý chceme skenovať. Pomocou jednoduchého kĺbu sa dá otáčať okolo horizontálnej osi. [[File:podnos.png|200px|thumb|center|podnos]] [[File:z+n+k+m+o+v+p.png|200px|thumb|center|podnos umiestnený na veži pomocou horizontálnej tyče spolu s vežou]] |
== Arduino == | == Arduino == | ||
Systém ovládanie je veľmi jednoduchý. Využíva sa joystick na ovládanie krokového motora, ktorý následne otáča vežu. Na displeji sa zobrazí počet stupňov o koľko sa otočí vzhľadom na určený štartovací bod. | Systém ovládanie je veľmi jednoduchý. Využíva sa joystick na ovládanie krokového motora, ktorý následne otáča vežu. Na displeji sa zobrazí počet stupňov o koľko sa otočí vzhľadom na určený štartovací bod. | ||
− | '''Kód''' | + | |
+ | '''Potrebné súčiastky:''' | ||
+ | Arduino, joystick, LED displej, motor (v našom prípade krokový), [https://en.wikipedia.org/wiki/ULN2003A ULN2003], 12V DC zdroj a dostatočný počet káblov. | ||
+ | |||
+ | |||
+ | === Zapojenie === | ||
+ | |||
+ | Krokový motor je napojený na ULN2003, kde sú 4 ovládacie piny a 1 spoločné napájanie. Návod ako správne zapojiť 5 žilový krokový motor je na [https://www.youtube.com/watch?v=lduqo4fmXYo youtube] | ||
+ | ULN2003 je napojená na arduino na piny (D8, D9, D10, D11)[[File:schema.jpg|400px|thumb|right|schéma zapojenia krokového motora a ULN2003, farba drôtov nezodpovedá realite je potrebné určiť spoločný drôt a potom v správnom poradí pozapájať ostatné. zrdoj:https://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino ]]. Joystick, je patrične zapojený na analógový vstup do arduina A0- stačí iba 1 vstup, keďže ovládame iba 1 os. Napájanie motora iba z arduina nie je dostačujúce, preto je potrebné mať dodatočný DC zdroj. LED displej je napojené na (piny) a zobrazuje uhol o ktorý sme už otočili náš držiak. | ||
+ | |||
+ | '''Kód:''' | ||
+ | <nowiki> | ||
+ | #include <Wire.h> | ||
+ | #include <LiquidCrystal_I2C.h> | ||
+ | #include <Stepper.h> | ||
+ | |||
+ | |||
+ | |||
+ | LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // nastavenie LCD na I2C adrese 0x3f | ||
+ | int joyX = A7; //analogovy vstup pre joystick, x-os | ||
+ | int push = 7; // optional, digitalny vstup pre joystick, stlacenie joysticku- môže byť na vymazanie polohy | ||
+ | int joyVal; // hodnota prečítana na x osi | ||
+ | float uhol; | ||
+ | float a; | ||
+ | |||
+ | const int stepsPerRevolution = 51; //pocet krokov potrebnych na jednu otocku, treba nastavit podla motora | ||
+ | Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); // inicializacia kniznice pre motor (pocet otacok potrebnych na 1 otocku, vystup z arduina do drivera 1(VAD1),(VAD2),(VAD3),(VAD4)) | ||
+ | int stepCount = 0; // ratanie krokov motora | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(9600); //inicializacia komunikacie cez usb s kompom | ||
+ | lcd.begin(16,2); //inicializacia lcdka s 16 stlpcami, 2 riadkami | ||
+ | lcd.clear(); | ||
+ | } | ||
+ | void loop() { | ||
+ | joyVal = analogRead(joyX); //precitanie hodnoty z x osi, hodnota vystupu z joysticku ak je uplne nalavo-> 0, ak je uplne napravo-> 1023, poloha medzi tym-> hodnoty medzi 0-1023 | ||
+ | // KROK DOPRAVA POMALY: | ||
+ | if (joyVal > 600 && joyVal <= 900 ) { // ak je joystick trochu vychyleny doprava | ||
+ | //lcd.println(joyVal); //toto sa vypisuje na LCD -> hodnota vystupu z joysticku | ||
+ | myStepper.step(1); //spravy jeden krok | ||
+ | stepCount++; | ||
+ | //lcd.print("UHOL:"); //toto sa vypisuje na LCD | ||
+ | //toto sa vypisuje na LCD ->pocet krokov ktorych sa doteraz spravilo | ||
+ | //prida sa hodnota k poctu krokov sa spravilo | ||
+ | delay(500); // pocka pol sekundy a ptm sa opakuje loop => cim mensia hodnota tym rychlejsie sa bude opakovat loop => rychlejsie otacanie motora | ||
+ | } | ||
+ | //KROK DOPRAVA RYCHLO: | ||
+ | if (joyVal > 900 ) { | ||
+ | //lcd.println(joyVal); | ||
+ | myStepper.step(1); | ||
+ | stepCount++; | ||
+ | //lcd.print("UHOL:"); | ||
+ | delay(100);// pocka 0,1 sekundy a ptm sa opakuje loop => otaca sa rychlejsie nez v podmienke vyssie | ||
+ | } | ||
+ | // KROK DOLAVA POMALY: //podobne ako vyssie len dolava | ||
+ | if (joyVal < 400 && joyVal >= 100 ) { | ||
+ | // lcd.println(joyVal); | ||
+ | myStepper.step(-1); | ||
+ | stepCount--; | ||
+ | //lcd.print("UHOL:"); | ||
+ | delay(500); | ||
+ | } | ||
+ | //KROK DOLAVA RYCHLO: //podobne ako vyssie len dolava | ||
+ | if (joyVal < 100) { | ||
+ | // lcd.println(joyVal); | ||
+ | myStepper.step(-1); | ||
+ | stepCount--; | ||
+ | //lcd.print("UHOL:"); | ||
+ | delay(100); | ||
+ | } | ||
− | == | + | uhol=stepCount*3.3; // 1 krok zanamená, že sa veža posunie o 3,3 stupňa |
+ | if (a!=uhol) // ak sa uhol zmení, tak ho vypíše na LCD | ||
+ | { | ||
+ | lcd.setCursor(1,12); | ||
+ | if(uhol>=100) | ||
+ | lcd.print(uhol, 1); | ||
+ | else | ||
+ | lcd.print(uhol, 2); | ||
+ | a=uhol; // // ak sa uhol nezmení, tak nech nerobí nič | ||
+ | } | ||
+ | delay(1); | ||
+ | if (stepCount==109 or stepCount==-109) | ||
+ | { | ||
+ | stepCount=0; | ||
+ | } | ||
+ | } | ||
+ | </nowiki> | ||
+ | |||
+ | == Krabička == | ||
Celý systém je uložený v krabičke, ktorá sa skladá z dvoch častí '''strojovňa''' a '''garáž''', ktorá tak zabezpečí prehľadnosť a ľahkú manipuláciu. | Celý systém je uložený v krabičke, ktorá sa skladá z dvoch častí '''strojovňa''' a '''garáž''', ktorá tak zabezpečí prehľadnosť a ľahkú manipuláciu. | ||
Na vytvorenie krabičky odporúčame Rozšírenie do Inkscapu '''laser tool- Tabbed box''' [https://github.com/paulh-rnd/TabbedBoxMaker] | Na vytvorenie krabičky odporúčame Rozšírenie do Inkscapu '''laser tool- Tabbed box''' [https://github.com/paulh-rnd/TabbedBoxMaker] | ||
− | + | Pre tento projekt sm echeli vyskúšať ako zvládneme presnosť rezu pri 8 mm plexiskle. Pri nastavení lasera rýchlosť 0,7 a výkon 90 sme dokázali takýto hrubý materiál prerezať. | |
+ | V inkscape sme využili rozšírenie Tabbed box, kde sú rozmery a nastavenia nasledovné: [[File:inkscape.png|400px||thumb|right| Nastavenia Laser Tool pre výrobu krabičky z 8 mm plexiskla ]] | ||
+ | |||
+ | ===strojovňa=== | ||
− | V tejto časti krabičky je umiestnené arduino, joystick a LED displej a vstup na DC zdroj. | + | V tejto časti krabičky je umiestnené arduino, joystick a LED displej a vstup na DC zdroj a výstup na kontrolu držiaka. |
− | + | ===garáž=== | |
V tejto oddelenej časti je umiestnený samotný držiak, ktorý má dostatočne dlhý kábel, aby sa vedel pohodlne umiestniť na požadované miesto skenovania . Toto káblové spojenie strojovne s držiakom zaručí, aby sme sa náhodou neposunuli celý systém, keď budeme pomocou joysticku ovládať otáčanie. | V tejto oddelenej časti je umiestnený samotný držiak, ktorý má dostatočne dlhý kábel, aby sa vedel pohodlne umiestniť na požadované miesto skenovania . Toto káblové spojenie strojovne s držiakom zaručí, aby sme sa náhodou neposunuli celý systém, keď budeme pomocou joysticku ovládať otáčanie. |
Latest revision as of 09:57, 16 June 2017
Contents
Prečo?
Pri používaní 3D Davis scanner [1] sme zistili, že jemná manipulácia s malým objektom je náročná a komplikuje skenovanie, preto sme sa rozhodli uľahčiť si robotu a vyrobiť otáčavý držiak na malé objekty.
Postup
Vytvoríme si v 3D programe držiak, ktorý sa umiestni na motorček (steper, alebo servo), ktorý bude ovládaný pomocou arduina, aby sa vedel otáčať o presne definovaný uhol dokopy o 360° okolo vertikálnej osi.
Držiak by mal plošinu, ktorá by sa vedela otáčať ešte aj o 90° okolo horizontálne osi. Keďže program si vyžaduje, skenovanie aj z hora, čo je samozrejmé a namsieto toho, aby sa manipulovalo s kamerou, sa skenovaný objekt otočí o po horizontálnej osi a tak sa následne otáča.
Čo k tomu potrebujeme?
Hardware- hmotné veci: motor, arduino + súčiastky, držiak, krabička. Software- program ktorý bude spracovávať analógový signál z joysticku a ovládať motor, ktorý bude otáčať podnos.
Motor
Na tento projekt sme použili 5 žilový krokový motor z tlačiarne napájaný 12 V DC (typ: msgb048a54 01). Jeho veľkosti sú prispôsobené všetky vyrobené časti. Tento motorček je veľmi výhodný v tom, že sa dokáže jednoducho ovládať a vykonávať jeden krok čo je v prípade nášho krokového motora 1/51 z celej otáčkyDržiak
V programe FreeCAD sme si vytvorili 3D model držiaka. Vďaka technológii 3D tlače, dokážeme veľmi jednoducho vytvoriť to čo potrebujeme a tak sa vyhneme známemu problému pri zostavovaní ľubovoľnej aparatúry "držiak držiaku držiaku..." tu je link na stiahnutie súbor pre FreeCad stiahnúť tu
Držiak sa skladá z nasledujúcich častí:
Základňa
Slúži na držanie krokového motora v stabilnej polohe a taktiež drží aj nosnú časť na ktorej je klzná plocha.
Nosná časť
Slúži na držanie Klznej plochy a je umiestnená na základni prostredníctvom koľajničky, ktorá dovoľuje jemnú manipuláciu, aby ozubené kolesá do seba správne zapadli.Klzná plocha
Aby sa celý systém mohol otáčať musí mať malé trenie, najjednoduchším riešením je klzné ložisko- keďže sú materiály dostatočne tvrdé a hladké, nie je to problém. Klzná plocha je umiestnená na nosnej časti.Ozubené koleso na osi motorčeka
je to jednoduché ozubené koleso prispôsobené na upevnenie o krokový motor, má 12 zubov.Veža
Veža je umiestnená na klznej ploche, na ktorej je na spodnej strane ozubené koleso ktoré má 27 zubov, čo je viac oproti ozubenému kolesu ktoré je umiestnené na motorčeku, tým je zabezpečený prevod do pomala 2,25:1. Cez stred ozubeného kolesa je diera, ktorá slúži na to aby dochádzalo iba k rotácii okolo vertikálnej osi. Veža je tak pohyblivá o 360° okolo vertikálnej osi. Taktiež sú na nej ramená, ktoré držia podnos.Podnos
Posledná časť držiaka, na ktorý sa pokladá objekt, ktorý chceme skenovať. Pomocou jednoduchého kĺbu sa dá otáčať okolo horizontálnej osi.Arduino
Systém ovládanie je veľmi jednoduchý. Využíva sa joystick na ovládanie krokového motora, ktorý následne otáča vežu. Na displeji sa zobrazí počet stupňov o koľko sa otočí vzhľadom na určený štartovací bod.
Potrebné súčiastky: Arduino, joystick, LED displej, motor (v našom prípade krokový), ULN2003, 12V DC zdroj a dostatočný počet káblov.
Zapojenie
Krokový motor je napojený na ULN2003, kde sú 4 ovládacie piny a 1 spoločné napájanie. Návod ako správne zapojiť 5 žilový krokový motor je na youtube
ULN2003 je napojená na arduino na piny (D8, D9, D10, D11)![](/courses/dtv/images/thumb/3/3e/Schema.jpg/400px-Schema.jpg)
Kód: #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Stepper.h> LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // nastavenie LCD na I2C adrese 0x3f int joyX = A7; //analogovy vstup pre joystick, x-os int push = 7; // optional, digitalny vstup pre joystick, stlacenie joysticku- môže byť na vymazanie polohy int joyVal; // hodnota prečítana na x osi float uhol; float a; const int stepsPerRevolution = 51; //pocet krokov potrebnych na jednu otocku, treba nastavit podla motora Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); // inicializacia kniznice pre motor (pocet otacok potrebnych na 1 otocku, vystup z arduina do drivera 1(VAD1),(VAD2),(VAD3),(VAD4)) int stepCount = 0; // ratanie krokov motora void setup() { Serial.begin(9600); //inicializacia komunikacie cez usb s kompom lcd.begin(16,2); //inicializacia lcdka s 16 stlpcami, 2 riadkami lcd.clear(); } void loop() { joyVal = analogRead(joyX); //precitanie hodnoty z x osi, hodnota vystupu z joysticku ak je uplne nalavo-> 0, ak je uplne napravo-> 1023, poloha medzi tym-> hodnoty medzi 0-1023 // KROK DOPRAVA POMALY: if (joyVal > 600 && joyVal <= 900 ) { // ak je joystick trochu vychyleny doprava //lcd.println(joyVal); //toto sa vypisuje na LCD -> hodnota vystupu z joysticku myStepper.step(1); //spravy jeden krok stepCount++; //lcd.print("UHOL:"); //toto sa vypisuje na LCD //toto sa vypisuje na LCD ->pocet krokov ktorych sa doteraz spravilo //prida sa hodnota k poctu krokov sa spravilo delay(500); // pocka pol sekundy a ptm sa opakuje loop => cim mensia hodnota tym rychlejsie sa bude opakovat loop => rychlejsie otacanie motora } //KROK DOPRAVA RYCHLO: if (joyVal > 900 ) { //lcd.println(joyVal); myStepper.step(1); stepCount++; //lcd.print("UHOL:"); delay(100);// pocka 0,1 sekundy a ptm sa opakuje loop => otaca sa rychlejsie nez v podmienke vyssie } // KROK DOLAVA POMALY: //podobne ako vyssie len dolava if (joyVal < 400 && joyVal >= 100 ) { // lcd.println(joyVal); myStepper.step(-1); stepCount--; //lcd.print("UHOL:"); delay(500); } //KROK DOLAVA RYCHLO: //podobne ako vyssie len dolava if (joyVal < 100) { // lcd.println(joyVal); myStepper.step(-1); stepCount--; //lcd.print("UHOL:"); delay(100); } uhol=stepCount*3.3; // 1 krok zanamená, že sa veža posunie o 3,3 stupňa if (a!=uhol) // ak sa uhol zmení, tak ho vypíše na LCD { lcd.setCursor(1,12); if(uhol>=100) lcd.print(uhol, 1); else lcd.print(uhol, 2); a=uhol; // // ak sa uhol nezmení, tak nech nerobí nič } delay(1); if (stepCount==109 or stepCount==-109) { stepCount=0; } }
Krabička
Celý systém je uložený v krabičke, ktorá sa skladá z dvoch častí strojovňa a garáž, ktorá tak zabezpečí prehľadnosť a ľahkú manipuláciu. Na vytvorenie krabičky odporúčame Rozšírenie do Inkscapu laser tool- Tabbed box [2]
Pre tento projekt sm echeli vyskúšať ako zvládneme presnosť rezu pri 8 mm plexiskle. Pri nastavení lasera rýchlosť 0,7 a výkon 90 sme dokázali takýto hrubý materiál prerezať.
V inkscape sme využili rozšírenie Tabbed box, kde sú rozmery a nastavenia nasledovné:strojovňa
V tejto časti krabičky je umiestnené arduino, joystick a LED displej a vstup na DC zdroj a výstup na kontrolu držiaka.
garáž
V tejto oddelenej časti je umiestnený samotný držiak, ktorý má dostatočne dlhý kábel, aby sa vedel pohodlne umiestniť na požadované miesto skenovania . Toto káblové spojenie strojovne s držiakom zaručí, aby sme sa náhodou neposunuli celý systém, keď budeme pomocou joysticku ovládať otáčanie.