【基于Arduino的蓝牙控制小车】3D+电路图+控制代码详解

更好的阅读体验

目录

1.环境搭建

1.1 电路模拟环境+3D建模环境

1.2蓝牙小车控制代码环境

2.Arduino串口通信

2.1 Arduino串口

2.2 系统函数

2.3 串口函数

2.3.1.Serial.begin()

2.3.2.Serial.print()

2.3.3.Serial.available()

2.3.4.Serial.read()

2.4 Digital I/O

2.4.1.digitalRead()

2.4.2.digitalWrite()

2.4.3.pinMode()

3.制作流程

3.1 电路模拟过程

3.1.1 模拟硬件

3.1.2 模拟代码

3.2 3D建模过程

3.2.1 模型选择

 3.3 焊接过程

4.成果导出

4.1 导出电路图

4.2 导出3D建模


1.环境搭建


1.1 电路模拟环境+3D建模环境

  • 使用老师提供的网站:AUTUDESK

  • 在该网站注册账号即可免费使用,可以最低限度满足本次项目要求

使用说明

  • 电路模拟

    1. 点击创建新电路 

    2. 选择相应组件组合即可

  • 3D建模

    1. 点击创建新设计

    2. 选择合适的3D组件组合即可


1.2蓝牙小车控制代码环境

  • 使用Arduino官网IDE选择对应版本下载即可

Tips

  • 在AUTUDESK模拟电路时,可以将代码导入,测试代码的正确性

  • 基于Arduion电路板使用不同语言的函数的参考文献

  • 对于该项目,我们只需掌握Digital I/O相关的函数即可


2.Arduino串口通信


2.1 Arduino串口


Arduino采用USART通信模式,可以有硬串口软串口两种实现方式。

通常将Arduino UNO上自带的串口0(RX)1(TX)称为硬件串口,可与外围串口设备通信。而使用SoftwareSerial类库模拟成的串口,称为软件模拟串口(简称软串口)。如果要连接更多的串口设备,可以使用软串口。


2.2 系统函数

1、初始化程序

setup()函数中的代码只会被运行一次,通常用来做一下初始化工作;

2、循环主程序

loop()函数中的代码会被无限次地重复运行,程序的主体部分会写在这里;


2.3 串口函数


2.3.1.Serial.begin()

描述:开启串口,通常置于setup()函数中。
原型:

  • Serial.begin(speed)
  • Serial.begin(speed, config)

参数:

  • speed:波特率,一般取值9600,115200等。
  • config:设置数据位、校验位和停止位。默认SERIAL_8N1表示8个数据位,无校验位,1个停止位。

返回值:无。


2.3.2.Serial.print()

描述:串口输出数据,写入字符数据到串口。
原型:

  • Serial.print(val)
  • Serial.print(val, format)

参数:
val:打印的值,任意数据类型。
config:输出的数据格式。BIN(二进制)、OCT(八进制)、DEC(十进制)、HEX(十六进制)。对于浮点数,此参数指定要使用的小数位数。
示例:

Serial.print(78, BIN) 得到 “1001110”
Serial.print(78, OCT) 得到 “116”
Serial.print(78, DEC) 得到 “78”
Serial.print(78, HEX) 得到 “4E”
Serial.print(1.23456, 0) 得到 “1”
Serial.print(1.23456, 2) 得到 “1.23”
Serial.print(1.23456, 4) 得到 “1.2346”
Serial.print(‘N’) 得到 “N”
Serial.print(“Hello world.”) 得到 “Hello world.”

返回值:返回写入的字节数。
Serial.println()可以实现换行输出


2.3.3.Serial.available()

描述:判断串口缓冲区的状态,返回从串口缓冲区读取的字节数。
原型:Serial.available()
参数:无。
返回值:可读取的字节数。


2.3.4.Serial.read()

描述:读取串口数据,一次读一个字符,读完后删除已读数据。
原型:Serial.read()
参数:无。
返回值:返回串口缓存中第一个可读字节,当没有可读数据时返回-1,整数类型。


2.4 Digital I/O


2.4.1.digitalRead()

描述:从指定的数字引脚读取值,无论是HIGH还是LOW

原型:digitalRead(pin)

参数:pin:读取的 Arduino 引脚号

返回值:HIGH或者LOW

示例:

将引脚 13 设置为与引脚 7 相同的值,声明为输入。

int ledPin = 13;  // LED connected to digital pin 13
int inPin = 7;    // pushbutton connected to digital pin 7
int val = 0;      // variable to store the read value
​
void setup() {
  pinMode(ledPin, OUTPUT);  // sets the digital pin 13 as output
  pinMode(inPin, INPUT);    // sets the digital pin 7 as input
}
​
void loop() {
  val = digitalRead(inPin);   // read the input pin
  digitalWrite(ledPin, val);  // sets the LED to the button's value
}

2.4.2.digitalWrite()

