Garage ShoutBox
Tylko zalogowani użytkownicy mogą wejść do czatu
lub Zarejestruj aby założyć posty i tematy.

Sterujemy frezarką CNC3018 z pomocą pada od Playstation

Cześć i czołem, pewnego jesiennego dnia mi się nudziło, a że walał mi się po domu przedłużacz do pada od Playstation, klon UNO oraz pady postanowiłem że połączę to wszystko do kupy i dorobię kontroler do frezarki CNC3018 (może kiedyś się przyda).

Zacząłem od ucięcia wtyczki w przedłużaczu, po sprawdzaniu wyprowadzeń miernikiem (kolory wyprowadzeń nie zgadzały się z tymi zamieszczonymi w sieci). Podłączyłem wszystko tak jak na poniższym schemacie (uwaga: używam napięcia 5V, nie 3,3V, może to być szkodliwe dla pada). Frezarka komunikuje się przez linię UART z Arduino (prędkość transmisji 115200).

Softwareowo to użyłem biblioteki PS2XLIB dla Arduino i zmodyfikowałem przykład żeby komunikować się szeregowo z CNC oraz zmieniłem konfigurację pinów (przykład był dla innego arduino).

Kod wygląda mniej więcej tak:

#include <PS2X_lib.h> //for v1.6

PS2X ps2x; // create PS2 Controller Class
void setup(){

Serial.begin(115200);
ps2x.config_gamepad(5,4,3,2, true, true); //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error
Serial.println("$X");

}

int spindle_speed=800;
int spindle_enabled=0;
void loop(){

ps2x.read_gamepad(false, 0);

if(ps2x.ButtonPressed(PSB_START)){
if ((spindle_enabled)<1){
spindle_enabled=1;
Serial.print("M3 S" );
Serial.println(spindle_speed);
delay(100);
}
else
{
spindle_enabled=0;
Serial.println("M5");
delay(100);
}
}

if(ps2x.Button(PSB_SELECT)){
//Serial.println("Select");
delay(10);
}
if(ps2x.Button(PSB_PAD_UP)) {
// Serial.println("▲"); delay(10);
Serial.println("$J=G21G91X0Y-1Z0F1000");
delay(10);
}
if(ps2x.Button(PSB_PAD_RIGHT)){
//Serial.println("►"); delay(10);
Serial.println("$J=G21G91X1Y0Z0F1000");
delay(10);
}
if(ps2x.Button(PSB_PAD_LEFT)){
//Serial.println("◄"); delay(10);
Serial.println("$J=G21G91X-1Y0Z0F1000");
delay(10);
}
if(ps2x.Button(PSB_PAD_DOWN)){
//Serial.println("▼"); delay(10);
Serial.println("$J=G21G91X0Y1Z0F1000");
delay(10);
}

if(ps2x.Button(PSB_L3)){
//Serial.println("L3"); delay(10);
}
if(ps2x.Button(PSB_R3)){
//Serial.println("R3"); delay(10);
}
if(ps2x.ButtonPressed(PSB_L2)){
//Serial.println("L2"); delay(10);
if (spindle_speed>=100 && (spindle_speed<=1000)) {
spindle_speed = spindle_speed - 50;
Serial.print("S ");
Serial.println(spindle_speed);
}
delay(50);
}
if(ps2x.Button(PSB_R2)){
//Serial.println("R2"); delay(10);
}
if(ps2x.Button(PSB_GREEN)){
// Serial.println("∆"); delay(10);
Serial.println("$J=G21G91X0Y0Z1F1000");
delay(10);
}
if(ps2x.Button(PSB_RED)){ 
//Serial.println("O"); delay(10);
}
if(ps2x.Button(PSB_PINK)) { 
//Serial.println("□"); delay(10); 
}
if(ps2x.Button(PSB_BLUE)) { 
//Serial.println("X"); delay(10); 
Serial.println("$J=G21G91X0Y0Z-1F1000");
delay(10); 
}
if(ps2x.ButtonPressed(PSB_L1)){ 

//Serial.println("L1"); delay(10);}
if (spindle_speed>=50 && spindle_speed<1000) {
spindle_speed = spindle_speed + 50;
Serial.print("S ");
Serial.println(spindle_speed);
}
delay(50); 
}
if(ps2x.Button(PSB_R1)) 
{
//Serial.println("R1"); delay(10);

delay(50);

}

Piszę tutaj o tym bo może kogoś zainspiruję, nie odpowiadam za uszkodzenia elektroniki itp. itd.

Postaram się dodać w dzień filmik z działania. Pozdrawiam 😉

Dodane pliki:
  • Aby przesyłać pliki musisz się zalogować.

Mam jeden stary pad  🙂 Dzięki za ten wpis 🙂

Cytat z Tomasz data 7 lutego 2021, 11:04

Mam jeden stary pad  🙂 Dzięki za ten wpis 🙂

Cieszę się że jest miejsce gdzie można się dzielić takimi projektami 😉 , tutaj filmik dołączam: https://youtu.be/I12qZFzJw6w