前言:

之前为做毕设一直在网上浏览关于STM32单片机的DIY项目,大多数设计都是关于智能家居方面的应用,通过浏览不同平台的内容发现了一个采用超声波测距并通过屏幕反馈障碍物位置的模拟雷达设计,感觉很有创意,但网上关于此项目的内容大多都是采用arduino开发,不符合我的主控要求。

在查询资料的过程中发现了一篇大佬混分巨兽龙某某写的文章:基于STM32的超声波雷达项目【可拟合构建平面地图】(代码开源)_混分巨兽龙某某的博客-CSDN博客_基于stm32的超声雷达设计https://blog.csdn.net/black_sneak/article/details/127050718        他的雷达设计是基于STM32F103ZET6主控,采用HAL库开发,搭配2.4寸TFT-LCD屏反馈信息。我有一块ST7735驱动的1.8'TFT-LCD屏,就在之前的屏幕例程里进行改动,并复刻了大佬的UI设计,改为采用标准外设库开发,主控用了比较经济的C8T6最小系统板。

由于本人也是一名小白,发表此博客仅用于分享基于该平台的超声波模拟雷达程序,设计原理建议参考上面我分享的这位博主的文章,写的非常全面与详细。

制作超声波模拟雷达的硬件清单:

超声波模拟雷达硬件列表:
(1)STM32F103C8T6最小系统板 X1
(2)1.8'TFT-LCD屏 X1
(3)SG90舵机 X1
(4)HC-SR04超声波模块 X1
(5)超声波模块支架 X1
(6)面包板/洞洞板及排线等

实物效果图:

接线指引:

TFT-LCD接口:

外设↓​​​​​​​         主控↓
GND            地
VCC        3.3V/5V
SCL           PA5
SDA           PA7
RST           PB0
DC             PB1
CS             PA4 
BLK          PB10

HC-SR04接口:

外设↓​​​​​​​         主控↓

VCC            5V
Trig            PA0
Echo          PA1

GND            地

SG90接口:

外设↓​​​​​​​         主控↓
VCC            5V
信号           PB6
GND            地

整体设计流程:

主要程序:

主函数(main.c)

