Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Kleurensorteermachine

Componenten en benodigdheden

Arduino Nano R3
× 1
TCS 34725 RGB-sensor
× 1
LM2596 buck-converter
× 1
MG-90S servo's
× 2
MR105ZZ kogellager (5 x 10 x 4 mm)
× 3
608RS of 608ZZ kogellager (8 x 22 x 7 mm)
× 1
6003RS kogellager (17x35x10 mm)
× 1
M3*15 mm verzonken schroef
× 1
M2x10 zelftappende schroeven
× 20
RGB-led (gemeenschappelijke anode(+))
× 1
220 ohm weerstanden
× 3
draden
× 1
2.1x5.5mm jackplug
× 1
krimpkous
× 1
dupont connectoren
× 1
9V of 12v voeding (minimaal 1 ampère)
× 1
5X 22mm(OD)x100mm reageerbuisjes (van Danmu Art)
× 1
Skettles!!!!!!!!!!
× 1

Benodigde gereedschappen en machines

3D-printer
schroevendraaier
draadstripper
tang
soldeerbout
multimeter
krimptang

Over dit project


INTRO.

Het grappige is dat dit project nooit bedoeld was.

Ongeveer 3,5 jaar geleden begon ik met het ontwerpen van een veel hippere kleurensorteermachine en zoals veel van mijn projecten eindigde het halfaf met stof verzamelen op de vensterbank (ik weet zeker dat niemand anders hier iets mee kan, haha).

Om een ​​lang verhaal kort te maken, een paar maanden geleden besloot ik dit oude project weer op te pakken. Het eerste dat ik moest uitzoeken, was hoe ik Skittles uit een reservoir kon verzamelen en hun kleur vrij betrouwbaar kon controleren terwijl ik het systeem zo compact mogelijk hield (wat ik de eerste keer niet lukte). Ik slaagde erin mezelf over te halen om een ​​eenvoudigere kleurensorteermachine te ontwerpen om het ontwerp van het verzamelsysteem goed te krijgen. Ik dacht dwaas dat het een baan van 2 weekenden zou zijn, leuk, gemakkelijk en snel... Oh boy!!! had ik het mis...

Ik had 2 totaal verschillende ontwerpen en veel aangepaste prototypes nodig om iets te krijgen dat op een acceptabele manier werkte (ik ervaar nog steeds af en toe wat ophaalproblemen).

Ook al is het niet perfect, ik ben best tevreden met het resultaat.

HOE WERKT HET.

De machine kan in 2 hoofdfasen worden opgesplitst.

Bovenaan vind je het reservoir voor de ongesorteerde Skittles. Aan de onderkant van dit reservoir bevindt zich het invoermechanisme dat verantwoordelijk is voor het verzamelen van kegels en het positioneren ervan voor de kleursensor waar hun kleur wordt gecontroleerd.

Het voermechanisme bevat een arm die de inhoud van het reservoir schudt om ervoor te zorgen dat de Skittles mooi door de opening van het voermechanisme stromen zonder vast te lopen in het reservoir (helaas gebeurt het nog steeds een keer).

Zodra de kleur van de Skittle is gevonden, komt de tweede fase van de machine in actie. De houder van de reageerbuisjes lijnt de rechter buis uit voor het invoermechanisme zodat de Skittle erin kan worden geplaatst.

De cyclus kan dan worden herhaald totdat het reservoir leeg is.

WILT U EIGEN MAKEN???

.................https://www.littlefrenchkev.com/color-sorting-machine................. ......

MONTAGE.

Nadat je de onderdelen hebt gedownload en afgedrukt, zou je zoiets als dit moeten krijgen:

Merk op dat de voorschaal in 2 versies wordt geleverd. Geen echt verschil, ze zien er alleen anders uit.

De rest van de benodigde onderdelen.

Hier is een video van het montageproces. Ik heb zelfs geprobeerd een artiest te zijn door een intro te maken met slowmo 3D-printeropnames!!!

EERSTE INSTELLING.

Het eerste dat de machine doet wanneer u de stroom inschakelt, is om beide servo's naar hun oorspronkelijke positie te verplaatsen. Wanneer u de machine voor de eerste keer start, moet u ervoor zorgen dat het tandwiel/de as die de kegels verzamelt zich in de bovenste positie bevindt en dat de buishouder is uitgelijnd met het invoermechanisme.

PROBLEEMOPLOSSING.

Als u besluit deze sorteermachine zelf te maken, kunt u tegen een aantal veelvoorkomende problemen aanlopen. hier is hoe je ze kunt oplossen.

LED knippert rood - geen startvolgorde:

