找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14249|回复: 4
收起左侧

Arduino智能小车控制 步进电机 花式运动 红外遥控程序

[复制链接]
ID:121509 发表于 2016-6-4 10:22 | 显示全部楼层 |阅读模式
里面包含以下3个程序
步进电机
花式运动
红外遥控

0.png
步进电机的驱动需要LN298步进电机驱动器
智能小车的花式运动
红外遥控智能小车做相对应的运动

下面是红外遥控的代码:

  1. #include <IRremote.h>//包含红外库
  2. int RECV_PIN = A4;//端口声明
  3. IRrecv irrecv(RECV_PIN);
  4. decode_results results;//结构声明
  5. int on = 0;//标志位
  6. unsigned long last = millis();

  7. long run_car = 0x00FF18E7;//按键2
  8. long back_car = 0x00FF4AB5;//按键8
  9. long left_car = 0x00FF10EF;//按键4
  10. long right_car = 0x00FF5AA5;//按键6
  11. long stop_car = 0x00FF38C7;//按键5
  12. long left_turn = 0x00ff30CF;//按键1
  13. long right_turn = 0x00FF7A85;//按键3
  14. //==============================
  15. int Left_motor_back=8;     //左电机后退(IN1)
  16. int Left_motor_go=9;     //左电机前进(IN2)

  17. int Right_motor_go=10;    // 右电机前进(IN3)
  18. int Right_motor_back=11;    // 右电机后退(IN4)
  19. int led1=13;
  20. int led2=12;
  21. void setup()
  22. {
  23.   //初始化电机驱动IO为输出方式
  24.   pinMode(led1,OUTPUT);
  25.   pinMode(led2,OUTPUT);
  26.   pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)
  27.   pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)
  28.   pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM)
  29.   pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)
  30.   pinMode(13, OUTPUT);////端口模式,输出
  31.   Serial.begin(9600);        //波特率9600
  32.   irrecv.enableIRIn(); // Start the receiver
  33. }
  34. void run()     // 前进
  35. {
  36.   digitalWrite(Right_motor_go,HIGH);  // 右电机前进
  37.   digitalWrite(Right_motor_back,LOW);     
  38.   //analogWrite(Right_motor_go,200);//PWM比例0~255调速,左右轮差异略增减
  39.   //analogWrite(Right_motor_back,0);
  40.   digitalWrite(Left_motor_go,HIGH);  // 左电机前进
  41.   digitalWrite(Left_motor_back,LOW);
  42.   //analogWrite(Left_motor_go,200);//PWM比例0~255调速,左右轮差异略增减
  43.   //analogWrite(Left_motor_back,0);
  44.   //delay(time * 100);   //执行时间,可以调整  
  45. }

  46. void brake()         //刹车,停车
  47. {   digitalWrite(led1,HIGH);
  48.      
  49.      digitalWrite(led2,HIGH);
  50.      delay(1000);
  51.      digitalWrite(led1,LOW);
  52.      digitalWrite(led2,LOW);
  53.      
  54.   digitalWrite(Right_motor_go,LOW);
  55.   digitalWrite(Right_motor_back,LOW);
  56.   digitalWrite(Left_motor_go,LOW);
  57.   digitalWrite(Left_motor_back,LOW);
  58.   //delay(time * 100);//执行时间,可以调整  
  59. }

  60. void left()         //左转(左轮不动,右轮前进)
  61. {    digitalWrite(led2,HIGH);
  62.       delay(500);
  63.       digitalWrite(led2,LOW);
  64.       delay(500);
  65.   digitalWrite(Right_motor_go,HIGH);        // 右电机前进
  66.   digitalWrite(Right_motor_back,LOW);
  67.   //analogWrite(Right_motor_go,200);
  68.   //analogWrite(Right_motor_back,0);//PWM比例0~255调速
  69.   digitalWrite(Left_motor_go,LOW);   //左轮不动
  70.   digitalWrite(Left_motor_back,LOW);
  71.   //analogWrite(Left_motor_go,0);
  72.   //analogWrite(Left_motor_back,0);//PWM比例0~255调速
  73.   //delay(time * 100);        //执行时间,可以调整  
  74. }

  75. void spin_left()         //左转(左轮后退,右轮前进)
  76. {
  77.   digitalWrite(Right_motor_go,HIGH);        // 右电机前进
  78.   digitalWrite(Right_motor_back,LOW);
  79.   //analogWrite(Right_motor_go,200);
  80.   //analogWrite(Right_motor_back,0);//PWM比例0~255调速
  81.   digitalWrite(Left_motor_go,LOW);   //左轮后退
  82.   digitalWrite(Left_motor_back,HIGH);
  83.   //analogWrite(Left_motor_go,0);
  84.   //analogWrite(Left_motor_back,200);//PWM比例0~255调速
  85.   //delay(time * 100);        //执行时间,可以调整  
  86. }

  87. void right()        //右转(右轮不动,左轮前进)
  88. {  digitalWrite(led1,HIGH);
  89. delay(500);
  90.   digitalWrite(led1,LOW);

  91.   digitalWrite(Right_motor_go,LOW);   //右电机不动
  92.   digitalWrite(Right_motor_back,LOW);
  93.   //analogWrite(Right_motor_go,0);
  94.   //analogWrite(Right_motor_back,0);//PWM比例0~255调速
  95.   digitalWrite(Left_motor_go,HIGH);//左电机前进
  96.   digitalWrite(Left_motor_back,LOW);
  97.   //analogWrite(Left_motor_go,200);
  98.   //analogWrite(Left_motor_back,0);//PWM比例0~255调速
  99.   //delay(time * 100);        //执行时间,可以调整  
  100. }

  101. void spin_right()        //右转(右轮后退,左轮前进)
  102. {
  103.   digitalWrite(Right_motor_go,LOW);   //右电机后退
  104.   digitalWrite(Right_motor_back,HIGH);
  105.   //analogWrite(Right_motor_go,0);
  106.   //analogWrite(Right_motor_back,200);//PWM比例0~255调速
  107.   digitalWrite(Left_motor_go,HIGH);//左电机前进
  108.   digitalWrite(Left_motor_back,LOW);
  109.   //analogWrite(Left_motor_go,200);
  110.   //analogWrite(Left_motor_back,0);//PWM比例0~255调速
  111.   //delay(time * 100);        //执行时间,可以调整  
  112. }

  113. void back()          //后退
  114. {  digitalWrite(led1,HIGH);
  115. digitalWrite(led2,HIGH);
  116.      delay(100);
  117.      digitalWrite(led1,LOW);
  118.      digitalWrite(led2,LOW);
  119.      delay(100);
  120.   digitalWrite(Right_motor_go,LOW);  //右轮后退
  121.   digitalWrite(Right_motor_back,HIGH);
  122.   //analogWrite(Right_motor_go,0);
  123.   //analogWrite(Right_motor_back,150);//PWM比例0~255调速
  124.   digitalWrite(Left_motor_go,LOW);  //左轮后退
  125.   digitalWrite(Left_motor_back,HIGH);
  126.   //analogWrite(Left_motor_go,0);
  127.   //analogWrite(Left_motor_back,150);//PWM比例0~255调速
  128.   //delay(time * 100);     //执行时间,可以调整  
  129. }

  130. void dump(decode_results *results)
  131. {
  132.   int count = results->rawlen;
  133.   if (results->decode_type == UNKNOWN)
  134.   {
  135.     //Serial.println("Could not decode message");
  136.     brake();
  137.   }

  138. }

  139. void loop()
  140. {  
  141.   if (irrecv.decode(&results)) //调用库函数:解码
  142.   {
  143.     // If it's been at least 1/4 second since the last
  144.     // IR received, toggle the relay
  145.     if (millis() - last > 250) //确定接收到信号
  146.     {
  147.       on = !on;//标志位置反
  148.       digitalWrite(13, on ? HIGH : LOW);//板子上接收到信号闪烁一下led
  149.       dump(&results);//解码红外信号
  150.     }
  151.     if (results.value == run_car )//按键2
  152.       {digitalWrite(led1,HIGH);
  153.       digitalWrite(led2,HIGH);delay(500);run();}//前进
  154.     if (results.value == back_car )//按键8
  155.       {back();digitalWrite(led1,HIGH);digitalWrite(led2,HIGH);}//后退
  156.     if (results.value == left_car )//按键4
  157.       {left();digitalWrite(led1,HIGH);digitalWrite(led2,LOW);}//左转
  158.     if (results.value == right_car )//按键6
  159.      {digitalWrite(led1,LOW);digitalWrite(led2,HIGH); right();}//右转
  160.     if (results.value == stop_car )//按键5
  161.      { brake();digitalWrite(led1,LOW);digitalWrite(led2,LOW);}//停车
  162.     if (results.value == left_turn )//按键1
  163.     {spin_left();digitalWrite(led1,HIGH);digitalWrite(led2,LOW);}//左旋转
  164.     if (results.value == right_turn )//按键3
  165.       {digitalWrite(led1,LOW);digitalWrite(led2,HIGH); spin_right();}//右旋转
  166.     last = millis();      
  167.     irrecv.resume(); // Receive the next value
  168.   }
  169. }

