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
参考:
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");
}