Zariadenie na vytvrdzovanie resinu pre MLSA 3D tlačiarne: Rozdiel medzi revíziami
Zo stránky SensorWiki
Vytvorená stránka „Záverečný projekt predmetu DTV / LS2023 - '''Meno Priezvisko''' == Úvod == Sem príde nejaký opis čo idete robiť, čo je cieľom projektu a nejaká motivácia,…“ |
|||
(48 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 1: | Riadok 1: | ||
Záverečný projekt predmetu DTV / LS2023 - ''' | Záverečný projekt predmetu DTV / LS2023 - '''Jakub Tinák''' | ||
== Úvod == | == Úvod == | ||
Vytvrdzovanie resinu po 3D tlači je súčasťou post Procesingu, aby som sa nemusel spoliehať na prirodzený zdroj UV-svetla -> slnko, som sa rozhodol ako semestrálny projekt vypracoavť zariadenie ktoré mi s tým pomôže. | |||
Ako zdroj UV svetla som použil UV diody v 3 stĺpikoch vztlačených z resinu, tieto budú svietiť na rotujúcu platformu ktorou bude otáčať krokový motor, o zobrazenie zostávajúceho času sa stará lcd displej a na ovládanie slúžia 4 tlačidlá. | |||
Vzhľadom na to, že UV svetlo je očiam škodlivé som pridal NO-kontakt ktorý kontroluje či je veko zavreté. | |||
[[Obrázok:IMG 20230623 195259.jpg|400px|thumb|center|Zapojenie.]] | |||
[[Obrázok:IMG 20230623 195254.jpg|400px|thumb|center|Zapojenie.]] | |||
[[Obrázok:IMG 20230623 163601.jpg|400px|thumb|center|Zapojenie.]] | |||
__TOC__ | __TOC__ | ||
== Analýza a opis riešenia == | == Analýza a opis riešenia == | ||
Realizácia sa dá rozdeliť na 3 časti: | |||
-Elektrická časť | |||
-Fyzická časť | |||
-Programové riešenie | |||
Elektrická časť zabezpečuje spája programovú a fyzickú časť. slúži na prenos a riadenie. | |||
[[Súbor:Snímka obrazovky 2023-06-23 181439.png|400px|thumb|center|Schéma zapojenia.]] | |||
Pozostáva z Arduina, krokového motora, paralelne zapojených diód, a niekolkých ovládacích prvkov. | |||
[[Súbor:Snímka obrazovky 2023-06-23 184828.png|400px|thumb|center|Schéma zapojenia.]] | |||
[[Súbor: | Fyzická časť pozostáva z krabičky, taniera a stlpikov, Krabička bola vyrezaná laserom zo 4mm preglejky a tanier bol vytlačený na 3D tlačiarni. | ||
[[Súbor:Snímka obrazovky 2023-06-23 181810.png|400px|thumb|center|Celá Krabička.]] | |||
Krabička má dva účeli. Zabraňuje mechanickému poškodeniu elektrickej časti ktorej velká časť je uložená v priestore pod tanierom a medziposchodím, druhým a hlavným účelom pre ktorý som si ako materíal zvolil drevo je zamedzenie úniku UV žiarenia do vonka. | |||
[[Súbor:Snímka obrazovky 2023-06-23 181903.png|400px|thumb|center|Rozložená krabička.]] | |||
Pre lepší celkový výkon a kvalitu vytvrdnutia modelu by sa dala vnútorná časť krabický potiahnuť/natrieť odrazným materiálom napr. hliníkovou fóliou. | |||
[[Súbor:Snímka obrazovky 2023-06-23 183225.png|400px|thumb|center|Model Taniera.]] | |||
Tanier Je poidstava na ktorú sa položí objek ktorý treba vytvrdiť, je priamo mechanicky spojený s krokovým motorom cez drážku a teda priamo otáčaný. | |||
[[Súbor:Snímka obrazovky 2023-06-23 183803.png|400px|thumb|center|Model stlpiku.]] | |||
Stĺpiky spúžia na držanie led diód budú zapustené do medziposchodia a pod nimi sa nachádza diera cez ktorú budú diódy napájané. | |||
=== Algoritmus a program === | === Algoritmus a program === | ||
Algoritmus programu vychádza z artuino countdown timera ale je upravený aby vzhovoval mojim potrebám. | |||
Algoritmus programu je.... | Využité sú 3 knižnice: | ||
LiquidCrystal.h -Umožňuje ovládanie lcd displeja | |||
EEPROM.h -Umožnuje uchovanie údajov v pameti aj ked sa doska vypne, napríklad otvorením viečka laebo zlihaním baterky | |||
Stepper.h -Umožňuje riadenie krokového motora | |||
<tabs> | <tabs> | ||
<tab name=" | <tab name="Kód v prostredí Arduino IDE"><source lang="c++" style="background: LightYellow;"> | ||
#include < | #include <LiquidCrystal.h> | ||
#include<EEPROM.h> | |||
#include <Stepper.h> | |||
const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2; | |||
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); | |||
const int stepsPerRevolution = 1027; | |||
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11); | |||
const int kontakt=A5; | |||
const int diode= 12; | |||
const int stsp = A0; | |||
const int inc = A1; | |||
const int dec = A2; | |||
const int set = A3; | |||
const int relay = 8; | |||
int hrs = 0; | |||
int Min = 0; | |||
int sec = 0; | |||
unsigned int check_val = 50; | |||
int add_chk = 0; | |||
int add_hrs = 1; | |||
int add_min = 2; | |||
bool RUN = true; | |||
bool min_flag = true; | |||
bool hrs_flag = true; | |||
void setup() | |||
{ | |||
lcd.begin(16, 2); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("COUNTDOWN TIMER"); | |||
pinMode(stsp, INPUT_PULLUP); | |||
pinMode(kontakt, INPUT_PULLUP); | |||
pinMode(inc, INPUT_PULLUP); | |||
pinMode(dec, INPUT_PULLUP); | |||
pinMode(set, INPUT_PULLUP); | |||
pinMode(relay, OUTPUT); | |||
pinMode(diode,OUTPUT); | |||
digitalWrite(relay, LOW); | |||
digitalWrite(diode, LOW); | |||
if (EEPROM.read(add_chk) != check_val) | |||
{ | |||
EEPROM.write(add_chk, check_val); | |||
EEPROM.write(add_hrs, 0); | |||
EEPROM.write(add_min, 1); | |||
} | |||
else | |||
{ | |||
hrs = EEPROM.read(add_hrs); | |||
Min = EEPROM.read(add_min); | |||
} | |||
delay(1500); | |||
myStepper.setSpeed(15); | |||
INIT(); | |||
} | |||
void loop() | |||
{ | { | ||
if (digitalRead(stsp) == LOW) | |||
{ | { | ||
/* | lcd.clear(); | ||
delay(250); | |||
RUN = true; | |||
while (RUN) | |||
{ | |||
if (digitalRead(stsp) == LOW) | |||
{ | |||
delay(1000); | |||
if (digitalRead(stsp) == LOW) | |||
{ | |||
digitalWrite(relay, LOW); | |||
digitalWrite(diode,LOW); | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print(" TIMER STOPPED"); | |||
lcd.setCursor(0, 1); | |||
lcd.print("----------------"); | |||
delay(2000); | |||
RUN = false; | |||
INIT(); | |||
break; | |||
} | |||
} | |||
if (digitalRead(kontakt) == LOW) | |||
{ | |||
digitalWrite(diode, HIGH); | |||
myStepper.step(stepsPerRevolution/4); | |||
sec = sec - 1; | |||
} | |||
else{ | |||
digitalWrite(diode, LOW); | |||
} | |||
digitalWrite(relay, HIGH); | |||
if (sec == -1) | |||
{ | |||
sec = 59; | |||
Min = Min - 1; | |||
} | |||
if (Min == -1) | |||
{ | |||
Min = 59; | |||
hrs = hrs - 1; | |||
} | |||
if (hrs == -1) hrs = 0; | |||
lcd.setCursor(0, 1); | |||
lcd.print("****************"); | |||
lcd.setCursor(4, 0); | |||
if (hrs <= 9) | |||
{ | |||
lcd.print('0'); | |||
} | |||
lcd.print(hrs); | |||
lcd.print(':'); | |||
if (Min <= 9) | |||
{ | |||
lcd.print('0'); | |||
} | |||
lcd.print(Min); | |||
lcd.print(':'); | |||
if (sec <= 9) | |||
{ | |||
lcd.print('0'); | |||
} | |||
lcd.print(sec); | |||
if (hrs == 0 && Min == 0 && sec == 0) | |||
{ | |||
digitalWrite(relay, LOW); | |||
lcd.setCursor(4, 0); | |||
RUN = false; | |||
digitalWrite(diode, LOW); | |||
INIT(); | |||
} | |||
} | |||
} | } | ||
if (digitalRead(set) == LOW) | |||
{ | |||
delay(500); | |||
while (min_flag) | |||
{ | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("SET MINUTE: "); | |||
lcd.print(Min); | |||
delay(100); | |||
if (digitalRead(inc) == LOW) | |||
{ | |||
Min = Min + 1; | |||
if (Min >= 60) Min = 0; | |||
delay(100); | |||
} | |||
if (digitalRead(dec) == LOW) | |||
{ | |||
Min = Min - 1; | |||
if (Min <= -1) Min = 0; | |||
delay(100); | |||
} | |||
if (digitalRead(set) == LOW) | |||
{ | |||
min_flag = false; | |||
delay(250); | |||
} | |||
} | |||
while (hrs_flag) | |||
{ | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("SET HOUR: "); | |||
lcd.print(hrs); | |||
delay(100); | |||
if (digitalRead(inc) == LOW) | |||
{ | |||
hrs = hrs + 1; | |||
if (hrs > 23) hrs = 0; | |||
delay(100); | |||
} | |||
if (digitalRead(dec) == LOW) | |||
{ | |||
hrs = hrs - 1; | |||
if (hrs <= -1) hrs = 0; | |||
delay(100); | |||
} | |||
if (digitalRead(set) == LOW) | |||
{ | |||
hrs_flag = false; | |||
delay(250); | |||
} | |||
} | |||
if (hrs == 0 && Min == 0) | |||
{ | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print(" INVAID TIME"); | |||
delay(2000); | |||
} | |||
else | |||
{ | |||
EEPROM.write(add_hrs, hrs); | |||
EEPROM.write(add_min, Min); | |||
} | |||
INIT(); | |||
} | |||
} | |||
void INIT() | |||
{ | |||
hrs = EEPROM.read(add_hrs); | |||
Min = EEPROM.read(add_min); | |||
sec = 0; | |||
lcd.clear(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Start / Set Time"); | |||
lcd.setCursor(4, 1); | |||
if (hrs <= 9) | |||
{ | |||
lcd.print('0'); | |||
} | |||
lcd.print(hrs); | |||
lcd.print(':'); | |||
if (Min <= 9) | |||
{ | |||
lcd.print('0'); | |||
} | |||
lcd.print(Min); | |||
lcd.print(':'); | |||
if (sec <= 9) | |||
{ | |||
lcd.print('0'); | |||
} | |||
lcd.print(sec); | |||
min_flag = true; | |||
hrs_flag = true; | |||
delay(500); | |||
} | } | ||
</source></tab> | </source></tab> | ||
</tabs> | </tabs> | ||
Súbory, kód a doplnujuce foto: [[Médiá:Tinak-DTV.zip]] | |||
=== Overenie === | === Overenie === | ||
Po zapnutí zariadenia sa obajavý základná obrazovka. | |||
[[Súbor:Snímka obrazovky 2023-06-23 203616.png|400px|thumb|center|Ukážka funkcie výrobku.]] | |||
Stlačením tlačidla set sa dostaneme k zmene počtu minút. Pridávame a odoberáme minúty pomocou tlačidiel + a - | |||
[[Súbor:Snímka obrazovky 2023-06-23 203723.png|400px|thumb|center|Ukážka funkcie výrobku.]] | |||
Druhým stlačením sa dostaneme k zmene počtu hodín. | |||
[[Súbor:Snímka obrazovky 2023-06-23 203742.png|400px|thumb|center|Ukážka funkcie výrobku.]] | |||
Tretím sa dostaneme späť na základnú obrazovku tenztokrát už ale so zmenenou hodnotou času. | |||
[[Súbor:Snímka obrazovky 2023-06-23 203802.png|400px|thumb|center|Ukážka funkcie výrobku.]] | |||
Tlačidlom štart/pauza spustími časovač, pokím časovač beží krokový motror sa bude otáčať a led diódy svietiť. | |||
[[Súbor:Snímka obrazovky 2023-06-23 204039.png|400px|thumb|center|Ukážka funkcie výrobku.]] | |||
Po podržaní tlačidla štart alebo skončení časovača sa vrátime na základnú obrazovku. | |||
[[Súbor:Snímka obrazovky 2023-06-23 204507.png|400px|thumb|center|Ukážka funkcie výrobku.]] | |||
Súbory, kód a doplnujuce foto: [[Médiá:Tinak-DTV.zip]] | |||
[[ | |||
[[Category:DTV]][[Category:DTV2023]] | [[Category:DTV]][[Category:DTV2023]] |
Aktuálna revízia z 18:54, 23. jún 2023
Záverečný projekt predmetu DTV / LS2023 - Jakub Tinák
Úvod
Vytvrdzovanie resinu po 3D tlači je súčasťou post Procesingu, aby som sa nemusel spoliehať na prirodzený zdroj UV-svetla -> slnko, som sa rozhodol ako semestrálny projekt vypracoavť zariadenie ktoré mi s tým pomôže. Ako zdroj UV svetla som použil UV diody v 3 stĺpikoch vztlačených z resinu, tieto budú svietiť na rotujúcu platformu ktorou bude otáčať krokový motor, o zobrazenie zostávajúceho času sa stará lcd displej a na ovládanie slúžia 4 tlačidlá. Vzhľadom na to, že UV svetlo je očiam škodlivé som pridal NO-kontakt ktorý kontroluje či je veko zavreté.
Analýza a opis riešenia
Realizácia sa dá rozdeliť na 3 časti:
-Elektrická časť -Fyzická časť -Programové riešenie
Elektrická časť zabezpečuje spája programovú a fyzickú časť. slúži na prenos a riadenie.
Pozostáva z Arduina, krokového motora, paralelne zapojených diód, a niekolkých ovládacích prvkov.
Fyzická časť pozostáva z krabičky, taniera a stlpikov, Krabička bola vyrezaná laserom zo 4mm preglejky a tanier bol vytlačený na 3D tlačiarni.
Krabička má dva účeli. Zabraňuje mechanickému poškodeniu elektrickej časti ktorej velká časť je uložená v priestore pod tanierom a medziposchodím, druhým a hlavným účelom pre ktorý som si ako materíal zvolil drevo je zamedzenie úniku UV žiarenia do vonka.
Pre lepší celkový výkon a kvalitu vytvrdnutia modelu by sa dala vnútorná časť krabický potiahnuť/natrieť odrazným materiálom napr. hliníkovou fóliou.
Tanier Je poidstava na ktorú sa položí objek ktorý treba vytvrdiť, je priamo mechanicky spojený s krokovým motorom cez drážku a teda priamo otáčaný.
Stĺpiky spúžia na držanie led diód budú zapustené do medziposchodia a pod nimi sa nachádza diera cez ktorú budú diódy napájané.
Algoritmus a program
Algoritmus programu vychádza z artuino countdown timera ale je upravený aby vzhovoval mojim potrebám. Využité sú 3 knižnice:
LiquidCrystal.h -Umožňuje ovládanie lcd displeja EEPROM.h -Umožnuje uchovanie údajov v pameti aj ked sa doska vypne, napríklad otvorením viečka laebo zlihaním baterky Stepper.h -Umožňuje riadenie krokového motora
#include <LiquidCrystal.h>
#include<EEPROM.h>
#include <Stepper.h>
const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int stepsPerRevolution = 1027;
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);
const int kontakt=A5;
const int diode= 12;
const int stsp = A0;
const int inc = A1;
const int dec = A2;
const int set = A3;
const int relay = 8;
int hrs = 0;
int Min = 0;
int sec = 0;
unsigned int check_val = 50;
int add_chk = 0;
int add_hrs = 1;
int add_min = 2;
bool RUN = true;
bool min_flag = true;
bool hrs_flag = true;
void setup()
{
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("COUNTDOWN TIMER");
pinMode(stsp, INPUT_PULLUP);
pinMode(kontakt, INPUT_PULLUP);
pinMode(inc, INPUT_PULLUP);
pinMode(dec, INPUT_PULLUP);
pinMode(set, INPUT_PULLUP);
pinMode(relay, OUTPUT);
pinMode(diode,OUTPUT);
digitalWrite(relay, LOW);
digitalWrite(diode, LOW);
if (EEPROM.read(add_chk) != check_val)
{
EEPROM.write(add_chk, check_val);
EEPROM.write(add_hrs, 0);
EEPROM.write(add_min, 1);
}
else
{
hrs = EEPROM.read(add_hrs);
Min = EEPROM.read(add_min);
}
delay(1500);
myStepper.setSpeed(15);
INIT();
}
void loop()
{
if (digitalRead(stsp) == LOW)
{
lcd.clear();
delay(250);
RUN = true;
while (RUN)
{
if (digitalRead(stsp) == LOW)
{
delay(1000);
if (digitalRead(stsp) == LOW)
{
digitalWrite(relay, LOW);
digitalWrite(diode,LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" TIMER STOPPED");
lcd.setCursor(0, 1);
lcd.print("----------------");
delay(2000);
RUN = false;
INIT();
break;
}
}
if (digitalRead(kontakt) == LOW)
{
digitalWrite(diode, HIGH);
myStepper.step(stepsPerRevolution/4);
sec = sec - 1;
}
else{
digitalWrite(diode, LOW);
}
digitalWrite(relay, HIGH);
if (sec == -1)
{
sec = 59;
Min = Min - 1;
}
if (Min == -1)
{
Min = 59;
hrs = hrs - 1;
}
if (hrs == -1) hrs = 0;
lcd.setCursor(0, 1);
lcd.print("****************");
lcd.setCursor(4, 0);
if (hrs <= 9)
{
lcd.print('0');
}
lcd.print(hrs);
lcd.print(':');
if (Min <= 9)
{
lcd.print('0');
}
lcd.print(Min);
lcd.print(':');
if (sec <= 9)
{
lcd.print('0');
}
lcd.print(sec);
if (hrs == 0 && Min == 0 && sec == 0)
{
digitalWrite(relay, LOW);
lcd.setCursor(4, 0);
RUN = false;
digitalWrite(diode, LOW);
INIT();
}
}
}
if (digitalRead(set) == LOW)
{
delay(500);
while (min_flag)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SET MINUTE: ");
lcd.print(Min);
delay(100);
if (digitalRead(inc) == LOW)
{
Min = Min + 1;
if (Min >= 60) Min = 0;
delay(100);
}
if (digitalRead(dec) == LOW)
{
Min = Min - 1;
if (Min <= -1) Min = 0;
delay(100);
}
if (digitalRead(set) == LOW)
{
min_flag = false;
delay(250);
}
}
while (hrs_flag)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SET HOUR: ");
lcd.print(hrs);
delay(100);
if (digitalRead(inc) == LOW)
{
hrs = hrs + 1;
if (hrs > 23) hrs = 0;
delay(100);
}
if (digitalRead(dec) == LOW)
{
hrs = hrs - 1;
if (hrs <= -1) hrs = 0;
delay(100);
}
if (digitalRead(set) == LOW)
{
hrs_flag = false;
delay(250);
}
}
if (hrs == 0 && Min == 0)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" INVAID TIME");
delay(2000);
}
else
{
EEPROM.write(add_hrs, hrs);
EEPROM.write(add_min, Min);
}
INIT();
}
}
void INIT()
{
hrs = EEPROM.read(add_hrs);
Min = EEPROM.read(add_min);
sec = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Start / Set Time");
lcd.setCursor(4, 1);
if (hrs <= 9)
{
lcd.print('0');
}
lcd.print(hrs);
lcd.print(':');
if (Min <= 9)
{
lcd.print('0');
}
lcd.print(Min);
lcd.print(':');
if (sec <= 9)
{
lcd.print('0');
}
lcd.print(sec);
min_flag = true;
hrs_flag = true;
delay(500);
}
Súbory, kód a doplnujuce foto: Médiá:Tinak-DTV.zip
Overenie
Po zapnutí zariadenia sa obajavý základná obrazovka.
Stlačením tlačidla set sa dostaneme k zmene počtu minút. Pridávame a odoberáme minúty pomocou tlačidiel + a -
Druhým stlačením sa dostaneme k zmene počtu hodín.
Tretím sa dostaneme späť na základnú obrazovku tenztokrát už ale so zmenenou hodnotou času.
Tlačidlom štart/pauza spustími časovač, pokím časovač beží krokový motror sa bude otáčať a led diódy svietiť.
Po podržaní tlačidla štart alebo skončení časovača sa vrátime na základnú obrazovku.
Súbory, kód a doplnujuce foto: Médiá:Tinak-DTV.zip