Operácie

Triediaca stanica: Rozdiel medzi revíziami

Z SensorWiki

(Snímače)
(3D Model)
 
(12 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 9: Riadok 9:
 
Cieľom projektu je vytvorenie triediacej stanice farebných cukríkov '''SKITTLES'''.
 
Cieľom projektu je vytvorenie triediacej stanice farebných cukríkov '''SKITTLES'''.
  
 +
__TOC__
  
 
'''Prečo?'''  
 
'''Prečo?'''  
  
 
Balíček SKITTLES obsahuje viacero farieb cukríkov s rôznymi príchuťami. Po roztriedení môže konzument začať ktoroukoľvek farbou alebo príchuťou bez nutnosti prehľadávania obsahu balíčka.  
 
Balíček SKITTLES obsahuje viacero farieb cukríkov s rôznymi príchuťami. Po roztriedení môže konzument začať ktoroukoľvek farbou alebo príchuťou bez nutnosti prehľadávania obsahu balíčka.  
 +
  
 
'''Ako ?'''
 
'''Ako ?'''
Riadok 27: Riadok 29:
  
 
==3D Model==
 
==3D Model==
[[Médiá:PrílohaDTV.pdf|Model]] mechanizmu pre podávanie a triedenie cukríkov.
+
[[Médiá: PrílohaDTV.pdf|Model]] mechanizmu pre podávanie a triedenie cukríkov.
  
 
[[Súbor:3D model.jpg|center|300px]]
 
[[Súbor:3D model.jpg|center|300px]]
Riadok 42: Riadok 44:
 
[[Súbor:RGB_Snimac.jpg|left|300px]]
 
[[Súbor:RGB_Snimac.jpg|left|300px]]
 
[[Súbor:IRsnimac.jpg|center|200px]]
 
[[Súbor:IRsnimac.jpg|center|200px]]
 +
  
 
==Konštrukcia==
 
==Konštrukcia==
  
Ako materiál sme využili bukovú [https://www.obi.sk/police-a-nabytkove-dosky/preglejka-1200-mm-x-600-mm-hrubka-4-mm-buk/p/5010418 preglejku] hrúbky 4mm. Laserom boli narezané jednotlivé diely z ktorých je zostavená konštrukcia triediacej stanice. Rozmer preglejky 1200*600 musel by upravený kvôli rozmeru rezacieho stola lasera, rozmer 800*600 (žltý obrys na obrázku).
+
Pre vytvorenie konštrukcie je využitá buková [https://www.obi.sk/police-a-nabytkove-dosky/preglejka-1200-mm-x-600-mm-hrubka-4-mm-buk/p/5010418 preglejka] hrúbky 4mm. Laserom boli narezané jednotlivé diely z ktorých je zostavená celá konštrukcia triediacej stanice. Rozmer preglejky 1200*600 bol upravený kvôli rozmeru rezacieho stola lasera, rozmer 800*600 (žltý obrys na obrázku).
 
[[Súbor:NakresKonstrukcie.png|900px]]
 
[[Súbor:NakresKonstrukcie.png|900px]]
Rezanie konštrukcie.
 
  
  
 +
 +
Rezanie konštrukcie.
  
 
[[Súbor:RezanieKonstrukcie.jpg|850px]]
 
[[Súbor:RezanieKonstrukcie.jpg|850px]]
  
Rozoberateľné spoje za pomoci puzdrovej matice s rôznou dlážkou skrutky (20,30mm).
+
Kvôli pohldnému rozoberaniu boli na spájanie použití puzdrové matice s rôznou dĺžkou skrutiek (20,30mm).
 
[[Súbor:PuzdrovaMaticaSoSrobom.jpg|170px]]
 
[[Súbor:PuzdrovaMaticaSoSrobom.jpg|170px]]
  
Riadok 63: Riadok 67:
  
  
Výslená konštrukcia.
+
Vyhotovená konštrukcia.
  
 
[[Súbor:obrazok_20190524_163901.jpg|850px]]
 
[[Súbor:obrazok_20190524_163901.jpg|850px]]
  
 
==Schéma zapojenia==
 
==Schéma zapojenia==
Schéma zapojenia servomotorov a periférií linky.
+
Schéma zapojenia servomotorov a ostatných periférií.
  
 
[[Súbor:SchemaDTV.png|850px]]
 
[[Súbor:SchemaDTV.png|850px]]
  
==Triedenie cukríkov==
+
==Výsledný proces triedenia==
 
[[Súbor:GifVideo.gif|center]]
 
[[Súbor:GifVideo.gif|center]]
  
* Popisat proces premeny napadu na hmotny (funkcny) produkt
+
== Použité zdroje ==
* Vyspecifikovat potrebny material (uprednostnujeme vlastnych alebo existujucich komponentov, v pripade potreby vieme pomoct)<BR> vystupom bude zhmotneny napad a aj navod - krok za krokom pre reprodukciu produktu
 
  
 +
Užitočné odkazy:
 +
* [https://www.adafruit.com/product/1334 Adfruit RGB sensor]
 +
* [https://www.sparkfun.com/products/9453 Sparkfun IR sensor]
 +
* [https://www.tinkercad.com Tinkercad schéma zapojenia]
 +
* [https://www.arduino.cc Arduino IDE]
  
[http://www.example.com link title]
+
== Program ==
 +
Program triediacej stanice:
  
[[Súbor:MojObrazok2.jpg|center|200px]]
+
<source lang="c">
  
[[Médiá:MojZdrojak.c]]
+
#include "Servo.h"
 +
#include "Wire.h"
 +
#include "Adafruit_TCS34725.h"
  
 +
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X);
  
'''Použité zdroje:'''
+
//variables
  
* Zoznam použitej literatúry, vrátane katalógových údajov (datasheet), internetových odkazov a pod.
+
Servo feed;  // feed wheel
 +
Servo sort;    // deflection mechanism
  
__TOC__
+
int IR_pin = 0;  //IR sensor
 +
int IR_value=0;  //value from IR sensor
 +
int Led_pin=11; // RBG sensor lighting
  
== Analýza ==
+
int blue = 10;    //RGB led blue pin
 +
int green  = 9;  //RGB led green pin   
 +
int red  = 6;      //RGB led red pin
  
V tejto časti popíšete ako idete daný problém riešiť. Uvediete sem aj všetky potrebné technické údaje,  
+
//*Color conditions of candies
ktoré sú potrebné na úspešné vyriešenie projektu. Napríklad:
+
    int sOrange[6]={140,175,45,65,22,32};
 +
    int sGreen[6]={80,100,95,115,30,40};
 +
    int sRed[6]={132,175,55,70,32,40};
 +
    int sPurple[6]={110,137,73,84,40,50};
 +
    int sYellow[6]={117,137,70,83,20,32};
  
* popis komunikačnej zbernice (i2c, 1-wire, RS-232 a pod.)
+
void setup() {
* obrázok zapojenia vývodov použitej súčiastky
+
  Serial.begin(9600);
* odkaz na katalógový list
+
  Serial.println("Arduino sotring machine");
* priebehy dôležitých signálov
 
* este jedna polozka
 
  
 +
  feed.attach(5); 
 +
  feed.write(0);
 +
 
 +
  sort.attach(3);
 +
  sort.write(90);
 +
 
 +
  pinMode(Led_pin,OUTPUT);
 +
  digitalWrite(Led_pin,LOW);
  
== Popis riešenia ==
+
  pinMode(green,OUTPUT);
 +
  pinMode(red,OUTPUT);
 +
  pinMode(blue,OUTPUT);
 +
 
 +
  //Control conection to RGB sensor
 +
  if (tcs.begin()) {
 +
  Serial.println("Sensor ready");
 +
  } else {
 +
  Serial.println("Sensor filed");
 +
  while (1);
 +
  }
  
Sem opíšete ako konkrétne ste problém vyriešili. Začnite popisom pripojenia k procesoru
+
}
(nezabudnite na schému zapojenia!) a zdôraznite ktoré jeho periférie ste pritom využili.
 
  
'''Schéma zapojenia snímača'''
+
void loop() {
[[Súbor:Zapojenie.png]]
+
  IR_value=analogRead(IR_pin);
  
[[Súbor:3D model.jpg]]
+
  if(IR_value>450)    //feed wheel interupt
 +
  {
 +
    feed.write(90);
 +
    delay(350);
 +
    digitalWrite(Led_pin,HIGH);
  
Pozn.: Názov obrázku musí byť jedinečný, uvedomte si, že Obr1.jpg už pred vami skúsilo
+
    //color detection
nahrať už aspoň 10 študentov.
+
    int colordec=detection(); 
 +
 +
    //candy classification
 +
    divert(colordec);
 +
    delay(300);
 +
    feed.write(0);
 +
    delay(350);
 +
  }
  
[[Súbor:MojObrazok.jpg|center|250px]]
+
}
  
=== Algoritmus a program ===
 
  
Uveďte stručný popis algoritmu, v akom jazyku a verzii vývojového prostredia ste ho vytvorili.  
+
//function of color detection
Je vhodné nakresliť aspoň hrubú štruktúru programu napríklad vo forme vývojového diagramu.  
+
int detection(){
Rozsiahly program pre lepšiu prehľadnosť rozdeľte do viacerých súborov.
+
    float red, green, blue, clean;
 +
    int color_num;
 +
    String detected="";
 +
   
 +
    tcs.getRGB(&red, &green, &blue);
 +
   
 +
    //write a color spectrum
 +
    Serial.print("R:\t"); Serial.print(int(red));
 +
    Serial.print("\tG:\t"); Serial.print(int(green));
 +
    Serial.print("\tB:\t"); Serial.print(int(blue));
 +
    Serial.print("\t");
  
Vyberte podstatné časti zdrojového kódu, použite na to prostredie ''source'':
+
    //conditions of colors
 +
    if((sOrange[0]<red && red<sOrange[1]) && (sOrange[2]<green && green<sOrange[3]) && (sOrange[4]<blue && blue<sOrange[5]))
 +
    {
 +
    detected="orange";
 +
    color_num=1;
 +
    }
 +
    else if((sGreen[0]<red && red<sGreen[1]) && (sGreen[2]<green && green<sGreen[3]) && (sGreen[4]<blue && blue<sGreen[5]))
 +
    {
 +
    detected="green"; 
 +
    color_num=2;
 +
    }
 +
    else if((sRed[0]<red && red<sRed[1]) && (sRed[2]<green && green<sRed[3]) && (sRed[4]<blue && blue<sRed[5]))
 +
    {
 +
    detected="red"; 
 +
    color_num=3;
 +
    }
 +
    else if((sPurple[0]<red && red<sPurple[1]) && (sPurple[2]<green && green<sPurple[3]) && (sPurple[4]<blue && blue<sPurple[5]))
 +
    {
 +
    detected="purple"; 
 +
    color_num=4;
 +
    }
 +
    else if((sYellow[0]<red && red<sYellow[1]) && (sYellow[2]<green && green<sYellow[3]) && (sYellow[4]<blue && blue<sYellow[5]))
 +
    {
 +
    detected="yellow"; 
 +
    color_num=5;
 +
    }
 +
    else{
 +
    detected="blank";
 +
    color_num=0;
 +
    }
  
<source lang="c">
+
    Serial.print("Color:\t");
/* A nezabudnite zdroják hojne komentovať  */
+
    Serial.println(detected);
 +
    return color_num;
 +
  }
  
int main(void) {
+
// function of servo 2 positioning 
      
+
void divert(int color)
     printf("Hello, World!\n");   
+
{
     return(0);   
+
  switch (color) {
 +
  case 1: //orange
 +
     sort.write(10);
 +
    analogWrite(red,255);
 +
    analogWrite(green,127); 
 +
    analogWrite(blue,80);
 +
    break;
 +
  case 2: //green
 +
    sort.write(45);
 +
     analogWrite(red,0);
 +
    analogWrite(green,255);
 +
    analogWrite(blue,0);
 +
    break;
 +
  case 3://red
 +
    sort.write(90);
 +
    analogWrite(red,255);
 +
    analogWrite(green,0);   
 +
     analogWrite(blue,0);
 +
    break;
 +
  case 4: //purple
 +
    sort.write(135);
 +
    analogWrite(red,0);
 +
    analogWrite(green,0);   
 +
    analogWrite(blue,255);
 +
    break; 
 +
  case 5: //yellow
 +
    sort.write(170);
 +
    analogWrite(red,255);
 +
    analogWrite(green,255); 
 +
    analogWrite(blue,0);
 +
    break;
 +
  default: //empty
 +
    analogWrite(red,0);
 +
    analogWrite(green,0);
 +
    analogWrite(blue,0);
 +
    break;
 +
  }
 
}
 
}
 
</source>
 
</source>
  
Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu!
 
 
Zdrojový kód: [[Médiá:Serial.h|serial.h]] a [[Médiá:Pip.c|main.c]]
 
 
[[Médiá:MojProgram.c|program.c]]
 
 
 
=== Výsledok ===
 
 
Nezabudnite zdokumentovať výsledok vašej práce. Určite sem patria fotografie, video
 
a zhodnotenie ako ste spokojní s výsledkom,
 
 
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.
 
  
 +
Zdrojový kód: [[Médiá:ProgramDTV_red.ino|stanica.ino]]
  
 
[[Category:DTV2019]]
 
[[Category:DTV2019]]

Aktuálna revízia z 17:39, 27. máj 2019

Autor: Patrik Herčút
Študijný odbor: Robotika a kybernetika 3. Bc. (2019)

Opis projektu

Triediaca stanica

Cieľom projektu je vytvorenie triediacej stanice farebných cukríkov SKITTLES.

Prečo?

Balíček SKITTLES obsahuje viacero farieb cukríkov s rôznymi príchuťami. Po roztriedení môže konzument začať ktoroukoľvek farbou alebo príchuťou bez nutnosti prehľadávania obsahu balíčka.


Ako ?

Triediaca stanica pozostáva z týchto častí:

  1. Násypník
  2. RGB snímač
  3. IR snímač
  4. Podávač
  5. Servomotor podávača
  6. Triediaci mechanizmus
  7. Servomotor triediaceho mechanizmu

Obrazok1.png

3D Model

Model mechanizmu pre podávanie a triedenie cukríkov.

3D model.jpg

Servomotory

Pre chod podávacieho zariadenia je použitý servomotor s kontinuálnym chodom. Triedenie zabezpečuje klasické modelárske servo.

ServoObr1.jpg

Snímače

Snímače podávača

Snímanie farby cukríkov zabezbečuje RGB snímač, správnu pozíciu podávacieho bubna určuje IR snímač.

RGB Snimac.jpg
IRsnimac.jpg


Konštrukcia

Pre vytvorenie konštrukcie je využitá buková preglejka hrúbky 4mm. Laserom boli narezané jednotlivé diely z ktorých je zostavená celá konštrukcia triediacej stanice. Rozmer preglejky 1200*600 bol upravený kvôli rozmeru rezacieho stola lasera, rozmer 800*600 (žltý obrys na obrázku). NakresKonstrukcie.png


Rezanie konštrukcie.

RezanieKonstrukcie.jpg

Kvôli pohldnému rozoberaniu boli na spájanie použití puzdrové matice s rôznou dĺžkou skrutiek (20,30mm). PuzdrovaMaticaSoSrobom.jpg

Obrazok 20190524 163948.jpg




Vyhotovená konštrukcia.

Obrazok 20190524 163901.jpg

Schéma zapojenia

Schéma zapojenia servomotorov a ostatných periférií.

SchemaDTV.png

Výsledný proces triedenia

GifVideo.gif

Použité zdroje

Užitočné odkazy:

Program

Program triediacej stanice:

#include "Servo.h"
#include "Wire.h"
#include "Adafruit_TCS34725.h"

Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X);

//variables

Servo feed;   // feed wheel 
Servo sort;    // deflection mechanism

int IR_pin = 0;   //IR sensor
int IR_value=0;  //value from IR sensor
int Led_pin=11; // RBG sensor lighting

int blue = 10;    //RGB led blue pin
int green  = 9;  //RGB led green pin    
int red  = 6;      //RGB led red pin

//*Color conditions of candies 
    int sOrange[6]={140,175,45,65,22,32};
    int sGreen[6]={80,100,95,115,30,40};
    int sRed[6]={132,175,55,70,32,40};
    int sPurple[6]={110,137,73,84,40,50};
    int sYellow[6]={117,137,70,83,20,32};

void setup() {
  Serial.begin(9600);
  Serial.println("Arduino sotring machine");

  feed.attach(5);  
  feed.write(0);
  
  sort.attach(3); 
  sort.write(90);
  
  pinMode(Led_pin,OUTPUT);
  digitalWrite(Led_pin,LOW);

  pinMode(green,OUTPUT);
  pinMode(red,OUTPUT);
  pinMode(blue,OUTPUT);
  
  //Control conection to RGB sensor 
   if (tcs.begin()) {
   Serial.println("Sensor ready");
   } else {
   Serial.println("Sensor filed");
   while (1); 
   } 

}

void loop() {
  IR_value=analogRead(IR_pin);

  if(IR_value>450)     //feed wheel interupt
  {
    feed.write(90);
    delay(350);
    digitalWrite(Led_pin,HIGH);

     //color detection
     int colordec=detection();  
 
    //candy classification
    divert(colordec);
    delay(300);
    feed.write(0);
    delay(350);
  }

}


//function of color detection
int detection(){
    float red, green, blue, clean;
    int color_num;
    String detected="";
    
    tcs.getRGB(&red, &green, &blue);
    
    //write a color spectrum
    Serial.print("R:\t"); Serial.print(int(red)); 
    Serial.print("\tG:\t"); Serial.print(int(green)); 
    Serial.print("\tB:\t"); Serial.print(int(blue));
    Serial.print("\t");

    //conditions of colors 
    if((sOrange[0]<red && red<sOrange[1]) && (sOrange[2]<green && green<sOrange[3]) && (sOrange[4]<blue && blue<sOrange[5]))
    {
    detected="orange";
    color_num=1;
    }
    else if((sGreen[0]<red && red<sGreen[1]) && (sGreen[2]<green && green<sGreen[3]) && (sGreen[4]<blue && blue<sGreen[5]))
    {
    detected="green";  
    color_num=2;
    }
    else if((sRed[0]<red && red<sRed[1]) && (sRed[2]<green && green<sRed[3]) && (sRed[4]<blue && blue<sRed[5]))
    {
    detected="red";  
    color_num=3;
    }
     else if((sPurple[0]<red && red<sPurple[1]) && (sPurple[2]<green && green<sPurple[3]) && (sPurple[4]<blue && blue<sPurple[5]))
    {
    detected="purple";  
    color_num=4;
    }
     else if((sYellow[0]<red && red<sYellow[1]) && (sYellow[2]<green && green<sYellow[3]) && (sYellow[4]<blue && blue<sYellow[5]))
    {
    detected="yellow";  
    color_num=5;
    }
    else{ 
    detected="blank";
    color_num=0;
    }

    Serial.print("Color:\t");
    Serial.println(detected);
    return color_num;
  }

// function of servo 2 positioning  
void divert(int color)
{
  switch (color) {
  case 1: //orange
    sort.write(10);
     analogWrite(red,255);
     analogWrite(green,127);  
     analogWrite(blue,80);
    break;
  case 2: //green
    sort.write(45);
    analogWrite(red,0);
    analogWrite(green,255);
    analogWrite(blue,0);
    break;
  case 3://red
    sort.write(90);
    analogWrite(red,255);
    analogWrite(green,0);  
    analogWrite(blue,0);
    break;
  case 4: //purple
    sort.write(135);
    analogWrite(red,0);
    analogWrite(green,0);  
    analogWrite(blue,255);
    break;   
  case 5: //yellow
    sort.write(170);
    analogWrite(red,255);
    analogWrite(green,255);  
    analogWrite(blue,0);
    break;
  default: //empty
    analogWrite(red,0);
    analogWrite(green,0);
    analogWrite(blue,0);
    break;
  }
}


Zdrojový kód: stanica.ino