极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: 血阳

有图有程序,智能小车程序或者硬件哪出问题了T T

[复制链接]
发表于 2015-4-25 09:17:57 | 显示全部楼层
淘宝上有很多,挑个便宜点的就行了,如果你驱动两个电机一块L298N就行(能同时驱动两个或一组电机)
控制4个电机的话,可以考虑用两块L298n,或者一块L298N控制两组(同向电机并联,采用差速转向方式)
http://s.taobao.com/search?q=L29 ... d=tbindexz_20150425
回复 支持 反对

使用道具 举报

发表于 2015-4-25 09:23:29 | 显示全部楼层
找个便宜的 http://detail.tmall.com/item.htm ... id=&abbucket=20
至于使用哪个arduino口控制L298n,你自己定义,很简单的!
好人做到底,送给你我的程序,供你参考
我的这个程序是用来做手机控制的WiFi小车的!和你要实现的程序可能不一样,仅供参考
  1. #include <Servo.h>
  2. Servo servo1;//定义舵机1
  3. Servo servo2;//定义舵机2

  4. //L298N_A
  5. int M1_1 = 2;
  6. int M1_2 = 3;
  7. int M2_1 = 4;
  8. int M2_2 = 5;
  9. //L298N_B
  10. int M3_1 = 8;
  11. int M3_2 = 9;
  12. int M4_1 = 10;
  13. int M4_2 = 11;

  14. int buffer[3];
  15. int Serial_flag;
  16. int temp_char;
  17. int date_index=0;
  18. void setup()
  19. {
  20.   pinMode(2,OUTPUT);
  21.   pinMode(3,OUTPUT);
  22.   pinMode(4,OUTPUT);
  23.   pinMode(5,OUTPUT);
  24.   pinMode(8,OUTPUT);
  25.   pinMode(9,OUTPUT);
  26.   pinMode(10,OUTPUT);
  27.   pinMode(11,OUTPUT);
  28.   servo1.attach(6);//定义舵机1控制接口为数字6
  29.   servo2.attach(7);//定义舵机2控制接口为数字7
  30.   Serial.begin(9600);
  31. }
  32. void Stop(void)        //四轮停止
  33. {
  34.   digitalWrite(2,LOW);           
  35.   digitalWrite(3,LOW);
  36.   digitalWrite(4,LOW);
  37.   digitalWrite(5,LOW);
  38.   digitalWrite(8,LOW);
  39.   digitalWrite(9,LOW);
  40.   digitalWrite(10,LOW);
  41.   digitalWrite(11,LOW);
  42. }
  43. void advance(int x)        //向前直行
  44. {
  45.   digitalWrite(2,LOW);
  46.   digitalWrite(3,HIGH);
  47.   digitalWrite(4,LOW);
  48.   digitalWrite(5,HIGH);
  49.   digitalWrite(8,LOW);
  50.   digitalWrite(9,HIGH);
  51.   digitalWrite(10,LOW);
  52.   digitalWrite(11,HIGH);
  53. }
  54. void back(int x)             //向后直行
  55. {
  56.   digitalWrite(2,HIGH);
  57.   digitalWrite(3,LOW);
  58.   digitalWrite(4,HIGH);
  59.   digitalWrite(5,LOW);
  60.   digitalWrite(8,HIGH);
  61.   digitalWrite(9,LOW);
  62.   digitalWrite(10,HIGH);
  63.   digitalWrite(11,LOW);
  64. }
  65. void left(int x)                //左转
  66. {
  67.   digitalWrite(2,LOW);
  68.   digitalWrite(3,HIGH);
  69.   digitalWrite(4,LOW);
  70.   digitalWrite(5,HIGH);
  71.   digitalWrite(8,HIGH);
  72.   digitalWrite(9,LOW);
  73.   digitalWrite(10,HIGH);
  74.   digitalWrite(11,LOW);
  75. }
  76. void right(int x)                    //右转
  77. {
  78.   digitalWrite(2,HIGH);
  79.   digitalWrite(3,LOW);
  80.   digitalWrite(4,HIGH);
  81.   digitalWrite(5,LOW);
  82.   digitalWrite(8,LOW);
  83.   digitalWrite(9,HIGH);
  84.   digitalWrite(10,LOW);
  85.   digitalWrite(11,HIGH);
  86. }
  87. void Communication_Decode()
  88. {
  89.   if(buffer[0]==0x00)
  90.   {
  91.     switch(buffer[1])
  92.     {
  93.       case 0x01:advance(150);return;
  94.       case 0x02:back(150);return;
  95.       case 0x03:right(150);return;
  96.       case 0x04:left(150);return;
  97.       case 0x00:Stop(); return;
  98.     }
  99.   }
  100.   else if(buffer[0]==0x01)
  101.   {
  102.     if(buffer[2]>180)return;
  103.     switch(buffer[1])
  104.     {
  105.       case 0x01:servo1.write(buffer[2]);return;
  106.       case 0x02:servo2.write(buffer[2]);return;
  107.       default:return;
  108.     }
  109.   }
  110. }
  111. void loop()
  112. {
  113. if(Serial.available() > 0)  
  114.   {
  115.     temp_char = Serial.read();
  116.     if(temp_char!=-1)
  117.     {
  118.       if(Serial_flag==0)
  119.       {
  120.         if(temp_char==0xff)
  121.         {
  122.           Serial_flag = 1;
  123.         }
  124.       }
  125.       else
  126.       {
  127.         if(temp_char==0xff)
  128.         {
  129.           Serial_flag = 0;
  130.           if(date_index==3)
  131.           {
  132.             Communication_Decode();
  133.           }
  134.           date_index = 0;
  135.         }
  136.         else
  137.         {
  138.           buffer[date_index]=temp_char;
  139.           date_index++;
  140.         }
  141.       }
  142.     }
  143.   }
  144. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2015-4-25 09:28:18 | 显示全部楼层
我的小车是两块L298n控制4个电机,arduino的DC电源口供给12V电源,L298n从arduino的VIN口取电,
其实arduino的DC口和VIN通过一个整流二极管相连,有一定的压降,但是电压变化不大
你可以去arduino的官网下载查看板子的原理图
祝你好运
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-25 11:47:35 | 显示全部楼层
潇洒哥 发表于 2015-4-25 09:28
我的小车是两块L298n控制4个电机,arduino的DC电源口供给12V电源,L298n从arduino的VIN口取电,
其实ardui ...

{:3_52:}THX~昨天买了发顺丰,今天到,我再去弄弄~谢谢您给的建议啊,要不我有得苦逼好久了~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-25 14:43:39 | 显示全部楼层
潇洒哥 发表于 2015-4-25 09:23
找个便宜的 http://detail.tmall.com/item.htm?spm=a230r.1.14.8.HZUUcl&id=25356268490&ad_id=&am_id=&cm_ ...

看了你的代码,为什么一个电机要用4个引脚来控制啊?不是就只有三个(ENA IN1 IN2)吗?
回复 支持 反对

使用道具 举报

发表于 2015-4-25 19:52:26 | 显示全部楼层
为什么一个电机要用4个引脚来控制啊?不是就只有三个(ENA IN1 IN2)吗?

呵呵,等你拿到L298n模块,你就明白了
回复 支持 反对

使用道具 举报

发表于 2015-4-25 20:00:47 | 显示全部楼层
你可以写个电机测试程序,理解一下控制逻辑,
我的电机测试程序,arduino通过usb连接到电脑,在电脑上打开窗口调试工具,发送a,s,d,w,u进行前后左右停止调试,
推荐给你个arduino 专用的串口调试工具openjumper
http://www.openjumper.cn/openjumper-serial-assistant/
  1. //L298N_A
  2. int M1_1 = 2;
  3. int M1_2 = 3;
  4. int M2_1 = 4;
  5. int M2_2 = 7;
  6. //L298N_B
  7. int M3_1 = 8;
  8. int M3_2 = 9;
  9. int M4_1 = 10;
  10. int M4_2 = 11;
  11. int val;
  12. void setup()
  13. {
  14.   pinMode(11,OUTPUT);
  15.   pinMode(10,OUTPUT);
  16.   pinMode(9,OUTPUT);
  17.   pinMode(8,OUTPUT);
  18.   pinMode(7,OUTPUT);
  19.   pinMode(4,OUTPUT);
  20.   pinMode(3,OUTPUT);
  21.   pinMode(2,OUTPUT);
  22.   Serial.begin(9600);
  23. }
  24. void loop()
  25. {
  26.   val=Serial.read();     //向前直行
  27.   if(val=='w')
  28.   {
  29.    digitalWrite(11,LOW);
  30.    digitalWrite(10,HIGH);
  31.    digitalWrite(9,LOW);
  32.    digitalWrite(8,HIGH);
  33.    digitalWrite(7,LOW);
  34.    digitalWrite(6,HIGH);
  35.    digitalWrite(5,HIGH);
  36.    digitalWrite(4,LOW);
  37.   }
  38.   
  39.   if(val=='s')          //向后直行
  40.   {
  41.    digitalWrite(11,HIGH);
  42.    digitalWrite(10,LOW);
  43.    digitalWrite(9,HIGH);
  44.    digitalWrite(8,LOW);
  45.    digitalWrite(7,HIGH);
  46.    digitalWrite(6,LOW);
  47.    digitalWrite(5,LOW);
  48.    digitalWrite(4,HIGH);
  49.   }
  50.     if(val=='d')      //右转
  51.   {
  52.   digitalWrite(4,HIGH);
  53.   digitalWrite(5,LOW);
  54.   digitalWrite(6,LOW);
  55.   digitalWrite(7,HIGH);
  56.   digitalWrite(8,HIGH);
  57.   digitalWrite(9,LOW);
  58.   digitalWrite(10,HIGH);
  59.   digitalWrite(11,LOW);
  60.   }
  61.       if(val=='a')    //左转
  62.   {
  63.   digitalWrite(4,LOW);
  64.   digitalWrite(5,HIGH);
  65.   digitalWrite(6,HIGH);
  66.   digitalWrite(7,LOW);
  67.   digitalWrite(8,LOW);
  68.   digitalWrite(9,HIGH);
  69.   digitalWrite(10,LOW);
  70.   digitalWrite(11,HIGH);
  71.   }
  72.         if(val=='u')     //四轮停止
  73.   {
  74.    digitalWrite(11,LOW);
  75.    digitalWrite(10,LOW);
  76.    digitalWrite(9,LOW);
  77.    digitalWrite(8,LOW);
  78.    digitalWrite(7,LOW);
  79.    digitalWrite(6,LOW );
  80.    digitalWrite(5,LOW);
  81.    digitalWrite(4,LOW);
  82.   }
  83. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2015-4-26 00:22:39 | 显示全部楼层
这个Adafruit的Motor Sheild我们经常用,3节电池供电,电压不足,请保证用7V以上的方式供电!
回复 支持 反对

使用道具 举报

发表于 2015-4-26 00:29:04 | 显示全部楼层
这个Adafruit的Motor Sheild我们经常用,3节电池供电,电压不足,请保证用7V以上的方式供电!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-26 00:39:12 | 显示全部楼层
zhangchengwust 发表于 2015-4-26 00:29
这个Adafruit的Motor Sheild我们经常用,3节电池供电,电压不足,请保证用7V以上的方式供电!

嗯嗯,谢谢提醒~
回复 支持 反对

使用道具 举报

发表于 2015-4-26 19:29:19 | 显示全部楼层
       电机驱动5V不行
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-6 13:40 , Processed in 0.043412 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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