“Arduino小车”的版本间的差异

来自Labplus盛思维基百科
跳转至: 导航搜索
(创建页面,内容为“ 400px|缩略图|右 <br /> == 概述 == 由UNO和UNO拓展板、blue:bit模块搭建的arduino小车。可实现循迹和红外控制功…”)
 
第3行: 第3行:
  
 
== 概述 ==
 
== 概述 ==
由UNO和UNO拓展板、blue:bit模块搭建的arduino小车。可实现循迹和红外控制功能。<br />
+
由UNO和UNO拓展板、blue:bit模块搭建的简易arduino小车。可实现循迹和红外控制功能。<br />
  
 
== 使用教程 ==
 
== 使用教程 ==
 +
:<font size=3px>本例程含循迹和红外遥控两个功能,可通过遥控切换两种模式。当按下“*”键,进入循迹模式,当按下“#”,进入红外遥控模式。
 +
在红外遥控模式下,按键↑↓←→可操控小车,ok键为停止。</font >
 
<br/>
 
<br/>
 
=== <font size=3px>组装说明</font> ===
 
=== <font size=3px>组装说明</font> ===
第49行: 第51行:
 
| 红外接收模块 ||VCC ->V<br/> RXI ->3<br/> TXD ->2<br/> GND ->G<br/>||连接到UNO拓展板
 
| 红外接收模块 ||VCC ->V<br/> RXI ->3<br/> TXD ->2<br/> GND ->G<br/>||连接到UNO拓展板
 
|}
 
|}
=== <font size=3px>Arduino程序/图形化程序</font> ===
+
=== <font size=3px>Arduino程序</font> ===
 
{|style="background-color:#FCF8E3;color:#8A6D3B;"
 
{|style="background-color:#FCF8E3;color:#8A6D3B;"
 
|-style="vertical-align:center;"
 
|-style="vertical-align:center;"
第56行: 第58行:
 
|}
 
|}
 
<pre style="color:blue">
 
<pre style="color:blue">
 +
 +
/*************************************************
 +
Copyright:wiki.labplus.cn
 +
Author:tangliufeng
 +
Date:13/7/2018
 +
Description:由arduino电机驱动板加UNO+循迹模块+红外模块拼装的小车
 +
1.循迹功能:按键“*”,进入循迹模式
 +
2.红外遥控:按键“#”,进入遥控模式,使用方向键控制小车行走
 +
**************************************************/
 +
#include <SoftwareSerial.h>
 +
#include <arduino.h>
 +
 +
char info[50];
 +
uint8_t Car_Mode = 0;
 +
uint8_t Move = 0;
 +
uint8_t buf;
 +
 +
#define SPEED 80
 +
#define SPEED1 60
 +
 +
//IR Button Value
 +
#define IR_1 0x00
 +
#define IR_2 0x80
 +
#define IR_3 0x40
 +
#define IR_4 0x20
 +
#define IR_5 0xA0
 +
#define IR_6 0x60
 +
#define IR_7 0x10
 +
#define IR_8 0x90
 +
#define IR_9 0x50
 +
#define IR_0 0xB0
 +
#define IR_star 0x30
 +
#define IR_well 0x70
 +
#define IR_UP 0x88
 +
#define IR_DWN 0x98
 +
#define IR_L 0x28
 +
#define IR_R 0x68
 +
#define IR_OK 0xA8
 +
 +
 +
SoftwareSerial irSerial(2, 3);  //rx P2,tx P3  connection IR Receive moudle
 +
void setup()
 +
{
 +
Serial.begin(115200);
 +
irSerial.begin(115200);
 +
pinMode(5, OUTPUT);
 +
pinMode(6, OUTPUT);
 +
pinMode(9, OUTPUT);
 +
pinMode(10, OUTPUT);
 +
 +
pinMode(A1, INPUT);
 +
pinMode(A2, INPUT);
 +
forward(SPEED);
 +
 +
}
 +
