Difference between revisions of "AI kvetinac"

From Digitálne technológie výroby
Jump to: navigation, search
(Čo?)
 
(34 intermediate revisions by 3 users not shown)
Line 5: Line 5:
  
 
=== Prečo? ===
 
=== Prečo? ===
 +
 +
Často sa stáva, že človek zabudne poliať kvet, čomu by mohla pomôcť pripomienka na mobil. A pekne to vyzerá.
  
 
=== Ako? ===
 
=== Ako? ===
 +
 +
Kvetináč chcem po vrstvách vyrezať laserom z preglejky, nalepiť na seba a nalakovať.
 +
 +
1. namodelovať 3D model vo Fusion <br>
 +
2. narezať model horizontálnymi rezmi <br>
 +
3. uložiť pohľady zvrchu na jednotlivé vrstvy ako 2D objekty STL <br>
 +
4. vyrezať 2D objekty z preglejky pomocou lasera <br>
 +
5. zlepiť a nalakovať
 +
 +
=== Model ===
 +
 +
3D model vo Fusion (rozmery horný priemer 11cm, dolný 8cm):
 +
 +
- Link na drive: https://drive.google.com/open?id=196svqlxRyQzkgTIjKLfy3PDOV-QP6fuS <br>
 +
- Fusion ukážka https://a360.co/2GG2G03 <br>
 +
 +
=== Zdrojový kód ===
 +
 +
Zdroj na program na meranie vlhkosti: http://www.geeetech.com/wiki/index.php/Moisture_sensor<br/><br/>
 +
Zdrojový kód na meranie vlhkosti:
 +
<source>
 +
void setup()
 +
{
 +
    Serial.begin(9600);
 +
}
 +
 +
void loop()
 +
{
 +
    Serial.print("Vlhkost: ");
 +
    Serial.println(analogRead(0));
 +
    delay(100);
 +
}
 +
</source>
 +
Popis hodnôt:<br/>
 +
0 - 300 suchá pôda<br/>
 +
300 - 700 vlhká pôda<br/>
 +
700 - 950 vo vode<br/><br/>
 +
Zdroj na program na poslanie e-mailu: https://www.instructables.com/id/ESP8266-GMail-Sender/<br/><br/>
 +
Zdrojový kód na meranie vlhkosti a poslanie e-mailu:
 +
<source>
 +
#include <ESP8266WiFi.h>
 +
#include "Gsender.h"
 +
 +
#pragma region Globals
 +
const char* ssid = "nazov";                      // Názov WIFI siete
 +
const char* password = "heslo";                  // Heslo WIFI siete
 +
uint8_t connection_state = 0;                    // Pripojené do WIFI siete alebo nie
 +
uint16_t reconnect_interval = 10000;            // Ak nie je pripojené, počkať určitý čas a skúsiť znova
 +
int sensor_pin = A0;
 +
int output_value;
 +
#pragma endregion Globals
 +
 +
uint8_t WiFiConnect(const char* nSSID = nullptr, const char* nPassword = nullptr)
 +
{
 +
    static uint16_t attempt = 0;
 +
    Serial.print("Connecting to ");
 +
    if(nSSID) {
 +
        WiFi.begin(nSSID, nPassword); 
 +
        Serial.println(nSSID);
 +
    } else {
 +
        WiFi.begin(ssid, password);
 +
        Serial.println(ssid);
 +
    }
 +
 +
    uint8_t i = 0;
 +
    while(WiFi.status()!= WL_CONNECTED && i++ < 50)
 +
    {
 +
        delay(200);
 +
        Serial.print(".");
 +
    }
 +
    ++attempt;
 +
    Serial.println("");
 +
    if(i == 51) {
 +
        Serial.print("Connection: TIMEOUT on attempt: ");
 +
        Serial.println(attempt);
 +
        if(attempt % 2 == 0)
 +
            Serial.println("Check if access point available or SSID and Password\r\n");
 +
        return false;
 +
    }
 +
    Serial.println("Connection: ESTABLISHED");
 +
    Serial.print("Got IP address: ");
 +
    Serial.println(WiFi.localIP());
 +
    return true;
 +
}
 +
 +
