Operácie

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

Z SensorWiki

(Analýza a opis riešenia)
(Overenie)
 
(33 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 8: Riadok 8:
 
Vzhľadom na to, že UV svetlo je očiam škodlivé som pridal NO-kontakt ktorý kontroluje či je veko zavreté.
 
Vzhľadom na to, že UV svetlo je očiam škodlivé som pridal NO-kontakt ktorý kontroluje či je veko zavreté.
  
[[Obrázok:Snímka obrazovky 2023-06-23 181439.png|400px|thumb|center|Zapojenie.]]
+
[[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__
  
Riadok 19: Riadok 21:
  
 
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.]]
 
+
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.]]
+
[[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.  
+
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
  
  
 
<tabs>
 
<tabs>
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
+
<tab name="Kód v prostredí Arduino IDE"><source lang="c++" style="background: LightYellow;">
 
#include <LiquidCrystal.h>
 
#include <LiquidCrystal.h>
 
#include<EEPROM.h>
 
#include<EEPROM.h>
 
#include <Stepper.h>
 
#include <Stepper.h>
 
 
const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
 
const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
Riadok 273: Riadok 281:
 
   delay(500);
 
   delay(500);
 
}
 
}
 +
</source></tab>
 
</tabs>
 
</tabs>
  
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'':
+
Súbory, kód a doplnujuce foto: [[Médiá:Tinak-DTV.zip]]
 
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.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.]]
  
Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia.
+
Súbory, kód a doplnujuce foto: [[Médiá:Tinak-DTV.zip]]
Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.
 
 
 
[[Súbor:fotka.jpg|400px|thumb|center|Aplikácia.]]
 
 
 
'''Video:'''
 
https://www.youtube.com/watch?v=ZnA87YROfug
 
  
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.
 
  
 
[[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é.

Zapojenie.
Zapojenie.
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.

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ý.

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 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.

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 -

Ukážka funkcie výrobku.

Druhým stlačením sa dostaneme k zmene počtu hodín.

Ukážka funkcie výrobku.

Tretím sa dostaneme späť na základnú obrazovku tenztokrát už ale so zmenenou hodnotou času.

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ť.

Ukážka funkcie výrobku.

Po podržaní tlačidla štart alebo skončení časovača sa vrátime na základnú obrazovku.

Ukážka funkcie výrobku.

Súbory, kód a doplnujuce foto: Médiá:Tinak-DTV.zip