CRANE spelet (16 / 34 steg)
Steg 16: Koden för alla delar
Här är alla kod jamed tillsammans. Nu vi kan köra stepper motor fram och tillbaka längs spåret, höja och sänka jordluckraren, och öppna och stänga jordluckraren.
Jag får en hög pich skrika från någonstans... För nu ska jag bara titta på för rök.
ARDUINO KOD / / /
2 joysticks med krukor att styra en stepper och två DC motorer hastighet och riktning *** / /
Obs: modifierad för att köra NEM23 stepper med Stepper Motor Driver v1.2 från RepRap
deklarera pins för Stepper
int potPin_X = 1;
int Step_X = 13.
int Dir_X = 12;
int Enable_X = 8;
deklarera värden för stepper
int Speed_X = 0; steg hastighet (fördröjning mellan stegen)
int val_X = 0;
int h = 0;
deklarera stift för DC-motor A
int potPin_A = 2; Välj input PIN-koden för potentiometer
int val_A = 0; variabel för att lagra värdet kommer från sensorn
Deklarera variabler för DC A
int j = 0;
int Dir_A = 4;
int Speed_A = 5;
deklarera stift för DC-motor B / / klo öppna/stäng
int potPin_B = 3; Välj input PIN-koden för potten
int val_B = 0; variabel för att lagra värdet kommer från sensorn
Deklarera variabler för DC-motor B
int k = 0;
int Dir_B = 7.
int Speed_B = 6; PWM
void setup() {
setup upp stepper pins
pinMode (Step_X, OUTPUT);
pinMode (Dir_X, OUTPUT);
pinMode (Enable_X, OUTPUT);
setup DC motor A stift
pinMode (Dir_A, OUTPUT);
pinMode (Speed_A, OUTPUT);
setup DC motor B pins
pinMode (Dir_B, OUTPUT);
pinMode (Speed_B, OUTPUT);
Serial.BEGIN(9600); Observera att seriell comm kan användas för att felsöka
men det kommer att sakta ner koden och bromsa stegmotor mycket (och vara förvirrande för mig)
}
void loop() {
STEPPER LÄS OCH KONTROLL / / /
Läs placeringen av joystick och beräkna värden för stegmotor
val_X = analogRead(potPin_X); läsa värdet från sensorn
h = val_X - 517; 517 är center positioner - hur långt från centrum?
h = abs(h); absolut värde
Speed_X = 70000/h; Denna matematik inverterar värdet och skalor som behövs (värde hittats genom trial and error)
Fördröjningen mellan steg bestämmer hastigheten på motorn
Så, dröjsmål upp = hastighet ner
Obs: Speed_X = 70000/h fungerade bra för denna kombination: EasyDriver -> NEM17 stepper
Speed_X = 160000/h; Obs: Hastighet beräkning för Stepper Motor Driver V1-2 (RepRap) -> NEM23 stepper
styra stepper motor / /
OBS:
för EasyDriver: hög = inaktivera
för RepReap Stepper driver v1.2: låg = avaktivera
om (val_X > = 530) {
digitalWrite(Enable_X,HIGH); aktiverar
digitalWrite (Dir_X, hög); Ange riktning
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
om (val_X < = 500) {
digitalWrite(Enable_X,HIGH); / / aktivera
digitalWrite (Dir_X, låg); Andra hållet
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
om (val_X < = 530 & & val_X > = 500) {
digitalWrite(Enable_X,LOW); Inaktivera stepper motor om joystic är i centrum
för EasyStepper: hög = inaktivera
för RepReap Stepper driver v1.2: låg = avaktivera
}
DC MOTOR A - LÄS OCH KONTROLL / / /
Läs placeringen av joystick och beräkna avstånd och från center
val_A = analogRead(potPin_A); läsa värdet från sensorn
j = val_A - 517; 517 är center positioner - hur långt från centrum
j = abs(j); absolut värde
sätta några gränser för j att hålla PWM värden användbara
under 100 motorn kommer inte att flytta och PWM max är 255
om (j > = 510) {
j = 510; det mesta PWM stift kan göra är 255
}
om (j < = 200 & & j > = 10) {
j = 200. under 100 PWM motorn gör en hög pich låter och rör sig inte
}
om (j < = 10) {
j = 0; under 10 är joysticken mycket nära till centrum
}
Kör DC-motor A baserat på analog insignal från joystick
om (val_A > = 530) {
digitalWrite (Dir_A, hög); andra hållet
analogWrite (Speed_A, j/2); PWM ut (delar med 2 eftersom max är 255)
}
om (val_A < = 500) {
digitalWrite (Dir_A, låg); //
analogWrite (Speed_A, j/2); //
}
om (val_A < = 530 & & val_A > = 500) {
analogWrite (Speed_A, 0); Stäng av om joysticken är i centrum
}
DC MOTOR B - LÄS OCH KONTROLL / / /
Läs placeringen av joystick och beräkna avstånd och från center
val_B = analogRead(potPin_B); läsa värdet från sensorn
k = val_B - 517; 517 är center positioner - hur långt från centrum
k = abs(k); absolut värde
sätta några gränser för j att hålla PWM värden användbara
under 100 motorn kommer inte att flytta och PWM max är 255
om (k > = 510) {
k = 510; det mesta PWM stift kan göra är 255
}
om (k < = 200 & & k > = 10) {
k = 200. under 100 PWM motorn gör en hög pich låter och rör sig inte
}
om (k < = 10) {
k = 0; under 10 är joysticken mycket nära till centrum
}
Kör DC-motor B baserat på analog insignal från joystick
om (val_B > = 530) {
digitalWrite (Dir_B, hög); andra hållet
analogWrite (Speed_B, k/2); PWM ut (delar med 2 eftersom max är 255)
}
om (val_B < = 500) {
digitalWrite (Dir_B, låg); //
analogWrite (Speed_B, k/2); //
}
om (val_B < = 530 & & val_B > = 500) {
analogWrite (Speed_B, 0); Stäng av om joysticken är i centrum
}
skriva ut värden för felsökning
Serial.Print(val_A); Skicka nummer till PC så du kan se vad det händer
Serial.Print(",");
Serial.println(j);
}