流水源 发表于 2024-1-18 10:44:22

《2023 DigiKey 汽车应用创意挑战赛》-汽车环境状态检测控制器

本帖最后由 流水源 于 2024-5-14 10:24 编辑

一、项目名称:       基于STM32F746-DISO的车内环境状态控制显示仪表盘。二、项目概述:    本项目主要是基于STM32F746高性能MCU的STM32F746-DISC开发板,实现车内温湿度监测。以及控制车内灯光。STM32F746-DISC板载4.3寸电容触摸LCD,使用LCD显示GUI画面是基于ST的GUI设计器TouchGFX设计,并且使用FreeRTOS嵌入式操作系统内核进行任务调度。做这个项目主要是为了方便车内乘客了解车内环境状况,以及方便乘客对车内一些无关驾驶方面的控制。目前车内屏幕控制和显示都在司机前面板,对于后排乘客操作任何东西都需要经过司机来处理,非常不方便。这个项目设备可以放在后排,方便后面乘客,既减轻了司机压力又方便了乘客坐车体验。    通过本设备可以查看车内温湿度,就可以调整车内空调温度高低。还可以控制车上照明灯,方便晚上坐车时,给后面乘客车顶照明。还有座椅下方照明。
三、整体设计方案3.1、硬件方案    整体使用STM32F746-diso开发板,利用板载触摸lcd作为显示和界面操控。外扩有温湿度传感器,IO输出和彩灯控制等等。整体框图如下:
下面是设计的扩展板:利用板上ARDUINO接口,直接插在板子上。使用I2C接口的温湿度传感器SHTC3,以及灯光控制部分。如下图所示: 实物如下:电路图如下:整体硬件如下:

3.2、软件驱动下面是温湿度传感器驱动程序部分。int SHTC3_CalcTemperature(uint16_t rawValue)
{
// calculate temperature
// T = -45 + 175 * rawValue / 2^16
return (((175*1 * rawValue)>>16) - 45*1);   //放大100倍
}

int SHTC3_CalcHumidity(uint16_t rawValue)
{
// calculate relative humidity
// RH = rawValue / 2^16 * 100
return ((100 * 1 * rawValue)>>16);   //放大100倍
}

static uint8_t SHTC3_CheckCRC(uint8_t *buff, uint32_t nbyte)
{
    uint32_t i;            // byte counter   
    uint8_tbit;          // bit mask
    uint8_tcrc = 0xFF;   // calculated checksum

    // calculates 8-Bit checksum with given polynomial
    for(i = 0; i < nbyte; i++)
    {
      crc ^= (buff);
      for(bit = 8; bit > 0; --bit)
      {
            if(crc & 0x80) {
                crc = (crc << 1) ^ SHTC3_CRC_POLYNOMIAL;
            } else {
                crc = (crc << 1);
            }
      }
    }
    return crc;
}
uint16_t shtc3_id;
uint16_t SHTC3_Init(void)
{
    uint8_t buff={0};
    shtc3_id = 0;
    shtc3_gpio_init();
   
    HAL_Delay(1);
    SHTC3_ReadData(SHTC3_REG_ID,buff,3);
    if(buff != SHTC3_CheckCRC(buff,2))
    {
      return -1;
    }
    HAL_Delay(10);
    SHTC3_WriteCmd(SHTC3_REG_W***EUP);
    shtc3_id = (buff<<8)|buff;
    return shtc3_id;
}

uint8_t SHTC3_GetMode1_TempRH(int *temp, int *humi)
{
    uint8_t buff={0};
   
    SHTC3_ReadData(SHTC3_REG_CELPM_TEMP_RH,buff,6);
    if((buff != SHTC3_CheckCRC(buff,2))||(buff != SHTC3_CheckCRC(&buff,2)))
    {
      return 1;
    }
    *temp = SHTC3_CalcTemperature((buff<<8)|buff);
    *humi = SHTC3_CalcHumidity((buff<<8)|buff);
    return 0;
}

界面实时时间显示驱动,RTC使用ST的HAL库API获取。    HAL_RTC_GetTime(&hrtc,&GetTime,RTC_FORMAT_BIN);
    HAL_RTC_GetDate(&hrtc,&GetDate,RTC_FORMAT_BIN);
   
    Hours   = GetTime.Hours;
    Minutes = GetTime.Minutes;
    Seconds = GetTime.Seconds;
   
    Years   = GetDate.Year;
    Months= GetDate.Month;
    Days    = GetDate.Date;
    Weeks   = GetDate.WeekDay;
    xprintf("%d-%d-%d %d \r\n",Years,Months,Days,Weeks);
    xprintf("%d:%d:%d \r\n",Hours,Minutes,Seconds);使用RTC有点要注意的地方就是HAL_RTC_GetTime()和HAL_RTC_GetDate()都要调用,而且要先调用HAL_RTC_GetTime(),再调用HAL_RTC_GetDate()。开始没注意,导致RTC时钟不动。下面是我找到原因
所有GUI使用ST的TouchGFX 4.23软件设计。
四、作品实物图及演示视频展示
演示视频https://www.bilibili.com/video/BV1f94y1K7vv/
五、项目资料及程序**** Hidden Message *****








lospring 发表于 2024-5-14 09:20:50

学习一下

eefocus_3952487 发表于 2024-5-13 19:32:58

学习了

A栗栗 发表于 2024-5-13 15:40:58

1234

A栗栗 发表于 2024-5-13 15:31:51

1234
页: [1]
查看完整版本: 《2023 DigiKey 汽车应用创意挑战赛》-汽车环境状态检测控制器

Baidu
map