void Awaits()
 +
{
 +
    uint32_t ts = millis();
 +
    while(!connection_state)
 +
    {
 +
        delay(50);
 +
        if(millis() > (ts + reconnect_interval) && !connection_state){
 +
            connection_state = WiFiConnect();
 +
            ts = millis();
 +
        }
 +
    }
 +
}
 +
 +
void setup()
 +
{
 +
    Serial.begin(115200);
 +
}
 +
 +
void loop()
 +
{
 +
    output_value = analogRead(sensor_pin);
 +
    output_value = map(output_value,550,0,0,100);    //Prekonvertovanie hodnoty
 +
    output_value += 86;
 +
    String subject = "Nízka vlhkosť pôdy";    //Predmet e-mailu
 +
    if (output_value < 50) {    //E-mail sa pošle, ak vlhkosť je menšia ako 50
 +
        connection_state = WiFiConnect();
 +
        if(!connection_state)  // if not connected to WIFI
 +
        Awaits();          // constantly trying to connect
 +
        Gsender *gsender = Gsender::Instance();    // Getting pointer to class instance
 +
        String s = "Vlhkosť pôdy je: " + (String) output_value + "%";    //Obsah e-mailu
 +
        if(gsender->Subject(subject)->Send("meno@nazov.com", s))    //Názov e-mailovej adresy
 +
        {
 +
            Serial.println("Message send.");
 +
        } else {
 +
            Serial.print("Error sending message: ");
 +
            Serial.println(gsender->getError());
 +
        }
 +
        Serial.print(output_value);
 +
        Serial.println("%");
 +
    }
 +
    delay(15000);
 +
}
 +
</source><br/>
 +
Zdrojový kód na prihlásenie sa do e-mailovej schránky:
 +
<source>
 +
/* Gsender class helps send e-mails from Gmail account
 +
*  using Arduino core for ESP8266 WiFi chip
 +
*  by Boris Shobat
 +
*  September 29 2016
 +
*/
 +
#ifndef G_SENDER
 +
#define G_SENDER
 +
#define GS_SERIAL_LOG_1        // Print to Serial only server responce
 +
//#define GS_SERIAL_LOG_2      //  Print to Serial client commands and server responce
 +
#include <WiFiClientSecure.h>
 +
 +
class Gsender
 +
{
 +
    protected:
 +
        Gsender();
 +
    private:
 +
        const int SMTP_PORT = 465;
 +
        const char* SMTP_SERVER = "smtp.gmail.com";
 +
        const char* EMAILBASE64_LOGIN = "bWVub0BnbWFpbC5jb20=";    //Zakódovaný reťazec "meno@gmail.com"
 +
        const char* EMAILBASE64_PASSWORD = "aGVzbG8=";    //Zakódovaný reťazec "heslo"
 +
        const char* FROM = "meno@gmail.com";
 +
        const char* _error = nullptr;
 +
        char* _subject = nullptr;
 +
        String _serverResponce;
 +
        static Gsender* _instance;
 +
        bool AwaitSMTPResponse(WiFiClientSecure &client, const String &resp = "", uint16_t timeOut = 10000);
 +
 +
    public:
 +
        static Gsender* Instance();
 +
        Gsender* Subject(const char* subject);
 +
        Gsender* Subject(const String &subject);
 +
        bool Send(const String &to, const String &message);
 +
        String getLastResponce();
 +
        const char* getError();
 +
};
 +
#endif // G_SENDER
 +
</source>
 +
Prihlasovacie meno a heslo do e-mailovej schránky musí byť vo formáte Base64, zakódovať ich je možné tu: https://www.base64encode.org/<br/><br/>
 +
Všetky zdrojové kódy sú tu: https://drive.google.com/open?id=1tqq9l1Db_eAtwcCYC1cZGMcMdwE7F74a
  
 
== Verzia 2 ==
 
== Verzia 2 ==
 
=== Čo? ===
 
=== Čo? ===
Šesťhranný priesvitný kvetináč.
+
 
 +
Drevený rohový kvetináč z preglejky, ktorého predná strana pripomína rebrá. Vznikla z pôvodnej vlnitej štruktúry symetrickým otáčaním každej druhej vrstvy.
  
 
=== Prečo? ===
 
