Zariadenie na vytvrdzovanie resinu pre MLSA 3D tlačiarne: Rozdiel medzi revíziami
Zo stránky SensorWiki
Riadok 290: | Riadok 290: | ||
[[Súbor:Snímka obrazovky 2023-06-23 203616.png|400px|thumb|center|Aplikácia.]] | [[Súbor:Snímka obrazovky 2023-06-23 203616.png|400px|thumb|center|Aplikácia.]] | ||
[[Súbor:Snímka obrazovky 2023-06-23 203723.png|400px|thumb|center|Aplikácia.]] | |||
[[Súbor:Snímka obrazovky 2023-06-23 203742.png|400px|thumb|center|Aplikácia.]] | |||
[[Súbor:Snímka obrazovky 2023-06-23 203802.png|400px|thumb|center|Aplikácia.]] | |||
[[Súbor:Snímka obrazovky 2023-06-23 204039.png|400px|thumb|center|Aplikácia.]] | |||
[[Súbor:Snímka obrazovky 2023-06-23 204507.png|400px|thumb|center|Aplikácia.]] | |||
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte. | Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte. | ||
[[Category:DTV]][[Category:DTV2023]] | [[Category:DTV]][[Category:DTV2023]] |
Verzia z 18:46, 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é.
![](/sensorwiki/images/thumb/f/f4/IMG_20230623_195259.jpg/400px-IMG_20230623_195259.jpg)
![](/sensorwiki/images/thumb/6/66/IMG_20230623_195254.jpg/400px-IMG_20230623_195254.jpg)
![](/sensorwiki/images/thumb/7/7a/IMG_20230623_163601.jpg/400px-IMG_20230623_163601.jpg)
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.
![](/sensorwiki/images/thumb/f/fb/Sn%C3%ADmka_obrazovky_2023-06-23_181439.png/400px-Sn%C3%ADmka_obrazovky_2023-06-23_181439.png)
Pozostáva z Arduina, krokového motora, paralelne zapojených diód, a niekolkých ovládacích prvkov.
![](/sensorwiki/images/thumb/b/bf/Sn%C3%ADmka_obrazovky_2023-06-23_184828.png/400px-Sn%C3%ADmka_obrazovky_2023-06-23_184828.png)
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.
![](/sensorwiki/images/thumb/9/95/Sn%C3%ADmka_obrazovky_2023-06-23_181810.png/400px-Sn%C3%ADmka_obrazovky_2023-06-23_181810.png)
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.
![](/sensorwiki/images/thumb/a/af/Sn%C3%ADmka_obrazovky_2023-06-23_181903.png/400px-Sn%C3%ADmka_obrazovky_2023-06-23_181903.png)
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.
![](/sensorwiki/images/thumb/1/19/Sn%C3%ADmka_obrazovky_2023-06-23_183225.png/400px-Sn%C3%ADmka_obrazovky_2023-06-23_183225.png)
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ý.
![](/sensorwiki/images/3/3d/Sn%C3%ADmka_obrazovky_2023-06-23_183803.png)
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 obajý obrazovka menu.
![](/sensorwiki/images/5/5a/Sn%C3%ADmka_obrazovky_2023-06-23_203616.png)
![](/sensorwiki/images/2/2a/Sn%C3%ADmka_obrazovky_2023-06-23_203723.png)
![](/sensorwiki/images/0/04/Sn%C3%ADmka_obrazovky_2023-06-23_203742.png)
![](/sensorwiki/images/b/b2/Sn%C3%ADmka_obrazovky_2023-06-23_203802.png)
![](/sensorwiki/images/f/fe/Sn%C3%ADmka_obrazovky_2023-06-23_204039.png)
![](/sensorwiki/images/f/f5/Sn%C3%ADmka_obrazovky_2023-06-23_204507.png)
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.