Stap 16: Code voor alle onderdelen
Hier is alle jamed van de code samen. Nu we de stappenmotor heen en weer langs het spoor uitvoeren kunnen, verhogen en verlagen van de klauw, en openen en sluiten van de klauw.
Ik krijg een hoge pek gepiep ergens vandaan... Ik zal gewoon kijken voor rook voor nu.
ARDUINO CODE / / /
2 joysticks met potten om te controleren van een stepper en twee DC motoren snelheid en richting *** / /
Opmerking: gewijzigd voor het uitvoeren van NEM23 stepper met Stepper Motor Driver v1.2 van RepRap
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;
verklaar pinnen voor gelijkstroommotor B / / klauw openen/sluiten
int potPin_B = 3; Selecteer de invoer pin voor de pot
int val_B = 0; variabele de waarde afkomstig van de sensor opslaan
Declareer variabelen voor DC motor B
int k = 0;
int Dir_B = 7;
int Speed_B = 6; PWM
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);
Setup DC motor B pinnen
pinMode (Dir_B, uitvoer);
pinMode (Speed_B, 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 als nodig (waarde gevonden via trial and error)
De vertraging tussen stappen bepaalt de snelheid van de motor
Dus, vertraging omhoog = snelheid omlaag
Opmerking: Speed_X = 70000/h goed gewerkt voor deze combinatie: EasyDriver -> NEM17-stepper
Speed_X = 160000/h; Opmerking: Snelheidsberekening uit Stepper Motor Driver V1-2 (RepRap) -> NEM23-stepper
controle van de stappenmotor / /
OPMERKING:
voor EasyDriver: hoog = disable
voor RepReap Stepper driver v1.2: laag = Disable
Als (val_X > = 530) {}
digitalWrite(Enable_X,HIGH); 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,HIGH); / / 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,LOW); de stappenmotor uitschakelen als de joystic in het centrum ligt
voor EasyStepper: hoog = disable
voor RepReap Stepper driver v1.2: laag = Disable
}
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
}
DC MOTOR B - LEZEN EN CONTROLEREN / / /
Lezen van locatie voor joystick en berekenen van de afstand en vanuit Midden
val_B = analogRead(potPin_B); luiden naar de waarde van de sensor
k = val_B - 517; 517 is center posities - hoe ver van centrum
k = abs(k); absolute waarde
sommige grenzen op j te houden PWM waarden nuttige plaatsen
onder 100 de motor niet verplaatst en PWM max is 255
Als (k > = 510) {}
k = 510; de meest de PWM-pin kan doen is 255
}
Als (k < = 200 & & k > = 10) {}
k = 200; onder 100 PWM de motor maakt een hoge pek klinken en niet beweegt
}
Als (k < = 10) {}
k = 0; minder dan 10 is de joystick zeer dicht bij het centrum
}
Uitvoeren van gelijkstroommotor B op basis van analoge ingang joystick
Als (val_B > = 530) {}
digitalWrite (Dir_B, hoge); andere richting
analogWrite (Speed_B, k/2); PWM uit (delen door 2 omdat max is 255)
}
Als (val_B < = 500) {}
digitalWrite (Dir_B, laag); //
analogWrite (Speed_B, k/2); //
}
Als (val_B < = 530 & & val_B > = 500) {}
analogWrite (Speed_B, 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);
}