Operácie

Zariadenie na vytvrdzovanie resinu pre MLSA 3D tlačiarne: Rozdiel medzi revíziami

Z SensorWiki

(Analýza a opis riešenia)
(Analýza a opis riešenia)
Riadok 19: Riadok 19:
  
 
Elektrická časť zabezpečuje spája programovú a fyzickú časť. slúži na prenos a riadenie.   
 
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:Snímka obrazovky 2023-06-23 181439.png|400px|thumb|center|Schéma zapojenia LCD displeja.]]
 
  
 
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.
 
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.]]
 
[[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.
 
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.
 
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 181903.png|400px|thumb|center|Rozložená krabička.]]
 
 
 
[[Súbor:Snímka obrazovky 2023-06-23 183225.png|400px|thumb|center|Model Taniera.]]
 
[[Súbor:Snímka obrazovky 2023-06-23 183225.png|400px|thumb|center|Model Taniera.]]
  

Verzia zo dňa a času 16:49, 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é.

Zapojenie.

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.

Schéma zapojenia.

Pozostáva z Arduina, krokového motora, paralelne zapojených diód, a niekolkých ovládacích prvkov.

Schéma zapojenia.


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.

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.

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.

Model Taniera.

[[Súbor::Snímka obrazovky 2023-06-23 183803.png|400px|thumb|center|Model stlpiku.]]


Algoritmus a program

Algoritmus programu vychádza z artuino countdown timera.


<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">

  1. include <LiquidCrystal.h>
  2. include<EEPROM.h>
  3. 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);

}

Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:

Zdrojový kód: zdrojaky.zip

Overenie

Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.

Aplikácia.

Video: https://www.youtube.com/watch?v=ZnA87YROfug

Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.