1 简介
Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目
基于单片机的遥控小车设计与实现
大家可用于 课程设计 或 毕业设计
单片机-嵌入式毕设选题大全及项目分享:
https://blog.csdn.net/m0_71572576/article/details/125409052
2 主要器件与实现
- 四轮驱动智能汽车底盘
- 主控:arduino(可选stm32等其他单片机)
- L293D电机驱动器护罩
- SG90微型伺服电机
- 超声波传感器-HC-SR04
- HC-05蓝牙模块
- 电池座
- 电池
单片机和底盘接线
完整接线
制作流程主要分为四个部分:1.组装小车;2.烧写代码;3.调试蓝牙;4.整车测试
其中,前三个部分的耦合性很低,每个部分可以独立操作和调试
2.1 电机驱动模块
L298N转接驱动板
2.2 蓝牙模块
蓝牙( Bluetooth® ):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485GHz的ISM波段的UHF无线电波)。
我们在此使用的蓝牙模块(HC-05)已经在内部实现了蓝牙协议,不用我们再去自己开发调试协议。这类模块一般都是借助于串口协议通信,因此我们只需借助串口将我们需要发送的数据发送给蓝牙模块,蓝牙模块会自动将数据通过蓝牙协议发送给配对好的蓝牙设备。
与单片机连接
TX: 接Arduino UNO开发板"RX"引脚
RX: 接Arduino UNO开发板"TX"引脚
GND: 接Arduino UNO开发板"GND"引脚
VCC: 接Arduino UNO开发板"5V"或"3.3V"引脚
2.3 蓝牙调试APP
3 实现效果
5 部分参考代码
char serial_data; // 将从串口读入的消息存储在该变量中
int wheel_R_1 = 5; // 右轮in1对应Arduino 5号引脚
int wheel_R_2 = 6; // 右轮in2对应Arduino 6号引脚
int wheel_L_1 = 9; // 左轮in1对应Arduino 9号引脚
int wheel_L_2 = 10; // 左轮in2对应Arduino 10号引脚
void setup(){
// 配置所有控制轮的引脚为输出
pinMode(wheel_L_1, OUTPUT);
pinMode(wheel_L_2, OUTPUT);
pinMode(wheel_R_1, OUTPUT);
pinMode(wheel_R_2, OUTPUT);
// 配置串口波特率
Serial.begin(9600);
}
void loop(){
if(Serial.available()){
// 将从串口读入的消息存储在该变量中
serial_data = Serial.read();
// 按照 w a s d x 在键盘上的布局来控制车
// 如果接收到 w ,直行
if( serial_data == 'w' ){
move_ahead( );
Serial.println("The car is moving ahead!");
}
// 如果接收到 x ,后退
else if( serial_data == 'x'){
move_backwards( );
Serial.println("The car is moving backwards!");
}
// 如果接收到 a ,左转
else if( serial_data == 'a'){
turn_left( );
Serial.println("The car is turning left!");
}
// 如果接收到 d ,右转
else if( serial_data == 'd'){
turn_right( );
Serial.println("The car is turning right!");
}
// 如果接收到 s ,停止
else if( serial_data == 's'){
stop();
Serial.println("The car is stopping!");
}
}
}
// 定义直行函数
void move_ahead(){
digitalWrite( wheel_L_1, HIGH);
digitalWrite( wheel_L_2, LOW);
digitalWrite( wheel_R_1, HIGH);
digitalWrite( wheel_R_2, LOW);
}
// 定义后退函数
void move_backwards(){
digitalWrite( wheel_L_1, LOW);
digitalWrite( wheel_L_2, HIGH);
digitalWrite( wheel_R_1, LOW);
digitalWrite( wheel_R_2, HIGH);
}
// 定义左转函数
void turn_left(){
digitalWrite( wheel_L_1, LOW);
digitalWrite( wheel_L_2, LOW);
digitalWrite( wheel_R_1, HIGH);
digitalWrite( wheel_R_2, LOW);
}
// 定义右转函数
void turn_right(){
digitalWrite( wheel_L_1, HIGH);
digitalWrite( wheel_L_2, LOW);
digitalWrite( wheel_R_1, LOW);
digitalWrite( wheel_R_2, LOW);
}
void stop(){
digitalWrite( wheel_L_1, LOW);
digitalWrite( wheel_L_2, LOW);
digitalWrite( wheel_R_1, LOW);
digitalWrite( wheel_R_2, LOW);
}
单片机-嵌入式毕设选题大全及项目分享:
https://blog.csdn.net/m0_71572576/article/details/125409052