在这个项目中,我们正在使用ESP32开发模块制作蓝牙控制汽车。这是我们选择ESP32而不是Arduino等其他板的原因。
以下是我们选择它的原因。ESP32现在因其内置等功能而变得更加著名蓝牙而且无线网络模块。此外,它有一个更强大的CPU更多的内存而且罗这比Arduino或任何其他基于物联网项目的开发板都有很大的优势,这些项目需要活跃的互联网连接或蓝牙等功能。因此,我们选择ESP32为我们的项目。
组件要求:
制造蓝牙控制机器人汽车所需的组件。
- 减速直流电动机
- L293D电机驱动器或N298 MOSFET驱动器
- 用于房屋组件的躺椅
- ESP32开发模块(开发板)
- 跳线
- 安装Blynk App的安卓智能手机
- 微型电路试验板
- 电池组(锂离子x 3)
蓝牙控制汽车电路图:
从上面的电路图中,您可以看到2个电机与L293D驱动器IC接口(有关更多详细信息,您也可以参考我们的博客IC L293D).该IC由ESP32 Dev Module控制。IC 7805是一个稳压IC,为ESP32提供恒定的5V电压。
需要一个12V电源来驱动IC和电机。LM7805稳压器给ESP32模块恒定5V。
蓝牙控制RC车工作情况:
当我们为ESP32供电时,蓝牙模块开始工作,并在启动安装在其上的Dabble应用程序时连接到智能手机。在那个应用程序中,有一个手柄。通过使用手柄,你可以控制蓝牙汽车。你可以在三种不同的模式下移动你的车。了解更多涉猎。
操纵杆模式:
在这种模式下,你可以用一个容易控制的操纵杆来控制汽车。
按钮模式:
在此模式下,有四个按钮(即。前进,后退,左,右)使用主题,你可以控制你的汽车,但你必须使用更多的按钮。
加速度计模式:
在这种模式下,你可以通过移动和倾斜智能手机来控制你的汽车。这是非常简单和有趣的。
基于ESP32的蓝牙控制汽车代码:
让我们通过代码来了解一下汽车的工作原理:
//这里我们已经定义了电机A的引脚int motor1Pin1 = 27;
int motor1Pin2 = 26;
int enable1Pin = 14;
//这里我们已经定义了电机B的引脚int motor2Pin1 = 32;
int motor2Pin2 = 33;
int enable2Pin = 25;
//定义自定义设置,你需要在你的程序中安装dabble库
#定义CUSTOM_SETTINGS
#定义INCLUDE_GAMEPAD_MODULE
# include < DabbleESP32.h >
无效设置(){
Dabble.begin(“MyEsp32”);
//*设置motor1的引脚为输出:pinMode (motor1Pin1、输出);
pinMode (motor1Pin2、输出);
pinMode (enable1Pin、输出);
//设置motor2的引脚为输出:pinMode (motor2Pin1、输出);
pinMode (motor2Pin2、输出);
pinMode (enable2Pin、输出);
digitalWrite (enable1Pin、高);
digitalWrite (enable2Pin、高);
}
无效循环(){
Dabble.processInput ();
//它将检查哪个按钮被按下或没有?根据按下的按钮,微控制器的输出引脚将被设置为高或低。我们使用else if语句。
boolean a = GamePad.isUpPressed();
boolean b = GamePad.isDownPressed();
boolean c = GamePad.isLeftPressed();
boolean d = GamePad.isRightPressed();
boolean e = GamePad.isTrianglePressed();
布尔f = GamePad.isCirclePressed();
boolean g = gamepad . iscrosspress ();
boolean h = GamePad.isSquarePressed();
// boolean i = GamePad.isStartPressed();
// boolean j = GamePad.isSelectPressed();
/ /前进
If (a || e){
digitalWrite (motor1Pin1、低);
digitalWrite (motor1Pin2、高);
digitalWrite (motor2Pin1、高);
digitalWrite (motor2Pin2、低);
}
// Go Left条件
Else if(d || f){
digitalWrite (motor1Pin1、低);
digitalWrite (motor1Pin2、高);
digitalWrite (motor2Pin1、低);
digitalWrite (motor2Pin2、低);
}
//*权限条件
Else if(c || h){
digitalWrite (motor1Pin1、低);
digitalWrite (motor1Pin2、低);
digitalWrite (motor2Pin1、高);
digitalWrite (motor2Pin2、低);
}
//返回条件
Else if(b || g){
digitalWrite (motor1Pin1、高);
digitalWrite (motor1Pin2、低);
digitalWrite (motor2Pin1、低);
digitalWrite (motor2Pin2、高);
}
/ /停止条件
其他{
digitalWrite (motor1Pin1、低);
digitalWrite (motor1Pin2、低);
digitalWrite (motor2Pin1、低);
digitalWrite (motor2Pin2、低);
}
}
这是我们的Android智能手机使用Dabble App使用ESP32的蓝牙控制汽车的工作方式。
对于摇杆模式,你只需要在你的ESP32开发模块上上传以下代码,它将为你工作,我们正在制作另一个博客,你可以在其中找到代码的详细解释
//手柄模式代码
#define l1 27 //左电机1
#define l2 26 //左电机
#定义r1 33 //右电机1
#定义r2 32 //右电机2
#定义e1 14 //左电机左使能引脚
#define e2 25 //右电机使能引脚
Int lm = 0;//左电机转速
Int rm = 0;//右电机转速
#定义CUSTOM_SETTINGS
#定义INCLUDE_GAMEPAD_MODULE
# include < DabbleESP32.h >
Const int freq = 30000;
const int pwmChannel = 0;
const int pwmChannel2 = 1;
Const int分辨率= 8;
int dutyCycle = 200;
无效设置(){
Dabble.begin(“BAJRANGIBHAIJAN”);
pinMode (l1、输出);
pinMode (l2、输出);
pinMode (r1、输出);
pinMode (r2、输出);
pinMode (e1、输出);
pinMode (e2、输出);
ledcSetup(pwmChannel,频率,分辨率);
ledcAttachPin (e1, pwmChannel);
ledcAttachPin (e2、pwmChannel2);
}
无效循环(){
Dabble.processInput ();
ledcWrite (pwmChannel lm);
ledcWrite (pwmChannel2 rm);
float xval = GamePad.getXaxisData();
float yval = GamePad.getYaxisData();
(yval < 0){
digitalWrite (l1,高);
digitalWrite (l2,低);
digitalWrite (r1、高);
digitalWrite (r2、低);
Lm = map(yval, 0, - 7,0, 200);
Rm = map(yval, 0, - 7,0, 200);
}
Else if(yval > 0) {
digitalWrite (l1,低);
digitalWrite (l2,高);
digitalWrite (r1、低);
digitalWrite (r2、高);
Lm = map(yval, 0,7,0,200);
Rm = map(yval, 0,7,0,200);
}
其他{
Lm = 0;
Rm = 0;
}
如果(xval < 0) {
int xMapped = map(xval, 0, - 7,0, 200);
lm = lm - xMapped;
rm = rm + xMapped;
If (lm < 0) {
Lm = 0;
}
If (rm > 200) {
Rm = 200;
}
}
If (xval > 0) {
int xMapped = map(xval, 0,7,0, 200);
lm = lm + xMapped;
rm = rm - xMapped;
If (lm > 200) {
Lm = 200;
}
If (rm < 0) {
Rm = 0;
}
}
}
现在,通过上传这段代码,你就可以用Dabble App上的手柄的所有三种模式(即数字模式、操纵杆模式和加速度计模式)来控制你的汽车。
你好,亲爱的。
我正在尝试使用草图,但它在编译中返回错误…我相信由于尝试复制和粘贴…它一定是无序的…但错误与映射有关;你能查一下吗?如果您能将文件通过邮件转发给我,我将非常感激。
致以最亲切的问候。