OpenHarmony轻量系统开发【13】鸿蒙小车开发

859 篇文章 5 订阅
608 篇文章 11 订阅

13.1 小车介绍

基于鸿蒙系统 + Hi3861 的WiFi小车

首先,我们得有一套WiFi小车套件,其实也是Hi3861 加上电机、循迹模块、超声波等模块。

小车安装完大概是这样:

13.2 电机驱动

我们这里先只做最简单的,驱动小车的电机,让小车跑起来。

电机的驱动板如下图,目前电机驱动芯片用的是L9110S芯片。

典型的应用电路如下图:

我们可以看到,如果要控制电机,我们芯片至少需要2路PWM信号,一路用于控制正转,一路用于控制反转。

然后我们小车有两个轮子,需要两个电机,所以我们需要 4 路IO口

基于鸿蒙系统 + Hi3861 的wifi小车,可以通过电脑、手机控制

需要注意,实际代码并没有使用PWM,而是直接IO控制。

void pwm_init(void)
{
	IoTGpioInit(IO_NAME_GPIO_0);
	IoTGpioInit(IO_NAME_GPIO_1);
	IoTGpioInit(IO_NAME_GPIO_9);
	IoTGpioInit(IO_NAME_GPIO_10);

	//寮曡剼澶嶇敤
	//hi_io_set_func(IO_NAME_GPIO_0, 0); 
    //hi_io_set_func(IO_NAME_GPIO_1, 0); 	
	//hi_io_set_func(IO_NAME_GPIO_9, 0); 
    //hi_io_set_func(IO_NAME_GPIO_10, 0); 
}

//鍋滄
void pwm_stop(void)
{
	//鍏堝仠姝WM
    gpio_control(GPIO0, IOT_GPIO_VALUE1);
    gpio_control(GPIO1, IOT_GPIO_VALUE1);
    gpio_control(GPIO9, IOT_GPIO_VALUE1);
    gpio_control(GPIO10, IOT_GPIO_VALUE1);
}
void car_stop(void)
{
	car_info.cur_status = car_info.go_status;

	printf("pwm_stop \r\n");

	pwm_stop();
}

//鍓嶈繘
void pwm_forward(void)
{
	//鍏堝仠姝WM
    gpio_control(GPIO0, IOT_GPIO_VALUE1);
    gpio_control(GPIO1, IOT_GPIO_VALUE0);
    gpio_control(GPIO9, IOT_GPIO_VALUE1);
    gpio_control(GPIO10, IOT_GPIO_VALUE0);

	//鍚姩A璺疨WM
	//左轮
	//IoTPwmStart(PWM_PORT_PWM3, 64000, 64000);
	//右轮
	//IoTPwmStart(PWM_PORT_PWM0, 64000, 64000);
}
void car_forward(void)
{
	if(car_info.go_status != CAR_STATUS_FORWARD)
	{
		//鐩存帴閫€鍑?
		return ;
	}
	if(car_info.cur_status == car_info.go_status)
	{
		//鐘舵€佹病鏈夊彉鍖栵紝鐩存帴鎺ㄥ嚭
		return;
	}

	car_info.cur_status = car_info.go_status;

	printf("pwm_forward \r\n");

	pwm_forward();

	step_count_update();
}

//鍚庨€€
void pwm_backward(void)
{
	//鍏堝仠姝WM
    gpio_control(GPIO0, IOT_GPIO_VALUE0);
    gpio_control(GPIO1, IOT_GPIO_VALUE1);
    gpio_control(GPIO9, IOT_GPIO_VALUE0);
    gpio_control(GPIO10, IOT_GPIO_VALUE1);

	//鍚姩A璺疨WM
	//IoTPwmStart(PWM_PORT_PWM4, 64000, 64000);
	//IoTPwmStart(PWM_PORT_PWM1, 64000, 64000);
}
void car_backward(void)
{
	if(car_info.go_status != CAR_STATUS_BACKWARD)
	{
		//鐩存帴閫€鍑?
		return ;
	}
	if(car_info.cur_status == car_info.go_status)
	{
		//鐘舵€佹病鏈夊彉鍖栵紝鐩存帴鎺ㄥ嚭
		return;
	}

	car_info.cur_status = car_info.go_status;

	printf("pwm_backward \r\n");

	pwm_backward();

	step_count_update();
}

