找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2698|回复: 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);
                    }
            }
        }
}


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:954677 发表于 2021-7-28 11:21 | 显示全部楼层
楼主,能不能发一下原理图呢
回复

使用道具 举报

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

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

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表