#include "stm32f10x.h"
#include "delay.h"
#include "QDTFT_demo.h"
#include "Lcd_Driver.h"
#include "GUI.h"
#include "HCSR04.h"
#include "tim.h"
#include "radar.h"
#include "servo.h"int main(void)
{  int i=50;SystemInit();  //System init.delay_init(72);//Delay init.Timer_Init(); //初始化定时器Lcd_Init();  //LCD屏初始化HC_SR04_Init(); //初始化超声波测距模块TIM4_CH1_PWM_Init(2000,720);//PWM频率=72000000/2000/720=50hz=20msLCD_LED_SET; //通过IO控制背光亮Lcd_Clear(BLACK);   //画雷达图radar_picture();while(1){//TIM_SetCompare1(TIM4,250); // 250/2000*20ms=2.5msint a=0;int d=0;int Distance_mm=0;        if(i==50) //0-180°循环{for(i=50;i<250;i++){Distance_mm=sonar_mm(); //获取超声波数据LCD_ShowNum(37,114,Distance_mm,3); //显示距离值               TIM_SetCompare1(TIM4,i); //控制舵机变化a=(i-50)*180/200; //角度随舵机变化LCD_ShowNum(37,2,a,3); //显示角度值if(Distance_mm>500){Distance_mm=0;} //限制测距最大值d=Distance_mm*0.19; //通过测距判断障碍物方位Radarline2(a,d); //显示障碍物方位(打点模拟)delay_ms(100);}   }if(i==250) //180-0°循环{       for(i=250;i>50;i--){Distance_mm=sonar_mm();LCD_ShowNum(37,114,Distance_mm,3);                  TIM_SetCompare1(TIM4,i);a=(i-50)*180/200;LCD_ShowNum(36,2,a,3);if(Distance_mm>500){Distance_mm=0;}d=Distance_mm*0.19;Radarline2(a,d);delay_ms(100);}  Lcd_Clear(BLACK); //清屏radar_picture(); //刷新雷达图} }}

雷达UI(radar.c)

#include "stm32f10x.h"
#include "Lcd_Driver.h"
#include "GUI.h"
#include "delay.h"
#include "bmp.h"
#include "math.h"
#include "radar.h"void Radarline(double k,int r) //画斜线:(角度,长度)
{double x,y;x=80+r*(double)cos(k/180*3.1415926);  y=108-r*(double)sin(k/180*3.1415926);Gui_DrawLine(80,108,x,y,GREEN); //原点坐标}void Radarline2(double k,int r)
{double x,y;x=80+r*(double)cos(k/180*3.1415926);  y=108-r*(double)sin(k/180*3.1415926);LCD_DrawPoint2(x,y,RED);
}void radar_picture()//雷达图
{//画圆:(圆心坐标,半径,颜色)Gui_Circle(80,108,76,GREEN);Gui_Circle(80,108,57,GREEN);Gui_Circle(80,108,38,GREEN);Gui_Circle(80,108,19,GREEN);//画斜线:(角度,长度)Radarline(30,85);Radarline(60,85);Radarline(90,85);Radarline(120,85);Radarline(150,85);//画矩形:目的是覆盖掉圆的下半部分rectangle(0,108,160,128,BLACK); //(起点坐标,终点坐标,颜色)Gui_DrawLine(0,108,160,108,GREEN); //画横坐标轴//数据信息/*字库采用甲乙丙丁代表显示不同位置的°(度)*/Gui_DrawFont_GBK16(0,112,GREEN,BLACK,"距离");Gui_DrawFont_GBK16(30,112,GREEN,BLACK,":");Gui_DrawFont_GBK16(0,0,GREEN,BLACK,"角度");Gui_DrawFont_GBK16(30,0,GREEN,BLACK,":");   Gui_DrawFont_GBK16(61,110,GREEN,BLACK,"mm");  Gui_DrawFont_GBK16(61,0,GREEN,BLACK,"乙"); //显示°LCD_ShowNum(0,46,150,3);  //150°数值Gui_DrawFont_GBK16(18,32,GREEN,BLACK,"甲"); //150°符号LCD_ShowNum(38,22,120,3); //120°数值Gui_DrawFont_GBK16(56,8,GREEN,BLACK,"甲");  //120°符号LCD_ShowNum(83,20,90,2);   //90°数值Gui_DrawFont_GBK16(97,18,GREEN,BLACK,"乙");    //90°符号LCD_ShowNum(124,32,60,2);  //60°数值Gui_DrawFont_GBK16(133,17,GREEN,BLACK,"甲"); //60°符号LCD_ShowNum(140,49,30,2);  //30°数值Gui_DrawFont_GBK16(141,34,GREEN,BLACK,"丁"); //30°符号      Gui_DrawFont_GBK16(80,0,GREEN,BLACK,"超声波雷达");
}

雷达UI(radar.h)

#ifndef __RADAR_H
#define __RADAR_Hvoid Radarline(double k,int r);
void Radarline2(double k,int r);
void radar_picture();#endif

本人接触STM32平台也不久,一些地方写的可能不完善,欢迎各位大佬批评指正。大家也可以点赞支持一下本博主,如果有需要私信我分享出完整工程 。

基于STM32F103C8T6的超声波模拟雷达设计。【C8T6最小系统板+标准固件库+1.8‘TFT-LCD屏】相关推荐

  1. 【毕设狗】【单片机毕业设计】基于单片机的超声波测距系统的设计

    软件安装: Keil:点击下载 Proteus:点击下载 AD:点击下载 Visio:点击下载 设计简介: 本设计是基于单片机的超声波测距系统的设计,主要实现以下功能: 实现通过DS18B20测量当前 ...

  2. 基于STM32F407+RFID的模拟公交车刷卡收费系统小项目

    BusChargeSystem 项目介绍 基于STM32F407+RFID的模拟公交车刷卡收费系统 开源仓库地址: github:https://github.com/DaXiongRen/BusCh ...

  3. 一款集成ST-link下载及虚拟串口的STM32F103C8T6最小系统板设计

    前言 在以前的STM32单片机应用中,经常使用STM32F103C8T6最小系统板(小蓝板)作为主控.程序下载和串口交互都需要额外器件和接线,程序下载的话要用到ST-link,串口交互用到USB-TT ...

  4. stm32核心板可以点亮灯吗_利用STM32F103C8T6最小系统板点亮流水灯

    后台网友建议制作一个流水灯,正好发现自己有之前购买的STM32F103C8T6核心板,今天搭建一个流水灯,正好学习一下STM32 GPIO输出如何实现,将来驱动蜂鸣器.继电器等都会使用的. 流水灯相当 ...

  5. stm32f103c8t6最小系统板+nrf24l01制作简易船模

    前言: 大二兴趣使然参加了学校的船模设计比赛,也算是第一次正式比赛的经验,一番努力下来也算是有所收获,虽说现在船已经不在身边,但还是想凭着记忆把制作过程捋一遍,就当是记录学习过程吧(该文章仅供参考,相 ...

  6. 【8088】基于8088最小系统板的打地鼠游戏实现【简】

    文章目录 研究目的及意义 8088最小系统板的打地鼠游戏具有以下优势: 研究内容和方法 接口板 上位机软件 8080最小系统板 研究目的及意义 随着社会的发展进步,电子技术的不断发展创新,为了紧跟快速 ...

  7. stm32f103c8t6最小系统电路原理图_嵌入式单片机之STM32F103C8T6最小系统板电路设计参考...

    .STM32F103C8T6最小系统板电路设计 一.电源部分 设计了一个XH插座,以便使用3.7V锂电池供电,接入电压不允许超过6V. 二.指示灯部分 电源指示灯可以通过一个短路帽控制亮灭,以达到节电 ...

  8. 最全最小系统板原理图设计实操(涉及电容、电阻选型)

    cw32小蓝板 文章目录 @[toc] 1 供电 1.1 type-c电源供电 1.2 LDO变电压 1.2.1 LDO(dropout) 1.2.2 滤波电容 1 电容基本模型 2 电容阻抗曲线 3 ...

  9. (STM32CubeMx生成HAL库)STM32F103C8T6最小系统板,4个按键分别控制42混合步进电机启停、变向、加减速

    用的定时器1通道1生成pwm脉冲,改变ARR值改变脉冲频率从而实现调速,采用按键中断控制 直接上图 引脚定义: PA5 EN 使能   PA7 DIR/CW    方向 PA8 PUL/CLK     ...

最新文章

  1. 微信小程序实时聊天之WebSocket
  2. 如何在Kubernetes集群动态使用 NAS 持久卷
  3. C#各种数组直接的数据复制/转换
  4. 阻止默认行为是配合passive使用
  5. 抽象类(c++细节篇九)
  6. 事编计算机网络管理专技如何评级,事业单位管理和专技岗位有什么区别?哪个有前途?...
  7. 第一次ScrumMeeting博客:团队任务分解
  8. 动词变名词的变化规则_动词过去式变化规则 - 点评英语网
  9. 下拉菜单,防鼠标反复触发
  10. 学英语(4)---出门在外常用的英语句子
  11. 搭建Ooracle RAC 学习环境之---集群软件安装
  12. wordpress安装后勿忘删除install.php
  13. pku 2387 Til the Cows Come Home
  14. 【渝粤教育】国家开放大学2018年秋季 2786T初级西方经济学 参考试题
  15. sinx泰勒展开_利用泰勒公式求极限,函数需要展开到第几阶?
  16. 苹果公司发布iPhone 5s和iPhone 5c
  17. Python计算机二级考试,二十来天的备考,奥利给!【已完结】
  18. SpringBoot系列之(二):1.使用SpringBoot
  19. Caché 算法与数据结构
  20. 3、如何理解超平面?

热门文章

  1. 2022-2028全球与中国锂离子电池回收市场现状及未来发展趋势
  2. GamingAnywhere 一:GA初览
  3. 计算机 交换机和IP/Mac地址
  4. ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for 653 secon
  5. Internet协议栈 TCP/IP模型 、以太网封装以及解封装过程、物理层、链路层、网络层、传输层、应用层的作用 OSI七层模型
  6. 影响搜索权重的因素讲解、怎样提高搜索权重
  7. 最受程序员欢迎的公司榜单发布:2015 IT人才招聘趋势分析
  8. Node.js MySQL连接数据库 Error: Cannot enqueue Handshake after invoking quit.
  9. 马化腾马云先后声明发展区块链:风口又来了?
  10. ERROR 1226 (42000):User 'root' has exceeded the 'max_questions' resource (current value: 2)