AI kvetinac

From Digitálne technológie výroby
Jump to: navigation, search

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