0%

Arduino遥控小车

遥控车

微信图片_20220418160239

传感器目录

电机

四个直流电机

image-20220224212931529

电机电源

4节5号可充电电池

image-20220224212145164

电机驱动

H桥电路模块

image-20220224213012196

控制电路电源

9V可充电电池

image-20220224212231877

DC-DC 12V转5V/3.3V电路板

image-20220224212657721

控制模块

Arduino Nano

image-20220224212757816

通信模块

HC-12无线数传模块(广州汇承信息科技有限公司

注意该模块比特率需要设置为9600。

image-20220224212821848

遥控模块

摇杆

image-20220224213142585

小车Arduino程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <SoftwareSerial.h>

SoftwareSerial softSerial(10, 11); // RX, TX (RX接设备的TX,TX接设备的RX)

int back1 = 2; // 左IA2
int front1 = 3; // 左IB2
int back2 = 4; // 左IA1
int front2 = 5; // 左IB1
int back3 = 6; // 右IA2
int front3 = 7; // 右IB2
int back4 = 8; // 右IA1
int front4 = 9; // 右IB1
String command = ""; // 用户发送的命令

void initMoto() {
// 电平为LOW触发
digitalWrite(back1, HIGH);
digitalWrite(front1, HIGH);
digitalWrite(back2, HIGH);
digitalWrite(front2, HIGH);
digitalWrite(back3, HIGH);
digitalWrite(front3, HIGH);
digitalWrite(back4, HIGH);
digitalWrite(front4, HIGH);
}

void setup() {
softSerial.begin(9600);
Serial.begin(9600);

pinMode(back1, OUTPUT);
pinMode(front1, OUTPUT);
pinMode(back2, OUTPUT);
pinMode(front2, OUTPUT);
pinMode(back3, OUTPUT);
pinMode(front3, OUTPUT);
pinMode(back4, OUTPUT);
pinMode(front4, OUTPUT);

initMoto();
}

void loop() {
command = "";
while (softSerial.available() > 0) {
command += char(softSerial.read());
delay(10);
}
if (command.length() > 0) {
Serial.println(command);
initMoto();

if (command.equals("front")) { // 前进
digitalWrite(front1, LOW);
digitalWrite(front2, LOW);
digitalWrite(front3, LOW);
digitalWrite(front4, LOW);
}
if (command.equals("back")) { // 后退
digitalWrite(back1, LOW);
digitalWrite(back2, LOW);
digitalWrite(back3, LOW);
digitalWrite(back4, LOW);
}
if (command.equals("left_back")) { // 左侧后退
digitalWrite(back1, LOW);
digitalWrite(back4, LOW);
}
if (command.equals("right_front")) { // 右侧前进
digitalWrite(front1, LOW);
digitalWrite(front4, LOW);
}
if (command.equals("left_front")) { // 左侧前进
digitalWrite(front2, LOW);
digitalWrite(front3, LOW);
}
if (command.equals("right_back")) { // 右侧后退
digitalWrite(back2, LOW);
digitalWrite(back3, LOW);
}
if (command.equals("left")) { // 左移
digitalWrite(back1, LOW);
digitalWrite(front2, LOW);
digitalWrite(front3, LOW);
digitalWrite(back4, LOW);
}
if (command.equals("right")) { // 右移
digitalWrite(front1, LOW);
digitalWrite(back2, LOW);
digitalWrite(back3, LOW);
digitalWrite(front4, LOW);
}
if (command.equals("left_circle")) { // 左转圈
digitalWrite(front1, LOW);
digitalWrite(front2, LOW);
digitalWrite(back3, LOW);
digitalWrite(back4, LOW);
}
if (command.equals("right_circle")) { // 右转圈
digitalWrite(back1, LOW);
digitalWrite(back2, LOW);
digitalWrite(front3, LOW);
digitalWrite(front4, LOW);
}
if (command.equals("stop")) { // 停止
// 什么都不干
}
}
}

遥控器Arduino程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <SoftwareSerial.h>
SoftwareSerial softSerial(2, 3); // 连接模块的TX、RX

const int xxInput = A0;
const int yyInput = A1;

const int zzInput = 4;

const int sampleSize = 10;

int ReadAxis(int axisPin)
{
long reading = 0;
analogRead(axisPin);
delay(1);
for (int i = 0; i < sampleSize; i++)
{
reading += analogRead(axisPin);
}
return reading / sampleSize;
}

void setup() {
pinMode(zzInput, INPUT);
Serial.begin(9600);
softSerial.begin(9600);
}

void loop() {
delay(500);

int xxRaw = ReadAxis(xxInput);
int yyRaw = ReadAxis(yyInput);
int zzRaw = digitalRead(zzInput);

// Serial.print(xxRaw);
// Serial.print(',');
// Serial.print(yyRaw);
// Serial.print(',');
// Serial.println(zzRaw);

if (zzRaw == 0 && xxRaw > 500 && xxRaw < 550 && yyRaw > 500 && yyRaw < 550) {
Serial.println("停止");
softSerial.print("stop");
}
if (xxRaw > 1000) {
Serial.println("前进");
softSerial.print("front");
}
if (xxRaw < 50) {
Serial.println("后退");
softSerial.print("back");
}
if (yyRaw < 50) {
Serial.println("左移");
softSerial.print("left");
}
if (yyRaw > 1000) {
Serial.println("右移");
softSerial.print("right");
}
if (zzRaw == 1) {
Serial.println("右转圈");
softSerial.print("right_circle");
}
}