百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术笔记 > 正文

物联网毕业设计项目选题:harmonyos鸿蒙系统开发智能小车案例

dianpule 2025-02-15 21:06 25 浏览

华清远见FS-Hi3861开发套件,支持HarmonyOS 3.0系统。开发板主控Hi3861芯片内置WiFi功能,开发板板载资源丰富,包括传感器、执行器、NFC、显示屏等,同时还配套丰富的拓展模块。开发板配套丰富的学习资料,包括全套开发教程、视频课程、7大项目实战案例,可以帮助学员系统性学习鸿蒙设备开发及物联网开发。同时作为一款物联网开发板,华清远见FS-Hi3861开发套件可以进行物联网全技术体系的学习,包括传感器、无线传感网络(WiFi/蓝牙)、物联网操作系统(OpenHarmonyOS)、物联网云接入(华为云)等技术方向,可广泛应用于高校物联网创新教学、学生毕设及企业产品开发评估。

可学习技术鸿蒙设备开发环境搭建、鸿蒙裸机驱动开发、OpenHarmonyOS系统开发、鸿蒙网络开发、华为IoTDA设备接入、鸿蒙系统项目开发等鸿蒙设备开发及物联网开发技术。
可实战项目:智能照明灯、智能安防报警、智能农业、智能温度计、智能测距仪、倒车雷达、智能小车。

华清远见综合项目案例包括:

? 鸿蒙物联网项目实战:智能照明灯

? 鸿蒙物联网项目实战:智能温度计

? 鸿蒙物联网项目实战:智能安防报警

? 鸿蒙物联网项目实战:智慧农业

? 鸿蒙物联网项目实战:倒车雷达

? 鸿蒙物联网项目实战:智能测距仪

? 鸿蒙物联网项目实战:智能小车


这7个综合项目的难易程度各不相同,方便用户以循序渐进的方式进行学习。项目案例的设计,偏重于综合性更强,更贴近于产品化。每个项目,都可以使用“NFC碰一碰”进行配网。每个项目,都有微信小程序和华为云物联网平台的联动。每个项目,都配套详细的项目开发文档及实验源码,非常方便开发者学习。

公众号“华清远见V智能有料”,回复“鸿蒙项目”,可索取项目配套文档及源码。

鸿蒙开发板项目演示视频

https://www.bilibili.com/video/BV1pM41127Jp/?spm_id_from=333.999.0.0

基于物联网的智能小车项目

项目简介:

本项目由三部分组成:应用端(微信小程序)、设备端(Hi3861)、驱动端(UPS)。

目前在大部人手机上都有微信小程序,并且微信小程序的开发难度较小,所以采用微信小程序作为应用端控制界面。在开发微信小程序端之前,需要熟悉JavaScript语言、CSS语言、XML语言和JSON语言。在微信小程序端的控制小车界面中需要输入Hi3861设备端的IP地址,才可以正常的通信。

在设备端采用Hi3861 WiFi模组作为主控单元,Hi3861连接附近的WiFi路由器之后,首先获取连接该WiFi热点的IP地址,然后在OLED显示屏上显示当前设备的IP地址,在设备端系统中创建串口任务、OLED显示任务、UDP发送任务、UDP接收任务等。

在驱动端采用STM32单片机作为驱动单元,在STM32单片机中开启定时器的PWM功能和编码器采集功能,进行驱动和控制两个直流减速电机,并且在STM32端开启串口的空闲中断,来接收Hi3861设备端下发的控制指令,来进行控制小车电机的前、后、左、右等动作,使其小车按照功能需求进行执行。

开发平台:

华清远见hi3861鸿蒙开发板+UPS模组+超声波传感器+车体

项目框架:

整体框架

应用端框架

设备端框架

驱动端框架

硬件部分

设备端

主控部分

本项目使用的是WF-H861-RTA1模组作为主控,此模组是基于Hi3861V100芯片设计的,该芯片是一款高度集成的2.4GHz芯片,集成了IEEE 802.11b/g/n基带和RF电路,包括功率放大器PA、低噪声放大器LNA、RF balun、天线开关以及电源管理模块等。