Nadat de machine naar de beginpositie is verplaatst, moet de startvolgorde worden doorlopen. Als dit niet het geval is en in plaats daarvan knippert de LED rood, dan betekent dit dat u problemen heeft met het niet vinden van uw RBG-sensor. Er is een probleem met uw bedrading of de sensor is defect.

Buizen zijn niet goed uitgelijnd:

Oorzaak 1

Tijdens de startreeks zal de buishouder 5 keer bewegen, één keer voor elke kleur. U merkt misschien dat de buizen niet al te goed aansluiten op het voedingsmechanisme. Dit kan te wijten zijn aan het feit dat de servo's niet super nauwkeurig zijn of aan enkele variaties in de afdrukafmetingen.

Dit kan softwarematig worden gecorrigeerd door de variabele array color_angle te wijzigen. Elke waarden in deze array vertegenwoordigen de servopositie voor elke kleur, door die waarden te wijzigen, kunt u de positie van de buis voor elke kleur nauwkeurig afstemmen.

Oorzaak 2

Vanwege druktoleranties kunt u ook wat speling krijgen in de tandwielen van de buizenhouder. Afhankelijk van de manier waarop de buizen draaien, kan hun traagheid ervoor zorgen dat ze hun stoppositie voorbijschieten. Dit kan ook softwarematig worden gecorrigeerd door de anti-spelingvariabele voor vooruit en terugspoelen te wijzigen. Deze waarde wordt toegevoegd aan of verwijderd uit de kleurhoekwaarden, afhankelijk van de manier waarop de houder draait om deze speling te compenseren.

Kleurmenging:

Als u enige kleurmenging ervaart, moet u de arrays color_limit_values ​​wijzigen. Elke waarden in die array vertegenwoordigen de minimum- en maximumwaarden voor rood, groen en blauw. Om een ​​beter idee te krijgen van wat de waarden zouden moeten zijn, laadt u de machine met slechts één kleur, sluit u de machine aan op uw computer en opent u de seriële monitor. Elke keer dat een Skittle wordt gecontroleerd, zou je de gelezen RGB-waarden moeten krijgen en welke kleur het programma denkt dat het is. Dit zou u een beter idee moeten geven van wat voor soort waarden aan elke kleur moeten worden gekoppeld.

ENKELE COOLE FUNCTIES.

(nou, ik denk dat ze dat in ieder geval zijn!)

De RGB-LED:

Er is een RGB-led op de basis van de machine gemonteerd. Tijdens het sorteerproces verandert het van kleur om overeen te komen met de kleur van de Skittle die wordt neergezet. Het gaat continu door alle Skittle-kleuren zodra het reservoir leeg is.

Het zal ook rood knipperen bij het opstarten als er een probleem wordt gedetecteerd met de sensor.

Anti-spelingcompensatie:

De buizenhouder wordt rondgedraaid met behulp van een paar rechte tandwielen. Door druktolerantie is het erg moeilijk om speling in de tandwielen volledig weg te werken. Dit betekent dat de buishouder de neiging heeft om zijn ideale positie door te schieten. De code maakt het mogelijk om dit te compenseren door de houder een bepaald bedrag eerder te stoppen, afhankelijk van de richting waarin de houder draait.

Vertraging met extra:

De code bevat een functie "set_led(ms, color)". Het werkt precies zoals de "delay (ms)"-functie, maar laat de LED soepel overschakelen naar zijn nieuwe kleur terwijl de vertraging optreedt. Het is een feest om de kleuren van de LED te veranderen terwijl de buishouder naar zijn positie draait!

EXTRA OPMERKINGEN.

Opmerking 1:ik heb mijn machine in het zwart afgedrukt, dit heeft invloed op de kleurwaarden die de sensor zal lezen, vooral als er geen kegels worden opgevangen door het invoermechanisme.

Opmerking 2:Na verschillende keren het sorteerproces te hebben doorlopen, lijken de Skittles-kleuren moeilijker betrouwbaar te lezen. Ik neem aan dat dit komt doordat ze hun glans verliezen nadat ze vaak in het reservoir hebben gewreven of dat ze een beetje plakkeriger worden als ze met de hand worden gehanteerd (klinkt vies!). Probeer bij het kalibreren van de kleurwaarden 'verse' kegels te gebruiken.

Opmerking 3:Zorg ervoor dat u alle nodige voorzorgsmaatregelen neemt bij het hanteren van voedsel. Dit houdt onder meer in dat je voedselveilig printfilament gebruikt.

Opmerking 4:Ik probeer wat werk in uitvoering te posten en welk project ik aan het doen ben op Instagram. Als het je ding is, kun je hier een kijkje nemen:https://www.instagram.com/little_french_kev/


Code

  • LFK_sorteermachine
