En Arduino-powered microplate spektrofotometer (6 / 16 steg)
Steg 6: Kör steppers
28YBJ-48 stepper är en 4-coil stepper med en hög skuldsättningsgrad (citerat som 64:1). Det finns några bra tutorials här:
http://42bots.com/tutorials/28byj-48-stepper-motor...
https://Arduino-info.wikispaces.com/SmallSteppers
Och en stor, allmän stepper Instructable här:
De ansluter till Arduino genom en ULN2003 förare ombord (stepper kabeln ansluts på ett sätt bara, så oroa dig inte om att få ledningarna fel). Du kan köra dessa motorer med inbyggda Stepper biblioteket på Arduino. Detta aktiverar varje spole i sekvens, rörliga rotorn genom 4 positioner att göra ett varv. Detta är verkligen enkelt, men begränsar hastigheten på nummerlistan. Om spolarna byta för snabbt, rotorn kan inte hänga och motorn fryser (du kommer att höra ett brummande ljud med några vibrationer). Vi använde AccelStepper bibliotek , som ger dig mer sofistikerad kontroll av motorn. Det låter dig använda en 8-stegs sekvens för att röra rotorn i halv-steg, vilket gör det lättare för den att hänga, och därmed nå snabbare hastigheter. Du kan också använda acceleration, vilket också ökar den maximala hastigheten. Försöker få rotorn att flytta direkt till den slutliga hastigheten från övriga gör rotorn stall. Skynda till den slutgiltiga hastigheten kan drivkraften i rotorn att bygga upp, så att du kan få till snabbare slutliga hastigheter. AccelStepper biblioteket tar lite tid att vänja sig, men det tillät oss att köra motorerna betydligt snabbare. Du kommer att behöva ladda ner biblioteket från länken och installera den.
Ställ in
inkludera < AccelStepper.h >
Motoriska pin definitioner
#define motorPin1 38 / / IN1 på ULN2003 driver
#define motorPin2 40 / / IN2 på ULN2003 driver
#define motorPin3 42 / / IN3 på ULN2003 driver
#define motorPin4 44 / / IN4 på ULN2003 driver
definiera motorPin5 39 / / IN1 på ULN2003 driver
#define motorPin6 41 / / IN2 på ULN2003 driver
#define motorPin7 43 / / IN3 på ULN2003 driver
#define motorPin8 45 / / IN4 på ULN2003 driver
Definiera parametrar för Steppers
#define HALFSTEP 8
#define STEPS_PER_MOTOR_REVOLUTION 32
#define STEPS_PER_OUTPUT_REVOLUTION 32 * 64 / = 2048
AccelStepper stepperX (HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
AccelStepper stepperY (HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8);
Stepper stepper_X (STEPS_PER_MOTOR_REVOLUTION, 38, 40, 42, 44);
Stepper stepper_Y (STEPS_PER_MOTOR_REVOLUTION, 39, 41, 43, 45);
int STÅNDPUNKTEN1 = 0;
int Position2 = 0;
Output portar på Arduino som ansluter med motorn förarens styrelser måste definieras. Varje stegmotor är ansluten till en förare ombord som modulerar utdata från Arduino och omvandlar det till rätt sekvens av pulser som ska skickas till elektromagneter i nummerlistan.
8-stegs mekanismen definieras som HALFSTEP som en parameter till kontroll stegmotorer. Detta ger information till koda för rotation av stegmotorer med 8-stegs mekanism. Stegvinkel i 8-stegs sekvens (hur mycket ett enda steg roterar tandat redskap) är 5.625˚ (64 steg per varv). Utväxlingen är 1/64, så är 64 x 64 (4096) steg per varv av den utgående axeln av motorn. Positionerna för stegmotorer definieras också som 0 vid sin start. STÅNDPUNKTEN1 är variabeln position av stepper1; Position2 är variabeln position av stepper 2. PositionX definierar kolumnen på microplate att sensorn är över (1-12), som kontrolleras av stepperX; PositionY definierar rad på microplate att sensorn är över (A-H), som kontrolleras av stepperY. På startpositionen är båda position variabler 0, vilket motsvarar sensorn ligger ovanför väl A1
Ställ in stepper hastighet och acceleration
void setup() {
stepper1.setMaxSpeed(3000.0);
stepper1.setAcceleration(500.0);
stepper2.setMaxSpeed(3000.0);
stepper2.setAcceleration(500.0);
}
Setup är inneslutna i klammerparenteser: {...}. Hastighet och acceleration av motorerna som har definierats för båda motorerna. Dessa variabler har valt att vara väl inom den stegmotorer kapacitet att förhindra stopp, men snabb nog för att vara överdrivet långa. Hastighet, 3000 (steg per sekund), motsvarar 44 varvtal. acceleration, 500, motsvarar 7,3 rpm ^ 2
Flytta tabellen
fördröjning (2000); Ta behandlingen av A1
Innan du flyttar motorer det är en fördröjning av 2000ms (2 sekunder) så att det första provet (A1) som skall analyseras
stepper1.runToNewPosition(stepper1.currentPosition() +52406);
STÅNDPUNKTEN1 = STÅNDPUNKTEN1 + 1;
Delay(5000); Stepper1 med förseningar mellan varje varv
Stepper 1 är roterade 52406 steg, vilket motsvarar flyttar microplate med 9mm mellan två angränsande prover. När nummerlistan har flyttat till intilliggande brunnen, ökar PositionX variabeln med en enhet att definiera att kolumnen som sensorn ligger ovanför på microplate har ökat med en (till exempel från väl A1 till A2). Stepper pauser så att brunnen för att analyseras.
om (STÅNDPUNKTEN1 == 11) {//after 11 varv stepper 1 (på A12)
stepper2.runToNewPosition(stepper2.currentPosition() +52406);
Position2 = Position2 + 1;
Delay(2000);
stepper1.runToNewPosition(0); återvända motorn 1 till A1
STÅNDPUNKTEN1 = 0;
Delay(2000);
}
Därför microplate kommer att flyttas så att intilliggande väl är under sensorn, paus och upprepa tills sensorn är ovanför kolumnen 12 (PositionX = 11). Vid denna punkt, kommandon klausulen om if() att stepperY skiftar microplate så att sensorn ligger över på nästa rad (från rad A till rad B etc.), det finns en paus och därefter microplate returneras tillbaka så att sensorn ligger ovanför den första kolumnen.
om (Position2 == 8) {//after 7 vänder sig motor 2 (rad H)
stepper1.runToNewPosition(0); återvända motorn 1 till H1
STÅNDPUNKTEN1 = 0;
Delay(2000);
stepper2.runToNewPosition(0); återgå till A1
While(1) {}
}
}
De andra if() klausul kommandon båda motorer att återvända till sina ursprungliga positioner (med prov A1 nedan sensorn) en gång första if() klausulen har upprepats 8 gånger. På denna punkt har varje brunn på microplate analyserats så att denna klausul återställer bara placeringen av microplate för nästa användning. Koden while(1) {} kommandon denna klausul bara upprepas en gång. Detta innebär att när microplate har skannats och återvände till väl A1 Loops-hållplatser och microplate står still.