复制代码


智能小车(arduino).zip

2.88 KB, 下载次数: 76, 下载积分: 黑币 -5

评分

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

查看全部评分

回复

使用道具 举报

ID:146110 发表于 2017-5-21 06:03 | 显示全部楼层
下载分不够,楼主能发给我一份资料吗?谢谢53896567@qq.com
回复

使用道具 举报

ID:87193 发表于 2017-12-19 10:18 | 显示全部楼层
有没有原理图呢
回复

使用道具 举报

ID:236125 发表于 2018-1-20 12:17 | 显示全部楼层
#include <IRremote.h>
IRrecv irrecv(11);//定义的引脚
decode_results result;
#define dir1pinA 4
#define dir2pinA 5
#define speedpinA  3
#define led 8
#define dir1pinB 6
#define dir2pinB 7
#define speedpinB  9
long  forward_car=0x00FF18E7;//2
long  stop_car=0x00FF38C7;//5
long  houtui_car=0x00FF4A85;//8
long  left_car=0x00FF10EF;//4
long  right_car=0x00FF5AA5;//6
int speed;

void setup() {
   Serial.begin(9600);
   Serial.println("ABCD");
   irrecv.enableIRIn();
   delay(100);
   pinMode(dir1pinA,OUTPUT);
   pinMode(dir2pinA,OUTPUT);
   pinMode(speedpinA,OUTPUT);
   pinMode(dir1pinB,OUTPUT);
   pinMode(dir2pinB,OUTPUT);
   pinMode(speedpinB,OUTPUT);
   pinMode(led,OUTPUT);
   speed=0;
   delay(5);
}
void loop() {
  speed=150;
  if (irrecv.decode(&result))
  {
      Serial.println(result.value,HEX);
    if (result.value ==forward_car )
     {
           forward();
      }
    if (result.value ==stop_car)
    {
          allstop();   
    }
    if (result.value == houtui_car)
    {
         daotui();
    }

    if (result.value == left_car )
    {
      turnleft();
     }
    if (result.value==right_car )
    {
      turnright();
    }  
    delay(10);         
    irrecv.resume();
  }
}
void allstop()
{         digitalWrite(led,HIGH);
          delay(500);
          digitalWrite(led,LOW);
           digitalWrite(dir1pinA,HIGH);
           digitalWrite(dir2pinA,LOW);
           digitalWrite(dir1pinB,HIGH);
           digitalWrite(dir2pinB,LOW);
           analogWrite(speedpinA,0);
          analogWrite(speedpinB,0);
          delay(100);
}
//自定义函数
void forward()
{         
           digitalWrite(led,HIGH);
           delay(500);
           digitalWrite(led,LOW);
           digitalWrite(dir1pinA,HIGH);
           digitalWrite(dir2pinA,LOW);
           digitalWrite(dir1pinB,HIGH);
           digitalWrite(dir2pinB,LOW);
           
          analogWrite(speedpinA,speed);
          analogWrite(speedpinB,speed);
          delay(100);
}
void turnleft()
{
       digitalWrite(led,HIGH);
        delay(500);
        digitalWrite(led,LOW);
        digitalWrite(dir1pinA,HIGH);
        digitalWrite(dir2pinA,LOW);
        digitalWrite(dir1pinB,HIGH);
        digitalWrite(dir1pinB,LOW);
         
       analogWrite(speedpinA,0);
       analogWrite(speedpinB,speed);
       delay(100);
}
void turnright()
{      
         digitalWrite(led,HIGH);
        delay(500);
        digitalWrite(led,LOW);
        digitalWrite(dir1pinA,HIGH);
        digitalWrite(dir2pinA,LOW);
        digitalWrite(dir1pinB,HIGH);
        digitalWrite(dir1pinB,LOW);
         
        analogWrite(speedpinA,speed);
        analogWrite(speedpinB,0);
        delay(100);
      
}

void daotui()
{

        digitalWrite(led,HIGH);
        delay(500);
        digitalWrite(led,LOW);
        digitalWrite(dir1pinA,LOW);
        digitalWrite(dir2pinA,HIGH);
        digitalWrite(dir1pinB,LOW);
        digitalWrite(dir1pinB,HIGH);
         
        analogWrite(speedpinA,speed);
        analogWrite(speedpinB,speed);
        delay(100);
}
为什么我的小车只有一侧动,另一侧没反应,
回复

使用道具 举报

ID:1114694 发表于 2024-3-29 16:35 | 显示全部楼层
哎,没搞懂

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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