基于QT的蓝牙遥控车设计报告

目录

文章目录

前言

一、系统设计

1.1 硬件设计

1.2 软件设计

二、系统实现

2.1 硬件实现

2.2 软件实现

2.2.1 界面设计

2.2.2.串口配置

3.2.3.信号与槽连接

2.2.4 指令发送

2.2.5.数据接收与处理

 2.2.6.Qt ui界面设计

2.3 硬件连接

2.4 测试与调试

三、总结

四、完整工程代码

xiao_che.pro

mainwindow.h

mainwindow.cpp


 

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

本项目通过蓝牙模块和QT应用程序相结合,展示了一种基于蓝牙技术的无线控制方案。研究并实现该方案不仅有助于理解蓝牙通信和QT编程,还能为类似的智能控制项目提供参考,具有较高的学习和应用价值。


提示:以下是本篇文章正文内容,下面案例可供参考

 

一、系统设计

1.1 硬件设计

系统硬件部分包括蓝牙模块、单片机、减速电机和驱动模块。具体硬件连接如下:

  1. 蓝牙模块:使用HC-05蓝牙模块,与PC端QT应用程序进行无线通信。
  2. 单片机:采用STM51单片机作为核心控制器,负责接收蓝牙指令并控制电机驱动。
  3. 减速电机:四个轮子分别配备一个减速电机,提供小车的驱动力。
  4. 电机驱动模块:使用L298N电机驱动模块,控制电机的前进、后退、转向等动作。

32cec7c00069423dbeb7fb8aeef93757.jpeg

1.2 软件设计

系统软件部分使用QT框架开发PC端控制程序,通过串口通信实现与蓝牙模块的数据传输。主要功能包括界面设计、串口配置、指令发送和数据接收。

二、系统实现

2.1 硬件实现

将四个电机分别连接到L298N电机驱动模块的输出端,L298N的输入端连接到STM51单片机的GPIO口。HC-05蓝牙模块的RXD和TXD引脚分别连接到STM51单片机的TXD和RXD引脚,实现串口通信。

2.2 软件实现

2.2.1 界面设计

使用QT Designer设计控制界面,包含前进、后退、左转、右转、停止、加速和减速按钮。

mainwindow.h

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QObject>
#include <QDebug>
#include <QBluetoothDeviceDiscoveryAgent>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

在主窗口构造函数中,初始化界面组件并设置槽函数。

2.2.2.串口配置

在主窗口类中创建QSerialPort对象,配置串口参数(如波特率、数据位、校验位、停止位等)。

因为用的是低功耗串口,需要在电脑这里看是COM几,如果打开失败就看一下串口写对没有

void MainWindow::PortConfigureInit(void)// 设置串口参数
{
    serial = new QSerialPort;
    serial->setPortName("COM7");//要打开串口的名字
    if(serial->open(QIODevice::ReadWrite))//打开串口
    {
         qDebug("打开成功");
    }
    else
    {
         qDebug("打开失败");
    }
    serial->setBaudRate(QSerialPort::Baud115200);//设置波特率
    serial->setDataBits(QSerialPort::Data8);//设置数据位
    serial->setParity(QSerialPort::NoParity);//设置校验位
    serial->setStopBits(QSerialPort::OneStop);//设置停止位
    serial->setFlowControl(QSerialPort::NoFlowControl); //设置为无流控制
    QObject::connect(serial,&QSerialPort::readyRead,this,&MainWindow::ReadData);
    qDebug("OPEN");
}

3.2.3.信号与槽连接

将按钮的点击信号与相应的槽函数连接。