支持20MHz标准带宽和5MHz/10MHz窄带宽,提供最大72.2Mbit/s物理层速率。并且集成了高性能32位微处理器,提供SPI、UART、I2C、I2S、PWM、GPIO以及多路ADC模拟输入等丰富的外设接口,同时支持SDIO2.0接口,时钟最高支持50MHz。

主控部分原理图如下图所示:

模组的外设引脚功能,如下图所示:

NFC部分

NFC通信使用的是恩智浦公司生产的NT3H1101芯片,此芯片支持I2C通信,支持可配置的现场检测引脚,内部配备有EEPROM存储芯片,允许在RF和I2C之间快速传出数据,不收EEPROM内存的写入周期进行限制。

基本参数信息:

OLED部分

SSD1306是一款单片CMOS OLED/PLED驱动器,具有有机/聚合物发光控制器二极管点阵图形显示系统。它由128个段和64个公共部分组成。这个IC是为普通阴极型OLED面板设计。

SSD1306内置对比度控制、显示RAM和振荡器,减少了外部组件和功耗。它有256级亮度控制。数据/命令是从通用单片机通过硬件可选的6800/8000系列兼容并行接口发送,I2C接口或串行外围接口。它适用于许多紧凑型便携式应用程序,例如手机副显示屏、MP3播放器、计算器等。

采用SSD1306芯片进行驱动0.96寸OLED显示屏,本显示屏使用黄+蓝屏幕进行显示。

基本参数信息:

IO扩展部分

PCF8574是一款并口扩展芯片,它的引脚图如下图所示,它与主控芯片通过IIC接口进行通讯。需要注意的是,PCF8574有多种封装,下图所示只是其中一种,是PDSO-G16封装的芯片引脚图。

在这个芯片的引脚中,VCC和GND为电源和地引脚,A0~A2为从器件地址,通过引脚的输入电平,可以配置地址为0~7,因此一个IIC总线上最多可以挂载8片PCF8574芯片。SDA和SCL为IIC总线的数据和时钟接口。INT为中断反馈接口。P0~P7为扩展的并口,可以用作输入或者输出

基本参数信息:

蜂鸣器部分

蜂鸣器驱动电路采用PNP三极管进行驱动,当IO扩展芯片的BUZZER引脚输出低电平的时候,蜂鸣器鸣响,反之,BUZZER引脚输出高电平的时候,关闭蜂鸣器。

驱动端

主控部分

STM32G030F6是基于ARM Cortex-M0+系列的32位处理器,主频为64MHz,它内部集成了8KB的RAM空间和32KB的Flash空间,另外还集成了I2C、IrDA、LINbus、SPI、UART\USART、DMA、I2S、POR、PWM、WDT等功能。

电源检测部分

INA219是一款具备I2C或SMBUS兼容接口的分流器和功率监测计。该器件监测分流器电压降和总线电源电压,转换次数和滤波选项可通过编程设定可编程校准值与内部乘法器相结合,支持直接读取电流值(单位:安培)。通过附加乘法寄存器可计算功率(单位:瓦)。I2C或SMBUS兼容接口具有16个可编程地址。

INA219提供两种级别:A级和B级。B级型号的精度更高和精密规范更加严格。

INA219可在0V至26V范围内感测总线中的分压。该器件由3V至5.5V单电源供电,电源的最大流耗为1mA。INA219的工作温度范围为-40℃至125℃。

电机驱动部分

我们使用两块A4950芯片实现对两路轮胎控制电机的驱动;A4950的功能与TB6612FNG类似,不同点在于:TB6612FNG有2路Pin控制电机正反转,1路PWM输入信号(也就是说一个电机需要三个引脚控制)。而A4950使用两路输入的信号差分进行正反转和速度的控制,如下图:

我们使用下面的电路图来实现电机的驱动,74HC08芯片为四路与门控制器,用于产生四路PWM差分信号,然后输入给A4950芯片进行驱动小车的直流减速电机。

JSON格式协议介绍

设备端与驱动端

表1 – 下发json格式协议:

