Update 18 Februari 2017, PID laucnher dan Base sudah diperbarui
Dependencies: Motor PID Joystick_OrdoV5 mbed millis
Fork of MainProgram_BaseBaru_otomatis-reloader by
Diff: main.cpp
- Revision:
- 27:68efb1622985
- Parent:
- 26:256160a1a82d
- Child:
- 28:2d0746dc2d7d
diff -r 256160a1a82d -r 68efb1622985 main.cpp --- a/main.cpp Fri Feb 10 13:22:02 2017 +0000 +++ b/main.cpp Fri Feb 10 17:59:57 2017 +0000 @@ -54,20 +54,23 @@ #define PERPINDAHAN 1 // Perpindahan ke kanan dan kiri // Variable Atas -double speed, maxSpeed = 0.8, minSpeed = -0.8; +double speed,speed2, maxSpeed = 0.8, minSpeed = 0; double kpA=0.6757, kdA=0.6757, kiA=0.00006757; double p,i,d; +double p2,i2,d2; double last_error = 0, current_error, sum_error = 0; -double rpm, target_rpm = 9.0; +double last_error2 = 0, current_error2, sum_error2 = 0; +float rpm, target_rpm = 2.0; +float rpm2, target_rpm2 = 4.0; // Variable Bawah float Vt; float k_enc = PI*D_ENCODER; float k_robot = PI*D_ROBOT; float speedT = 0.2; -float speedB = 0.43; -float speedL = 0.4; -float vpid = 0; +float vpid = 0; +float pwmP = 0.5; +float pwmT = -0.8; /* Deklarasi Encoder Base */ @@ -75,19 +78,25 @@ /* Deklarasi Encoder Launcher */ encoderKRAI encoderAtas( PB_13, PB_14, 14, encoderKRAI::X2_ENCODING); +encoderKRAI encoderAtas2( PB_15, PC_4, 14, encoderKRAI::X2_ENCODING); /* Deklarasi Motor Base */ Motor motor1(PB_9, PC_5, PA_12); // pwm, fwd, rev, Motor Depan Motor motor2(PB_6, PB_1, PB_12); // pwm, fwd, rev, Motor Belakang /* Deklarasi Motor Launcher */ -Motor motor3(PA_8,PC_1,PC_2); // pwm ,fwd, rev, Motor Atas -//Motor motorld(PA_8, PC_1, PC_2); // pwm, fwd, rev -//Motor motorlb(PA_0, PA_4, PC_15 ); // pwm, fwd, rev +Motor motorL1(PA_8,PC_1,PC_2); // pwm ,fwd, rev, Motor Launcher1 +Motor motorL3(PA_10, PC_0, PC_3); // pwm, fwd, rev, Motor Launcher2 +Motor motorP(PC_7, PC_14, PC_13); // pwm, fwd, rev, Motor Powerscrew /* Deklarasi Penumatik Launcher */ DigitalOut pneumatik(PB_2, 0); +/*Dekalrasi Limit Switch */ +DigitalIn limitA (PC_9, PullUp); +DigitalIn limitT(PB_10, PullUp); +DigitalIn limitB (PC_8, PullUp); + /* Deklarasi Servo */ //Servo servoS(PB_2); //Servo servoB(PA_5); @@ -95,7 +104,7 @@ /** * posX dan posY berdasarkan arah robot * encoder Depan & Belakang sejajar sumbu Y - * encoder Kanan & Kiri sejajar sumbu X + * encoder Kanan & Kirim sejajar sumbu X **/ /* Variabel Encoder */ @@ -112,11 +121,13 @@ /* Deklarasi Variable Milis */ unsigned long int previousMillis = 0; unsigned long int currentMillis; +unsigned long int previousMillis2 = 0; +unsigned long int currentMillis2; /* Variabel Stick */ char case_ger; bool launcher = false; -//bool pneumatikGo = false; +bool reload = false; /****************************************************/ /* Deklarasi Fungsi dan Procedure */ @@ -152,12 +163,12 @@ else if ((!joystick.R1)&&(!joystick.L1)&&(!joystick.atas)&&(!joystick.bawah)&&(joystick.kanan)&&(!joystick.kiri)) { // Kanan casegerak = 3; - pc.printf("kanan"); +// pc.printf("kanan"); } else if ((!joystick.R1)&&(!joystick.L1)&&(!joystick.atas)&&(!joystick.bawah)&&(!joystick.kanan)&&(joystick.kiri)) { // Kiri casegerak = 4; - pc.printf("kiri"); +// pc.printf("kiri"); } else if ((!joystick.R1)&&(!joystick.L1)&&(!joystick.atas)&&(!joystick.bawah)&&(!joystick.kanan)&&(!joystick.kiri)) { // Break @@ -167,35 +178,34 @@ } void aktuator(){ -/* Fungsi untuk menggerakkan Penumatik */ - // Pneumatik -/* if (pneumatikGo){ - servoS.position(20); - wait_ms(500); - servoS.position(-28); - wait_ms(500); - servoS.position(20); - wait_ms(500); - for (int i = -0; i<=70; i++){ - servoB.position(i); - wait_ms(10); +/* Fungsi untuk menggerakkan Motor PowerScrew */ + // PowerScrew + if (reload){ + if (!limitA){ + motorP.brake (1); } - wait_ms(500); - servoB.position(0); - servoGo = false; + else + { + motorP.speed(pwmP); + if (!limitT) + { + while (limitB) + { + motorP.speed(pwmT); + } + motorP.brake(1); + } + } + reload = !reload; } - else{ - servoS.position(20); - servoB.position(0); - } -*/ - //Motor Atas +/*Motor Atas*/ if (launcher) { startMillis(); currentMillis = millis(); + /*Launcher Depan*/ if (currentMillis-previousMillis>=10) { - rpm = (double)encoderAtas.getPulses(); + rpm = (float)encoderAtas.getPulses(); current_error = target_rpm - rpm; sum_error = sum_error + current_error; p = current_error*kpA; @@ -203,7 +213,7 @@ i = sum_error*kiA*10.0; speed = p + d + i; init_speed(); - motor3.speed(speed); + motorL1.speed(speed); last_error = current_error; encoderAtas.reset(); //pc.printf("%.04lf\n",rpm); @@ -211,7 +221,27 @@ } else { - motor3.speed(0); + encoderAtas.getPulses(); + } + if (currentMillis2-previousMillis2>=10) + { + rpm2 = (float)encoderAtas2.getPulses(); + current_error2 = target_rpm2 - rpm2; + sum_error2 = sum_error2 + current_error2; + p2 = current_error2*kpA; + d2 = (current_error2-last_error2)*kdA/10.0; + i2 = sum_error2*kiA*10.0; + speed2 = p2 + d2 + i2; + init_speed(); + motorL3.speed(speed2); + last_error2 = current_error2; + encoderAtas2.reset(); + //pc.printf("%.04lf\n",rpm2); + previousMillis2 = currentMillis2; + } + else + { + encoderAtas2.getPulses(); } } // MOTOR Bawah @@ -249,7 +279,6 @@ default : { motor1.brake(1); motor2.brake(1); - break; } } // End Switch } @@ -270,19 +299,19 @@ void speedKalibrasiMotor(){ /* Fungsi untuk speed launcher */ - if (joystick.R3_click and speedL < 0.8){ - speedL = speedL + 0.01; // PWM++ Motor Belakang + if (joystick.R3_click and target_rpm < 14){ + target_rpm = target_rpm + 1; // RPM++ Motor Belakang } - if (joystick.L3_click and speedL > 0.1){ - speedL = speedL - 0.01; // PWM-- Motor Belakang + if (joystick.L3_click and target_rpm > 1){ + target_rpm = target_rpm - 1; // RPM-- Motor Belakang } - if (joystick.R2_click and speedB < 0.8 ){ - speedB = speedB + 0.01; // PWM++ Motor Depan + if (joystick.R2_click and target_rpm2 < 14){ + target_rpm2 = target_rpm2 + 1; // RPM++ Motor Depan } - if (joystick.L2_click and speedB > 0.1 ){ - speedB = speedB - 0.01; // PWM-- Motor Depan + if (joystick.L2_click and target_rpm2 > 1 ){ + target_rpm2 = target_rpm2 - 1; // RPM-- Motor Depan } - // pc.printf("Pwm depan = %.3f\t Pwm belakang = %.3f\n", speedL, speedB); + // pc.printf("Rpm depan = %.4f\t Rpm belakang = %.4f\n", target_rpm, target_rpm2); } void init_speed (){ @@ -293,6 +322,13 @@ if (speed<minSpeed){ speed = minSpeed; } + if (speed2>maxSpeed){ + speed2 = maxSpeed; + } + + if (speed2<minSpeed){ + speed2 = minSpeed; + } } /*********************************************************/ /* Main Function */ @@ -329,7 +365,8 @@ wait_ms(500); pneumatik = 0; } - speedKalibrasiMotor(); + speedKalibrasiMotor(); + if (joystick.silang_click) reload = !reload; } else { joystick.idle();