Components and supplies
RS775 motor
Xbee
sprocket
Pololu motor drive 24v21
PVC Board
MDD3A
Arduino MEGA 2560
Alminium frame
Arduino UNO R3 - Made in italy
electric parts
Tools and machines
3Dprinter
CNC milling machine
Apps and platforms
Arduino IDE
Project description
Code
Receiver seide Code
js
This is Receiver side Code.
1int PIN_VREF4=4; 2int PIN_VREF5=5; 3int PIN_VREF6=6; 4int PIN_VREF7=7;//←barbette motor 5 6int PIN_VREF2=2; 7int PIN_VREF3=3; 8int PIN_VREFD8=8; 9int PIN_VREFD9=9;//crawler motor 10 11 12int PIN_SUITON=10;//←pump motor 13int PIN_solenoid=11;//solenoid channel 14int PIN_SUITOND=12;//←pump motor direction 15 16 17int RcvData=0; 18 19int RcvBuf[8];//array 20 21//int MT_Rin=5; 22//int MT_Lin=6; 23int MT_RoutSerial=0; 24int MT_LoutSerial=0; 25int MT_RoutSerial2=0; 26int MT_LoutSerial2=0; 27int MT_RSuboutSerial=0; 28int MT_LSuboutSerial=0; 29int i=0; 30int RcvState=0; 31//int RcvCountF=0; 32//int RcvCountS=0; 33int RcvC=0; 34int MT1D=0; 35int MT2D=0; 36int MT1S=0; 37int MT2S=0; 38int RcvCount=0; 39int SUITONvalue=0; 40int analogupper; 41int analoglower; 42int VDataout1; 43int VDataout2; 44 45 46void setup() { 47 Serial.begin(9600); // 9600bpsでシリアルポートを開く 48 /*pinMode(PIN_OUT1,OUTPUT); 49 pinMode(PIN_OUT2,OUTPUT); 50 pinMode(PIN_OUT3,OUTPUT); 51 pinMode(PIN_OUT4,OUTPUT);*/ 52 pinMode(PIN_VREF2,OUTPUT); 53 pinMode(PIN_VREF3,OUTPUT); 54 pinMode(PIN_VREF4,OUTPUT); 55 pinMode(PIN_VREF5,OUTPUT); 56 pinMode(PIN_VREF6,OUTPUT); 57 pinMode(PIN_VREF7,OUTPUT); 58 pinMode(PIN_VREFD8,OUTPUT); 59 pinMode(PIN_VREFD9,OUTPUT); 60 pinMode(PIN_SUITON,OUTPUT); 61 pinMode(PIN_solenoid,OUTPUT); 62 pinMode(PIN_SUITOND,OUTPUT); 63} 64 65void loop() { 66 while(Serial.available() > 0){ 67 RcvData=Serial.read(); 68 //Serial.println(RcvData); 69 //Serial.println(RcvState); 70 switch(RcvState){ 71 case 0: 72 if(RcvData==255){ 73 RcvState = 1; 74 //Serial.print("RcvData1"); 75 //Serial.println(RcvState); 76 } 77 break; 78 case 1: 79 if(RcvData==255){ 80 RcvState = 2; 81 //Serial.print(" RcvData2"); 82 //Serial.println(RcvData); 83 } 84 else{ 85 RcvState = 0; 86 } 87 break; 88 case 2: 89 RcvBuf[RcvCount]=RcvData; 90 RcvCount++; 91 if(RcvCount >=9){ 92 RcvCount=0; 93 RcvState = 3; 94 //Serial.print(" RcvData*"); 95 //Serial.println(RcvData); 96 } 97 break; 98 case 3: 99 MotorCnt(); 100 RcvState=0; 101 break; 102 } 103 //Serial.print(" RcvCount*"); 104 //Serial.println(RcvCount); 105 } 106 //Serial.print(" RcvData*"); 107 //Serial.println(RcvData); 108 109 } 110 111void MotorCnt(){ 112 //モータ1の制御 113 //digitalWrite(13, HIGH ); 114 //delay(100); 115 //digitalWrite(13, LOW ); 116 //delay(100); 117 //digitalwriteが先でanalogWriteが後!! 118 analogupper = analogRead(A0); 119 VDataout1 = map(analogupper,0,1023,0,255); 120 analoglower = analogRead(A1); 121 VDataout2 = map(analoglower,0,1023,0,255); 122 123 if(RcvBuf[0]==0 || RcvBuf[0]==1){ 124 if(RcvBuf[0] == 0){ 125 MT_LoutSerial = RcvBuf[1]; 126 //Serial.print("左前"); 127 //Serial.print(MT_LoutSerial); 128 digitalWrite(PIN_VREFD8,HIGH); 129 analogWrite(PIN_VREF2,MT_LoutSerial); 130 } 131 else{ 132 MT_LoutSerial = RcvBuf[1]; 133 //Serial.print("左後"); 134 //Serial.print(MT_LoutSerial); 135 digitalWrite(PIN_VREFD8,LOW); 136 analogWrite(PIN_VREF2,MT_LoutSerial); 137 } 138 if(RcvBuf[2] == 0){ 139 MT_RoutSerial = RcvBuf[3]; 140 //Serial.print("右前"); 141 //Serial.println(MT_RoutSerial); 142 digitalWrite(PIN_VREFD9,HIGH); 143 analogWrite(13,MT_RoutSerial); 144 } 145 else{ 146 MT_RoutSerial = RcvBuf[3]; 147 //Serial.print("右後"); 148 //Serial.println(MT_RoutSerial); 149 digitalWrite(PIN_VREFD9,LOW); 150 analogWrite(13,MT_RoutSerial); 151 } 152 } 153 else{//MT_RoutSerial2とLoutSerial2は回転方向表示用変数 また,回転速度の表示を行うと,ジョイスティックが中立になっても,受信側の値が0にならないので,analogwrite(PWM出力)の値は強制的に0にしている 154 //MT_RoutSerial2 = RcvBuf[0]; 155 //MT_LoutSerial2 = RcvBuf[2]; 156 //Serial.print("停止 "); 157 //Serial.print("左回転方向"); 158 //Serial.print(MT_LoutSerial2); 159 //Serial.print("右回転方向"); 160 //Serial.print(MT_RoutSerial2); 161 //Serial.print("回転速度"); 162 //Serial.print(MT_LoutSerial); 163 //Serial.print(" "); 164 //Serial.println(MT_RoutSerial); 165 digitalWrite(PIN_VREFD8,LOW); 166 digitalWrite(PIN_VREFD9,LOW); 167 analogWrite(PIN_VREF2,0); 168 analogWrite(PIN_VREF3,0); 169 } 170 if(RcvBuf[4]==0 || RcvBuf[4]==1){ 171 if(RcvBuf[4] == 0){//ここから配列 ボタン入力の処理を描いてゆく 172 if(VDataout1<170){ 173 analogWrite(PIN_VREF4,50); 174 analogWrite(PIN_VREF5,0); 175 Serial.print("砲座X"); 176 Serial.println(1); 177 } 178 else{ //角度が大きければ停止 179 analogWrite(PIN_VREF4,0); 180 analogWrite(PIN_VREF5,0); 181 Serial.print("砲座X"); 182 Serial.println(2); 183 } 184 } 185 else if(RcvBuf[4] == 1){ 186 if(VDataout1>50){ 187 analogWrite(PIN_VREF4,0); 188 analogWrite(PIN_VREF5,50); 189 Serial.print("砲座X"); 190 Serial.println(3); 191 } 192 else{ //角度が大きければ停止 193 analogWrite(PIN_VREF4,0); 194 analogWrite(PIN_VREF5,0); 195 Serial.print("砲座X"); 196 Serial.println(4); 197 } 198 } 199 } 200 else{ //ボタンが押されていないので停止 201 analogWrite(PIN_VREF6,0); 202 analogWrite(PIN_VREF7,0); 203 Serial.print("砲座X"); 204 Serial.println(5); 205 } 206 if(RcvBuf[5]==0 || RcvBuf[5]==1){ 207 if(RcvBuf[5] == 0){ 208 if(VDataout2<190){ 209 analogWrite(PIN_VREF6,70); 210 analogWrite(PIN_VREF7,0); 211 Serial.print("砲座Z"); 212 Serial.println(1); 213 } 214 else{ 215 analogWrite(PIN_VREF6,0); 216 analogWrite(PIN_VREF7,0); 217 Serial.print("砲座Z"); 218 Serial.println(2); 219 } 220 } 221 else if(RcvBuf[5] == 1){ 222 if(VDataout2<30){ 223 analogWrite(PIN_VREF6,0); 224 analogWrite(PIN_VREF7,70); 225 Serial.print("砲座Z"); 226 Serial.println(3); 227 } 228 else{ 229 analogWrite(PIN_VREF6,0); 230 analogWrite(PIN_VREF7,0); 231 Serial.print("砲座Z"); 232 Serial.println(4); 233 } 234 } 235 } 236 else{ 237 analogWrite(PIN_VREF6,0); 238 analogWrite(PIN_VREF7,0); 239 Serial.print("砲座Z"); 240 Serial.println(5); 241 } 242 243 if(RcvBuf[6] == 1){ 244 SUITONvalue = RcvBuf[7]; 245 digitalWrite(PIN_SUITOND,HIGH); 246 analogWrite(PIN_SUITON,SUITONvalue); 247 digitalWrite(PIN_solenoid,HIGH); 248 } 249 else{ 250 SUITONvalue = 0; 251 digitalWrite(PIN_SUITOND,HIGH); 252 analogWrite(PIN_SUITON,0); 253 digitalWrite(PIN_solenoid,LOW); 254 } 255 Serial.print("可変抵抗⇓"); 256 Serial.println(VDataout2); 257 delay(100); 258}
Controller Code
js
This is controller code.
1int SendBuf[8]; 2int i; 3 4int HDatain,VDatain,HDataout,VDataout,SUITONin,SUITONout; 5int button2 =2; 6int button3 =3; 7int button4 =4; 8int button5 =5; 9int button6 =6; 10int DirR; 11int DirL; 12int SUITON_under_R_read; 13int SUITON_under_L_read; 14int SUITON_top_U_read; 15int SUITON_top_D_read; 16int SUITONDirup_out; 17int SUITONDirunder_out; 18int Duty1,Duty2,Duty3; 19int SubSolenoid_read; 20int SubSolenoid_out; 21int countn=0; 22int solenoidout=0; 23int SUINTONin ; 24 25void setup() { 26 // put your setup code here, to run once: 27 Serial.begin(9600); 28 pinMode(button2,INPUT); 29 pinMode(button3,INPUT); 30 pinMode(button4,INPUT); 31 pinMode(button5,INPUT); 32 pinMode(button6,INPUT); 33} 34 35void loop() { 36 // put your main code here, to run repeatedly: 37 VDatain = analogRead(A0); 38 VDataout = map(VDatain,0,1023,0,220); 39 HDatain = analogRead(A1); 40 HDataout = map(HDatain,0,1023,0,220); 41 SUITONin = analogRead(A5); 42 SUITONout = map(SUITONin,0,1023,0,255); 43 SUITON_under_R_read = digitalRead(button2); 44 SUITON_under_L_read = digitalRead(button3); 45 SUITON_top_U_read = digitalRead(button4); 46 SUITON_top_D_read = digitalRead(button5); 47 SubSolenoid_read = digitalRead(button6); 48 //前進後退 49 50 if(VDataout>120){ 51 if(HDataout>140){ 52 DirL = 0; 53 DirR = 0; 54 Duty1 =VDataout; 55 Duty2 =HDataout; 56 } 57 else if(140>=HDataout && 100<HDataout){ 58 DirL = 0; 59 DirR = 0; 60 Duty1 =(VDataout-110)*2; 61 Duty2 =(VDataout-110)*2; 62 } 63 else{ 64 DirL = 0; 65 DirR = 0; 66 Duty1 =(200-HDataout); 67 Duty2 =VDataout; 68 } 69 } 70 else if(VDataout<=120 && VDataout>=95){ 71 if(HDataout>110){ 72 DirL = 1; 73 DirR = 0; 74 Duty1 =(HDataout-115)*2; 75 Duty2 =(HDataout-115)*2; 76 } 77 else if(HDataout<110){ 78 DirL = 0; 79 DirR = 1; 80 Duty1 =(108-HDataout)*2; 81 Duty2 =(108-HDataout)*2; 82 } 83 else{ 84 DirL = 2; 85 DirR = 2; 86 Duty1 =0; 87 Duty2 =0; 88 } 89 } 90 91 else{ 92 if(HDataout>150){ 93 DirL = 1; 94 DirR = 1; 95 Duty1 =(HDataout-120)*2; 96 Duty2 =(120-VDataout)*2; 97 } 98 else if(150>=HDataout && HDataout>100){ 99 DirL = 1; 100 DirR = 1; 101 Duty1 =(120-VDataout)*2;//(110-VDataout)*2 102 Duty2 =(120-VDataout)*2;//(110-VDataout)*2 103 } 104 else{ 105 DirL = 2; 106 DirR = 2; 107 Duty1 =(120-HDataout)*2; 108 Duty2 =(120-VDataout)*2; 109 } 110 } 111 112 if(SUITON_under_R_read==LOW || SUITON_under_L_read==LOW){ //砲台下側左右 113 if(SUITON_under_R_read==LOW){ 114 SUITONDirunder_out=1; 115 } 116 else{ 117 SUITONDirunder_out=0; 118 } 119 } 120 else{ 121 SUITONDirunder_out=2; 122 } 123 if(SUITON_top_U_read==LOW || SUITON_top_D_read==LOW){ //砲台上側上下 124 if(SUITONDirup_out==LOW){ 125 SUITONDirup_out=1; 126 } 127 else{ 128 SUITONDirup_out=0; 129 } 130 } 131 else{ 132 SUITONDirup_out=2; 133 } 134 135 //for無限ループからのbreakで脱出 136 137 if (SubSolenoid_read==HIGH) { 138 solenoidout=0; 139 140 } 141 else{ 142 solenoidout=1; 143 144 } 145 146 //SendBuf[0] = 0xFF; 147 //SendBuf[1] = 0xFF; 148 SendBuf[0] = DirL; 149 SendBuf[1] = Duty1; 150 SendBuf[2] = DirR; 151 SendBuf[3] = Duty2; 152 SendBuf[4] = SUITONDirunder_out; 153 SendBuf[5] = SUITONDirup_out; 154 SendBuf[6] = solenoidout; 155 SendBuf[7] = SUITONout; 156 //SendBuf[4] = 0; 157 Serial.write(255); 158 Serial.write(255); 159 //Serial.print(255); 160 //Serial.println(255); 161 for(i=0;i<8;i++){ 162 163 //Serial.println(SendBuf[i]); 164 Serial.write(SendBuf[i]); 165 } 166 Serial.write(0); 167 //Serial.println(0); 168 //Serial.print("VDataout"); 169 //Serial.println(VDataout); 170 //Serial.print("HDataout"); 171 //Serial.println(HDataout); 172 //Serial.println(SubSolenoid_read); 173 delay(200); 174}
Downloadable files
Controller circuit diagram.
This figure show Controller circuit diagram.
Controller circuit.jpg
Receiver Circuit diagram
This figure shows Receiver Circuit diagram.
recever circuit.jpg
Controller program flow 1
This chart shows flow from start to crawler motors
file.None
Controller program flow 2
This chart shows flow from pump motor to end/
controller program code flow ②.jpg
Receiver control flow
This figure is Receiver control flow
receiver control flow .jpg
Comments
Only logged in users can leave comments