=== Prečo? ===
Rozhodol som sa vyrobiť tento kvetináč preto, lebo sa mi tvar šesťhranného hranola páči, a nevidel som taký kvetináč na trhu.
 
  
 
=== Ako? ===
 
=== Ako? ===
Určím si rozmery častí kvetináča, nakreslím ich na počítači, dám ich vyrezať z plexiskla na laserovom vyrezávači, obrúsim ich hrany na CNC fréze, a zlepím ich spolu lepidlom.
 
  
 +
Najprv sme vytvorili 3D model kvetináča použitím softvéru Autodesk Fusion 360. Následne sme jednotlivé vrstvy sprojektovali do dolnej podstavy a rozložili ich do 3 štvorcov s rozmermi 60x60 cm, ktoré predstavovali veľkosť nášho materiálu, konkrétne preglejky
 +
 +
=== Názorná ukážka ===
 +
 +
Kvetináč bol vymodelovaný použitím sofvéru Autodesk Fusion 360. Nižšie je názorná ukážka modelu. [https://drive.google.com/drive/u/1/folders/1IHn-nWWgMWB3FRP89jw_fRsWioLkzCm0 Link] na google drive, kde je uložených viacero pohľadov.
  
'''3d model''': https://drive.google.com/open?id=1_6PvbepG9hUyuB9lKrgDpCNDS893_qTV
+
[[File:Render2.jpg|thumb|center|800px| 3D Model]]

Latest revision as of 13:47, 23 September 2018

Verzia 1

Čo?

Kvetináč asymetrického tvaru so senzorom vlhkosti, ktorý pošle na mobil správu keď ho treba poliať.

Prečo?

Často sa stáva, že človek zabudne poliať kvet, čomu by mohla pomôcť pripomienka na mobil. A pekne to vyzerá.

Ako?

Kvetináč chcem po vrstvách vyrezať laserom z preglejky, nalepiť na seba a nalakovať.

1. namodelovať 3D model vo Fusion
2. narezať model horizontálnymi rezmi
3. uložiť pohľady zvrchu na jednotlivé vrstvy ako 2D objekty STL
4. vyrezať 2D objekty z preglejky pomocou lasera
5. zlepiť a nalakovať

Model

3D model vo Fusion (rozmery horný priemer 11cm, dolný 8cm):

- Link na drive: https://drive.google.com/open?id=196svqlxRyQzkgTIjKLfy3PDOV-QP6fuS
- Fusion ukážka https://a360.co/2GG2G03

Zdrojový kód

Zdroj na program na meranie vlhkosti: http://www.geeetech.com/wiki/index.php/Moisture_sensor

Zdrojový kód na meranie vlhkosti:

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    Serial.print("Vlhkost: ");
    Serial.println(analogRead(0)); 
    delay(100);
}

Popis hodnôt:
0 - 300 suchá pôda
300 - 700 vlhká pôda
700 - 950 vo vode

Zdroj na program na poslanie e-mailu: https://www.instructables.com/id/ESP8266-GMail-Sender/

Zdrojový kód na meranie vlhkosti a poslanie e-mailu:

#include <ESP8266WiFi.h>
#include "Gsender.h"

#pragma region Globals
const char* ssid = "nazov";                      // Názov WIFI siete
const char* password = "heslo";                  // Heslo WIFI siete
uint8_t connection_state = 0;                    // Pripojené do WIFI siete alebo nie
uint16_t reconnect_interval = 10000;             // Ak nie je pripojené, počkať určitý čas a skúsiť znova
int sensor_pin = A0; 
int output_value;
#pragma endregion Globals

uint8_t WiFiConnect(const char* nSSID = nullptr, const char* nPassword = nullptr)
{
    static uint16_t attempt = 0;
    Serial.print("Connecting to ");
    if(nSSID) {
        WiFi.begin(nSSID, nPassword);  
        Serial.println(nSSID);
    } else {
        WiFi.begin(ssid, password);
        Serial.println(ssid);
    }

    uint8_t i = 0;
    while(WiFi.status()!= WL_CONNECTED && i++ < 50)
    {
        delay(200);
        Serial.print(".");
    }
    ++attempt;
    Serial.println("");
    if(i == 51) {
        Serial.print("Connection: TIMEOUT on attempt: ");
        Serial.println(attempt);
        if(attempt % 2 == 0)
            Serial.println("Check if access point available or SSID and Password\r\n");
        return false;
    }
    Serial.println("Connection: ESTABLISHED");
    Serial.print("Got IP address: ");
    Serial.println(WiFi.localIP());
    return true;
}