测试示例:

Bash
// 开启小车电机
{
  "control" : {
    "power": "on"
  }
}

// 小车前进
{
  "turn": "run",
  "pwm" : {
    "L_Motor": 400,
    "R_Motor": 400
  }
}

表2 – 上传json格式数据

测试案例:

Bash
{
  "distance": 500,
  "carPower": 12000,
  "L_speed": 10,
  "R_speed": 10
}

设备端与应用端

表1 – 下发json格式数据

测试示例:

// 小车开启电机
{
  "carStatus": "on"
}
// 小车前进
{
  "carStatus": "run"
}
// 小车中速行驶
{
  "carSpeed": "middle"
}

编译运行

驱动端

1. 硬件环境:FS_Hi3861QDB驱动板、ST-Link仿真器。

2. 软件环境:keil5开发板工具、串口调试助手。

3. 源码位置:【FS_Hi3861开发板光盘资料\程序源码\综合实验源码\智能小车\驱动端\
smartCar_ups_uart_Test_v1.3
】。


编译

注意:编译驱动端工程源码的时候,需要提前安装好STM32单片机的开发环境。

1.双击打开工程源码文件夹的MDK-ARM文件夹下“smartCar_ups.uvprojx”keil5工程文件。

2.点击左上角的编译组建按钮,进行编译程序,如下图所示:

3.编译结果如下图所示:

4. 需要配置烧写工具,点击工具栏中的,进行配置ST-Link Debug模式:

5. 然后点击“Settings”,再点击“Flash Download”,勾选“Reset and Run”,添加STM32G0系列 Flash烧写算法。

烧写

注意:驱动板出厂的时候已经烧录好了固件,如果您想自己去写驱动板的程序,是需要单独购买仿真器和转接板的。

1.这里需要使用ST-Link仿真器和串口转接板,如下图所示:

2.使用1根USB转mini数据线的一端连接ST-Link仿真器,如下图所示:

3.将USB转mini数据的另一端连接电脑的USB端口,如下图所示:

4.将RJ11黑色扁平线作为ST-Link仿真器与Hi3861驱动板之间进行连接,如下图所示:

5.然后点击Keil5软件左上方的下载烧写按钮进行烧写程序。

6. 烧写完成之后,Hi3861驱动板上的运行指示灯会闪烁,说明Hi3861驱动板上程序正常运行。


设备端

7. 硬件环境:FS_Hi3861开发板、USB-TypeC线。

8. 软件环境:串口调试助手。

9. 源码位置:

1) 【FS_Hi3861开发板光盘资料\程序源码\综合实验源码\智能小车\设备端\smartCar_uart_udp

2) 【FS_Hi3861开发板光盘资料\程序源码\硬件驱动源码\bsp

3) 【FS_Hi3861开发板光盘资料\程序源码\硬件驱动源码\pahomqtt


编译

1.将smartCar_uart_udp、bsp和pahomqtt文件夹拷贝到共享文件下:

2.将smartCar_uart_udp文件夹拷贝到【
applications/sample/wifi-iot/app】目录下。

cp /mnt/hgfs/share/smartCar_uart_udp/ -r applications/sample/wifi-iot/app/

3.将bsp文件夹拷贝到【base/iot_hardware/】目录下。

cp /mnt/hgfs/share/bsp/ -r base/iot_hardware/

4.将pahomqtt文件夹拷贝到【third_party/】目录下。

cp /mnt/hgfs/share/pahomqtt/ -r third_party/

5.修改【
applications/sample/wifi-iot/app/BUILD.gn】文件。

vim applications/sample/wifi-iot/app/BUILD.gn

6.打开“
device/hisilicon/hispark_pegasus/sdk_liteos/BUILD.gn”文件,添加"
//third_party/pahomqtt:pahomqtt_static"。

7.在终端中输入“hb build -f”命令,进行编译,编译之后出现错误,如下图所示:

8.根据上述问题进行解决:打开【
device/hisilicon/hispark_pegasus/sdk_liteos/include/】目录下hi_errno.h文件,将“
#define HI_ERR_FAILURE (hi_u32)(-1)”更改为“#define HI_ERR_FAILURE (unsigned int)(-1)

