STM32项目分享:智能小区充电桩系统

news2024/11/25 10:26:19

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板打样焊接图

五、程序设计 

六、实验效果 

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV19B421B7x2/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末) 

二、项目简介

1.功能详解

基于STM32的智能小区充电桩系统。功能如下:

  1. 车辆进出数量记录:光电传感器采集记录车辆出入个数
  2. LED指示灯:车辆出入时闪烁提醒
  3. 环境温湿度采集:SHT-30采集环境温湿度
  4. 危险气体报警:MQ-7判断危险气体是否超标
  5. OLED显示:显示进出车辆个数、温湿度信息和一氧化碳浓度
  6. 蜂鸣器报警:温湿度、危险气体超过阈值范围报警
  7. 机智云APP:手机端app远程监视数据、节阈值与控制报警模式开关

2.主要器件

  • STM32F103C8T6最小系统板
  • OLED显示屏(4针I2C协议)
  • SHT-30温湿度传感器
  • 光电红外传感器
  • MQ-7一氧化碳传感器
  • 蜂鸣器

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板打样焊接图

五、程序设计 

int main(void)
{
  /* USER CODE BEGIN 1 */
    char car_str[32];
    char car_exit_str[32];
    char gas_str[32];
    char temp_str[32];
    char humi_str[32];

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM2_Init();
  MX_USART2_UART_Init();
  MX_ADC1_Init();
  MX_I2C1_Init();
  MX_TIM3_Init();
  MX_USART1_UART_Init();
  /* Initialize interrupts */
  MX_NVIC_Init();
  /* USER CODE BEGIN 2 */
    timerInit();
    uartInit();
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(0, 0, "Charging Safety", 16);
    OLED_ShowString(38, 2, "System", 16);
    OLED_ShowString(0, 4, "Gas:", 16);
    OLED_ShowString(45, 4, "0", 16);
    OLED_ShowString(0, 6, "T:", 16);
    OLED_ShowString(20, 6, "0.0", 16);
    OLED_ShowString(65, 6, "H:", 16);
    OLED_ShowString(85, 6, "0.0", 16);
    userInit();
    gizwitsInit();
    SHT30_reset();
    if(SHT30_Init() != HAL_OK) {
    printf("sht30 init fail.\n");
    }
    
    timer_init(&timer1, timer1_callback, 1000, 1000); //1s loop
	timer_start(&timer1);
    GIZWITS_LOG("MCU Init Success , SoftVersion = %s\r\n",SOFTWARE_VERSION);
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
    
    key1LongPress();
    
    //key1ShortPress();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
    while (1)
    {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
        userHandle();
        gizwitsHandle((dataPoint_t *)&currentDataPoint);
        timer_loop();
        uint32_t car_num = get_current_enter_car();
        memset(car_str, 0, 32);
        snprintf(car_str, 32, "%-5d", car_num);
        //OLED_ShowString(85, 0, car_str, 16);
        uint32_t car_exit_num = get_current_exit_car();
        memset(car_exit_str, 0, 32);
        snprintf(car_exit_str, 32, "%-5d", car_exit_num);
        //OLED_ShowString(85, 2, car_exit_str, 16);
        uint16_t gas = mq2_get_gas();
        memset(gas_str, 0, 32);
        snprintf(gas_str, 32, "%-5d", gas);
        OLED_ShowString(45, 4, gas_str, 16);
        //显示温度和湿度
        float temp = sht3x_get_temp();
        memset(temp_str, 0, 32);
        snprintf(temp_str, 32, "%.1f", temp);
        OLED_ShowString(20, 6, temp_str, 16);
        float humi = sht3x_get_humi();
        memset(humi_str, 0, 32);
        snprintf(humi_str, 32, "%.1f", humi);
        OLED_ShowString(85, 6, humi_str, 16);
        
        //阈值检测
        if (global_mode == 0) {
            continue;
        }
        //温湿度阈值超标告警
        if (humi > max_humi && max_humi != 0.0) {
            beep_on();
        } else if (temp > max_temp && max_temp != 0.0) {
            beep_on();    
        } else if (humi < min_humi && min_humi != 0.0) {
            beep_on();
        } else if (temp < min_temp && min_temp != 0.0) {
            beep_on();    
        } else if (smoke_value > max_gas && max_gas != 0.0){
            beep_on();
        } else {
            beep_off();
        }
    }
  /* USER CODE END 3 */
}

六、实验效果 

七、资料内容

项目分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1817168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DOM-事件

一、事件3要素&#xff1a;事件源&#xff0c;事件类型&#xff0c;事件处理程序 1.事件源&#xff1a;触发对象按钮 2.事件类型&#xff1a;如何让触发&#xff0c;是点击onclick还是鼠标经过&#xff0c;键盘按下。 3.事件处理程序&#xff1a;通过一个函数赋值完成 <…

如何从零训练多模态大模型(预训练方向)

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

锌,能否成为下一个“铜”?

光大期货认为&#xff0c;今年以来&#xff0c;市场关注锌能否接棒铜价牛市。铜需求增长空间大&#xff0c;而锌消费结构传统&#xff0c;缺乏新亮点。虽然在供应的扰动上锌强于铜&#xff0c;但因需求乏善可陈&#xff0c;金融属性弱势&#xff0c;锌很难接棒铜&#xff0c;引…

Vue--》打造细腻颗粒感 —— 细分组件颗粒图

写文背景&#xff1a;当涉及到前端开发时&#xff0c;我们经常会发现自己在不同的组件中复用相似的逻辑&#xff0c;在过去我们可能会通过混入、高阶组件或者全局组件等方式来实现代码的复用&#xff1b;或者一个组件逻辑太多&#xff0c;写出了超多的响应式ref数据和五花八门的…

