风筝
发表于: 2020-4-9 16:42:46 | 显示全部楼层

在本篇文章中,我们将主要介绍如何使用Arduino和LM35温度传感器设计基于温度的风扇速度控制和监控。微控制器根据要求控制电风扇的速度,并允许动态和更快的控制,并且LCD使系统易于使用。 LCD面板上同时显示以摄氏度为单位的感测温度和以百分比表示的风扇速度。


该项目的主要应用领域是空调、热水器、融雪机、烤箱、热交换、熔炉、保温箱和热水浴等场合。


所需的组件

●    Arduino UNO开发板

●    LM35温度传感器

●    2N2222晶体管

●    1602 LCD显示屏

●    12V DC风扇

●    1N4007二极管

●    LED指示灯

●    12伏电池/适配器

Components.png


电路图和连接

Circuit-Diagram--1536x914.jpg

上面显示了使用Arduino和LM35进行基于温度的风扇速度控制和监控的电路图。 Arduino是电路的主控部分,因为它控制所有功能。 LM35是一种精密集成电路,其输出电压与摄氏温度成线性比例。额定温度范围为-55°C至150°C。它具有+ 10.0mV /摄氏度的线性比例因子。

2N2222晶体管用作开关并根据温度控制风扇速度。 1N4007二极管控制风扇不受损坏。温度超过60°C时,LED灯点亮。


电路工作过程

温度传感器LM35感测温度并将其转换为电(模拟)信号,该信号被应用于Arduino UNO开发板的ATmega328微控制器。模拟值转换为数字值。这样,风扇的温度和速度的感测值显示在LCD上。当温度超过30°C时,风扇开始旋转。


使用了低频脉宽调制(PWM)信号,其占空比可以改变以调节风扇的速度。此处可以使用价格便宜的单通道小通过晶体管,如2N222或BD139。这种方法很有效,因为传输晶体管被用作开关。

2-1.jpg


源代码/程序

下面给出了使用Arduino和LM35进行基于温度的风扇速度控制和监控的程序。只需复制此代码并将其粘贴到您的Arduino IDE中,编译代码,然后上传。

  1. #include <LiquidCrystal.h>
  2. LiquidCrystal lcd(2,3,4,5,6,7);
  3. int tempPin = A0; // the output pin of LM35
  4. int fan = 11; // the pin where fan is
  5. int led = 8; // led pin
  6. int temp;
  7. int tempMin = 30; // the temperature to start the fan 0%
  8. int tempMax = 60; // the maximum temperature when fan is at 100%
  9. int fanSpeed;
  10. int fanLCD;

  11. void setup() {
  12. pinMode(fan, OUTPUT);
  13. pinMode(led, OUTPUT);
  14. pinMode(tempPin, INPUT);
  15. lcd.begin(16,2);
  16. Serial.begin(9600);
  17. }

  18. void loop()
  19. {
  20. temp = readTemp(); // get the temperature
  21. Serial.print( temp );
  22. if(temp < tempMin) // if temp is lower than minimum temp
  23. {
  24. fanSpeed = 0; // fan is not spinning
  25. analogWrite(fan, fanSpeed);
  26. fanLCD=0;
  27. digitalWrite(fan, LOW);
  28. }
  29. if((temp >= tempMin) && (temp <= tempMax)) // if temperature is higher than minimum temp
  30. {
  31. fanSpeed = temp;//map(temp, tempMin, tempMax, 0, 100); // the actual speed of fan//map(temp, tempMin, tempMax, 32, 255);
  32. fanSpeed=1.5*fanSpeed;
  33. fanLCD = map(temp, tempMin, tempMax, 0, 100); // speed of fan to display on LCD100
  34. analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed
  35. }

  36. if(temp > tempMax) // if temp is higher than tempMax
  37. {
  38. digitalWrite(led, HIGH); // turn on led
  39. }
  40. else // else turn of led
  41. {
  42. digitalWrite(led, LOW);
  43. }

  44. lcd.print("TEMP: ");
  45. lcd.print(temp); // display the temperature
  46. lcd.print("C ");
  47. lcd.setCursor(0,1); // move cursor to next line
  48. lcd.print("FANS: ");
  49. lcd.print(fanLCD); // display the fan speed
  50. lcd.print("%");
  51. delay(200);
  52. lcd.clear();
  53. }

  54. int readTemp() { // get the temperature and convert it to celsius
  55. temp = analogRead(tempPin);
  56. return temp * 0.48828125;
  57. }
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-23 17:47 , Processed in 0.061660 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表