// 前进按钮槽函数
void MainWindow::on_pushButton_clicked()
{
    sendCommand(1);
    qDebug("前进");
}
// 左转按钮槽函数
void MainWindow::on_pushButton_2_pressed()
{
    sendCommand(3);
    qDebug("左转");
}
// 左转按钮槽函数
void MainWindow::on_pushButton_2_released()
{
    sendCommand(0);
    qDebug("停止");
}
// 右转按钮槽函数
void MainWindow::on_pushButton_3_pressed()
{
    sendCommand(4);
    qDebug("右转");
}
// 右转按钮槽函数
void MainWindow::on_pushButton_3_released()
{
    sendCommand(0);
    qDebug("停止");
}
// 后退按钮槽函数
void MainWindow::on_pushButton_4_pressed()
{
    sendCommand(2);
    qDebug("后退");
}
void MainWindow::on_pushButton_4_released()
{
    sendCommand(0);
    qDebug("停止");
}
// 打开串口按钮槽函数
void MainWindow::on_pushButton_5_clicked()
{
    PortConfigureInit();
}
// 停止按钮槽函数
void MainWindow::on_pushButton_6_clicked()
{
    sendCommand(0);
    qDebug("停止");
}
// 加速按钮按下槽函数
void MainWindow::on_pushButton_7_pressed()
{
    sendCommand(5);
    qDebug("速度+10");
}
// 加速按钮松开槽函数
void MainWindow::on_pushButton_7_released()
{
    //endCommand(0);
    qDebug("加速完成");
}
// 减速按钮按下槽函数
void MainWindow::on_pushButton_8_pressed()
{
    sendCommand(6);
    qDebug("速度-10");
}
// 减速按钮松开槽函数
void MainWindow::on_pushButton_8_released()
{
    //sendCommand(0);
    qDebug("减速完成");
}

2.2.4 指令发送

在槽函数中生成控制指令并通过串口发送给小车。

// 发送指令函数
void MainWindow::sendCommand(unsigned char command)
{
    serial->write(reinterpret_cast<const char*>(&command), 1);
}

2.2.5.数据接收与处理

实现串口数据接收函数,将接收到的数据转换为十六进制。

// 读取串口数据
void MainWindow::ReadData(void)
{
    QByteArray info = serial->readAll();
    QByteArray hexData = info.toHex(); // 转换为十六进制
}

 2.2.6.Qt ui界面设计

使用Qt Designer设计控制界面,添加前进、后退、左转、右转、停止、加速和减速按钮。

30907a4c6b894259903f9637eb5a1e1d.png

2.3 硬件连接

将四个电机分别连接到L298N电机驱动模块的输出端,L298N的输入端连接到STM51单片机的GPIO口。HC-05蓝牙模块的RXD和TXD引脚分别连接到STM51单片机的TXD和RXD引脚,实现串口通信。

2.4 测试与调试

  1. 硬件测试:连接所有硬件模块,确保电机、蓝牙模块和单片机正常工作。
  2. 软件调试:运行Qt控制软件,测试各个按钮的功能,确保能够正确控制小车的前进、后退、左转、右转、停止和速度调节。
  3. 综合测试:通过PC端软件对小车进行综合测试,确保指令传输的实时性和控制的准确性。

三、总结

本设计旨在研究基于Qt的蓝牙遥控车的设计与实现,通过结合Qt和蓝牙通信技术,开发一款能够远程控制小车的系统。通过研究,可以深入理解Qt编程和蓝牙通信的原理和应用,为智能小车技术的进一步研究和应用打下坚实基础。

四、完整工程代码

xiao_che.pro

QT += core gui bluetooth

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = BluetoothSerial
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp

HEADERS += mainwindow.h

FORMS += mainwindow.ui

