单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:3193|回复:3

Ardiuno制作2019年电赛电磁炮

[复制链接]
ID:444191发表于 2021-7-24 10:13|显示全部楼层
花了几天时间做出来的电磁炮。三种模式:模式一,调距离射靶。模式二,调角度,距离射靶。模式三,全自动射靶(利用激光测距来瞄靶)
#################################程序###########################

//遥控
#include< IRremote.h>
//LCD1602
#include< Wire.h>
#include< LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);//0x27   0x3F
//舵机
#include< Servo.h>
Servo myservo;
Servo myservo2;
const int irReceiverPin =7;//遥控引脚
const int relayPin =3;//继电器引脚
int tu=0;//模式
int JL=0;//距离
int JL2=0;//模式2距离
unsigned int JL3;//模式3距离
int jiaodu=0;//角度
int jiaodu2=0;//模式2角度
int jiaodu3=0;//模式三角度
int zh=0;//模式2切换
int pin =4;//激光
int jishi;
int jiaodu4=0;
int JL4=0;
int jiaodu5=0;
unsigned long duration;//模式三激光探测距离

IRrecv irrecv(irReceiverPin); //Creates a variable of type IRrecv
decode_results results;
void setup() {
   // put your setup code here, to run once:
   pinMode(relayPin, OUTPUT);//使能继电器
   Serial.begin(9600);//波特率
   myservo2.attach(8);   myservo.attach(9);//舵机使能
   irrecv.enableIRIn(); //遥控
   lcd.init(); //LCD1602
   lcd.backlight();
     pinMode(pin, INPUT);
}
void loop() {
       myservo.write(60);
       while(1){
         //遥控串口
         if (irrecv.decode(&results)) //if the ir receiver module receiver data
           {
               /*
                 Serial.print("irCode: "); //print"irCode: "
                 Serial.print(results.value, HEX); //print the value in hexdecimal
                 Serial.print(", bits: "); //print" , bits: "
                 Serial.print(JL);
                 Serial.print("   ");
                 Serial.print(tu);
                 Serial.print("   ");
                 Serial.println(results.bits); //print the bits
                 */
                 irrecv.resume(); // Receive the next value
         }
//  delay(20);
   if(tu==0){
           myservo.write(0);myservo2.write(90);
           lcd.setCursor(0, 0);
           lcd.print("Electromagnetic");
           lcd.setCursor(0, 1);
           lcd.print("Gun         ");
       }else if(tu==1){
           lcd.setCursor(0, 0);
           lcd.print("Model: 1 ");
           lcd.setCursor(0, 1);
           lcd.print(" Distance");
           lcd.setCursor(9, 1);
           lcd.print(JL);
           lcd.setCursor(12, 1);
           lcd.print("cm");
       }else if(tu==2){
           lcd.setCursor(0, 0);
           lcd.print("Model: 2 ");
           lcd.setCursor(0, 1);
           lcd.print("JL:");
           lcd.setCursor(4, 1);
           lcd.print(JL2);
           lcd.setCursor(8, 1);
           lcd.print("JD:");
           lcd.setCursor(12, 1);
           lcd.print(jiaodu2);
       }
       switch(results.value){
         case 0xFFA25D://CH-
               tu=1;
           results.value=0xFFFFFF;  
               break;
         case 0xFF629D://CH  
         if(tu==1){
           jiaodu=(JL/10)-5;
               myservo.write(jiaodu);
               delay(50);
               digitalWrite(relayPin,HIGH);
               delay(500);
               digitalWrite(relayPin,LOW);
               JL=0;tu=0;jiaodu=0;
               results.value=0xFFFFFF;
         }else if((tu==2)&&(zh==1)&&(JL2>199)){
               jiaodu2=jiaodu2+60;
               myservo2.write(jiaodu2);
               jiaodu=(JL2/10)-5;
               myservo.write(jiaodu);
               delay(100);
               digitalWrite(relayPin,HIGH);
               delay(500);
               digitalWrite(relayPin,LOW);
               JL=0;tu=0;jiaodu2=0;jiaodu=0;zh=0;JL2=0;
               results.value=0xFFFFFF;  
         }else results.value=0xFFFFFF;
               break;
         case 0xFFE21D://CH+
               tu=2;
           results.value=0xFFFFFF;  
               break;
         case 0xFF22DD://|<<
             if((tu==2)&&(zh==1)){
                 zh=0;
                 results.value=0xFFFFFF;
               }
               break;
         case 0xFF02FD://>>|
         if((tu==2)&&(zh==0)){
                 zh=1;
                 results.value=0xFFFFFF;
               }else results.value=0xFFFFFFF;
               break;
         case 0xFFC23D://>||
                 tu=3;jiaodu3=60;
                 myservo2.write(60);
               results.value=0xFFFFFFF;
               break;
         case 0xFFE01F://-
         if((tu==1)&&(JL>199)){
               JL--;
               lcd.setCursor(9, 1);
               lcd.print(JL);
               results.value=0xFFFFFFF;
         }else if((tu==2)&&(zh==0)&&(JL2>199)){
               JL2--;
               lcd.setCursor(4, 1);
               lcd.print(JL2);
               results.value=0xFFFFFFF;
         }else if((tu==2)&&(zh==1)&&(jiaodu2>0)){
               jiaodu2--;
                 lcd.setCursor(12, 1);
                 lcd.print(jiaodu2);
               results.value=0xFFFFFFF;
           }else   results.value=0xFFFFFFF;
               break;    
         case 0xFFA857://+
         if((tu==1)&&(JL<301)){
               JL++;
               results.value=0xFFFFFFF;
         }else if((tu==2)&&(zh==0)&&(JL2<301)){
               JL2++;
               results.value=0xFFFFFFF;
         }else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
               jiaodu++;
               results.value=0xFFFFFFF;
           }else   results.value=0xFFFFFFF;
               break;
         case 0xFF906F://EQ
               break;
         case 0xFF6897://0
                 if(tu==1){
                   JL=0;
                   lcd.setCursor(9, 1);
                     lcd.print("   ");
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==0)){
                 lcd.setCursor(4, 1);
                 lcd.print("   ");
                   JL2=0;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==1)){
                   lcd.setCursor(12, 1);
                   lcd.print("  ");
                     jiaodu2=0;
                     results.value=0xFFFFFFF;
                 }else results.value=0xFFFFFFF;
               break;
         case 0xFF9867://100+
               if((tu==1)&&(JL<301)){
                   JL=JL+100;
               results.value=0xFFFFFFF;
               }else if((tu==2)&&(zh==0)&&(JL2<301)){
                   JL2=JL2+100;
                   results.value=0xFFFFFFF;
               }else results.value=0xFFFFFFF;
               break;
         case 0xFFB04F://200+
               if((tu==1)&&(JL<301)){
                   JL=JL+200;
               results.value=0xFFFFFFF;
               }else if((tu==2)&&(zh==0)&&(JL2<301)){
                   JL2=JL2+200;
                   results.value=0xFFFFFFF;
               }else results.value=0xFFFFFFF;
               break;
         case 0xFF30CF://1
               if((tu==1)&&(JL<301)){
                   JL=JL+1;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==0)&&(JL<301)){
                   JL2=JL2+1;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
                   jiaodu2=jiaodu2+1;
                     results.value=0xFFFFFFF;
                 }else results.value=0xFFFFFFF;
               break;
         case 0xFF18E7://2
                 if((tu==1)&&(JL<301)){
                   JL=JL+2;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==0)&&(JL<301)){
                   JL2=JL2+2;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
                   jiaodu2=jiaodu2+2;
                     results.value=0xFFFFFFF;
                 }else results.value=0xFFFFFFF;
               break;
         case 0xFF7A85://3
               if((tu==1)&&(JL<301)){
                   JL=JL+3;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==0)&&(JL<301)){
                   JL2=JL2+3;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
                   jiaodu2=jiaodu2+3;
                     results.value=0xFFFFFFF;
                 }else results.value=0xFFFFFFF;
               break;
         case 0xFF10EF://4
                 if((tu==1)&&(JL<301)){
                   JL=JL+4;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==0)&&(JL<301)){
                   JL2=JL2+4;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
                   jiaodu2=jiaodu2+4;
                     results.value=0xFFFFFFF;
                 }else results.value=0xFFFFFFF;
               break;
         case 0xFF38C7://5
                 if((tu==1)&&(JL<301)){
                   JL=JL+5;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==0)&&(JL<301)){
                   JL2=JL2+5;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
                   jiaodu2=jiaodu2+5;
                     results.value=0xFFFFFFF;
                 }else results.value=0xFFFFFFF;
               break;
         case 0xFF5AA5://6
                 if((tu==1)&&(JL<301)){
                   JL=JL+6;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==0)&&(JL<301)){
                   JL2=JL2+6;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
                   jiaodu2=jiaodu2+6;
                     results.value=0xFFFFFFF;
                 }else results.value=0xFFFFFFF;
               break;
         case 0xFF42BD://7
                 if((tu==1)&&(JL<301)){
                   JL=JL+7;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==0)&&(JL<301)){
                   JL2=JL2+7;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
                   jiaodu2=jiaodu2+7;
                     results.value=0xFFFFFFF;
                 }else results.value=0xFFFFFFF;
               break;
         case 0xFF4AB5://8
                 if((tu==1)&&(JL<301)){
                   JL=JL+8;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==0)&&(jiaodu2<61)){
                   jiaodu2=jiaodu2+8;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==1)&&(JL<301)){
                     JL2=JL2+8;
                     results.value=0xFFFFFFF;
                 }else results.value=0xFFFFFFF;
               break;
         case 0xFF52AD://9
                 if((tu==1)&&(JL<301)){
                   JL=JL+9;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==0)&&(JL<301)){
                   JL2=JL2+9;
                 results.value=0xFFFFFFF;
                 }else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
                   jiaodu2=jiaodu2+9;
                     results.value=0xFFFFFFF;
                 }else results.value=0xFFFFFFF;
               break;
           }
           //
           if(tu==3){
           myservo.write(0);
           lcd.setCursor(0, 0);
           lcd.print("Model: 3 ");
           lcd.setCursor(0, 1);
           /*
           Serial.print(" JL3: ");
           Serial.print(JL3);
           Serial.println("us");
         */  
           //扫描
             JL3= pulseIn(pin, HIGH);
           while((JL3>30001)||(JL3<19999)){
           if((zh==0)&&(jiaodu3<121)){
               jiaodu3++;
               myservo2.write(jiaodu3);
               if(jiaodu3==120)zh=1;
               delay(30);
             }else if((zh==1)&&(jiaodu3>58)){
               jiaodu3--;
                 myservo2.write(jiaodu3);
               if(jiaodu3==60)zh=0;
               delay(30);
               }
               JL3= pulseIn(pin, HIGH);

             /*   Serial.print(" JL3: ");
               Serial.print(JL3);
               Serial.println("cm");
             */
             JL4=JL3/100;jiaodu4=(JL4/10)-5;
             jiaodu5=jiaodu3-60;
             if((JL3>0)&&(JL3<40000)){  
                 lcd.print("JL:");
               lcd.setCursor(3, 1);
                 lcd.print(JL4);
                 lcd.setCursor(7, 1);
                 lcd.print("cm");
                 lcd.setCursor(9, 1);
                 lcd.print("JD:");
                 lcd.setCursor(12, 1);
                 lcd.print(jiaodu5);
                 lcd.print(".c");
             }
           }
           for(jishi=0;jishi<5;jishi++){
               delay(300);
             }if(jishi==5){
               jiaodu4=(JL4/10)-5;
                 Serial.print(" jiaodu4: ");
                 Serial.print(jiaodu4);
               myservo.write(jiaodu4);
               delay(50);
               digitalWrite(relayPin,HIGH);
               delay(500);
               digitalWrite(relayPin,LOW);
               tu=0;jiaodu4=0;JL3=0;JL4=0;
               myservo.write(0);myservo2.write(90);
               }
         }
       }
}


评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

ID:954677发表于 2021-7-28 11:21|显示全部楼层
楼主,能不能发一下原理图呢
ID:444191发表于 2021-7-28 20:43|显示全部楼层
公司的 发表于 2021-7-28 11:21
楼主,能不能发一下原理图呢

很多都是用模块的,只有升压的是自己做的。里面有1602,红外遥控,继电器模块,舵机云台,激光传感器。最主要的就是线圈问题,捆的话超80圈吧。升压这边建议用可控硅对电容放电来控制

评分

黑币 +20
收起理由
+ 20
回帖助人的奖励!

查看全部评分

ID:444191发表于 2021-7-28 20:48|显示全部楼层
发射台下面的那白色的一坨是充电宝,充电宝是给Arduino供给的。靠近电容两层最上面那层是可控硅控制电容放电给电磁炮的。黑的接地,红的接12伏。
蓝色的继电器模块因为是5伏控制的,所以用了稳压芯片到5伏再控制的。
51hei图片_20210728203908.jpg
51hei图片_20210728203919.jpg

评分

黑币 +50
收起理由
+ 50
回帖助人的奖励!

查看全部评分

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网