描述:

将一个HIGH或一个LOW值写入数字引脚。

  • 如果引脚已配置为OUTPUTwith pinMode(),则其电压将设置为相应的值: 5V(或 3.3V 板上的 3.3V)为HIGH, 0V(接地)为LOW

  • 如果引脚配置为INPUT,digitalWrite()将启用 ( HIGH) 或禁用 ( LOW) 输入引脚上的内部上拉电阻。建议将 设置pinMode()INPUT_PULLUP启用内部上拉电阻,参考数字引脚教程。

  • 如果不设置pinMode()OUTPUT将 LED 连接到引脚,调用 时digitalWrite(HIGH),LED 可能会显得暗淡。没有明确设置pinMode()digitalWrite()将启用内部上拉电阻,其作用类似于一个大限流电阻。

原型:digitalWrite(pin, value)

参数:

  • pin:Arduino 引脚号。

  • value:HIGHLOW.

返回值:

示例:

//该代码使数字引脚 13 an并通过在和之间以一秒的速度OUTPUT交替来切换它。

void setup() {
  pinMode(13, OUTPUT);    // sets the digital pin 13 as output
}
​
void loop() {
  digitalWrite(13, HIGH); // sets the digital pin 13 on
  delay(1000);            // waits for a second
  digitalWrite(13, LOW);  // sets the digital pin 13 off
  delay(1000);            // waits for a second
}

2.4.3.pinMode()

描述:

将指定的引脚配置为输入或输出。有关引脚功能的详细信息,参考数字引脚页面。

Arduino 1.0.1 开始,可以使用 mode 启用内部上拉电阻INPUT_PULLUP。此外,该INPUT模式明确禁用内部上拉。

原型:pinMode(pin, mode)

参数

  • pin:要设置模式的 Arduino 引脚号。

  • mode: INPUT,OUTPUTINPUT_PULLUP. 参考数字引脚页面。

返回值:

示例:

//该代码使数字引脚 13OUTPUT和切换它HIGH和LOW

void setup() {
  pinMode(13, OUTPUT);    // sets the digital pin 13 as output
}
​
void loop() {
  digitalWrite(13, HIGH); // sets the digital pin 13 on
  delay(1000);            // waits for a second
  digitalWrite(13, LOW);  // sets the digital pin 13 off
  delay(1000);            // waits for a second
}

3.制作流程


3.1 电路模拟过程


3.1.1 模拟硬件

  • 首先,需要在模拟环境中添加一块Arduino电路板

  • 其次,需要四个直流电机,用于实现行进及转向控制功能


3.1.2 模拟代码

  • 可以先在IDE环境中编译,之后导入虚拟环境中模拟

(1). 前进、后退及停止功能

实现该功能,需要控制引脚输出的信号,使得两个引脚在直流电机的接口产生电位差,且要保证四个电机的电位差相等,使得小车可以沿着统一方向行驶,当不存在电位差时,电机停止运作,实现停止功能。

前进代码的实现:

void car_go(){
​
 digitalWrite(p1,HIGH);
​
 digitalWrite(p2,LOW);
​
 digitalWrite(p3,HIGH);
​
 digitalWrite(p4,LOW);
​
}

执行后的结果

 可以看到四个电机均向正方向转动

后退代码的实现

void car_back(){
​
 digitalWrite(p1,LOW);
​
 digitalWrite(p2,HIGH);
​
 digitalWrite(p3,LOW);
​
 digitalWrite(p4,HIGH);
​
}

执行后的结果

 可以看到四个电机均向反方向转动

停止代码的实现

void car_stop(){
​
 digitalWrite(p1,LOW);
​
 digitalWrite(p2,LOW);
​
 digitalWrite(p3,LOW);
​
 digitalWrite(p4,LOW);
​
}

执行后的结果

 可以看到四个电机均停止转动

(2). 转向功能

实现小车转向功能,可以控制两侧电机运作方向相反,同侧电机运作方向同步,通过改变引脚的输出信号,可以实现该功能。

小车左转向代码的实现

void car_left(){
​
 digitalWrite(p1,LOW);
​
 digitalWrite(p2,HIGH);
​
 digitalWrite(p3,HIGH);
​
 digitalWrite(p4,LOW);
​
}

执行后的结果

 可以看到上方同侧电机正向转动,下方同侧电机反向转动

小车右转向代码的实现

void car_right(){
​
 digitalWrite(p1,HIGH);
​
 digitalWrite(p2,LOW);
​
 digitalWrite(p3,LOW);
​
 digitalWrite(p4,HIGH);
​
}

执行后的结果

  可以看到上方同侧电机反向转动,下方同侧电机正向转动

(3). HC-06蓝牙模块链接功能

对Arduino链接HC-06蓝牙模块后,在启动时需要对串口进行链接

链接图

代码调试

#include <SoftwareSerial.h>

