自动风扇速度控制电路Arduino LM35编程非常容易实验,可用于根据温度水平通过继电器控制任何目标设备。对于这里的温度测量,我们使用 LM35,这是一种精密集成电路温度器件,其输出电压与摄氏度温度成线性比例。由于其输出特性,我们在输出值计算中不需要采用开尔文。该LM35温度传感器无需任何外部元件即可工作,只需要4 V至30 V稳压直流电源作为偏置。在此电路中,我们使用 Arduino 开发板的 +5V DC。该传感器在室温下提供±1/4°C的温度输出,在-55°C至150°C的整个温度范围内提供±3/4°C的温度输出。
由于该 LM35 提供模拟输出(线性 + 10-mV/°C 比例因子),因此我们可以将 LM35 的输出引脚直接连接到 Arduino 板的任何模拟输入引脚。 LM35 可以采用单电源或双电源供电,其自身运行功耗仅为 60 μA。它有不同的封装,如 TO-CAN (3)、TO-92 (3)。这里我们使用德州仪器 (TI) 的 LM35 TO-92。
该电路可以构建在面包板或普通 PCB 板上,具有额外的 12V 直流电源用于风扇或继电器。如前所述,LM35 只需要 5V,因此 Arduino 的 5V 引脚和 Gnd 引脚与 LM35 连接,输出引脚直接连接到模拟输入引脚 A0,并在以下程序中提到。指示 LED 与数字引脚 D8 连接并声明为输出引脚。 D3 PWM引脚声明为输出引脚,连接至开关晶体管 2N2219A 的基极。这里我们必须根据 LM35 感测到的温度水平来更改输出脉冲宽度。顺便说一下,我们可以达到不同的速度级别。每当温度传感器检测到 Arduino 外部的温度变化时,D3 引脚的 PWM 输出就会发生变化,因此风扇的速度也会发生变化。
为了控制继电器,使用 D3 引脚作为数字输出引脚并在 Arduino 代码中声明它。这样我们只能根据温度水平来打开和关闭交流风扇。根据温度水平使用任何目标负载来打开和关闭。每当温度传感器检测到温度变化超过 30°C 时,Arduino 就会改变 D3 引脚的数字输出(高电平),从而风扇速度发生变化。低于 25°C 时,D3 引脚的数字输出变为(低)。
int tempPin = A0; // connect Sensor output pin
int fan = 3; // Output drive for fan
int led = 8; // fan status led pin
int temp;
int tempMin = 25; // Minimum temperature to start the fan
int tempMax = 75; // Maximum temperature to turn fan at 100% speed
int fanSpeed;
void setup() {
pinMode(fan, OUTPUT);
pinMode(led, OUTPUT);
pinMode(tempPin, INPUT);
Serial.begin(9600); // Initialize serial communication at 9600 baud rate
}
void loop() {
temp = readTemp(); // read temperature
Serial.print("Temperature: ");
Serial.print(temp);
Serial.println(" °C");
if(temp < tempMin) { // if temp is lower than minimum temperature
fanSpeed = 0; // fan is off
digitalWrite(fan, LOW);
Serial.println("Fan Speed: OFF");
}
if((temp >= tempMin) && (temp <= tempMax)) { // if temperature is higher than minimum temperature
fanSpeed = map(temp, tempMin, tempMax, 32, 255);
analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed
Serial.print("Fan Speed: ");
Serial.println(fanSpeed);
}
if(temp > tempMax) { // if temp is higher than tempMax
digitalWrite(led, HIGH); // turn on led
Serial.println("Fan Status: Overheating!");
} else { // else turn off led
digitalWrite(led, LOW);
Serial.println("Fan Status: Normal");
}
delay(1000); // Delay for 1 second before reading temperature again
}
int readTemp() { // get temperature and convert it to celsius
temp = analogRead(tempPin);
return temp * 0.48828125;
}
const int tempPin = A0; // LM35 temperature sensor connected to analog pin A0
const int relayPin = 3; // Relay control pin connected to digital pin 2
const int tempThresholdHigh = 30; // Temperature threshold to turn on the relay (in Celsius)
const int tempThresholdLow = 25; // Temperature threshold to turn off the relay (in Celsius)
void setup() {
pinMode(tempPin, INPUT);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW); // Ensure the relay is initially off
Serial.begin(9600);
}
void loop() {
int tempValue = analogRead(tempPin); // Read temperature value from LM35 sensor
float temperature = (tempValue * 0.48828125); // Convert analog reading to Celsius
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
// Check temperature and control the relay
if (temperature >= tempThresholdHigh) {
digitalWrite(relayPin, HIGH); // Turn on the relay
Serial.println("Relay Status: ON");
} else if (temperature <= tempThresholdLow) {
digitalWrite(relayPin, LOW); // Turn off the relay
Serial.println("Relay Status: OFF");
}
delay(1000); // Delay for 1 second before reading temperature again
}
在上面的两个程序中,我们使用以下方法将模拟输出电压从 LM35 转换为摄氏度
int readTemp() {
temp = analogRead(tempPin);
return temp * 0.48828125;
}
大多数时候,人们在离开房间时仍然开着风扇,因为他们忘记将其关闭。他们甚至将风扇设置为最高速度,无论外面的天气如何。所有这些习惯每天都会消耗和浪费越来越多的电力。为此,我们需要制作一个风扇可以自动打开和关闭的风扇。
这里风扇的速度可以通过改变输入电源来改变,但是如果我们需要根据温度变化来改变风扇速度。然后我们必须在系统中实现微控制器(Arduino)和温度传感器 LM 35。现在风扇可以根据房间内的温度变化来改变速度。所有这些都将节省大量电力。
如图电路图所示,电路的主要部分是Arduino Uno板和LM35温度传感器。这里传感器的输出直接与Arduino板的模拟输入A0引脚连接,LED1与数字引脚D8连接。输出取自Arduino的D11引脚。现在您可以选择任何具有 PWM 功能的数字引脚作为输出引脚,为此,我们也必须在 Arduino 程序代码中进行这些更改。这里给出的代码基于 D11 引脚作为输出。每当温度传感器检测到 Arduino 外部的温度变化时,D11 引脚的 PWM 输出就会发生变化,因此风扇的速度也会发生变化。此外,在该电路中,SL100 晶体管充当开关晶体管。我们需要一个12V电源来偏置电路。
#include < LiquidCrystal.h >
LiquidCrystal lcd(7,6,5,4,3,2);
int tempPin = A0; // connect Sensor output pin
int fan = 11; // Output drive for fan
int led = 8; // fan status led pin
int temp;
int tempMin = 25; // Minimum temperature to start the fan
int tempMax = 75; // Maximum temperature to turn fan at 100% speed
int fanSpeed;
int fanLCD;
void setup() {
pinMode(fan, OUTPUT);
pinMode(led, OUTPUT);
pinMode(tempPin, INPUT);
lcd.begin(16,2);
}
void loop() {
temp = readTemp(); // read temperature
if(temp < tempMin) { // if temp is lower than minimum temperature
fanSpeed = 0; // fan is off
digitalWrite(fan, LOW);
}
if((temp >= tempMin) && (temp <= tempMax)) { // if temperature is higher than minimum temperature
fanSpeed = map(temp, tempMin, tempMax, 32, 255);
fanLCD = map(temp, tempMin, tempMax, 0, 100); // speed of fan to display on LCD
analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed
}
if(temp > tempMax) { // if temp is higher than tempMax
digitalWrite(led, HIGH); // turn on led
} else { // else turn off led
digitalWrite(led, LOW);
}
lcd.print("TEMP: ");
lcd.print(temp); // display the temperature
lcd.print("C ");
lcd.setCursor(0,1);
lcd.print("FANS: ");
lcd.print(fanLCD); // display the fan speed
lcd.print("%");
delay(200);
lcd.clear();
}
int readTemp() { // get temperature and convert it to celsius
temp = analogRead(tempPin);
return temp * 0.48828125;
}
全部0条评论
快来发表一下你的评论吧 !