arduino ds18b20 温控风扇

4pin风扇 如何用arduino读取风扇的转速呢 怎么利用ds18b20检测出的温度来控制风扇转速呢

由于没有相关的硬件,未测试的代码:

void loop() {
   tempC = get_temperature(); //获取温度
   print_temperature(tempC); //串口打印温度值
   display_temperature(tempC); //LCD液晶显示温度值
   if( tempC > 36 ) {
      digitalWrite( relayPin, LOW );
      Serial.println( "Fan On" );
   } else {
      digitalWrite( relayPin, HIGH );
      Serial.println( "Fan Off" );
   } //if
   delay(1000);
} //loop
  • 可以尝试调整 delay 让检查温度/开关风扇 的时间不会太敏感。
    例如 5000 (5 秒)。

参考:
https://ask.csdn.net/questions/7514504

代码如下 现在只读取和显示出DS18B20测得的温度值 下一步该如何将温度值和风扇转速联系起来 实现温控 请大佬们指导一下 谢谢!
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

OneWire oneWire(2); //按照自己DS18B20的IO口接线而定
DallasTemperature sensors(&oneWire);
LiquidCrystal lcd(13, 12, 7, 6, 5, 4); //按照自己RS,E,D4,D5,D6,D7的顺序创建

float tempC = 0;

void setup() {
sensor_init();
lcd_init();
}

void loop() {
tempC = get_temperature(); //获取温度
print_temperature(tempC); //串口打印温度值
display_temperature(tempC); //LCD液晶显示温度值
delay(1000);
}

void lcd_init()
{
lcd.begin(16, 2);
lcd.print("Welcome to use!");
delay(1000);
lcd.clear();
}

void sensor_init()
{
Serial.begin(9600);
Serial.println("");
sensors.begin(); //初始化总线
}

float get_temperature()
{
Serial.println("发起温度转换");
sensors.requestTemperatures(); //向总线上所有设备发送温度转换请求,默认情况下该方法会阻塞
Serial.println("温度转换完成");
tempC = sensors.getTempCByIndex(0); //获取索引号0的传感器摄氏温度数据
if (tempC != DEVICE_DISCONNECTED_C) //如果获取到的温度正常
{
return tempC;
}
}

void print_temperature(float tempC)
{
Serial.print("当前温度是: ");
Serial.print(tempC);
Serial.println(" ℃\n");
}

void display_temperature(float tempC)
{
lcd.setCursor(0,0);
lcd.print("THE TEMPERATURE:");
lcd.setCursor(0, 1);
lcd.print(int(tempC)); //tempC=23.52-->> 23
lcd.print(".");
lcd.print(int(tempC * 10) % 10); //tempC=23.52-->> 235.2-->>235-->>5
lcd.print(char(223)); //o符号
lcd.print("C");
}