SoftwareSerial BT(8, 9);  //新建对象,接收脚为8,发送脚为9

char val1;  //存储接收的变量



void setup() {

  Serial.begin(9600);   //与电脑的串口连接

  Serial.println("BT is ready!");

  BT.begin(9600);  //设置蓝牙模块波特率

}



void loop() {

  //如果串口接收到数据,就输出到蓝牙串口

  if (Serial.available()) {

    val 1= Serial.read();

    BT.print(val1);

  }



  //如果接收到蓝牙模块的数据,输出到屏幕

  if (BT.available()) {

    val1 = BT.read();

    Serial.print(val1);

  }

}

(4). 蓝牙模块数据处理功能

当通过蓝牙向小车板载的HC-06蓝牙模块发出信号时,小车需要对接收到的蓝牙信号进行处理,以实现对小车的控制

小车蓝牙信息处理代码的实现

if(Serial.available()>0){ //当接收信号的返回值大于0时说明接收到了信号
​
  char val=Serial.read(); //读入接收的信号值
​
  
​
  if(val=='f'){ //当信号为’f’时,执行前进的代码
​
   car_go();
​
  }
​
  else if(val=='b'){  //当信号为’b’时,执行后退的代码
​
   car_back();
​
  }
​
  else if(val=='l'){  //当信号为’l’时,执行左转的代码
​
   car_left();
​
  }
​
  else if(val=='r'){  //当信号为’r’时,执行右转的代码
​
   car_right();
​
  }
​
  else{ //当信号非法时,执行停止的代码
​
   car_stop();
​
  }
​
 }

3.2 3D建模过程


3.2.1 模型选择

  • 根据个人风格的不同,选择内置库中自己喜欢的模型组合即可,以下是我的建模成品图

主视图

左视图

俯视图


 3.3 焊接过程


4.成果导出


4.1 导出电路图


4.2 导出3D建模

  • 21
    点赞
  • 202
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
【资源说明】 基于arduino的家庭环境感知与控制系统+源码+电路图+答辩PPT.zip基于arduino的家庭环境感知与控制系统+源码+电路图+答辩PPT.zip基于arduino的家庭环境感知与控制系统+源码+电路图+答辩PPT.zip基于arduino的家庭环境感知与控制系统+源码+电路图+答辩PPT.zip基于arduino的家庭环境感知与控制系统+源码+电路图+答辩PPT.zip基于arduino的家庭环境感知与控制系统+源码+电路图+答辩PPT.zip基于arduino的家庭环境感知与控制系统+源码+电路图+答辩PPT.zip 基于arduino的家庭环境感知与控制系统+源码+电路图+答辩PPT.zip 基于arduino的家庭环境感知与控制系统+源码+电路图+答辩PPT.zip基于arduino的家庭环境感知与控制系统+源码+电路图+答辩PPT.zip 基于arduino的家庭环境感知与控制系统+源码+电路图+答辩PPT.zip 【备注】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载使用体验! 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈!
以下是使用蓝牙控制Arduino小车行动的代码示例: ```arduino #include <SoftwareSerial.h> SoftwareSerial BTSerial(10, 11); // RX | TX //定义小车电机引脚 int motor1Pin1 = 2; int motor1Pin2 = 3; int motor2Pin1 = 4; int motor2Pin2 = 5; void setup() { //初始化串口通信 Serial.begin(9600); BTSerial.begin(9600); //设置电机引脚为输出模式 pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(motor2Pin1, OUTPUT); pinMode(motor2Pin2, OUTPUT); } void loop() { //等待蓝牙模块发送数据 if (BTSerial.available()) { //读取蓝牙模块发送的数据 char data = BTSerial.read(); //根据接收到的数据控制小车行动 switch (data) { case 'F': //前进 digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); digitalWrite(motor2Pin1, HIGH); digitalWrite(motor2Pin2, LOW); break; case 'B': //后退 digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, HIGH); digitalWrite(motor2Pin1, LOW); digitalWrite(motor2Pin2, HIGH); break; case 'L': //左转 digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, HIGH); digitalWrite(motor2Pin1, HIGH); digitalWrite(motor2Pin2, LOW); break; case 'R': //右转 digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); digitalWrite(motor2Pin1, LOW); digitalWrite(motor2Pin2, HIGH); break; case 'S': //停止 digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, LOW); digitalWrite(motor2Pin1, LOW); digitalWrite(motor2Pin2, LOW); break; } } } ``` 在上述代码中,我们使用了SoftwareSerial库来实现蓝牙模块的串口通信。在setup()函数中,我们初始化了串口通信和电机引脚的输出模式。在loop()函数中,我们等待蓝牙模块发送数据,然后根据接收到的数据控制小车的行动。具体来说,我们使用了switch语句来根据接收到的数据控制小车的前进、后退、左转、右转和停止。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪漫主义狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值