单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:14508|回复:4
打印上一主题下一主题

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

[复制链接]
跳转到指定楼层
楼主
ID:121509发表于 2016-6-4 10:22|只看该作者|只看大图回帖奖励
里面包含以下3个程序
步进电机
花式运动
红外遥控


步进电机的驱动需要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, 下载次数: 79, 下载积分: 黑币 -5

评分

黑币 +50
收起理由
+ 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);
}
为什么我的小车只有一侧动,另一侧没反应,
5#
ID:1114694发表于 2024-3-29 16:35|只看该作者
哎,没搞懂

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

Powered by 单片机教程网