在温湿度控制器的设计中,除了LPC823lite之外,还离不开OLED屏、温湿度传感器和继电器的配合。当温湿度传感器获取温湿度的数值后,需要与设定值相比较来确定继电器的开与合,这里就介绍一下实现温湿度设置与控制的方法。 鉴于DHT11的温、湿度变换范围不是很大,故可以用2个键来实现限值的设置,并由开发板上的USER键来选取数值,以WAKEUP键来进行确认。 OLED屏的使用方法参见网址: 在控制处理方面,为了减少继电器对LPC823lite开发板的干扰,特选取了带光隔的继电器模块,这样继电器的输入信号及电源由开发板提供,输出端的电源可由外部电源来单独提供,从而减少了彼此的影响。 温度控制的程序如下,湿度控制与之相仿,运行的效果如图1和图2所示。 - int main(void)
- { uint32_t number, temp, num=0,s=0,i;
- GPIOInit();
- GPIOSetDir(LPC_GPIO_PORT->PIN0, 20, 1); //clk
- GPIOSetDir(LPC_GPIO_PORT->PIN0, 21, 1); //dat
- GPIOSetDir(LPC_GPIO_PORT->PIN0, 22, 1); //继电器控制
- GPIOSetDir(LPC_GPIO_PORT->PIN0, 1, 0); //KEY_ USER
- GPIOSetDir(LPC_GPIO_PORT->PIN0, 4, 0); //KEY_ WAKEUP
- GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 22, 1 );
- OLED_Init();
- OLED_Clear();
- cd();
- i=1;
- num=0;
- while(i>0) // 设置限值及控制
- {
- if(GPIOGetPinValue(LPC_GPIO_PORT->PIN0, 1)==0) // USER +
- {
- while(GPIOGetPinValue(LPC_GPIO_PORT->PIN0, 1)==0);
- num++; // 限值
- OLED_ShowNum(112,2,num,2,16);
- }
-
- if(GPIOGetPinValue(LPC_GPIO_PORT->PIN0, 4)==0) // WAKEUP Y
- {
- while(GPIOGetPinValue(LPC_GPIO_PORT->PIN0, 4)==0);
- i=0;
- OLED_ShowString(44,6,"OFF",16);
- }
- }
- s=20; // 模拟温度采集值
- while(1)
- {
- if(s>num)
- {
- GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 22, 1 ); // on/off
- OLED_ShowString(44,6,"OFF",16);
- }
- else
- {
- GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 22, 0 );
- OLED_ShowString(44,6,"ON ",16);
- }
- Delay_1ms(500);
- // 读取温湿度值以便进行控制
- }
- } // end of main
复制代码
图1 温度低于限值时(继电器接通) 图2 温度达到限值时(继电器断开)
|