9.输入“hb build -f”,再次编译后,出现报错,如下图所示:

10. 根据上述问题进行解决:打开【
device/hisilicon/hispark_pegasus/sdk_liteos/build/config/
】目录下usr_config.mk文件,将“# CONFIG_I2C_SUPPORT is not set”改为“CONFIG_I2C_SUPPORT=y”。

11. 输入“hb build -f”,再次编译,出现编译成功。

烧写

1.然后在工程源码的目录下,输入以下命令,将文件拷贝到共享目录下。

注意:ubuntu_20.04_64_bit是共享文件夹的名称。

cp out/hispark_pegasus/wifiiot_hispark_pegasus/Hi3861_wifiiot_app_allinone.bin /mnt/hgfs/ubuntu_20.04_64_bit/

2.打开【FS_Hi3861开发板光盘资料\工具软件\HarmonyOS相关工具\Hiburn】程序烧写软件,点击左上角“setting”中“com setting”选项,配置一下串口的波特率为2000000,然后点击确定,如下图所示:

3.此时需要开发本通过串口线连接电脑,电脑端的设备管理器会出现一个串口端口号,当然也可以通过烧写软件中“Refresh”按钮进行刷新,然后选择要烧写的bin文件,操作步骤如下图所示:

4.最后要选择“Auto burn”,要不然下载速度会很慢很慢。

5.会自动的添加.bin文件,添加完成之后,点击“Connect”按钮,然后复位开发板,即可开始烧写程序。烧写完成之后会有提示:

6.注意:烧写完成之后,一定要关闭串口连接,点击“DisConnect”。不然的话,当你点击复位之后,又会再次下载一次。

应用端

1.硬件环境:手机。

2.软件环境:微信开发者工具。

3.源码位置:

1) 【FS_Hi3861开发板光盘资料\程序源码\综合实验源码\智能小车\微信小程序端\hi3861_smart_car_udp

编译

1.双击打开app.wxss工程文件,即可打开微信开发者工具。

2.首先点击左上角的图标,进行扫码登录自己的微信。

3.登录成功之后,填写自己的AppID。

4.点击上面的编译按钮,进行编译,然后点击预览,用手机扫码进行调试。

综合测试

手机与Hi3861开发板必须在同一个WiFi路由器下!

1.烧写Hi3861开发板的程序后,如果出现下面这种情况,请扫描上面的二维码,进行NFC配网。

2.扫描上方二维码,然后点击微信小程序中的“NFC配网界面”,进行NFC配网操作。

3.(此WiFi热点必须是具有WiFi 2.4G)输入WiFi名称和密码,然后点击“开始配置”。

4.此时会在屏幕中间出现“请靠近设备”,然后将手机靠近NFC线圈区域,进行配置NFC。

5.直到提示“写入数据成功”,然后按下开发板中“复位按键”,让单片机复位。

6.还有一种是ios系统下微信小程序不能使用NFC配置的功能时,需要按照下面步骤进行操作:

1)在ios系统的手机商店中下载“NFC Tools”NFC调试工具。

2) 然后点击“写”功能。

3) 点击“添加记录”。

4) 添加“Wi-Fi网络”信息。

5) 在“配置WiFi网络”中,选择身份验证为“WPA/WPA2-Personal”,并输入SSID和密码。

6) 然后点击“写/87字节”按钮,进行烧写。

7) 此时会弹出“贴近NFC标签”,请靠近开发板上NFC线圈部分。

8) 烧写完成之后,会在显示如下图片,说烧写NFC芯片数据成功。

7.复位按键成功之后,可以在OLED显示屏上显示获取到当前的IP地址,如下图所示:

8.打开Hi3861驱动板的时候,才可以看到当前电池的电压值。

9.打开微信小程序的“小车控制界面”,如下图所示:

10.在“小车控制界面”下,输入小车的IP地址,如下图所示:

11.输入正确之后,点击“启动或关闭小车”按钮,进行连接Hi3861开发板,连接成功时,说明有数据上传,如下图所示:

