Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Denna instruerbara kommer att gå hur en 2D plocka och placera enhet är gjord och hur man kodar den.
Steg 1: Datorer
1x Adrio Mega
2x stegmotorer (vi använde JLB Stepper Motor, modell 17H1352-P4130)
2x Stepper Motor Drive Controller Board Module L298N Dual H Bridge DC För Arduino
1x servomotor (vi har inte fläcken på den här)
3x 10k ohm motstånd
2x nylonflis
1x 12V strömförsörjning
Lite trä till ramen
Trådar
Steg 2: Konstruktion
Det första under konstruktionsytan var att bestämma storleken och formen på plock- och placeringsmaskinen
Först bygger vi grundformen trä. Vi byggde vår pick and place -ram 50 cm x 25 cm x 30 cm. Allt utom ramen, bryggan och lyftarmen tillverkades med en laserskärare.
Här är en länk till alla filerna
Sedan ville vi till remskivsystemet. Här gick vi med två 50 mm ringar och en 20 mm ring. Sedan lägger vi ett parakord bredvid 20 mm med lite lim. Därefter klämde vi ihop de två 50 mm ringarna på vardera sidan av 20 mm ringen.
20 mm
50 mm
Sedan måste vi utforma en glidguide till armen. Här gjorde vi två sidor och en bakplatta.
Som sedan limmades i en U -form. Sedan kopplade vi det till bron.
Sidoplatta
Bakplatta
Nu när delarna för att flytta armen upp och ner är klara. Vi måste flytta den fram och tillbaka.
När vi designade detta såg vi till att tänderna ligger i linje med varandra. Så båda artiklarna skapades på samma projektplats.
Steg 3: Kod
Programmeringen är ganska enkel och består av 5 delar
- Inkludering av bibliotek och installation av variabler för intern och IO -användning
- Ladda ingångar till Ram
- Sekvens, välj den rörelse du vill ha.
- Stepper/servopositionskontroll
- Output till världen
Vi kommer i stora drag att förklara varje del, men kom ihåg att detta bara är en av många lösningar.
1: Innan den tomma installationen inkluderade vi de två bibliotek vi behöver för detta projekt. Stepper och servo. Genom att använda de medföljande biblioteken, sparar du från att lära dig varje detalj om steg- och servomotorer.
#omfatta
#omfatta
const int stepsPerRevolution = 200; // ändra detta för att passa antalet steg per varv för din motor
// initiera stegbiblioteket på stift 8 till 11:
Stepper XStepper (stepsPerRevolution, 22, 23, 24, 25); Stepper YStepper (stepsPerRevolution, 28, 29, 30, 31); Servo Griper; // skapa servoobjekt för att styra ett servo
gripern måste få fäst i tomrumsinställningen
void setup () {// initiera serieporten: Serial.begin (9600); Griper. Fäst (9); // fäster servon på stift 9 på servoobjektet
Resten av det här avsnittet är bara installation av variabler och konstant.
2: Det första i Void Loop är att ladda alla använda ingångar till en variabel. Detta görs av två skäl. Den första anledningen är att begränsa CPU -tunga uppgifter för att läsa en ingång. Den andra anledningen, som är den viktigaste, för att se till att om en ingång används mer än en gång kommer den att ha samma värde under hela genomsökningen. Detta gör det enklare att skriva konsekvent kod. Detta är en mycket vanlig metod i PLC -programmering, men det gäller också för inbäddad programmering.
// ------------------------- Mata in RAM -------------------- Xend = digitalRead (34); Yend = digitalRead (35); Ena = digitalRead (36);
3: I sekvensdelen av koden gjorde vi precis en sekvens med switch och fallkommandon. Sekvensdelen ger bara signaler till kodens positionskontrolldel. Denna del kan enkelt anpassas till din applikation eller användas som den är.
4: Servos position styrs precis av servo liberi och ett if -uttalande för griparen öppen och stängd.
Stepper Control är lite mer knepigt. Funktionen jämför börvärdet (positionen du vill att armen ska gå till) och den aktuella positionen. Om den nuvarande positionen är älskare, lägger funktionen till positionen och ber Stepper liberi -funktionen att ta ett positivt steg. Motsatsen gäller för en hög position. om positionen är densamma som börvärdet är en XinPos -bit satt hög och steget stannar.
// SP controal X
if (XstepCountXsp och inte hem) {
XstepCount = XstepCount-1; Xstep = -1; XinPos = 0; } if (XstepCount == Xsp) {Xstep = 0; XinPos = 1; }
5: Lägg till slutet av koden som motorerna styrs med liberi -funktionerna.
// -------------------- Output ---------------------- // steg ett steg: XStepper.step (Xstep); // steg ett steg: YStepper.step (Ystep);
Griper.write (GripSp);
Steg 4: Made By
casp6099 - Casper Hartung Christensen
rasm616d - Rasmus Hansen