|
首先我是学软件的,所以关于电路的一概不知道,电学都还停留在高中阶段。突然有天发现了arduino,发现可以利用我熟悉的编程来实现对硬件的控制,即果断决定买来学习。然而对于外围设备怎么办呢,又卜会焊电路板,还好有现成的模块可以使用。
废话卜多说了。
物料单:
无传感器版本
1.arduino uno 开发板 一块 48~70
2.小车套件 一套 35
3.L298N模块 一块 8
4.杜邦线若干 一大把 6
一下是推荐的传感器(有了传感器这样小车就可以变得更智能)
1.HC-SR04超声波传感器 一块 7 自动蔽障小车
2.HC-06蓝牙从机模块 一块 30 手机无线控制
3.MPU-6050模块 一块 18 做好3轮车后,结合该模块可做2轮平衡小车
4.可充电的锂电池 一块 没买过 本人用的是4颗南孚电池,太奢侈了,用完了又得买的
javascript:;
来些图片吧
javascript:;
javascript:;
javascript:;
javascript:;
javascript:;
[pre lang="arduino" line="1" file="小车代码"]// 左轮控制口
int In1 = 8;
int In2 = 9;
//int EnA = 3;(待添加)
// 右轮控制口
int In3 = 10;
int In4 = 11;
//int EnB = ;(待添加)
//蓝牙数据传输口(3.3V)
const int pinRx = 0;
const int pinTx = 1;
//运行控制
int dir;
//运行速度
//int speeds;//待开发
//超声波传感器端口(5V)
const int TrigPin = 2;
const int EchoPin = 3;
//距离值
float cm;
//当达到distance值时,小车停止,改变运行方向
float distance = 15.00;
//是否有障碍物
boolean barrier = false;
//void b_foward(){}; //前进
//void b_back(){}; //后退
//void b_left(){}; //左拐弯
//void b_right(){}; //右拐弯
//void b_stop(){}; //停车
//void b_distance(){}; //测障碍物距离
//boolean b_change_dir(){}; //前方是否有障碍物
void setup() {
Serial.begin(9600);//设置波特率
//左轮端口模式设置
pinMode(In1, OUTPUT);
pinMode(In2, OUTPUT);
//右轮端口模式设置
pinMode(In3, OUTPUT);
pinMode(In4, OUTPUT);
//左轮端口模式设置初始化
digitalWrite(In1, LOW);
digitalWrite(In2, LOW);
//右轮端口模式设置初始化
digitalWrite(In3, LOW);
digitalWrite(In4, LOW);
//蓝牙数据传输口模式设置
pinMode(pinTx, OUTPUT);
pinMode(pinRx, INPUT);
//超声波传感器端口模式设置
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop() {
//拥有轮训控制结构(蓝牙控制,测超声波自动避障...)
//串口控制版(蓝牙,无线模块)
// int dir = Serial.read(); //从串口读取接受到的控制信息
//
// switch(dir)
// {
// case 'l':
// b_left();
// break;
// case 'r':
// b_right();
// break;
// case 'f':
// b_foward();
// break;
// case 'b':
// b_back();
// break;
// default:
// b_stop();
// }
//测超声波自动避障版(无舵机,定向避障)
b_distance(); //测障碍物距离
barrier = b_change_dir(); //前方是否有障碍物
if(barrier)
b_back(); //前进
else{
b_left(); //左转
b_distance(); //测障碍物距离
}
//无传感器版
// b_left();
// b_right();
// b_foward();
// b_back();
// b_stop();
}
void b_foward() //前进
{
digitalWrite(In1, LOW);
digitalWrite(In2, HIGH);
digitalWrite(In3, LOW);
digitalWrite(In4, HIGH);
Serial.println("b_foward!");
delay(500);
}
void b_back() //后退
{
digitalWrite(In1, HIGH);
digitalWrite(In2, LOW);
digitalWrite(In3, HIGH);
digitalWrite(In4, LOW);
Serial.println("b_back!");
delay(500);
}
void b_left() //左拐弯
{
digitalWrite(In1, HIGH);
digitalWrite(In2, LOW);
digitalWrite(In3, LOW);
digitalWrite(In4, HIGH);
Serial.println("b_left!");
delay(1000);
}
void b_right() //右拐弯
{
digitalWrite(In1, LOW);
digitalWrite(In2, HIGH);
digitalWrite(In3, HIGH);
digitalWrite(In4, LOW);
Serial.println("b_right!");
delay(2000);
}
void b_stop() //停车
{
digitalWrite(In1, LOW);
digitalWrite(In2, LOW);
digitalWrite(In3, LOW);
digitalWrite(In4, LOW);
Serial.println("b_stop!");
delay(1000);
}
void b_distance() //测障碍物距离
{
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数
}
boolean b_change_dir() //前方是否有障碍物
{
if(0 < (cm-distance))
return false;
return true;
}[/code]
代码里面有很多的版本,只要把卜用的注释,用的取消注释就好了。
作为学软件的人,把我使用模块的经验分享下。
L298N
javascript:;
因为驱动电机电流太大所以我们不能直接将电机的两个引线接到arduino板子上的两个数字脚上(假如可以的话,我举个例子:马达分别接数字脚6和7,6脚给高电平,7脚给低电平,马达就会转;6脚给低电平,7脚给高电平,马达就会反转,这样控制马达理解了吗?)。现在L298我们可以理解它就是一个桥梁,使arduino的驱动能力增加了。要使L298工作起来,必须供电(废话)。现在我们用个12V-9V的电源的正负分别接到“+12V供电”和“供电GND”。还要特别注意要与arduino共地!共地就是arduino的GND连接到“供电GND”,通道A、B使能那个跳帽不用拔掉。现在我们把数字脚6、7分别接到IN1,IN2,马达接线接到“输出A”。现在6脚给高电平,7脚给低电平,马达就会转;6脚给低电平,7脚给高电平,马达就会反转。我的L298就是这样驱动起来的。
推荐几个我觉得有意思的小制作吧!现在都处于我的想法阶段,东西都准备好了,我慢慢开发,主要还是能通过arduino来获取数据,我可以来开发PC机上软件了。
1.光立方。应为arduino端口的限制所以做个4*4*4的还是可以的。
2.四旋翼。在做好了2轮平衡小车的基础上,再去试着做
3.环境采集器。把和换进有关的传感器接好,然后通过SD卡模块将数据储存下来,通过PC机软件将数据图形化显示
后面我还会来发帖的,将成果分享下下。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|