一个自制的arduino小车以及一些问题
这两天没事,根据论坛里Randy同学发的一个帖子,自己也DIY了一个小车。小车很简单,就是希望能做到简单的避障。这个小车的程序和创意都是Randy同学的帖子里的,我只是修改了一下他的程序。
这是我做的小车:
小车的材料有:
1.一个arduino uno的板子;
2.一个L298N电机模块的板子;
3.小车底盘直接在淘宝上买的;
4.超声波测距模块一个。
这是小车的程序。因为我是第一次做,所以小车功能简单,只是想要做一个能够简单避障和转向的小车。
const int EchoPin = 2; //超声波信号输入
const int TrigPin = 3; //超声波控制信号输出
const int leftmotorpin1 = 7; // 直流电机信号输出
const int leftmotorpin2 = 6;
const int rightmotorpin1 = 5;
const int rightmotorpin2 = 4;
int currDist = 0; // 距离
void setup() {
pinMode(EchoPin, INPUT);
for (int pinindex = 3; pinindex < 8; pinindex++) {
pinMode(pinindex, OUTPUT); // set pins 3 to 10 as outputs
}
}
void loop() {
currDist = MeasuringDistance(); //读取前端距离
if(currDist > 20) {
nodanger();
}
else if(currDist < 15){
backup();
randTrun();
}
else {
//whichway();
randTrun();
}
}
//测量距离 单位厘米
long MeasuringDistance() {
long duration;
//pinMode(TrigPin, OUTPUT);
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
//pinMode(EchoPin, INPUT);
duration = pulseIn(EchoPin, HIGH);
return duration / 29 / 2;
}
// 前进
void nodanger() {
digitalWrite(leftmotorpin1, HIGH);
digitalWrite(leftmotorpin2, LOW);
digitalWrite(rightmotorpin1, HIGH);
digitalWrite(rightmotorpin2, LOW);
return;
}
//后退
void backup() {
digitalWrite(leftmotorpin1, LOW);
digitalWrite(leftmotorpin2, HIGH);
digitalWrite(rightmotorpin1, LOW);
digitalWrite(rightmotorpin2, HIGH);
delay(1000);
}
void totalhalt() {
digitalWrite(leftmotorpin1, HIGH);
digitalWrite(leftmotorpin2, HIGH);
digitalWrite(rightmotorpin1, HIGH);
digitalWrite(rightmotorpin2, HIGH);
return;
delay(500);
}
//左转
void body_lturn() {
digitalWrite(leftmotorpin1, LOW);
digitalWrite(leftmotorpin2, HIGH);
digitalWrite(rightmotorpin1, HIGH);
digitalWrite(rightmotorpin2, LOW);
delay(500);
totalhalt();
}
//右转
void body_rturn() {
digitalWrite(leftmotorpin1, HIGH);
digitalWrite(leftmotorpin2, LOW);
digitalWrite(rightmotorpin1, LOW);
digitalWrite(rightmotorpin2, HIGH);
delay(500);
totalhalt();
}
void randTrun(){
long randNumber;
randomSeed(analogRead(0));
randNumber = random(0, 10);
if(randNumber > 5) {
body_rturn();
}
else
{
body_lturn();
}
}
花了一天时间组装和调试了程序后出现一些问题。
1.我修改后的这个auduino(就是上面这个程序)原意是,小车超声波模块测距前方15厘米以内有障碍物,则后退1秒然后随机左转或者右转,若前方没有障碍物或者障碍物距离大于20厘米,则继续前进。不过我发现小车并没有按照我想的那样,经常会无故的后退或者转向。这个问题在室内尤为明显,在空旷的地方会好一点。不明白是什么原因,是测距模块不够准确还是我改的这个程序有问题呢?
2.超声波模块里有个测算前方距离的公式:US/58,不明白这个公式是什么意思。不知道有没有谁懂的能解释一下呢。 代码挺简单的,看起来,比我做网页轻松多了。哈哈~:) 不过我是新手,准备入点材料,有什么推荐没??:$ 我也想做个这样的小车哄闺女玩,你这种情况我猜测是测距不准造成的,你可以试一下找个大的盒子,把小车放到里面测试一下试试,复杂的环境对单个测距点影响会比较大。如果有倒车雷达的源代码可以看一下倒车雷达的测距算法怎么写的。 插上数据线可以拐弯,拔掉了就一直向前走,是什么情况啊? us/58 是单位时间的距离,
然后乘以时间就是距离 麻烦问下,我刚刚接触arduino小车,就想知道你这个arduino板子的供电是由L298N的+5V引脚接给arduino的POWER+5V吗? 悲剧,买了才发现,没电子理论基础,装了个小车不动不知道咋调试...
楼主这个 arduino 板是怎么供电的?
我理解电机和板子是需要两套供电的吧? 楼主,我一直很郁闷超声波模块是怎么连接板子的?能不能告诉我啊? 怎么没看到控制速度的语句呢?楼主怎么控制转过的角度?求解~ 情谊永恒1992 发表于 2013-7-15 19:42 static/image/common/back.gif
麻烦问下,我刚刚接触arduino小车,就想知道你这个arduino板子的供电是由L298N的+5V引脚接给arduino的POWER ...
不是吧?板子和电机驱动要用不同的供电系统 WTF 发表于 2013-10-21 16:34 static/image/common/back.gif
楼主,我一直很郁闷超声波模块是怎么连接板子的?能不能告诉我啊?
EchoPin = 2; //超声波信号输入
TrigPin = 3; //超声波控制信号输出
上面的超声波模块上的这两个引脚连接到arduino板子上的2,3引脚口就行,vcc,gnd接电源供电,接板子上的就行 新手求教。。。。为什么我的小车前进不了啊!代码应该没错啊。。。
#define DEBUG 0 // set to 1 to print to serial monitor, 0 to disable
#include <Servo.h>
const int leftmotorpin1 = 4; // 直流电机信号输出
const int leftmotorpin2 = 5;
const int rightmotorpin1 = 2;
const int rightmotorpin2 = 3;
void setup()
{
Serial.begin(9600);
pinMode(rightmotorpin1,OUTPUT);
pinMode(rightmotorpin2,OUTPUT);
pinMode(leftmotorpin1,OUTPUT);
pinMode(leftmotorpin2,OUTPUT);
//pinMode(in,INPUT);
// pinMode(out,OUTPUT);
}
void loop()
{
nodanger() ;
}
// 前进
void nodanger() {
//running = true;
digitalWrite(leftmotorpin1, LOW);
digitalWrite(leftmotorpin2, HIGH);
digitalWrite(rightmotorpin1, LOW);
digitalWrite(rightmotorpin2, HIGH);
return;
}
//后退
void backup() {
// running = true;
digitalWrite(leftmotorpin1, HIGH);
digitalWrite(leftmotorpin2, LOW);
digitalWrite(rightmotorpin1, HIGH);
digitalWrite(rightmotorpin2, LOW);
delay(1000);
}
请问你用2套电源供电吗
车座淘宝地址是多少?
页:
[1]