• 红外坦克---综合应用


    该模块具有极小的尺寸,仅5.5cm×5.5cm。支持电压范围7-24V,具有欠压保护功能。双路电机接口,每路额定输出电流 7A;瞬间峰值电流可达50A。类似 L298N 控制逻辑,每路都支持三线控制调速、正反转及刹车。控制信号使用灌电流驱动方式,支持绝大多数单片机直接驱动;使用光耦对全部控制信号进行隔离,避免电机动作时的回流电流对控制信号造成干扰;并且本模块具有静电泄放回路,避免了因静电造成危险。
    配合Arduino源码,可以轻松实现电机控制。创客时代,我们能为您带来更多! 

    产品参数:
    工作电压(VM):DC 7 ~ 24 V,欠压保护
    支持电压范围: 6.5 ~ 27V
    控制信号高电平(Vhi):DC 3.0 ~ 6.5V(兼容3.3V和5V TTL电平)
    控制信号低电平(Vli):DC 0 ~ 0.8V
    输出通道数:2路
    每路控制型号电流:3mA ~ 11mA
    每路额定输入电流:7A
    每路峰值电流:50A
    支持PWM调速方式
    PWM最小有效脉宽:5us
    工作温度:-25 ~ 80°C
    尺寸:55mm * 55mm
    固定孔:M3
    重量:32g

    引脚说明:

    http://wiki.dfrobot.com.cn/index.php?title=(SKU:_DRI0041)_12/24V_7A_160W%E5%8F%8C%E8%B7%AF%E7%9B%B4%E6%B5%81%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8%E6%A8%A1%E5%9D%97

    接线图:

    #include <IRremote.h>     // IRremote库声明
    
    //电机PIN
    const int IN1=5;
    const int IN2=4;
    const int ENA=6;
    const int IN3=8;
    const int IN4=7;
    const int ENB=9;
    //电机速度
    int speed = 100;
    
    //红外接收
    int RECV_PIN = 3;
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    long control[7][3] = {//遥控器矫正数字
      {16580863, 16613503, 16597183},
      {16589023, 16621663, 16605343},
      {16584943, 16617583, 16601263},
      {16593103, 16625743, 16609423},
      {16582903, 16615543, 16599223},
      {16591063, 16623703, 16607383},
      {16586983, 16619623, 16603303}
    };
    
    //初始化电机PIN
    void initMotor(){
         pinMode(IN1, OUTPUT);
         pinMode(IN2, OUTPUT);
         pinMode(ENA, OUTPUT);
    
         pinMode(IN4, OUTPUT);
         pinMode(IN3, OUTPUT);
         pinMode(ENB, OUTPUT);
    }
    //初始化红外接收
    void initIR(){
         irrecv.enableIRIn();
    }
    
    
    void setup() {
         //初始电机
         initMotor();
         //初始化红外接收
         initIR();
    }
    
    void loop() {
         /**
          Motor1_Brake();
          Motor2_Brake();
          delay(100);
          Motor1_Forward(200);//电机正转,PWM调速
          Motor2_Forward(200);//电机正转,PWM调速
          delay(1000);
          Motor1_Brake();
          Motor2_Brake();
          delay(100);
          Motor1_Backward(200);//电机反转,PWM调速
          Motor2_Backward(200);//电机反转,PWM调速
          delay(1000);**/
    
     //
     if (irrecv.decode(&results))
      {
        Serial.println(results.value, HEX);//以16进制换行输出接收代码
    
        if (results.value == 4294967295) {
          //long click
    
        } else {
          if (results.value == control[0][0]) {
              Motor1_Brake();//停止电机1
              Motor2_Brake();//停止电机2
              Motor1_Backward(speed);//电机反转,PWM调速
          } else if (results.value == control[0][1]) {//
              Motor1_Backward(speed);//电机反转,PWM调速
              Motor2_Backward(speed);//电机反转,PWM调速
          } else if (results.value == control[0][2]) {
              Motor1_Brake();//停止电机1
              Motor2_Brake();//停止电机2
              Motor2_Backward(speed);//电机反转,PWM调速
          } else if (results.value == control[1][0]) {//
    
          } else if (results.value == control[1][1]) {//
              Motor1_Brake();//停止电机1
              Motor2_Brake();//停止电机2
          } else if (results.value == control[1][2]) {//
    
          } else if (results.value == control[2][0]) {
              Motor1_Brake();//停止电机1
              Motor2_Brake();//停止电机2
              Motor1_Forward(speed);//电机正转,PWM调速
          } else if (results.value == control[2][1]) {//
              Motor1_Forward(speed);//电机正转,PWM调速
              Motor2_Forward(speed);//电机正转,PWM调速
          } else if (results.value == control[2][2]) {
              Motor1_Brake();//停止电机1
              Motor2_Brake();//停止电机2
              Motor2_Forward(speed);//电机正转,PWM调速
          } else if (results.value == control[3][0]) {//0
    
          } else if (results.value == control[3][1]) {
    
          } else if (results.value == control[3][2]) {//st
    
          } else if (results.value == control[4][0]) {//1
              speed = 100;
          } else if (results.value == control[4][1]) {//2
              speed = 200;
          } else if (results.value == control[4][2]) {//3
              speed = 300;
          } else if (results.value == control[5][0]) {//4
              speed = 400;
          } else if (results.value == control[5][1]) {//5
              speed = 500;
          } else if (results.value == control[5][2]) {//6
              speed = 600;
          } else if (results.value == control[6][0]) {//7
              speed = 700;
          } else if (results.value == control[6][1]) {//8
              speed = 800;
          } else if (results.value == control[6][2]) {//9
              speed = 900;
          }
        }
        irrecv.resume(); // 接收下一个值
      }
      delay(100);
    }
    
    void Motor1_Forward(int Speed) //电机1正转,Speed值越大,电机转动越快
    {
         digitalWrite(IN1,HIGH);
         digitalWrite(IN2,LOW);
         analogWrite(ENA,Speed);
    }
    
    void Motor1_Backward(int Speed) //电机1反转,Speed值越大,电机转动越快
    {
         digitalWrite(IN1,LOW);
         digitalWrite(IN2,HIGH);
         analogWrite(ENA,Speed);
    }
    void Motor1_Brake()              //电机1刹车
    {
         digitalWrite(IN1,LOW);
         digitalWrite(IN2,LOW);
    }
    void Motor2_Forward(int Speed) //电机2正转,Speed值越大,电机转动越快
    {
         digitalWrite(IN3,HIGH);
         digitalWrite(IN4,LOW);
         analogWrite(ENB,Speed);
    }
    
    void Motor2_Backward(int Speed) //电机2反转,Speed值越大,电机转动越快
    {
         digitalWrite(IN3,LOW);
         digitalWrite(IN4,HIGH);
         analogWrite(ENB,Speed);
    }
    void Motor2_Brake()
    {
         digitalWrite(IN3,LOW);
         digitalWrite(IN4,LOW);
    }
    钟声敲响了日落
  • 相关阅读:
    01-发送你的第一个请求
    postman使用
    java poi导出多sheet页
    base64加密解密
    Django crontab
    super().__init__()
    paramiko模块
    列表转json数据返回
    socket模块判断ip加端口的连通性
    登录拦截器
  • 原文地址:https://www.cnblogs.com/SATinnovation/p/8149461.html
Copyright © 2020-2023  润新知