NagaokaRoboticsClub_mbedTeam / Mbed 2 deprecated 2021_NHK_A

Dependencies:   mbed QEI led beep softPWM Servo_softpwm IR2302 lpf

Committer:
THtakahiro702286
Date:
Sat Oct 23 05:43:25 2021 +0000
Revision:
26:7cb2c322153a
Parent:
25:8bbfa2fa59be
Child:
27:818783bc9a89
no catch

Who changed what in which revision?

UserRevisionLine numberNew contents of line
THtakahiro702286 24:952a01c8baee 1 //2021/10/20 振り子振るだけ
THtakahiro702286 14:7e5b21c812fd 2
THtakahiro702286 0:6f4b2005b633 3 #include "mbed.h"
umekou 12:915a390e3fc4 4
THtakahiro702286 0:6f4b2005b633 5 #include "jy901.h"
Washio 11:b041e6cea0ef 6 #include "Servo.h"
Washio 11:b041e6cea0ef 7 #include "QEI.h"
umekou 13:9ad33de1c942 8 #include "IR2302.h"
umekou 12:915a390e3fc4 9
Washio 11:b041e6cea0ef 10 #include "pin_config.h"
Washio 11:b041e6cea0ef 11 #include "control_parameter.h"
umekou 12:915a390e3fc4 12
THtakahiro702286 0:6f4b2005b633 13 #include "lpf.h"
THtakahiro702286 0:6f4b2005b633 14 #include "beep.h"
THtakahiro702286 15:d8db04a67df9 15
THtakahiro702286 15:d8db04a67df9 16 Serial pc(USBTX,USBRX,115200);
THtakahiro702286 18:20dee7c7a628 17
THtakahiro702286 18:20dee7c7a628 18 //Beep buzzer(BEEP);
THtakahiro702286 0:6f4b2005b633 19 JY901 jy(SDA, SCL);
THtakahiro702286 18:20dee7c7a628 20 //DigitalOut stop(STOP);
THtakahiro702286 18:20dee7c7a628 21
THtakahiro702286 0:6f4b2005b633 22 QEI encoder(QEI1 ,QEI2 ,NC ,100 ,QEI::X4_ENCODING);
THtakahiro702286 18:20dee7c7a628 23
THtakahiro702286 0:6f4b2005b633 24 lpf yAcc(LPF_C_TIME, LPF_A_TIME);
THtakahiro702286 0:6f4b2005b633 25 lpf zAcc(LPF_C_TIME, LPF_A_TIME);
THtakahiro702286 21:b7734064c7dc 26 lpf mSp(MOT_C_TIME, MOT_A_TIME);
umekou 7:74b1ad3a2450 27 Servo servo[3] = {SERVO1, SERVO2, SERVO3};
umekou 13:9ad33de1c942 28 IR2302 ir2302(MD_A,MD_B);//梅沢追加 IR2302
THtakahiro702286 24:952a01c8baee 29 Timer setWait,nextWait,jumpWait;
THtakahiro702286 26:7cb2c322153a 30 AnalogIn ph[3] = {PHOTO1,PHOTO2,PHOTO3};
THtakahiro702286 26:7cb2c322153a 31 DigitalOut light[3] = {ROPE1,ROPE2,ROPE3};
THtakahiro702286 18:20dee7c7a628 32
THtakahiro702286 0:6f4b2005b633 33 int main()
THtakahiro702286 0:6f4b2005b633 34 {
THtakahiro702286 0:6f4b2005b633 35 int i=0,j=0,k=0;
THtakahiro702286 18:20dee7c7a628 36 double acc[3]; //加速度
THtakahiro702286 18:20dee7c7a628 37 double abac[3]={0};//初期座標軸での加速度
THtakahiro702286 18:20dee7c7a628 38 double angle[3];
THtakahiro702286 0:6f4b2005b633 39 float lpfY,lpfZ; //ローパス後の加速度
THtakahiro702286 21:b7734064c7dc 40 float lpfM; //モータのローパス
THtakahiro702286 0:6f4b2005b633 41 jy.calibrateAll(50);
umekou 12:915a390e3fc4 42
THtakahiro702286 0:6f4b2005b633 43 int nowPalse;
THtakahiro702286 0:6f4b2005b633 44
THtakahiro702286 26:7cb2c322153a 45 float phI[3] = {0};//フォトインタラプタ
THtakahiro702286 0:6f4b2005b633 46 bool rope = 0;
THtakahiro702286 20:c51583296f7e 47
THtakahiro702286 24:952a01c8baee 48 bool firstFlag = 1;//1
THtakahiro702286 24:952a01c8baee 49 bool secondFlag= 0;//0
THtakahiro702286 24:952a01c8baee 50 bool thirdFlag = 0;//0
THtakahiro702286 20:c51583296f7e 51 bool swingFlag = 1;//1
THtakahiro702286 14:7e5b21c812fd 52 bool flyFlag = 0;//0
THtakahiro702286 14:7e5b21c812fd 53 bool catchFlag = 0;//0
THtakahiro702286 14:7e5b21c812fd 54 int8_t way = 1;//1or-1
THtakahiro702286 14:7e5b21c812fd 55 bool resetFlag = 0;//0
THtakahiro702286 0:6f4b2005b633 56 float fiveYAcc[5]={0};
THtakahiro702286 0:6f4b2005b633 57
THtakahiro702286 0:6f4b2005b633 58 float servoAngle[3];
THtakahiro702286 0:6f4b2005b633 59 float motor;
THtakahiro702286 0:6f4b2005b633 60
THtakahiro702286 21:b7734064c7dc 61 for(int i=0;i < 3; i++)servo[i].calibrate(0.00095, 90);
THtakahiro702286 26:7cb2c322153a 62 for(i=0;i<3;i++) servo[i].write(0.9);
THtakahiro702286 26:7cb2c322153a 63 for(i=0; i<3; i++) servoAngle[i] = 0.9;
THtakahiro702286 26:7cb2c322153a 64 for(i=0; i<3; i++) light[i] = true;
THtakahiro702286 26:7cb2c322153a 65
THtakahiro702286 16:bdc10f57c11a 66
THtakahiro702286 21:b7734064c7dc 67 wait(5);
THtakahiro702286 16:bdc10f57c11a 68
THtakahiro702286 0:6f4b2005b633 69 while(1)
THtakahiro702286 0:6f4b2005b633 70 {
THtakahiro702286 0:6f4b2005b633 71 //センシング
THtakahiro702286 24:952a01c8baee 72 /*
THtakahiro702286 0:6f4b2005b633 73 //jy901
THtakahiro702286 0:6f4b2005b633 74 acc[1] = jy.getYaxisAcceleration()*10;
THtakahiro702286 0:6f4b2005b633 75 acc[2] = jy.getZaxisAcceleration()*10;
THtakahiro702286 0:6f4b2005b633 76 angle[0] = jy.getXaxisAngle();
THtakahiro702286 0:6f4b2005b633 77 angle[1] = jy.getYaxisAngle();
THtakahiro702286 0:6f4b2005b633 78 angle[2] = jy.getZaxisAngle();
THtakahiro702286 0:6f4b2005b633 79 for(i=0; i<3; i++)
THtakahiro702286 0:6f4b2005b633 80 {
THtakahiro702286 0:6f4b2005b633 81 if(acc[i] > 1567)acc[i] -= 3134;
THtakahiro702286 0:6f4b2005b633 82 }
THtakahiro702286 15:d8db04a67df9 83 abac[1] = acc[1]*cos(angle[0]/180.0*PI) - acc[2] * sin(angle[0]/180.0*PI);
THtakahiro702286 15:d8db04a67df9 84 abac[2] = acc[2]*cos(angle[0]/180.0*PI) + acc[1] * sin(angle[0]/180.0*PI);
THtakahiro702286 18:20dee7c7a628 85
THtakahiro702286 0:6f4b2005b633 86 //ローパスフィルタ
THtakahiro702286 0:6f4b2005b633 87 lpfY = yAcc.path_value(abac[1]);
THtakahiro702286 0:6f4b2005b633 88 lpfZ = zAcc.path_value(abac[2]);
THtakahiro702286 18:20dee7c7a628 89
THtakahiro702286 0:6f4b2005b633 90 //swingで使うやつ
THtakahiro702286 0:6f4b2005b633 91 fiveYAcc[j%5]= lpfY;
THtakahiro702286 0:6f4b2005b633 92 j++;
THtakahiro702286 24:952a01c8baee 93 */
THtakahiro702286 0:6f4b2005b633 94 //ロータリーエンコーダ
THtakahiro702286 0:6f4b2005b633 95 nowPalse = encoder.getPulses();
THtakahiro702286 0:6f4b2005b633 96
THtakahiro702286 0:6f4b2005b633 97 //紐センサ
THtakahiro702286 26:7cb2c322153a 98 for(i=0; i<3; i++) phI[i]=ph[i];
THtakahiro702286 0:6f4b2005b633 99
THtakahiro702286 0:6f4b2005b633 100 //処理部
THtakahiro702286 18:20dee7c7a628 101
THtakahiro702286 24:952a01c8baee 102 //加速1段目
THtakahiro702286 24:952a01c8baee 103 if(firstFlag)
THtakahiro702286 0:6f4b2005b633 104 {
THtakahiro702286 24:952a01c8baee 105 motor = FIRST_POWER * way * swingFlag; //振り子を振る、wayで反転を制御
THtakahiro702286 21:b7734064c7dc 106 motor = mSp.path_value(motor);
THtakahiro702286 20:c51583296f7e 107 if(nowPalse * way > FURIKO_STOP_LINE) //エンコーダーの値が一定以上なら(少し間をおいて)反転
THtakahiro702286 0:6f4b2005b633 108 {
THtakahiro702286 0:6f4b2005b633 109 way *= -1;
THtakahiro702286 24:952a01c8baee 110 nextWait.start();
THtakahiro702286 0:6f4b2005b633 111 setWait.start();
THtakahiro702286 0:6f4b2005b633 112 swingFlag = 0;
THtakahiro702286 25:8bbfa2fa59be 113 if(nextWait > SECOND_LINE) //一定時間経過したらsecondに移行
THtakahiro702286 21:b7734064c7dc 114 {
THtakahiro702286 24:952a01c8baee 115 firstFlag = 0;
THtakahiro702286 24:952a01c8baee 116 secondFlag = 1;
THtakahiro702286 21:b7734064c7dc 117 swingFlag = 0;
THtakahiro702286 24:952a01c8baee 118 nextWait.stop();
THtakahiro702286 24:952a01c8baee 119 nextWait.reset();
THtakahiro702286 21:b7734064c7dc 120 }
THtakahiro702286 0:6f4b2005b633 121 }
THtakahiro702286 24:952a01c8baee 122 if(setWait > FIRST_WAIT)
THtakahiro702286 0:6f4b2005b633 123 {
THtakahiro702286 0:6f4b2005b633 124 setWait.stop();
THtakahiro702286 0:6f4b2005b633 125 setWait.reset();
THtakahiro702286 0:6f4b2005b633 126 swingFlag = 1;
THtakahiro702286 0:6f4b2005b633 127 }
THtakahiro702286 0:6f4b2005b633 128 }
THtakahiro702286 24:952a01c8baee 129
THtakahiro702286 24:952a01c8baee 130 //加速2段目
THtakahiro702286 24:952a01c8baee 131 if(secondFlag)
THtakahiro702286 0:6f4b2005b633 132 {
THtakahiro702286 24:952a01c8baee 133 motor = SECOND_POWER * way * swingFlag; //振り子を振る、wayで反転を制御
THtakahiro702286 24:952a01c8baee 134 nextWait.start();
THtakahiro702286 24:952a01c8baee 135 if(nowPalse * way > FURIKO_STOP_LINE) //エンコーダーの値が一定以上なら(少し間をおいて)反転
THtakahiro702286 0:6f4b2005b633 136 {
THtakahiro702286 0:6f4b2005b633 137 way *= -1;
THtakahiro702286 24:952a01c8baee 138 setWait.start();
THtakahiro702286 0:6f4b2005b633 139 swingFlag = 0;
THtakahiro702286 25:8bbfa2fa59be 140 if(nextWait > THIRD_LINE) //一定時間経過したらthirdに移行
THtakahiro702286 24:952a01c8baee 141 {
THtakahiro702286 24:952a01c8baee 142 secondFlag = 0;
THtakahiro702286 24:952a01c8baee 143 thirdFlag = 1;
THtakahiro702286 24:952a01c8baee 144 swingFlag = 0;
THtakahiro702286 24:952a01c8baee 145 nextWait.stop();
THtakahiro702286 24:952a01c8baee 146 nextWait.reset();
THtakahiro702286 24:952a01c8baee 147 }
THtakahiro702286 0:6f4b2005b633 148 }
THtakahiro702286 24:952a01c8baee 149 if(setWait > SECOND_WAIT)
THtakahiro702286 24:952a01c8baee 150 {
THtakahiro702286 24:952a01c8baee 151 setWait.stop();
THtakahiro702286 24:952a01c8baee 152 setWait.reset();
THtakahiro702286 24:952a01c8baee 153 swingFlag = 1;
THtakahiro702286 24:952a01c8baee 154 }
THtakahiro702286 0:6f4b2005b633 155 }
THtakahiro702286 21:b7734064c7dc 156
THtakahiro702286 24:952a01c8baee 157 //加速3段目
THtakahiro702286 24:952a01c8baee 158 if(thirdFlag)
THtakahiro702286 0:6f4b2005b633 159 {
THtakahiro702286 24:952a01c8baee 160 jumpWait.start();
THtakahiro702286 24:952a01c8baee 161 motor = THIRD_POWER * way * swingFlag; //振り子を振る、wayで反転を制御
THtakahiro702286 24:952a01c8baee 162 if(nowPalse * way > FURIKO_STOP_LINE) //エンコーダーの値が一定以上なら(少し間をおいて)反転
THtakahiro702286 24:952a01c8baee 163 {
THtakahiro702286 24:952a01c8baee 164 way *= -1;
THtakahiro702286 24:952a01c8baee 165 nextWait.start();
THtakahiro702286 24:952a01c8baee 166 setWait.start();
THtakahiro702286 24:952a01c8baee 167 swingFlag = 0;
THtakahiro702286 24:952a01c8baee 168 }
THtakahiro702286 24:952a01c8baee 169 if(setWait > THIRD_WAIT)
THtakahiro702286 24:952a01c8baee 170 {
THtakahiro702286 24:952a01c8baee 171 setWait.stop();
THtakahiro702286 24:952a01c8baee 172 setWait.reset();
THtakahiro702286 24:952a01c8baee 173 swingFlag = 1;
THtakahiro702286 24:952a01c8baee 174 }
THtakahiro702286 25:8bbfa2fa59be 175 if((jumpWait > 18) && (nowPalse < JUMP_LINE)) //一定時間たったら前に飛ぶ
THtakahiro702286 24:952a01c8baee 176 {
THtakahiro702286 26:7cb2c322153a 177 flyFlag = 1;
THtakahiro702286 26:7cb2c322153a 178 thirdFlag = 0;
THtakahiro702286 24:952a01c8baee 179 }
THtakahiro702286 0:6f4b2005b633 180 }
THtakahiro702286 0:6f4b2005b633 181
THtakahiro702286 24:952a01c8baee 182 /*
THtakahiro702286 0:6f4b2005b633 183 //ジャンプ
THtakahiro702286 0:6f4b2005b633 184 if(flyFlag)
THtakahiro702286 0:6f4b2005b633 185 {
THtakahiro702286 24:952a01c8baee 186 if(lpfZ < RELEASE_LINE)
THtakahiro702286 0:6f4b2005b633 187 {
THtakahiro702286 0:6f4b2005b633 188 servoAngle[k%3] = -1.0;//サーボ離す
THtakahiro702286 0:6f4b2005b633 189 k++;
THtakahiro702286 0:6f4b2005b633 190 flyFlag = 0;
THtakahiro702286 0:6f4b2005b633 191 }
THtakahiro702286 0:6f4b2005b633 192 }
THtakahiro702286 24:952a01c8baee 193 */
THtakahiro702286 24:952a01c8baee 194 /*
THtakahiro702286 0:6f4b2005b633 195 //キャッチ
THtakahiro702286 0:6f4b2005b633 196 if(catchFlag)
THtakahiro702286 0:6f4b2005b633 197 {
THtakahiro702286 0:6f4b2005b633 198 servoAngle[k%3] = 0.9;
THtakahiro702286 0:6f4b2005b633 199 resetFlag=1;
THtakahiro702286 0:6f4b2005b633 200 }
THtakahiro702286 0:6f4b2005b633 201
THtakahiro702286 0:6f4b2005b633 202 //掴んだ後
THtakahiro702286 0:6f4b2005b633 203 if(resetFlag)
THtakahiro702286 0:6f4b2005b633 204 {
THtakahiro702286 0:6f4b2005b633 205 resetFlag = 0;
THtakahiro702286 24:952a01c8baee 206 secondFlag = 1;
THtakahiro702286 0:6f4b2005b633 207 }
THtakahiro702286 21:b7734064c7dc 208 */
THtakahiro702286 14:7e5b21c812fd 209 //実験用記述-----------
THtakahiro702286 16:bdc10f57c11a 210
THtakahiro702286 22:efa233983e1f 211 if(flyFlag)
THtakahiro702286 22:efa233983e1f 212 {
THtakahiro702286 22:efa233983e1f 213 // if(lpfZ < RELEASELINE)
THtakahiro702286 22:efa233983e1f 214 {
THtakahiro702286 22:efa233983e1f 215 for(i=0; i < 3; i++) servoAngle[i] = -1.0;//サーボ離す
THtakahiro702286 22:efa233983e1f 216 // k++;
THtakahiro702286 22:efa233983e1f 217 flyFlag = 0;
THtakahiro702286 22:efa233983e1f 218 }
THtakahiro702286 22:efa233983e1f 219 motor=0;
THtakahiro702286 22:efa233983e1f 220 }
THtakahiro702286 22:efa233983e1f 221
THtakahiro702286 14:7e5b21c812fd 222 //-------------------
umekou 12:915a390e3fc4 223
THtakahiro702286 0:6f4b2005b633 224 //駆動系
umekou 12:915a390e3fc4 225
THtakahiro702286 0:6f4b2005b633 226 //サーボ
THtakahiro702286 0:6f4b2005b633 227 for(i=0;i<3;i++) servo[i].write(servoAngle[i]);
THtakahiro702286 0:6f4b2005b633 228
THtakahiro702286 0:6f4b2005b633 229 //モーター
THtakahiro702286 20:c51583296f7e 230 ir2302.SetMotorSpeed(motor);
THtakahiro702286 18:20dee7c7a628 231
THtakahiro702286 15:d8db04a67df9 232 //表示系
THtakahiro702286 18:20dee7c7a628 233 // pc.printf("%.2f,%.2f,%.2f",angle[0],angle[1],angle[2]);
THtakahiro702286 24:952a01c8baee 234 // pc.printf("%.2f,%.2f,%.2f,",servoAngle[0],servoAngle[1],servoAngle[2]);
THtakahiro702286 24:952a01c8baee 235 // pc.printf("%.4f,",motor);
THtakahiro702286 18:20dee7c7a628 236 // pc.printf("%.2f,%.2f,",abac[1],abac[2]);
THtakahiro702286 22:efa233983e1f 237 // pc.printf("%.2f,%.2f,",lpfY,lpfZ);
THtakahiro702286 19:b9f53bc0fdf2 238 // pc.printf("%d,",nowPalse);
THtakahiro702286 24:952a01c8baee 239 // pc.printf("%d,",flyFlag);
THtakahiro702286 21:b7734064c7dc 240 // pc.printf("%.2f,",lpfM);
THtakahiro702286 26:7cb2c322153a 241 pc.printf("%.3f,%.3f,%.3f,",phI[0],phI[1],phI[2]);
THtakahiro702286 26:7cb2c322153a 242 pc.printf("\r\n");
THtakahiro702286 18:20dee7c7a628 243
THtakahiro702286 0:6f4b2005b633 244 }
THtakahiro702286 0:6f4b2005b633 245 }
umekou 12:915a390e3fc4 246
umekou 12:915a390e3fc4 247