以STM32F403为控制核心,设计一种基于STM32的智能照明控制系统,使用光敏电阻作为光照信息来源,使用GP2D12作为人物信息来源,当光照强度改变时,光敏电阻的阻值改变,从而改变STM32的采样电压。当人物移动时,红外传感器的电压改变从而改变采样电压。当光照强度小于一定值,且感应到有人时,LED亮。
通过光敏电阻和GP2D12传感器获取光照和红外信息,作为模拟量,传入STM32F4的采集端口。STM32F4进行模数转换后,在LCD1602上进行显示。
采用了HAL库进行配置STM32F4,一直有个问题就是proteus仿真DS18B20和DHT11这种带有时序要求的传感器,同STM32通信时出现时序错误,有经验的师兄可以告知一下怎么操作。
- int main(void)
- {
- uint16_t time=0;
- HAL_Init();
- SystemClock_Config();
- MX_GPIO_Init();
- MX_ADC1_Init();
- MX_USART1_UART_Init();
- while (1)
- {
- Get_Adc();
-
- if(adc1_in1_voltage<0.5) // 表示 没人
- {
- printf("no people\r\n");
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, 1);
- }
- else // 表示 有人
- {
- printf("people here\r\n");
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, 0);
- if(adc1_in0_voltage<1)
- {
- for(time=0; time<5; time++)
- {
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, 0);
- HAL_Delay(100);
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, 1);
- HAL_Delay(900);
- }
- }
- else if(adc1_in0_voltage>=1 && adc1_in0_voltage<2)
- {
- for(time=0; time<5; time++)
- {
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, 0);
- HAL_Delay(500);
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, 1);
- HAL_Delay(500);
- }
- }
- else if(adc1_in0_voltage>=2)
- {
- for(time=0; time<5; time++)
- {
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, 0);
- HAL_Delay(900);
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, 1);
- HAL_Delay(100);
- }
- }
- }
- }
- }
复制代码
当没有感应到人的时候
|