# 添加蓝牙模块
QT += bluetooth

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtSerialPort/QSerialPort> // 包含串口类的头文件
#include <QtSerialPort/QSerialPortInfo>
#include <QApplication>// 包含应用程序类的头文件
#include <QPushButton>// 包含按钮类的头文件
#include <QtBluetooth> // 包含蓝牙套接字类的头文件
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked(); // 前进按钮槽函数
    void on_pushButton_2_pressed(); // 左转按钮槽函数
    void on_pushButton_2_released(); // 左转按钮槽函数
    void on_pushButton_3_pressed(); // 右转按钮槽函数
    void on_pushButton_3_released(); // 右转按钮槽函数
    void on_pushButton_4_pressed(); // 后退按钮槽函数
    void on_pushButton_4_released(); // 后退按钮槽函数
    void on_pushButton_5_clicked(); // 打开串口按钮槽函数
    void on_pushButton_6_clicked(); // 停止按钮槽函数
    void on_pushButton_7_pressed(); // 加速按钮按下槽函数
    void on_pushButton_8_pressed(); // 减速按钮按下槽函数

private:
    Ui::MainWindow *ui;
    QSerialPort *serial;

    void PortConfigureInit(void); // 串口配置初始化
    void ReadData(void); // 读取串口数据
    void sendCommand(unsigned char command); // 发送指令函数
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QObject>
#include <QDebug>
#include <QBluetoothDeviceDiscoveryAgent>
#include <QLowEnergyController>
#include <QLowEnergyService>
#include <QLowEnergyCharacteristic>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
// 析构函数
MainWindow::~MainWindow()
{
    delete ui;
}
// 串口配置初始化
void MainWindow::PortConfigureInit(void)// 设置串口参数
{
    serial = new QSerialPort;
    serial->setPortName("COM7");//要打开串口的名字
    if(serial->open(QIODevice::ReadWrite))//打开串口
    {
         qDebug("打开成功");
    }
    else
    {
         qDebug("打开失败");
    }
    serial->setBaudRate(QSerialPort::Baud115200);//设置波特率
    serial->setDataBits(QSerialPort::Data8);//设置数据位
    serial->setParity(QSerialPort::NoParity);//设置校验位
    serial->setStopBits(QSerialPort::OneStop);//设置停止位
    serial->setFlowControl(QSerialPort::NoFlowControl); //设置为无流控制
    QObject::connect(serial,&QSerialPort::readyRead,this,&MainWindow::ReadData);
    qDebug("OPEN");
}
// 读取串口数据
void MainWindow::ReadData(void)
{
    QByteArray info = serial->readAll();
    QByteArray hexData = info.toHex(); // 转换为十六进制
}
// 发送指令函数
void MainWindow::sendCommand(unsigned char command)
{
    serial->write(reinterpret_cast<const char*>(&command), 1);
}
// 前进按钮槽函数
void MainWindow::on_pushButton_clicked()
{
    sendCommand(1);
    qDebug("前进");
}
// 左转按钮槽函数
void MainWindow::on_pushButton_2_pressed()
{
    sendCommand(3);
    qDebug("左转");
}
// 左转按钮槽函数
void MainWindow::on_pushButton_2_released()
{
    sendCommand(0);
    qDebug("停止");
}
// 右转按钮槽函数
void MainWindow::on_pushButton_3_pressed()
{
    sendCommand(4);
    qDebug("右转");
}
// 右转按钮槽函数
void MainWindow::on_pushButton_3_released()
{
    sendCommand(0);
    qDebug("停止");
}
// 后退按钮槽函数
void MainWindow::on_pushButton_4_pressed()
{
    sendCommand(2);
    qDebug("后退");
}
void MainWindow::on_pushButton_4_released()
{
    sendCommand(0);
    qDebug("停止");
}
// 打开串口按钮槽函数
void MainWindow::on_pushButton_5_clicked()
{
    PortConfigureInit();
}
// 停止按钮槽函数
void MainWindow::on_pushButton_6_clicked()
{
    sendCommand(0);
    qDebug("停止");
}
// 加速按钮按下槽函数
void MainWindow::on_pushButton_7_pressed()
{
    sendCommand(5);
    qDebug("速度+10");
}
// 减速按钮按下槽函数
void MainWindow::on_pushButton_8_pressed()
{
    sendCommand(6);
    qDebug("速度-10");
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值