嵌入式入门学习笔记——Arduino蓝牙遥控小车

举报
yd_266832696 发表于 2025/05/31 21:25:43 2025/05/31
【摘要】 本文介绍基于Arduino的蓝牙遥控小车制作过程,主要包括五个步骤:1)组装小车框架,强调准备充足接线材料;2)电路连接,说明电机驱动板(L298N)的必要性及接线原理;3)烧录控制程序,提供完整代码实现前进、转向等基本功能;4)蓝牙模块调试;5)最终测试。作者分享了制作过程中的经验教训,如因线材不足导致功能受限,最终实现基础转向功能。整个项目涵盖了硬件组装、电路设计、编程控制和无线通信等关

准备材料:电机驱动板、Arduino板、蓝牙模块、小车全家桶

制作流程:一、组装小车  二、接线  三、烧录代码   四、调试蓝牙  五、测试

一、组装

按照图纸组装,有手就行。一定一定要准备螺丝刀和多几条杜邦线,或者问商家要多几条电线

 血的教训:由于电线不足,所以没有安装电源开关,也只测试了一个电机是否能转动成功。

电机驱动模块介绍:

这是最低级的:

 最好买普遍的L298N电机驱动:


 arduino板可以供电,为什么要加电机驱动模块?

1、四块电池接电机,电流过大,烧坏arduino板。

2、电机驱动模块可以实现两个直流电机的正反向驱动,正转、反转、刹车、慢行,否则只会直行

3、电机驱动模块具有驱动能力强,发热量低,抗干扰能力强的特点。


其中左边和右边的孔一一对应,我们可以将Arduino的数字输出针脚接到in1 ~ in4上,即可将对应的高低电平信号映射到驱动板输出的接线柱上,从而控制电机
 

二、接线

原理图:

Arduino板 驱动板
VIN +
GND    
5 INT1
6 INT2
9 INT3
10 INT4

原理:电池组供电给电机驱动板,和Arduino板。Arduino板相当于一个智能开关,传输信号给驱动板的INT1-4引脚,INT引脚再决定是否输出电压给它们对应的输出引脚(接电机)。

蓝牙模块用法传送门:Arduino蓝牙模块实验(HC-42)_Z·y001的博客-CSDN博客

蓝牙模块先不用接。 先测试一下驱动板,电机是否能转动

刚接上去电机即可转动。

三、代码烧录

拆下驱动板

单独连接Arduino和电脑

char serial_data;   // 将从串口读入的消息存储在该变量中

int wheel_R_1 = 5;  // 右轮in1对应Arduino 5号引脚
int wheel_R_2 = 6; // 右轮in2对应Arduino 6号引脚
int wheel_L_1 = 9;  // 左轮in3对应Arduino 9号引脚
int wheel_L_2 = 10;  // 左轮in4对应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);
}



进入串口监视器,在这里我们可可以对上传到板上的程序进行测试,在输入栏输入“a”后,点击【发送】按钮,会发现文本框里可以从Arduino得到相应的反馈(这是在源代码中设置的),然后还可以依次测试发送“w”、“s”、“d”这几种消息,如均正常,则程序无误。

四、调试蓝牙

 蓝牙模块用法传送门:Arduino蓝牙模块实验(HC-42)_Z·y001的博客-CSDN博客

手机的蓝牙助手设置按钮

 测试蓝牙效果:手机按下按钮,出现对应的结果

 五、最终组装测试

(驱动板有些差异,仅供参考)

 实际效果:超级超级简陋的安装,由于只有极少的电线、杜邦线,所以只能实现原地转圈圈功能。



【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。