void Awaits()
{
    uint32_t ts = millis();
    while(!connection_state)
    {
        delay(50);
        if(millis() > (ts + reconnect_interval) && !connection_state){
            connection_state = WiFiConnect();
            ts = millis();
        }
    }
}

void setup()
{
    Serial.begin(115200);
}

void loop()
{
    output_value = analogRead(sensor_pin);
    output_value = map(output_value,550,0,0,100);    //Prekonvertovanie hodnoty
    output_value += 86;
    String subject = "Nízka vlhkosť pôdy";    //Predmet e-mailu
    if (output_value < 50) {    //E-mail sa pošle, ak vlhkosť je menšia ako 50
        connection_state = WiFiConnect();
        if(!connection_state)  // if not connected to WIFI
        Awaits();          // constantly trying to connect
        Gsender *gsender = Gsender::Instance();    // Getting pointer to class instance
        String s = "Vlhkosť pôdy je: " + (String) output_value + "%";    //Obsah e-mailu
        if(gsender->Subject(subject)->Send("meno@nazov.com", s))    //Názov e-mailovej adresy
        {
            Serial.println("Message send.");
        } else {
            Serial.print("Error sending message: ");
            Serial.println(gsender->getError());
        }
        Serial.print(output_value);
        Serial.println("%");
    }
    delay(15000);
}

Zdrojový kód na prihlásenie sa do e-mailovej schránky:

/* Gsender class helps send e-mails from Gmail account
*  using Arduino core for ESP8266 WiFi chip
*  by Boris Shobat
*  September 29 2016
*/
#ifndef G_SENDER
#define G_SENDER
#define GS_SERIAL_LOG_1         // Print to Serial only server responce
//#define GS_SERIAL_LOG_2       //  Print to Serial client commands and server responce
#include <WiFiClientSecure.h>

class Gsender
{
    protected:
        Gsender();
    private:
        const int SMTP_PORT = 465;
        const char* SMTP_SERVER = "smtp.gmail.com";
        const char* EMAILBASE64_LOGIN = "bWVub0BnbWFpbC5jb20=";    //Zakódovaný reťazec "meno@gmail.com"
        const char* EMAILBASE64_PASSWORD = "aGVzbG8=";    //Zakódovaný reťazec "heslo"
        const char* FROM = "meno@gmail.com";
        const char* _error = nullptr;
        char* _subject = nullptr;
        String _serverResponce;
        static Gsender* _instance;
        bool AwaitSMTPResponse(WiFiClientSecure &client, const String &resp = "", uint16_t timeOut = 10000);

    public:
        static Gsender* Instance();
        Gsender* Subject(const char* subject);
        Gsender* Subject(const String &subject);
        bool Send(const String &to, const String &message);
        String getLastResponce();
        const char* getError();
};
#endif // G_SENDER

Prihlasovacie meno a heslo do e-mailovej schránky musí byť vo formáte Base64, zakódovať ich je možné tu: https://www.base64encode.org/

Všetky zdrojové kódy sú tu: https://drive.google.com/open?id=1tqq9l1Db_eAtwcCYC1cZGMcMdwE7F74a

Verzia 2

Čo?

Drevený rohový kvetináč z preglejky, ktorého predná strana pripomína rebrá. Vznikla z pôvodnej vlnitej štruktúry symetrickým otáčaním každej druhej vrstvy.

Prečo?

Ako?

Najprv sme vytvorili 3D model kvetináča použitím softvéru Autodesk Fusion 360. Následne sme jednotlivé vrstvy sprojektovali do dolnej podstavy a rozložili ich do 3 štvorcov s rozmermi 60x60 cm, ktoré predstavovali veľkosť nášho materiálu, konkrétne preglejky

Názorná ukážka

Kvetináč bol vymodelovaný použitím sofvéru Autodesk Fusion 360. Nižšie je názorná ukážka modelu. Link na google drive, kde je uložených viacero pohľadov.

3D Model