基于Arduino的温控风扇

概述

基于Arduino的温控风扇系统,经DS18B20温度采集,将数据传送到Arduino,通过PWM调节占空比进而控制电机转速,经过驱动电路驱动电机,由电机的计数模块得到电机转速并用LCD1602显示。

设计方案

基于Arduino的温控风扇_第1张图片
高电平时电压为U,占空比为 ,则单个周期内平均电压为 ,所以占空比越大,直流电机转速越快。所用直流电机转一圈输出41个脉冲,设一个脉冲的频率为fHz,则电机转速为:v=f/41*60 r/min。
基于Arduino的温控风扇_第2张图片

硬件设计

温度采集电路:在此设计中将DS18B20接在Arduino的10号脚上实现温度的采集。
基于Arduino的温控风扇_第3张图片
电机计数模块:通过电机发射脚和接收脚将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。将信号反馈给Arduino单片机
基于Arduino的温控风扇_第4张图片
驱动电机模块:本设计由Arduino的9口输出PWM脉冲,通过8550驱动直流电机,以实现温控风扇转速的调节。当环境温度升高时,占空比变大,因此转速变快,温度减小时,转速变慢,由于8550时低通的,编程时需要注意。
基于Arduino的温控风扇_第5张图片

软件设计

基于Arduino的温控风扇_第6张图片

#include 
#include 
#include 
#include 
#define ONE_WIRE_BUS 10//
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);// 初始连接在单总线上的单总线设备
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Servo myservo;  // 定义舵机对象,最多八个 
double x;//温度传感器传入值
int Speed;
int Speeds;
int speedss;
unsigned long period;
unsigned char flag=0;
int M=3;
void setup() {
  pinMode(9,OUTPUT);
  pinMode(3,INPUT);
  Serial.begin(9600);        
  attachInterrupt(0, freqDetect, RISING);
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");
  sensors.begin();
  lcd.begin(16, 2);
}

void loop() {
//获取温度
  sensors.requestTemperatures();
  Serial.print("Temperature for the device 1 (index 0) is: ");
  Serial.println(sensors.getTempCByIndex(0));
  delay(1000);  
  lcd.setCursor(0, 0);
  lcd.print(sensors.getTempCByIndex(0));
//控制转速
  x=1024/10*(sensors.getTempCByIndex(0)-25);//温度从25到35
  speedss= map(x, 0, 1023, 0, 180);
  Speeds=180-speedss;
  analogWrite(9,Speeds);
// 测转速并显示  
if(1==flag)
  {
    noInterrupts();
    flag=0;
    Speed=60000000/(41*period);
    Serial.println(Speed);
    Serial.print(" r/min");
    interrupts();
    delay(1000);
     lcd.setCursor(0, 1);
     lcd.print("     ");
     lcd.setCursor(0, 1);
     lcd.print( Speed);
     delay(1000);
  }
}
//测周期
void freqDetect()
{
  static unsigned long lastTime;
  period = micros()-lastTime;
  flag=1;
  lastTime = micros();
}

结果

基于Arduino的温控风扇_第7张图片
基于Arduino的温控风扇_第8张图片
基于Arduino的温控风扇_第9张图片
v=411/41*60=601 r/min

你可能感兴趣的:(基于Arduino的温控风扇)