• 【毕设项目】基于单片机的遥控小车设计与实现 - 嵌入式 物联网 stm32 c51



    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);
    }
    
    • 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

    单片机-嵌入式毕设选题大全及项目分享:

    https://blog.csdn.net/m0_71572576/article/details/125409052


    6 最后

  • 相关阅读:
    代码随想录算法训练营day31|理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和
    WebSocket服务多节点部署问题及解决方案
    Linux入门之使用 ps 查看系统进程
    1分钟精准预测未来10天天气,谷歌开源GraphCast
    springboot使用redis
    【毕业设计】 stm32单片机的远程WIFI密码锁 - 物联网 嵌入式
    MySQL系列---Online DDL
    Wazuh agent的安装、注册与配置管理
    云栖大会丨桑文锋:打造云原生数字化客户经营引擎
    python+flask计算机毕业设计“研助乐”服务平台的设计与实现(程序+开题+论文)
  • 原文地址:https://blog.csdn.net/m0_71572576/article/details/125460281