LFK_sorteermachineC/C++
Hier is de Arduino-code voor de sorteermachine.
#include #include "Adafruit_TCS34725.h"#include/* Gebaseerd op voorbeeldcode voor de Adafruit TCS34725 breakout-bibliotheek */// =======================Variabelen gerelateerd aan RGB-sensor=========================Adafruit_TCS34725 tcs =Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_24MS, TCS34725_GAIN_1X); // setup RGB sensorint kleur =0;//0-zwart, 1-geel, 2-groen, 3-oranje, 4-rood, 5-purpleint previous_colour =kleur;int black_count =0; // aantal lege/onbekende colorint start_measurment_angle =88; // servopositie om kegel uit te lijnen voor sensorint measurment_sweep =2; //aantal genomen maatregelen . gebruikt om errorint metasurment_angle_increment =4 te gemiddelde; //hoektoename tussen metingen //limietwaarden [] ={min_red_values, max_red_values, min_green_values, max_green_values, min_blue_values, max_blue_values}uint16_t black_limit_values[] ={0, 200, 0, 200, 0, 200};uint_16_t yellow_limit {850, 2200, 800, 2200, 400, 1100};uint16_t green_limit_values[] ={400, 800, 700, 1400, 300, 700};uint16_t orange_limit_values[] ={650, 1800, 300, 850, 210, 600 };uint16_t red_limit_values[] ={400, 950, 150, 450, 150, 400};uint16_t purple_limit_values[] ={150, 400, 150, 450, 150, 500};//=======================Variabelen gerelateerd aan RGB led=========================byte R_pin =5; byte G_pin =6;byte B_pin =11;int huidige_red_value =255;int huidige_green_value =255;int huidige_blue_value =255;const int oranje[] ={0, 230, 255};const int rood[] ={0, 255, 255};const int groen[] ={255, 0, 255};const int geel[] ={0, 170, 255};const int paars[] ={0, 255, 40};//=======================Variabelen gerelateerd aan feederservo's =========================int release_delay =220;const int color_angles[] ={10, 46, 82, 118, 154};//{10, 46, 82, 118, 154};//int holder_offset =0; // offset aanpassing voor buizenhouder . te houden tussen 0 en 36const int backward_anti_backlash =2;const int forward_anti_backlash =2;Servo feeder_servo; // declareren feeder servoServo holder_servo; // verklaren buizen houder servo//===================================SETUP =========================================ongeldige setup (void) {Serial.begin (9600); pinMode (R_pin, UITGANG); //set LED-pin pinMode (G_pin, OUTPUT); pinMode (B_pin, UITGANG); analoogWrite(R_pin, 255); // schakel LED analogWrite uit (G_pin, 255); analoogWrite(B_pin, 255); feeder_servo.attach (3); // bevestig feeder-servo aan pin 3 holder_servo.attach (2); // bevestig houderservo aan pin 2 feeder_servo.write (0); houder_servo.write(color_angles[0]); int wit [] ={0, 0, 0}; // lokale witte waarden variabele int black [] ={255, 255, 255}; // lokale zwarte waarden variabele set_led (1000, wit); // zet LED aan (wit) if (tcs.begin()) { // controleer of sensor Serial.println heeft gevonden ("Gevonden sensor"); startvolgorde(); } else { Serial.println("Geen TCS34725 gevonden ... controleer uw verbindingen"); while (1) // snel rood knipperend als sensor niet gevonden { set_led (300, rood); set_led(300, zwart); } }}//===================================LUS =========================================void loop (void) {if (black_count <10) {feeder_servo.write(0 ); // stel de servopositie bovenaan in voor vertraging bij het verzamelen van kegels (450); // vertraging om de feeder servo genoeg tijd te geven om in positie te komen previous_colour =color; get_color(); // lees kegelkleur if (kleur ==0) { black_count ++; // als er geen kleur wordt gevonden, verhoog dan de black count shake();// geeft een beetje meer shake aan het reservoir, zelfs als er geen kegel is } else if (color ==6) { black_count ++; // als de kleur onbekend is, verhoog het aantal zwart - geen kegelrelease } else { // if color found move_holder (); // verplaats buishouder release_skittle(); // laat kegel los black_count =0; } } else { end_loop(1000); }}//===================================KLEUR KRIJGEN =========================================void get_colour() { uint16_t r, g, b, c;//, colorTemp , luxe; uint16_t totaal_r =0; uint16_t totaal_g =0; uint16_t totaal_b =0; feeder_servo.write (start_meethoek); // verplaats om de vertraging van de meethoek te starten (200); Serial.println ("----------------"); for (int i =0; i <=measurment_sweep; i++) //loop voor elke maat { tcs.getRawData(&r, &g, &b, &c); //krijg kleurgegevens feeder_servo.write (start_measurment_angle + i * measurment_angle_increment); // verhoog de servohoek voor de volgende maat total_r +=r; // voeg rode waarde toe aan totale rode waarde total_g +=g; // groene waarde toevoegen aan totale groene waarde total_b +=b; // voeg blauwe waarde toe aan de totale vertraging van de blauwe waarde (15); } total_r /=meting_sweep; //gemiddelde waarden over alle metingen total_g /=measurment_sweep; total_b /=meting_sweep; Serial.print(total_r); Serieel.print(" "); Serial.print(total_g); Serieel.print(" "); Serial.print (totaal_b); Serieel.print(" "); Serieel.println(" "); // vergelijk waarden om de kleur te bepalen. if ((total_r =yellow_limit_values[0]) &&//controleer op geel (total_r =yellow_limit_values[2]) &&(total_g  =yellow_limit_values[4]) &&(total_b =green_limit_values[0]) &&//controleer op groen (total_r =green_limit_values[2]) &&(total_g  =green_limit_values[4]) &&(total_b =orange_limit_values[0]) &&//controleer op oranje (total_r =orange_limit_values[2]) &&(total_g  =orange_limit_values[4]) &&(total_b =red_limit_values[0]) &&//controleer op rood (total_r =red_limit_values[2]) &&(total_g  =red_limit_values[4]) &&(total_b =purple_limit_values[0]) &&//controleer op paars (total_r =purple_limit_values[2]) &&(total_g  =purple_limit_values[4]) &&(total_b  color) {// dwingt de houderservo om verder terug te gaan dan de normale positie naar compensatie voor gearing-speling int anti_backlash_angle =new_holder_position - backward_anti_backlash; holder_servo.write(anti_backlash_angle); //vertraging (holder_delay); } else { int anti_backlash_angle =new_holder_position + forward_anti_backlash; //holder_servo.write (anti_backlash_angle); houder_servo.schrijven(nieuwe_houder_positie); // verplaats houder in positie //delay (holder_delay); } if (kleur ==1) { set_led(holder_delay, geel); } else if (kleur ==2) { set_led(holder_delay, groen); } else if (kleur ==3) { set_led(holder_delay, oranje); } else if (kleur ==4) { set_led(holder_delay, rood); } else if (kleur ==5) { set_led(holder_delay, paars); } else {}}//=============================RELEASE SKITTLE ===========================void release_skittle() {feeder_servo.write(180); // stel de servopositie in op de bodem voor de vertraging van het vrijgeven van de kegel (release_delay);}//=================================SHAKE =================================nietig schudden() {int shake_delay =80; int shake_bedrag =5; int shake_min_value =90; int shake_max_value =180; feeder_servo.write(180); // stel de servopositie in op de bodem voor de vertraging van het vrijgeven van de kegel (release_delay); feeder_servo.write(120); // stel de servopositie in op de bodem voor vertraging bij het loslaten van de kegel (80); for (int i =0; i <=shake_amount; i++) //loop voor elke maat {feeder_servo.write (shake_min_value); // stel de servopositie in op de bodem voor vertraging bij het loslaten van de kegel (shake_delay); feeder_servo.write(shake_max_value); // stel de servopositie in op de bodem voor vertraging bij het loslaten van de kegel (shake_delay); }}//============================BEGINVOLGORDE ============================void start_sequence() { color =1; move_holder(); set_led(300, geel); vertraging (400); kleur =2; move_holder(); set_led(300, groen); vertraging (400); kleur =3; move_holder(); set_led(300, oranje); vertraging (400); kleur =4; move_holder(); set_led(300, rood); vertraging (400); kleur =5; move_holder(); set_led(300, paars); vertraging (400); vorige_kleur =kleur; kleur =3; move_holder(); end_loop(200);}//================================EINDE LUS =================================nietig end_loop (int duur) {set_led (duur, oranje); set_led(duur, rood); set_led(duur, groen); set_led(duur, geel); set_led (duur, paars);}//============================RGB LED-KLEUR INSTELLEN =======================// Dit werkt als een vertraging () maar zorgt ervoor dat de LED van kleur kan veranderen tijdens het wachten .void set_led (int duration, int color [3]) {int start_time =millis(); // starttijdwaarde int current_time =start_time; // huidige tijdwaarde int current_duration =0; // totale duur while (current_duration   

Schema's

De bedrading is vrij rechttoe rechtaan. Zorg ervoor dat uw buck-converter 5V uitvoert voordat u er iets op aansluit!!!!!

Productieproces

  1. EEG Machine
  2. Automaat
  3. Stemmachine
  4. Naaimachine
  5. Televisie
  6. Spindellager en lagerkwaliteit
  7. Onderdelen van draaibankmachine:
  8. Draaibankmachine begrijpen
  9. Onderdeel van freesmachine:
  10. Machine begrijpen
  11. JW-machine