Ellipsis napisał(a):
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.
Hej
W ramach ćwiczeń dopisałem kawałek kodu do obsługi potencjometru
Niestety nie mam na chwilę obecną jak tego sprawdzić
Więc jeśli ktoś zechciał by rzucić okiem

Ewentualnie sprawdzić na własną odpowiedzialność

Środkową nóżkę potencjometru podpinamy pod pin A4
Jedną skrajną pod GND
Drugą skrajną pod +5V
Potencjometr 10kom powinien być odpowiedni
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
//czas ogólnej prędkosci zależy od ustawienia potencjometru
int czas = 0; //do spowalniacza
int potencjometr = 0; // zmienna dla potencjometru
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() {
//========== odzcytanie potencjometru i ustawienie czasu opóźnienia
potencjometr = analogRead(A4); //potencjometr w funkcji dzielnika napięcia
czas = map(potencjometr, 0, 1023, 800, 5000);
//========================================================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);
}
//========================================================
}
Edyta: poprawki w kodzie
Na chwilę obecną to tyle.
Niestety brak przetwornicy uniemożliwia mi sprawdzenie działania programu na mojej elektronice

Edyta :
Uruchomiłem w programie komunikację UART i kazałem na końcu programu wyświetlać zmienną (czas)
Podłączyłem potencjometr pod Arduino GND , A4, +5V , Po wgraniu programu na monitorze portu COM podczas kręcenia potencjometrem uzyskałem wartości zmiennej (czas) w granicach 800-5000

Wygląda więc na to że działa

Przetestowane na osi Z
Działa ślicznie
O proszę :
Pozdrawiam