NHANES数据库及应用

NHANES数据库使用 NHANES - National Health and Nutrition Examination Survey Homepage (cdc.gov) 保姆级NHANES数据库使用教程 - 哔哩哔哩 (bilibili.com) 该数据库所涉及的参与者的死亡状况 &#xff1a;Data Access - National Death Index (cdc.gov) TyG对CVD的影响研…

Ubuntu基础-vim编辑器

目录 前言: 一. 安装 二. 配置 三. 基本使用 1.使用 Vim 编辑文本文件 2.代码编辑 3.多窗口编辑 四. 总结 前言: Vim 是从 VI 发展出来的一个文本编辑器&#xff0c;具有代码补充、错误跳转等功能&#xff0c;在程序员中被广泛使用。它的设计理念是命令的组合&#xff…

LeetCode | 27.移除元素

这道题的思路和26题一模一样&#xff0c;由于要在元素组中修改&#xff0c;我们可以设置一个index表示目前要修改原数组的第几位&#xff0c;由于遍历&#xff0c;访问原数组永远会在我们修改数组之前&#xff0c;所以不用担心数据丢失的问题&#xff0c;一次遍历数组&#xff…

分布式物联网平台特点

随着物联网&#xff08;IoT&#xff09;技术的飞速发展&#xff0c;我们正步入一个万物互联的新时代。在这个时代&#xff0c;设备、数据和服务的无缝集成是实现智能化的关键。分布式物联网平台作为这一进程的核心&#xff0c;正在成为构建智能世界的基石。 一、分布式物联网平…

AcWing 477:神经网络 ← 拓扑排序+链式前向星

【题目来源】https://www.acwing.com/problem/content/479/【题目描述】 人工神经网络&#xff08;Artificial Neural Network&#xff09;是一种新兴的具有自我学习能力的计算系统&#xff0c;在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。 对神经网络的研究…

ansible离线安装docker

docker简介&#xff1a; Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中。这个容器可以在任何支持Docker的机器上运行&#xff0c;确保了应用在不同环境中的一致性。 网上有很多在线ansible安装docker的&…

决策树 #数据挖掘 #Python

拓展&#xff1a; sklearn简介&#xff1a; sklearn&#xff08;Scikit-learn&#xff09;是一个广泛使用的Python机器学习库&#xff0c;它是由Pedregosa等人在2011年创建的。这个库是基于NumPy和SciPy库构建的&#xff0c;提供了一系列简单易用的接口&#xff0c;用于数据预处…

从源码分析 vllm + Ray 的分布式推理流程

一、前言 随着 LLM 模型越来越大&#xff0c;单 GPU 已经无法加载一个模型。以 Qwen-14B-Chat 模型为例&#xff0c;模型权重大概 28GB&#xff0c;但是单个 NVIDIA A10 仅有 24GB 显存。如果想要在 A10 上部署 Qwen-14B-Chat 模型&#xff0c;我们需要将模型切分后部署到 2 个…

Vue2+Element-ui实现el-table表格自适应高度

效果图 新建指令 Vue.directive(height, {inserted(el, _binding, vnode) {const paginationRef vnode.context.$refs.paginationRefconst calculateHeight () > {const windowHeight window.innerHeightconst topOffset el.getBoundingClientRect().topconst otherEle…

怎么提高音频的播放速度?提高音频播放速度的四种方法

怎么提高音频的播放速度&#xff1f;提高音频的播放速度是在处理音频文件时经常需要面对的问题。音频播放速度的调整可以带来多种应用场景和效果&#xff0c;例如加快语音记录的回放速度以节省时间、提高听力理解和语速训练的效果等。然而&#xff0c;对于不同的音频播放工具和…

【Python】Python 2 测试网络连通性脚本

文章目录 前言1. 命令行传参2. 代码 前言 最近在只有python2的服务器上部署服务&#xff0c;不能用三方类库&#xff0c;这里出于好奇心学习下python。这里简单做个脚本&#xff0c;实现了检验网络连通性的功能&#xff08;类似于curl&#xff09;。 1. 命令行传参 使用命令…

LeetCode | 58.最后一个单词的长度

这道题要求最后一个单词的长度&#xff0c;第一个想到的就是反向遍历字符串&#xff0c;寻找最后一个单词并计算其长度。由于尾部可能会有’ &#xff0c;所以我们从后往前遍历字符串&#xff0c;找到第一个非空格的字符&#xff0c;然后记录下到下一个空格前依次有多少个字母即…

芯片后端对于芯片设计公司的重要性

在芯片设计流程中&#xff0c;后端设计是一个至关重要的环节&#xff0c;它直接关系到芯片从设计到实际生产的转化&#xff0c;以及最终产品的性能、可靠性、成本和上市时间。 以下是为什么芯片后端非常重要的几个关键原因&#xff1a; 物理实现&#xff1a;后端设计是芯片从逻…

20240612前端问题总结

20240612前端问题总结 给定固定大小的父 子盒子&#xff0c;要实现子盒子上下左右居中 使用calc()计算&#xff0c;子绝父相和子元素调整位置&#xff0c;flex弹性盒布局&#xff0c;transform&#xff0c;table-cell&#xff0c;浮动六种方法展示子元素垂直水平居中。 <…

人工智能系统中毒是一个日益严重的威胁

咨询公司 Protiviti 最近与一家客户公司合作&#xff0c;该公司遭遇了一次不寻常的攻击&#xff1a;一名黑客试图操纵输入该公司人工智能系统的数据。 公司领导仍在调查此次攻击&#xff0c;公司怀疑黑客试图扭曲人工智能系统的输出。 此类攻击并非新鲜事&#xff0c;但在网络…