12. 接下来,就可以点击控制界面中的左转、右转、前进、后退按钮,进行测试小车的运动。

相关推荐

VBA中SQLOpen函数(vba的sql)

建议使用MicrosoftActiveX数据对象(ADO)库中的对象、方法和属性,而不是使用Xlodbc.xla加载宏中的SQLOpen和其他ODBC函数。SQLOpen建立与...

简单学Python——内置函数20——open()函数1

open()函数是Python的内置函数,用于打开和操作文件。open()函数最多可以传8个参数,但常用的只有三个:文件(file)、模式(mode)和编码(encoding)。这三个参数只有file...

聊一聊 C# NativeAOT 多平台下的函数导出

一:背景1.讲故事昨晚训练营里有一位朋友提到一个问题,说C#AOT程序能否编译为一个dll,供其他语言调用,其实这个是完全没有问题的,也确实我的的文章体系中没有涉及到这块,那今天就补充完整吧。二...

Python open函数详解(python open函数源码)

演示环境,操作系统:Win1021H2(64bit);Python解释器:3.8.10。open是Python的一个内置函数,一般用于本地文件的读写操作。用法如下。my_file=open(fi...

了解python3新特性-3(python3介绍)

以下是Python3的其他一些特性:改进了asyncio.run():Python3.7中对asyncio.run()函数进行了改进,可以方便地处理异步任务异常。新增了typing....

Python的从入门到精通的完整学习路线图

步骤1:基础我们首先学习Python的基础知识——变量、数据类型和操作符。还要学习循环和决策制定等概念:PythonVariablesPythonVariableScopeDataTypes...

从零开始学习python(4)——布尔类型

布尔类型布尔类型是一种数据类型,它的值只有真与假,在Python中用True和False来表达。我们先来IDLE中做一下测试,通过使用内建函数bool()可以直接给出相应的结果: >&...

Python内置模块及说明(python内置模块放在哪里)

模块说明Calendar该模块提供日历相关函数datetime通过多种方式操作日期和时间time时间的访问和转换string常见的字符串操作re正则表达式操作difflib计算差异的辅助工具textw...

Python中的进制转换函数详解(python各进制转换)

左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取python编程资料在编程中,经常需要在不同的进制之间转换数值,尤其是二进制、八进制、十进制和十六进制。P...

Python 中Typing,你了解多少(python typing optional)

Typing是一个功能强大的内置Python模块,它为类型提示提供运行时支持。可以强制Python在运行时进行类型检查。在了解模块的作用typing之前,需要了解动态和静态类型的编程语言。...

Python如何实现反向迭代(python怎么反向输出)

反向迭代通常是指从序列的末尾开始进行迭代。那么在Python中如何实现呢?l=[1,2,3,4,5]l.reverse()print(l)#[5,4,3,2,1]看上面这个列...

DAY4-step5 Python示例说明 round()函数

Round()Round()是python提供的内置函数。它将返回一个浮点数,该浮点数将四舍五入到指定的精度。如果未指定要舍入的小数位,则将其视为0,并将舍入到最接近的整数。语法:round(flo...

Python浮点数保留两位小数的方法(python浮点数如何取整)

技术背景在Python编程中,经常会遇到需要将浮点数保留特定小数位数的情况,比如在处理货币、统计数据等场景。然而,由于浮点数在计算机中采用二进制表示,存在精度问题,导致直接使用round函数有时无法得...

浮点数运算是否存在缺陷?(浮点数的运算结果会不会溢出)

技术背景在大多数编程语言中,浮点数运算基于IEEE754标准。该标准下,浮点数以二进制表示,本质是一个整数乘以2的幂次方。然而,像0.1(即1/10)这类分母不是2的幂次方的有理数,...

python初学者系列:奇怪的加法,结果错误

合集说明这是一个针对python3初学者的合集,将持续更新。本合集主要内容是一些代码案例,帮助初学者学习发散,主体包含知识点、结果展示、思路分析、实现流程四大模块。初学者可以根据知识点判断是否继续阅...