请选择 进入手机版 | 继续访问电脑版
搜索
热搜: ROHM 模拟 车载
查看: 3847|回复: 3

[活动] [DIY活动]基于STM32f103的模拟社区光控系统

  [复制链接]

该用户从未签到

7

主题

85

帖子

0

精华

高级会员

最后登录
2021-1-27
发表于 2018-7-29 21:59:57 | 显示全部楼层 |阅读模式
本帖最后由 电子星辰 于 2018-7-29 22:09 编辑

首先感谢ROHM社区组织举办此次活动,为我们提供了学习的资源和平台。调试了十来天,又从中学到了新东西。

本次开发是希望模拟出智能社区里物联网系统的部分光控功能,以STM32f103cbT6核心板作为中央控制,以BH1750传感器模块作为光照采集终端,根据当前光照强度数据,用PWM控制核心板的LED亮度来当做路灯,并以0.96寸OLED显示屏当做社区显示板显示光照强度和路灯亮度。

原理介绍:

(1)硬件组成与介绍:

        1、通过ST-Link给核心板下载程序并供给5V电压;

        2、BH1750FVI传感器模块,VCC-5V,SCL-PB2,SDA-PB3,ADD-GND(地址0x46);

        3、0.96寸OLED模块,VCC-3.3V,SCL-PB0,SDA-PB1。

(2)此DIY方案中BH1750的功能:作为采集光照强度数据的传感器采集终端。

(3)软件流程介绍

        1、GPIO、定时器、串口、BH1750和OLED初始化

        2、通过定时器判断是否1秒?

        3、每1秒钟执行一次以下代码;

        4、通过软件模拟I2C获取光照强度数据;

        5、根据光照强度调整PWM占空比,在0~100Lux之间,光照越弱LED越亮,光照强度大于100Lux后,LED熄灭;

        6、通过软件模拟I2C控制OLED显示。

实物与演示:

(1)实物图片与说明

整体硬件图

整体硬件

整体硬件

LED灯图

LED灯

LED灯


OLED显示特写

OLED特写

OLED特写


(2)Cube设置

pinout设置
pinout设置.JPG

时钟设置
时钟设置.JPG

GPIO模拟I2C设置
软件I2C设置.JPG

定时器设置,预分频71,period19999,pulse19999,开启中断
最终定时器频率计算为: 72MHz/(TIMx_PRESCALER+1/(TIMx_REPETITIONCOUNTER+1)/TIMx_PERIOD
比如需要产生20ms周期定时,可以设置为:72MHz/(71+1)/(0+1)/20000=50Hz,即20ms周期
定时器设置.JPG

时钟设置,开启全局中断
串口设置.JPG

(3)代码说明

主函数

  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */
  4.   uint16_t iLux;//光照强度值
  5.   /* USER CODE END 1 */

  6.   /* MCU Configuration----------------------------------------------------------*/

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

  9.   /* USER CODE BEGIN Init */

  10.   /* USER CODE END Init */

  11.   /* Configure the system clock */
  12.   SystemClock_Config();

  13.   /* USER CODE BEGIN SysInit */

  14.   /* USER CODE END SysInit */

  15.   /* Initialize all configured peripherals */
  16.   MX_GPIO_Init();
  17.   MX_TIM4_Init();
  18.   MX_USART1_UART_Init();
  19.   /* USER CODE BEGIN 2 */
  20.         HAL_TIM_Base_Start_IT(&htim4);//启动定时器
  21.         HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);//启动通道PWM输出  
  22.   if(I2C_InitCheckDevice(BH1750_SLAVE_ADDRESS) != 0) printf("BH1750FVI Err (0x%02X)\r\n",BH1750_SLAVE_ADDRESS);
  23.         bsp_InitBH1750();//初始化BH1750:Power On并设置为连续高分测量模式2
  24.         OLED_Init();//初始化OLED  
  25.   /* USER CODE END 2 */

  26.   /* Infinite loop */
  27.   /* USER CODE BEGIN WHILE */
  28.         OLED_Clear();//清屏
  29.         OLED_ShowCHinese(0,0,18);//模
  30.         OLED_ShowCHinese(18,0,19);//拟
  31.         OLED_ShowCHinese(36,0,20);//光
  32.         OLED_ShowCHinese(54,0,21);//控
  33.         OLED_ShowCHinese(72,0,22);//子
  34.         OLED_ShowCHinese(90,0,23);//系
  35.         OLED_ShowCHinese(108,0,24);//统        
  36.   while (1)
  37.   {
  38.     if(TX_OutTime > USART_TIMES)//大概1s打印1次
  39.                 {
  40.                         TX_OutTime = 0;
  41.                         iLux = (uint16_t)BH1750_GetLux();//获取光照强度
  42.                         PWM_SetValue(iLux * Light_propor);//设置PWM占空比

  43.                         OLED_Clear();
  44.                         OLED_ShowCHinese(0,0,18);//模
  45.                         OLED_ShowCHinese(18,0,19);//拟
  46.                         OLED_ShowCHinese(36,0,20);//光
  47.                         OLED_ShowCHinese(54,0,21);//控
  48.                         OLED_ShowCHinese(72,0,22);//子
  49.                         OLED_ShowCHinese(90,0,23);//系
  50.                         OLED_ShowCHinese(108,0,24);//统
  51.                         OLED_ShowString(0,3,"Light:",16);   
  52.                         OLED_ItoC_Show(54,3,iLux,16);//显示光照强度
  53.                         OLED_ShowString(100,3,"Lux",16);
  54.                         OLED_ShowString(16,6,"LED:",16);
  55.                         OLED_ItoP_Show(62,6,(100 - iLux*Light_propor*100 / 20000),16);//显示LED灯的PWM百分比
  56.                         OLED_ShowString(108,6,"%",16);
  57.                 }
  58.   /* USER CODE END WHILE */

  59.   /* USER CODE BEGIN 3 */

  60.   }
  61.   /* USER CODE END 3 */

  62. }
复制代码




LightOLED_HAL1.0.rar

4.53 MB, 下载次数: 2, 下载积分: 威望 1 , ROHM金币 -1

中景园电子OLE显示屏专用取模工具_PCtoLCD2002.rar

701.79 KB, 下载次数: 2, 下载积分: 威望 1 , ROHM金币 -1

中景园电子0.96寸OLED使用文档新手必看V2.0.pdf

1.61 MB, 下载次数: 0, 下载积分: 威望 1 , ROHM金币 -1

回复

使用道具 举报

该用户从未签到

205

主题

1万

帖子

0

精华

论坛元老

最后登录
2023-6-10
发表于 2018-7-30 00:06:51 | 显示全部楼层
看看,
回复

使用道具 举报

该用户从未签到

4221

主题

5060

帖子

11

精华

管理员

最后登录
2024-3-29
发表于 2018-7-30 10:17:13 | 显示全部楼层
感谢分享
回复

使用道具 举报

该用户从未签到

1153

主题

5959

帖子

0

精华

论坛元老

最后登录
2021-2-19
发表于 2018-7-30 14:50:33 | 显示全部楼层
能力可真强
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|罗姆半导体技术社区

GMT+8, 2024-3-29 23:21 , Processed in 0.103727 second(s), 16 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表