Stap 3: Twee dingen tegelijk doen!
De volgende ding om te doen code-wise is jam samen de controles voor de stappenmotor en DC motor zodat u beide tegelijk kunt.
Als je kijkt naar de code in de sjabloonwaarden stappen ziet u dat ik diferent pinnen en variabelenamen voor elke set van test code gebruikte. Dit laat ons hen samen jam zonder veel aanpassingen.
Ik heb gelezen dat er veel betere manieren zijn om blokken code te combineren, maar ik nog steeds leren ben, dus alles wat ik heb gedaan is knippen-en-verleden de twee programma's samen.
Ik heb incrased de will-waarden die worden gebruikt als de positie van de 'center' van de joystick. Dit helpt om te verhinderen dat u per ongeluk de verkeerde motor uitgevoerd.
Laatste zullen wij moeten splitsen in een andere partij van code om te controleren de motor om te openen en sluiten van de klauw!
Hier is de code van de Arduino te controleren van een stappenmotor en een gelijkstroommotor (gelabelde DC motor A, want wij zullen het toevoegen van B laatste)
/////////////////////// ARDUINO CODE //////////////////////////
joystickj met 2 potten om een controle stepper en DC motor snelheid en richting *** / /
verklaar pinnen voor Stepper
int potPin_X = 1;
int Step_X = 13;
int Dir_X = 12;
int Enable_X = 8;
verklaren van waarden voor stepper
int Speed_X = 0; stap snelheid (vertraging tussen stappen)
int val_X = 0;
int h = 0;
pinnen voor DC motor A verklaren
int potPin_A = 2; Selecteer de invoer pin voor de potmeter
int val_A = 0; variabele de waarde afkomstig van de sensor opslaan
Declareer variabelen voor DC A
int j = 0;
int Dir_A = 4;
int Speed_A = 5;
VOID Setup {}
Setup van stepper pinnen
pinMode (Step_X, uitvoer);
pinMode (Dir_X, uitvoer);
pinMode (Enable_X, uitvoer);
Setup DC motor A pinnen
pinMode (Dir_A, uitvoer);
pinMode (Speed_A, uitvoer);
Serial.begin(9600); Merk op dat seriële comm kan worden gebruikt om te debuggen
maar het zal vertragen de code en de stappenmotor alot vertragen (en verwarrend voor mij)
}
void loop {}
STEPPER LEZEN EN CONTROLE / / /
lezen van locatie voor joystick en berekenen van de waarden voor stappenmotor
val_X = analogRead(potPin_X); luiden naar de waarde van de sensor
h = val_X - 517; center posities - 517 is hoe ver van centrum?
h = abs(h); absolute waarde
Speed_X = 70000/h; Deze wiskunde keert u de waarde en is volledig schaalbaar nodig
70000 waarde gevonden via trial and error
De vertraging tussen stappen bepaalt de snelheid van de motor
/ / Vertraging dus omhoog = snelheid omlaag
controle van de stappenmotor / /
Als (val_X > = 530) {}
digitalWrite(Enable_X,LOW); inschakelen
digitalWrite (Dir_X, hoge); Set richting
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
Als (val_X < = 500) {}
digitalWrite(Enable_X,LOW); / / enable
digitalWrite (Dir_X, laag); Andere richting
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
Als (val_X < = 530 & & val_X > = 500) {}
digitalWrite(Enable_X,HIGH); de stappenmotor uitschakelen als de joystic in het centrum ligt
}
DC MOTOR A - LEZEN EN CONTROLEREN / / /
Lezen van locatie voor joystick en berekenen van de afstand en vanuit Midden
val_A = analogRead(potPin_A); luiden naar de waarde van de sensor
j = val_A - 517; 517 is center posities - hoe ver van centrum
j = abs(j); absolute waarde
sommige grenzen op j te houden PWM waarden nuttige plaatsen
onder 100 de motor niet verplaatst en PWM max is 255
Als (j > = 510) {}
j = 510; de meest de PWM-pin kan doen is 255
}
Als (j < = 200 & & j > = 10) {}
j = 200; onder 100 PWM de motor maakt een hoge pek klinken en niet beweegt
}
Als (j < = 10) {}
j = 0; minder dan 10 is de joystick zeer dicht bij het centrum
}
Uitvoeren van DC motor een gebaseerd op analoge ingang joystick
Als (val_A > = 530) {}
digitalWrite (Dir_A, hoge); andere richting
analogWrite (Speed_A, j/2); PWM uit (delen door 2 omdat max is 255)
}
Als (val_A < = 500) {}
digitalWrite (Dir_A, laag); //
analogWrite (Speed_A, j/2); //
}
Als (val_A < = 530 & & val_A > = 500) {}
analogWrite (Speed_A, 0); uitschakelen als de joystick in het midden
}
afdrukken van waarden voor foutopsporing
Serial.Print(val_A); getallen verzenden met PC, zodat u kunt zien wat het gaande
Serial.Print(",");
Serial.println(j);
}