小猪学arduino—欠儿子的坦克终于兑现了

最近公司事情比较多,有段时间没玩arduino了,这周末又拾起来了,打算把之前答应给儿子做的履带坦克兑现了。

在某宝上花几十大洋淘了个履带底盘,捣鼓了半天,先是用L298N控制2个DC3-6V电机时总是只有一个能转,后来用了1块9v方块电池做外接电源,终于两个都转了;然后把电机换成坦克的t130电机,又趴窝了,换成4块1.5v南孚,坦克在不坨东西的情况下能同时转,但是把数据线一拔,又趴窝了,确定是电压或电流不够的问题,试了1.5v南孚串联、9v方块电池、充电宝、手机锂电池,最后发现使用两节18650电池不但电压和电流够用,而且充满电能用好久,以后搞arduino用这种电池就行了,所以看到此文的人就不要在外接电池的问题上耽误时间了。

试验过程和连线图

写在另一篇l298n的文章里了:

小猪学arduino—使用L298N控制两个直流电机

效果图

下图是换了个底盘,儿子用一次性筷子和吸管做的炮管

坦克v1.0代码

#tank.ino
#include <IRremote.h>//包含红外库
int infraredPin = 3;//红外线接收器端口
long INFRARED_PLAY = 0x00FFA857;//红外遥控器上的PLAY键指令
long INFRARED_LEFT = 0x00FFE01F;//红外遥控器上的左键指令
long INFRARED_RIGHT = 0x00FF906F;//红外遥控器上的右键指令
long INFRARED_UP = 0x00FF02FD;//红外遥控器上的上键指令
long INFRARED_DOWN = 0x00FF9867;//红外遥控器上的下键指令
long INFRARED_C = 0x00FFB04F;//红外遥控器上的C指令
int ledLightPin = 4; //led常亮端口
int ledPin = 2; //led控制提醒端口
int rightMotor = 5; // 定义uno的pin 5 向 rightMotor 输出   
int rightMotor_ = 6; // 定义uno的pin 6 向 rightMotor_ 输出  
int leftMotor = 9; // 定义uno的pin 9 向 leftMotor 输出  
int leftMotor_ = 10; // 定义uno的pin 10 向 leftMotor_ 输出


IRrecv irrecv(infraredPin);//初始化红外接收器对象
decode_results results;//定义results变量为红外结果存放位置

/* 履带坦克 */
void setup() {
  //红外接收器端口初始化
  pinMode(infraredPin, INPUT);
  //初始化电机IO,模式为OUTPUT 输出模式  
  pinMode(rightMotor,OUTPUT);  
  pinMode(rightMotor_,OUTPUT);  
  pinMode(leftMotor,OUTPUT);  
  pinMode(leftMotor_,OUTPUT);

  //led端口初始化
  pinMode(ledPin, OUTPUT);
  pinMode(ledLightPin, OUTPUT);
  digitalWrite(ledLightPin, HIGH);
  //波特率9600
  Serial.begin(9600);
  //启动红外解码
  irrecv.enableIRIn();
}

void loop() {
  //检测红外信号
  if (irrecv.decode(&results)) {//是否接收到解码数据,把接收到的数据存储在变量results中
    Serial.println(results.value, HEX);//接收到的数据以16进制的方式在串口输出//接收到的数据以16进制的方式在串口输出
    if (results.value == INFRARED_PLAY ) {//遥控器按下了PLAY键,涡轮前进
      digitalWrite(ledPin, HIGH);
        //forward 向前转  
      digitalWrite(rightMotor,HIGH); //给高电平  
      digitalWrite(rightMotor_,LOW);  //给低电平  
      digitalWrite(leftMotor,HIGH); //给高电平  
      digitalWrite(leftMotor_,LOW);  //给低电平
  
    } else if (results.value == INFRARED_C ) {//遥控器按下了c键,停止
      digitalWrite(ledPin, HIGH);
      //stop 停止  
      digitalWrite(rightMotor,LOW);  
      digitalWrite(rightMotor_,LOW);    
      digitalWrite(leftMotor,LOW);  
      digitalWrite(leftMotor_,LOW); 

    }else if (results.value == INFRARED_DOWN ) {//遥控器按下了-键,后退
      digitalWrite(ledPin, HIGH);
      //back 向后转  
      digitalWrite(rightMotor,LOW);  
      digitalWrite(rightMotor_,HIGH);    
      digitalWrite(leftMotor,LOW);  
      digitalWrite(leftMotor_,HIGH); 
      
    }else if (results.value == INFRARED_LEFT ) {//遥控器按下了左键,左转
      digitalWrite(ledPin, HIGH);
      //left 左转 
       digitalWrite(leftMotor,LOW);  
       digitalWrite(leftMotor_,LOW); 
       digitalWrite(rightMotor,HIGH);  
       digitalWrite(rightMotor_,LOW);
       
    }else if (results.value == INFRARED_RIGHT ) {//遥控器按下了左键,右转
      digitalWrite(ledPin, HIGH);
      //right 右转 
       digitalWrite(rightMotor,LOW);  
       digitalWrite(rightMotor_,LOW);    
       digitalWrite(leftMotor,HIGH);  
       digitalWrite(leftMotor_,LOW); 
       
    }


    //继续等待接收下一组信号
    irrecv.resume();

    //led熄灭
    delay(200);
    digitalWrite(ledPin, LOW);
  }
}

yan 17.8.6 1:08

 

发表评论

电子邮件地址不会被公开。