STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车

news/2024/11/30 14:29:37/

STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车

文章目录

    • STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车
    • 前言
  • 一、实现的功能?
  • 二、主要代码及模块讲解
    • 1.主要代码
    • 2.RX(接收端)
  • demo总体分析和代码部分解读
      • PWM驱动部分
      • 游戏摇杆ADC部分
      • NRF2401模块


前言

在电赛延期之后,用了两三天时间,从空的车模到板子的搭建,再到程序,实现了STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车 代码逻辑不难,主要是锻炼板子搭建接线、代码测试、效果运行等方面,涉及到的东西包括PWM、ADC采集、2.4G通信等
实物照片如下

在这里插入图片描述

演示视频链接如下

演示视频

一、实现的功能?

基于STM32F103ZET6系列(两块板子分别为精英版、board),(用两块精英版一样的道理,也可以自己制板,比较麻烦)。主要模块为:游戏摇杆ADC采集模块、LCD屏幕、NRF2401两个、车模一个(包括直流减速电机和转向舵机)其他包括稳压模块等
实现无线遥控小车前进后退左右转,前进后退制动速度、舵机转向角度根据摇杆控制。

二、主要代码及模块讲解

1.主要代码

TX(发送端)代码如下

while(1){	show();        //显示游戏摇柄电压值大小,方便调试LCD_ShowString(30,150,200,16,16,"NRF24L01 TX_Mode");	NRF24L01_TX_Mode(); if(NRF24L01_TxPacket(tmp_buf)==TX_OK)	//检测状态、准备发送数据{tmp_buf[1]=1;		//点灯测试数据是否成功tmp_buf[2]=2;/***********前进部分***************/if(go_speed>150&&go_speed<500)		//检测电压值tmp_buf[3]=1;			//1挡最低速、3挡最高速,实现速度调控else if(go_speed>500&&go_speed<800)tmp_buf[3]=2;else if(go_speed>800) tmp_buf[3]=3;else tmp_buf[3]=0;/***********后退部分***************/if(back_speed>150&&back_speed<500)tmp_buf[5]=1;else if(back_speed>500&&back_speed<900)tmp_buf[5]=2;else if(back_speed>900) tmp_buf[5]=3;else tmp_buf[5]=0;/***********左转部分***************/if(left_speed>150&&left_speed<650)tmp_buf[7]=1;else if(left_speed>650&&left_speed<1000)tmp_buf[7]=2;else if(left_speed>1000) tmp_buf[7]=3;else tmp_buf[7]=0;/***********右转部分***************/if(right_speed>50&&right_speed<550)tmp_buf[9]=1;else if(right_speed>550&&right_speed<900)tmp_buf[9]=2;else if(right_speed>900) tmp_buf[9]=3;else tmp_buf[9]=0;tmp_buf[32]=0;//加入结束符}

2.RX(接收端)

代码如下:

while(1){	// show();       //调试检查 LCD_ShowString(30,150,200,16,16,"NRF24L01 RX_Mode");	LCD_ShowString(30,170,200,16,16,"Received DATA:");	NRF24L01_RX_Mode();		  while(1){         if(NRF24L01_RxPacket(tmp_buf)==0)//检测状态、准备接收{tmp_buf[32]=0;//加入结束符LCD_ShowxNum(60,210,tmp_buf[3],4,16,0);	//LCD显示状态、方便调试LCD_ShowxNum(60,240,tmp_buf[5],4,16,0);LCD_ShowxNum(60,270,tmp_buf[7],4,16,0);LCD_ShowxNum(60,300,tmp_buf[9],4,16,0);}else delay_us(100);/***********前进部分***************/	if(tmp_buf[3]==1) go_speed = 500;else if(tmp_buf[3]==2) go_speed = 800;else if(tmp_buf[3]==3) go_speed = 1200;else go_speed = 0;/***********后退部分***************/if(tmp_buf[5]==1) back_speed = 500;else if(tmp_buf[5]==2) back_speed = 800;else if(tmp_buf[5]==3) back_speed = 1200;else back_speed = 0;/***********转动部分***************/if(tmp_buf[7]==1) left_speed = 1050;//此部分代码后面有解释else if(tmp_buf[7]==2) left_speed = 850;else if(tmp_buf[7]==3) left_speed = 650;if(tmp_buf[9]==1) left_speed = 1450;else if(tmp_buf[9]==2) left_speed = 1650;else if(tmp_buf[9]==3) left_speed = 1800;if(tmp_buf[7]==0&&tmp_buf[9]==0) left_speed = 1250;//TIM_SetCompare3(TIM3,1250); //pwm输出,制动前进、后退、左转、右转TIM_SetCompare1(TIM3,go_speed);//前进TIM_SetCompare2(TIM3,back_speed);//后退TIM_SetCompare3(TIM3,left_speed);//角度舵机转动};	

demo总体分析和代码部分解读

这个项目总体来说很简单,但自己从车模到代码的编写和测试都需要一定的时间和细心程度

PWM驱动部分

无论是电机驱动还是舵机转角,都需要pwm进行驱动,此demo使用STM32的TIM3定时器输出思路pwm进行调速,具体代码见工程包,网上也有很多。(第四路未用到)

游戏摇杆ADC部分

这部分主要是要通过两路ADC读取一个摇杆的电压值,demo中两个摇杆一共需要四个I/O口来读取电压值,并不是每一个I/O都能当作AD的(不要乱用),此部分要查资料,网上也有很多,详情看代码包

NRF2401模块

这个模块是经典的2.4G通信模块,比起LORA能更快的上手,这个模块的驱动代码网上都有,主要说我开发过程遇到的坑,tmp_buf这个数组是U8型的,看清楚不要传不匹配的数据,这个数组的每一个大小是8位的,也就是说传值的大小只能是0~255(8位二进制最大值),这也是我为什么速度的调控先传1 2 3 0 的档位,接收的时候再根据档位去调控应该输出的速度大小。这个模块一个要检测寄存器的位,就是NRF24L01_TxPacket(tmp_buf)==TX_OK
NRF24L01_RxPacket(tmp_buf)==0
这两句

/最后,代码包链接如下*******/

代码包


http://www.ppmy.cn/news/481341.html

相关文章

正点原子MiniFly遥控器V1.1—电路图原理分析

MiniFly 遥控器系统框架&#xff1a; STM32F103C8T6 作为控制 MCU&#xff0c; 外围硬件主要有蓝色 0.96 寸 OLED、 NRF24L01、 RF 功率放大、 2.4G 天线、 摇杆、按键、 蜂鸣器、 LED 等。 1&#xff0c;MCU STM32F103C8T6&#xff1a; 32-bit Cortex-M3 内核芯片&#xff0c…

【GESP】2023年03月图形化一级 -- 问路

文章目录 问路1. 准备工作2. 功能实现3. 设计思路与实现&#xff08;1&#xff09;角色、舞台背景设置a. 角色设置b. 舞台背景设置 &#xff08;2&#xff09;脚本编写a. 角色&#xff1a;Averyb. 角色&#xff1a;Dee 4. 评分标准 问路 1. 准备工作 &#xff08;1&#xff09…

大疆开发板A型基于HAL库使用RoboMaster 遥控器(DT7DR16)及Debug在线调试

资料官网&#xff1a;RoboMaster 机甲大师赛 1.查看开发板A型芯片资料 2.查看遥控器用户手册 3.查看开发板A型DBUS接口说明 4.查看DBUS参数&#xff08;配置STM32CubeMX需要&#xff09; 5.配置STM32CubeMX 1&#xff09;新建new project&#xff0c;选择开发板A型芯片型号 …

【Android】蓝牙设备--游戏手柄作为遥控门铃工具试验

在之前的讨论中&#xff0c;考虑了app间通过发起连接提示&#xff0c;来实现类似的门铃提醒功能&#xff0c; 【Android】蓝牙门铃的实现--蓝牙设备的扫描_aaajj的博客-CSDN博客 但是app的操作不如按钮操作方便&#xff0c; 利用蓝牙手柄的connect广播&#xff0c;我们可以把…

基于STM32的最简易蓝牙遥控小车

基于STM32的最简易蓝牙遥控小车 硬件准备硬件连接STM32cubeMX配置代码部分视频演示 本篇博客主要针对的读者为有一定单片机基础&#xff0c;但是第一次自制蓝牙遥控小车的小白同学&#xff0c;所用物件型号选择的是作者最熟悉、最常用的&#xff0c;老手请自行发挥。 硬件准备 …

基于stm32f103的简易自制手柄

文章目录 前言一、模块准备二、电路走线三、通信协议总结 前言 这是wtr第一版自制手柄。 软件部分在github上&#xff1a; https://github.com/zhuzhengming/wtr_diy_joystick#wtr_diy_joystick 一、模块准备 模块包括stm32f103最小系统板&#xff0c;无线as32-ttl串口模块…

电子模块 001 --- 遥杆 JoyStick

电子模块 001 — 遥杆 JoyStick — Ongoing — 2016年8月31日 星期三 遥杆 JoyStick 模块 今天介绍&#xff1a;JoyStick 电子模块。 模块名称&#xff1a; 双轴按键摇杆 PS2游戏摇杆 控制杆 JoyStick 电子积木 电路板尺寸&#xff1a; 3.2*3.5CM 模块介绍&#xff1a; …

N1盒子使用T1遥控和电视一起开关机以及按键设置

N1盒子使用T1遥控按键设置1. 个人需求 家中没什么人看电视了&#xff0c;&#xff0c;其他时候电视基本不开&#xff0c;所以觉得每个月交24大洋不太划算。家里是移动免费的100兆宽带&#xff0c;自从不小心接触到神盒N1后&#xff0c;发现看电视原来可以不需要广电的盒子。那咱…