红外坦克---综合应用
该模块具有极小的尺寸,仅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
引脚说明:
接线图:
#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); }
以雷霆击碎黑暗