Triediaca stanica: Rozdiel medzi revíziami
Zo stránky SensorWiki
(27 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 6: | Riadok 6: | ||
== Opis projektu == | == Opis projektu == | ||
[[Súbor: | [[Súbor:GifVideo.gif|náhľad|Triediaca stanica]] | ||
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 ?''' | ||
Triediaca stanica pozostáva z týchto častí | Triediaca stanica pozostáva z týchto častí: | ||
#Násypník | #Násypník | ||
#RGB | #RGB snímač | ||
#IR snímač | #IR snímač | ||
#Podávač | #Podávač | ||
Riadok 24: | Riadok 26: | ||
#Triediaci mechanizmus | #Triediaci mechanizmus | ||
#Servomotor triediaceho mechanizmu | #Servomotor triediaceho mechanizmu | ||
[[Súbor:Obrazok1.png]] | |||
==3D Model== | |||
[[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]] | ||
== Servomotory == | |||
Pre chod podávacieho zariadenia je použitý [http://servodatabase.com/servo/gws/s35-std servomotor] s kontinuálnym chodom. | Pre chod podávacieho zariadenia je použitý [http://servodatabase.com/servo/gws/s35-std servomotor] s kontinuálnym chodom. Triedenie zabezpečuje klasické modelárske [https://www.thanksbuyer.com/gws-digital-servo-sail-winch-s125-1t-2bb-360-degree-7-6kg-106oz-in-1-28sec-24047 servo]. | ||
[[Súbor:ServoObr1.jpg|center|300px]] | [[Súbor:ServoObr1.jpg|center|300px]] | ||
== Snímače == | |||
[[Súbor:ServoObr2.jpg|náhľad|Snímače podávača|200px]] | [[Súbor:ServoObr2.jpg|náhľad|Snímače podávača|200px]] | ||
Snímanie | Snímanie farby cukríkov zabezbečuje [https://www.adafruit.com/product/1334 RGB snímač], správnu pozíciu podávacieho bubna určuje [https://www.sparkfun.com/products/9453 IR snímač.] | ||
[[Súbor:RGB_Snimac.jpg|left|300px]] | [[Súbor:RGB_Snimac.jpg|left|300px]] | ||
Riadok 44: | Riadok 46: | ||
==Konštrukcia== | |||
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]] | ||
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| | [[Súbor:PuzdrovaMaticaSoSrobom.jpg|170px]] | ||
[[Súbor: | [[Súbor:obrazok_20190524_163948.jpg|450px]] | ||
Vyhotovená konštrukcia. | |||
[[Súbor:obrazok_20190524_163901.jpg|850px]] | |||
==Schéma zapojenia== | |||
Schéma zapojenia servomotorov a ostatných periférií. | |||
[[Súbor:SchemaDTV.png|850px]] | |||
== | ==Výsledný proces triedenia== | ||
[[Súbor:GifVideo.gif|center]] | |||
== Použité zdroje == | |||
* | 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] | |||
== Program == | |||
Program triediacej stanice: | |||
= | <source lang="c"> | ||
#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; | |||
} | |||
} | |||
</source> | |||
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
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í:
- Násypník
- RGB snímač
- IR snímač
- Podávač
- Servomotor podávača
- Triediaci mechanizmus
- Servomotor triediaceho mechanizmu
3D Model
Model mechanizmu pre podávanie a triedenie cukríkov.
Servomotory
Pre chod podávacieho zariadenia je použitý servomotor s kontinuálnym chodom. Triedenie zabezpečuje klasické modelárske servo.
Snímače
Snímanie farby cukríkov zabezbečuje RGB snímač, správnu pozíciu podávacieho bubna určuje IR snímač.
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).
Rezanie konštrukcie.
Kvôli pohldnému rozoberaniu boli na spájanie použití puzdrové matice s rôznou dĺžkou skrutiek (20,30mm).
Vyhotovená konštrukcia.
Schéma zapojenia
Schéma zapojenia servomotorov a ostatných periférií.
Výsledný proces triedenia
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