//宸﹁浆
void pwm_left(void)
{
	//鍏堝仠姝WM
    gpio_control(GPIO0, IOT_GPIO_VALUE0);
    gpio_control(GPIO1, IOT_GPIO_VALUE0);
    gpio_control(GPIO9, IOT_GPIO_VALUE1);
    gpio_control(GPIO10, IOT_GPIO_VALUE0);

	//鍚姩A璺疨WM
	//IoTPwmStart(PWM_PORT_PWM0, 64000, 64000);

}
void car_left(void)
{
	if(car_info.go_status != CAR_STATUS_LEFT)
	{
		//鐩存帴閫€鍑?
		return ;
	}
	if(car_info.cur_status == car_info.go_status)
	{
		//鐘舵€佹病鏈夊彉鍖栵紝鐩存帴鎺ㄥ嚭
		return;
	}

	car_info.cur_status = car_info.go_status;

	printf("pwm_left \r\n");

	pwm_left();

	step_count_update();
}

//鍙宠浆
void pwm_right(void)
{
	//鍏堝仠姝WM
    gpio_control(GPIO0, IOT_GPIO_VALUE1);
    gpio_control(GPIO1, IOT_GPIO_VALUE0);
    gpio_control(GPIO9, IOT_GPIO_VALUE0);
    gpio_control(GPIO10, IOT_GPIO_VALUE0);

	//鍚姩A璺疨WM
	//IoTPwmStart(PWM_PORT_PWM3, 64000, 64000);
}
void car_right(void)
{
	if(car_info.go_status != CAR_STATUS_RIGHT)
	{
		//鐩存帴閫€鍑?
		return ;
	}
	if(car_info.cur_status == car_info.go_status)
	{
		//鐘舵€佹病鏈夊彉鍖栵紝鐩存帴鎺ㄥ嚭
		return;
	}

	car_info.cur_status = car_info.go_status;

	printf("pwm_right \r\n");

	pwm_right();

	step_count_update();
}

最后,要使用pwm功能,我们需要修改

device/soc/hisilicon/hi3861v100/sdk_liteos/build/config/usr_config.mk

增加这两行,这里是打开PWM功能

CONFIG_PWM_SUPPORT=y

CONFIG_PWM_HOLD_AFTER_REBOOT=y

13.3 WiFi控制部分

我们在小车上面简单编写一个UDP程序,监听50001端口号。这里使用的通信格式是json,小车收到UDP数据后,解析json,并根据命令执行相应的操作,例如前进、后退、左转、右转等,代码如下:

电脑端,使用C#编写一个测试程序,可以手动输入小车的IP地址,也可以不输入IP地址,这样,电脑端程序会发送广播包给小车,也可以起到控制的功能。

13.4 WiFi热点连接

注意,我这里WiFi小车固件默认连接热点的ssid是:

读者需要自己修改成自己的热点。

文件:sta_entry.c

小车的源码,C#控制端的代码均开源,大家可以自由修改,发挥自己的想象,创造出更厉害炫酷的DIY产品。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于STM32F103R6的小车系统开发,是一项将STM32F103R6单片机和相关硬件组件结合起来,实现一个功能完善的小车系统的过程。 首先,我们需要准备STM32F103R6单片机开发板,该开发板具有丰富的外设接口和强大的计算能力,非常适合用于小车系统开发。然后,我们需要根据需求选择合适的电机驱动模块、传感器模块等硬件组件,以实现小车的基本功能,如运动控制、距离检测等。 在软件方面,我们可以使用Keil MDK开发环境来进行程序开发。首先,我们需要编写适配STM32F103R6的驱动程序,以实现对各个硬件模块的控制。例如,编写电机驱动程序,可以通过PWM信号控制电机的转速和方向;编写传感器驱动程序,可以读取传感器的数据。然后,我们可以编写控制算法,用于实现小车的自主导航、避障等功能。最后,我们可以编写上位机程序,通过串口或无线通信,与小车进行通信,监控和控制其运行。 在开发过程中,我们需要充分发挥STM32F103R6单片机的性能,合理利用中断、定时器等高级特性,提高系统的实时性和稳定性。同时,我们需要对电源管理进行合理设计,以确保系统的稳定供电和节能。 综上所述,基于STM32F103R6的小车系统开发需要综合考虑硬件和软件方面的因素,合理设计系统架构和程序流程,最终实现一个功能完善的小车系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值