void loop()
 +
{
 +
if (irSerial.available() > 0)
 +
{
 +
 +
buf = irSerial.read();
 +
Serial.write(buf);
 +
 +
switch (buf)
 +
{
 +
case IR_star:
 +
Car_Mode = 0;
 +
Serial.println("tracking mode");
 +
 +
break;
 +
case IR_well:
 +
Car_Mode = 1;
 +
Serial.println("control mode");
 +
break;
 +
case IR_UP:
 +
Move = 1;
 +
break;
 +
case IR_DWN:
 +
Move = 2;
 +
break;
 +
case IR_L:
 +
Move = 3;
 +
break;
 +
case IR_R:
 +
Move = 4;
 +
break;
 +
case IR_OK:
 +
Move = 0;
 +
break;
 +
default:
 +
break;
 +
}
 +
 +
buf = 0;
 +
 +
}
 +
 +
if (Car_Mode == 1)
 +
{
 +
switch (Move)
 +
{
 +
case 0:
 +
stop();
 +
break;
 +
case 1:
 +
forward(SPEED1);
 +
break;
 +
case 2:
 +
back(SPEED1);
 +
break;
 +
case 3:
 +
turnLeft(SPEED1);
 +
break;
 +
case 4:
 +
turnRight(SPEED1);
 +
break;
 +
default:
 +
break;
 +
}
 +
}
 +
 +
else
 +
{
 +
tracking();
 +
}
 +
 +
 +
 +
}
 +
 +
 +
void tracking()
 +
{
 +
//sprintf(info, "D1:%d D2:%d\r\n", digitalRead(A1), digitalRead(A2));
 +
//Serial.print(info);
 +
if (digitalRead(A1) == 1 && digitalRead(A2) == 0)
 +
{
 +
turnLeft(SPEED);
 +
Serial.println("Left");
 +
}
 +
else if (digitalRead(A1) == 0 && digitalRead(A2) == 1)
 +
{
 +
turnRight(SPEED);
 +
Serial.println("Right");
 +
}
 +
else
 +
{
 +
forward(SPEED);
 +
}
 +
}
 +
 +
void forward(uint8_t speed)
 +
{
 +
analogWrite(5, speed);
 +
analogWrite(6, 0);
 +
analogWrite(9, 0);
 +
analogWrite(10, speed);
 +
 +
}
 +
 +
void back(uint8_t speed)
 +
{
 +
analogWrite(5, 0);
 +
analogWrite(6, speed);
 +
analogWrite(9, speed);
 +
analogWrite(10, 0);
 +
 +
}
 +
 +
void stop()
 +
{
 +
analogWrite(5, 0);
 +
analogWrite(6, 0);
 +
analogWrite(9, 0);
 +
analogWrite(10, 0);
 +
 +
}
 +
 +
void turnLeft(uint8_t speed)
 +
{
 +
analogWrite(5, speed);
 +
analogWrite(6, 0);
 +
analogWrite(9, 0);
 +
analogWrite(10, 0);
 +
 +
}
 +
 +
void turnRight(uint8_t speed)
 +
{
 +
 +
analogWrite(5, 0);
 +
analogWrite(6, 0);
 +
analogWrite(9, 0);
 +
analogWrite(10, speed);
 +
}
 
</pre>
 
</pre>
 +
=== <font size=3px>Mixly图形化程序</font> ===
  
== FAQ ==
 
 
== 版本历史记录 ==
 
== 版本历史记录 ==
  

2018年7月13日 (五) 14:29的版本

Arduino car.png

概述

由UNO和UNO拓展板、blue:bit模块搭建的简易arduino小车。可实现循迹和红外控制功能。

使用教程

本例程含循迹和红外遥控两个功能,可通过遥控切换两种模式。当按下“*”键,进入循迹模式,当按下“#”,进入红外遥控模式。

在红外遥控模式下,按键↑↓←→可操控小车,ok键为停止。

组装说明

点击下载.png




电子模块清单

模块名称 数量
UNO主控板 x1
UNO拓展板 x1
TT马达+轮子 x2
blue:bit循迹模块 x1
blue:bit红外接收 x1

电子模块连接说明

模块 引脚 说明
UNO主控板 UNO拓展板
TT马达(小车左) MB
TT马达(小车右) MA
循迹模块 VCC ->V
D1 ->A1
D2 ->A2
GND ->G
连接到UNO拓展板
红外接收模块 VCC ->V
RXI ->3
TXD ->2
GND ->G
连接到UNO拓展板

