PID DHT11 舵机分别控制温湿度 代码
时间: 2024-04-30 11:19:14 浏览: 71
以下是用Arduino编写的代码,通过PID算法控制舵机、DHT11温湿度传感器读取温湿度值:
```
#include <Servo.h>
#include <dht.h>
//定义引脚
#define dht11_pin 2 //DHT11连接的引脚
#define servo_pin 3 //舵机连接的引脚
//定义PID参数
double Setpoint_temp = 25.0; //设定温度值
double Input_temp, Output_temp;
double Kp_temp = 4, Ki_temp = 0.2, Kd_temp = 1; //PID参数
double Setpoint_humi = 50.0; //设定湿度值
double Input_humi, Output_humi;
double Kp_humi = 4, Ki_humi = 0.2, Kd_humi = 1; //PID参数
//创建PID对象
PID myPID_temp(&Input_temp, &Output_temp, &Setpoint_temp, Kp_temp, Ki_temp, Kd_temp, DIRECT);
PID myPID_humi(&Input_humi, &Output_humi, &Setpoint_humi, Kp_humi, Ki_humi, Kd_humi, DIRECT);
//创建dht11对象
dht DHT;
//创建舵机对象
Servo myservo;
void setup() {
//初始化串口
Serial.begin(9600);
//初始化舵机
myservo.attach(servo_pin);
//设置初始位置
myservo.write(90);
//初始化PID
myPID_temp.SetMode(AUTOMATIC);
myPID_humi.SetMode(AUTOMATIC);
}
void loop() {
//读取温湿度
int chk = DHT.read11(dht11_pin);
Input_temp = DHT.temperature;
Input_humi = DHT.humidity;
//如果读取成功
if (chk == DHTLIB_OK) {
//计算PID
myPID_temp.Compute();
myPID_humi.Compute();
//控制舵机
myservo.write(Output_temp);
//输出温湿度值和舵机角度
Serial.print("Temperature = ");
Serial.print(DHT.temperature);
Serial.print(" *C, Humidity = ");
Serial.print(DHT.humidity);
Serial.print(" %%, Servo angle = ");
Serial.println(Output_temp);
//延时1秒
delay(1000);
}
}
```
请注意,此代码仅供参考,并且需要根据实际硬件和应用场景进行修改和调整。
阅读全文