Bardzo ładnie, no to ja też coś mam.
Sterownik CNC na bazie płytki CNC Shield, 3 stepsticków i 6 przycisków. Czyli wedle zamówienia.
Prawie...
Nie ma sterowania potencjometrem, nie ma krańcówek. Jeśli spełni oczekiwania to dopiszę albo w ramach ćwiczeń ktoś inny dopisze.
Przyciski podłączamy do zaznaczonego miejsca. Po kolei od miejsca opisanego SpnEn, w dół, zajmujemy 6 rządków
spindle enable = przycisk dla osi X+
spindle direction = przycisk dla osi X-
cool en = przycisk dla osi Y+
abort = przycisk dla osi Y-
hold = przycisk dla osi Z+
resume = przycisk dla osi Z-
Oczywiście zworki pod Stepstickami mają znaczenie jak są ustawione. Jeśli ktoś chce żeby silniki pracowały wolniej lub szybciej musi znaleźć w kodzie programu:
czas = 800 i zmienić zgodnie z opisem
Kod:
// Prosty sterownik maszynki CNC dla 3 osi oparty o Arduino i płytkę CNC shield pod StepSticki
// Dodatkowo potrzebne jest 6 przycisków do sterowania - 2 na każdą oś
// by Ellipsis kwiecień 2016
//wpisz czas ogólnej prędkosci powiedzmy że 800 to będzie szybki ruch 5000 wolniejszy
int czas = 800; //do spowalniacza
int buttonXplus = 12; //spindle enable
int buttonXminus = 13; //spindle direction
int buttonYplus = A3; //cool enable
int buttonYminus = A0; //abort
int buttonZplus = A1; //hold
int buttonZminus = A2; //resume
void setup() {
pinMode(8,OUTPUT); // Enable
digitalWrite(6,LOW); // Set Enable low
pinMode(2,OUTPUT); // Step X
pinMode(5,OUTPUT); // Dir X
pinMode(3,OUTPUT); // Step Y
pinMode(6,OUTPUT); // Dir Y
pinMode(4,OUTPUT); // Step Z
pinMode(7,OUTPUT); // Dir Z
pinMode(buttonXplus,INPUT); // oś X - kierunek + (spindle enable)
pinMode(buttonXminus,INPUT); // oś X - kierunek - (spindle dir)
pinMode(buttonYplus,INPUT); // oś Y - kierunek + (cool enable)
pinMode(buttonYminus,INPUT); // oś Y - kierunek - (abort)
pinMode(buttonZplus,INPUT); // oś Z - kierunek + (hold)
pinMode(buttonZminus,INPUT); // oś Z - kierunek - (resume)
digitalWrite(buttonXplus, HIGH);
digitalWrite(buttonXminus, HIGH);
digitalWrite(buttonYplus, HIGH);
digitalWrite(buttonYminus, HIGH);
digitalWrite(buttonZplus, HIGH);
digitalWrite(buttonZminus, HIGH);
}
void loop() {
//========================================================oś X
if (digitalRead(buttonXplus) == LOW) { //przycisk X+ wcisniety
digitalWrite(5,HIGH); // Set Dir high
digitalWrite(2,HIGH); // Output high
delayMicroseconds(czas);
digitalWrite(2,LOW); // Output low
delayMicroseconds(czas);
}
//========================================================
if (digitalRead(buttonXminus) == LOW) { //przycisk X- wcisniety
digitalWrite(5,LOW); // Set Dir low
digitalWrite(2,HIGH); // Output high
delayMicroseconds(czas);
digitalWrite(2,LOW); // Output low
delayMicroseconds(czas);
}
//========================================================oś Y
if (digitalRead(buttonYplus) == LOW) { //przycisk Y+ wcisniety
digitalWrite(6,HIGH); // Set Dir high
digitalWrite(3,HIGH); // Output high
delayMicroseconds(czas);
digitalWrite(3,LOW); // Output low
delayMicroseconds(czas);
}
//========================================================
if (digitalRead(buttonYminus) == LOW) { //przycisk Y- wcisniety
digitalWrite(6,LOW); // Set Dir low
digitalWrite(3,HIGH); // Output high
delayMicroseconds(czas);
digitalWrite(3,LOW); // Output low
delayMicroseconds(czas);
}
//========================================================oś Z
if (digitalRead(buttonZplus) == LOW) { //przycisk Z+ wcisniety
digitalWrite(7,HIGH); // Set Dir high
digitalWrite(4,HIGH); // Output high
delayMicroseconds(czas);
digitalWrite(4,LOW); // Output low
delayMicroseconds(czas);
}
//========================================================
if (digitalRead(buttonZminus) == LOW) { //przycisk Z- wcisniety
digitalWrite(7,LOW); // Set Dir low
digitalWrite(4,HIGH); // Output high
delayMicroseconds(czas);
digitalWrite(4,LOW); // Output low
delayMicroseconds(czas);
}
//========================================================
}
Kod jest sprawdzony w praktyce. Działa zgodnie z założeniami.
Pamiętajcie, że nie obsługuje krańcówek!