Arduino程序

点击下载.png
File:XXXX_Release.rar

/*************************************************
Copyright:wiki.labplus.cn
Author:tangliufeng
Date:13/7/2018
Description:由arduino电机驱动板加UNO+循迹模块+红外模块拼装的小车
1.循迹功能:按键“*”,进入循迹模式
2.红外遥控:按键“#”,进入遥控模式,使用方向键控制小车行走
**************************************************/
#include <SoftwareSerial.h>
#include <arduino.h>

char info[50];
uint8_t Car_Mode = 0;
uint8_t Move = 0;
uint8_t buf;

#define SPEED 80
#define SPEED1 60

//IR Button Value
#define IR_1 0x00
#define IR_2 0x80
#define IR_3 0x40
#define IR_4 0x20
#define IR_5 0xA0
#define IR_6 0x60
#define IR_7 0x10
#define IR_8 0x90
#define IR_9 0x50
#define IR_0 0xB0
#define IR_star 0x30
#define IR_well 0x70
#define IR_UP 0x88
#define IR_DWN 0x98
#define IR_L 0x28
#define IR_R 0x68
#define IR_OK 0xA8


SoftwareSerial irSerial(2, 3);  //rx P2,tx P3  connection IR Receive moudle
void setup()
{
	Serial.begin(115200);
	irSerial.begin(115200);
	pinMode(5, OUTPUT);
	pinMode(6, OUTPUT);
	pinMode(9, OUTPUT);
	pinMode(10, OUTPUT);

	pinMode(A1, INPUT);
	pinMode(A2, INPUT);
	forward(SPEED);

}
void loop()
{
	if (irSerial.available() > 0)
	{

		buf = irSerial.read();
		Serial.write(buf);

		switch (buf)
		{
		case IR_star:
			Car_Mode = 0;
			Serial.println("tracking mode");

			break;
		case IR_well:
			Car_Mode = 1;
			Serial.println("control mode");
			break;
		case IR_UP:
			Move = 1;
			break;
		case IR_DWN:
			Move = 2;
			break;
		case IR_L:
			Move = 3;
			break;
		case IR_R:
			Move = 4;
			break;
		case IR_OK:
			Move = 0;
			break;
		default:
			break;
		}

		buf = 0;

	}

	if (Car_Mode == 1)
	{
		switch (Move)
		{
		case 0:
			stop();
			break;
		case 1:
			forward(SPEED1);
			break;
		case 2:
			back(SPEED1);
			break;
		case 3:
			turnLeft(SPEED1);
			break;
		case 4:
			turnRight(SPEED1);
			break;
		default:
			break;
		}
	}

	else
	{
		tracking();
	}



}


void tracking()
{
	//sprintf(info, "D1:%d D2:%d\r\n", digitalRead(A1), digitalRead(A2));
	//Serial.print(info);
	if (digitalRead(A1) == 1 && digitalRead(A2) == 0)
	{
		turnLeft(SPEED);
		Serial.println("Left");
	}
	else if (digitalRead(A1) == 0 && digitalRead(A2) == 1)
	{
		turnRight(SPEED);
		Serial.println("Right");
	}
	else
	{
		forward(SPEED);
	}
}

void forward(uint8_t speed)
{
	analogWrite(5, speed);
	analogWrite(6, 0);
	analogWrite(9, 0);
	analogWrite(10, speed);

}

void back(uint8_t speed)
{
	analogWrite(5, 0);
	analogWrite(6, speed);
	analogWrite(9, speed);
	analogWrite(10, 0);

}

void stop()
{
	analogWrite(5, 0);
	analogWrite(6, 0);
	analogWrite(9, 0);
	analogWrite(10, 0);

}

void turnLeft(uint8_t speed)
{
	analogWrite(5, speed);
	analogWrite(6, 0);
	analogWrite(9, 0);
	analogWrite(10, 0);

}

void turnRight(uint8_t speed)
{

	analogWrite(5, 0);
	analogWrite(6, 0);
	analogWrite(9, 0);
	analogWrite(10, speed);
}

Mixly图形化程序

版本历史记录

Version Date 新增/删除/修复