潇洒哥 发表于 2015-4-25 09:17:57

淘宝上有很多,挑个便宜点的就行了,如果你驱动两个电机一块L298N就行(能同时驱动两个或一组电机)
控制4个电机的话,可以考虑用两块L298n,或者一块L298N控制两组(同向电机并联,采用差速转向方式)
http://s.taobao.com/search?q=L298n&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=1.7274553.1997520841.1&initiative_id=tbindexz_20150425

潇洒哥 发表于 2015-4-25 09:23:29

找个便宜的 http://detail.tmall.com/item.htm?spm=a230r.1.14.8.HZUUcl&id=25356268490&ad_id=&am_id=&cm_id=140105335569ed55e27b&pm_id=&abbucket=20
至于使用哪个arduino口控制L298n,你自己定义,很简单的!
好人做到底,送给你我的程序,供你参考
我的这个程序是用来做手机控制的WiFi小车的!和你要实现的程序可能不一样,仅供参考#include <Servo.h>
Servo servo1;//定义舵机1
Servo servo2;//定义舵机2

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

int buffer;
int Serial_flag;
int temp_char;
int date_index=0;
void setup()
{
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
servo1.attach(6);//定义舵机1控制接口为数字6
servo2.attach(7);//定义舵机2控制接口为数字7
Serial.begin(9600);
}
void Stop(void)      //四轮停止
{
digitalWrite(2,LOW);         
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
}
void advance(int x)      //向前直行
{
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
}
void back(int x)             //向后直行
{
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
}
void left(int x)                //左转
{
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
}
void right(int x)                  //右转
{
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
}
void Communication_Decode()
{
if(buffer==0x00)
{
    switch(buffer)
    {
      case 0x01:advance(150);return;
      case 0x02:back(150);return;
      case 0x03:right(150);return;
      case 0x04:left(150);return;
      case 0x00:Stop(); return;
    }
}
else if(buffer==0x01)
{
    if(buffer>180)return;
    switch(buffer)
    {
      case 0x01:servo1.write(buffer);return;
      case 0x02:servo2.write(buffer);return;
      default:return;
    }
}
}
void loop()
{
if(Serial.available() > 0)
{
    temp_char = Serial.read();
    if(temp_char!=-1)
    {
      if(Serial_flag==0)
      {
      if(temp_char==0xff)
      {
          Serial_flag = 1;
      }
      }
      else
      {
      if(temp_char==0xff)
      {
          Serial_flag = 0;
          if(date_index==3)
          {
            Communication_Decode();
          }
          date_index = 0;
      }
      else
      {
          buffer=temp_char;
          date_index++;
      }
      }
    }
}
}

潇洒哥 发表于 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 static/image/common/back.gif
我的小车是两块L298n控制4个电机,arduino的DC电源口供给12V电源,L298n从arduino的VIN口取电,
其实ardui ...

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

血阳 发表于 2015-4-25 14:43:39

潇洒哥 发表于 2015-4-25 09:23 static/image/common/back.gif
找个便宜的 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///L298N_A
int M1_1 = 2;
int M1_2 = 3;
int M2_1 = 4;
int M2_2 = 7;
//L298N_B
int M3_1 = 8;
int M3_2 = 9;
int M4_1 = 10;
int M4_2 = 11;
int val;
void setup()
{
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);
pinMode(7,OUTPUT);
pinMode(4,OUTPUT);
pinMode(3,OUTPUT);
pinMode(2,OUTPUT);
Serial.begin(9600);
}
void loop()
{
val=Serial.read();   //向前直行
if(val=='w')
{
   digitalWrite(11,LOW);
   digitalWrite(10,HIGH);
   digitalWrite(9,LOW);
   digitalWrite(8,HIGH);
   digitalWrite(7,LOW);
   digitalWrite(6,HIGH);
   digitalWrite(5,HIGH);
   digitalWrite(4,LOW);
}

if(val=='s')          //向后直行
{
   digitalWrite(11,HIGH);
   digitalWrite(10,LOW);
   digitalWrite(9,HIGH);
   digitalWrite(8,LOW);
   digitalWrite(7,HIGH);
   digitalWrite(6,LOW);
   digitalWrite(5,LOW);
   digitalWrite(4,HIGH);
}
    if(val=='d')      //右转
{
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
}
      if(val=='a')    //左转
{
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
}
      if(val=='u')   //四轮停止
{
   digitalWrite(11,LOW);
   digitalWrite(10,LOW);
   digitalWrite(9,LOW);
   digitalWrite(8,LOW);
   digitalWrite(7,LOW);
   digitalWrite(6,LOW );
   digitalWrite(5,LOW);
   digitalWrite(4,LOW);
}
}

zhangchengwust 发表于 2015-4-26 00:22:39

这个Adafruit的Motor Sheild我们经常用,3节电池供电,电压不足,请保证用7V以上的方式供电!

zhangchengwust 发表于 2015-4-26 00:29:04

这个Adafruit的Motor Sheild我们经常用,3节电池供电,电压不足,请保证用7V以上的方式供电!

血阳 发表于 2015-4-26 00:39:12

zhangchengwust 发表于 2015-4-26 00:29 static/image/common/back.gif
这个Adafruit的Motor Sheild我们经常用,3节电池供电,电压不足,请保证用7V以上的方式供电!

嗯嗯,谢谢提醒~

suoma 发表于 2015-4-26 19:29:19

       电机驱动5V不行
页: 1 [2]
查看完整版本: 有图有程序,智能小车程序或者硬件哪出问题了T T