基于Arduino Uno的温度检测控制仿真系统设计与实现

西电A测|基于Arduino uno的温度检测控制仿真系统

  • 温度检测控制仿真系统
  • Proteus仿真电路图
  • Arduino IDE编写程序
  • 结果验证
  • 功能拓展
  • 温度检测控制仿真系统

    功能要求:Arduino UNO(Atmega328P)控制驱动直流电机,当环境温度低于预定的温度(摄氏25°)时,直流电机停止转动;当环境温度等于或高于预定的温度(摄氏25°)时,启动直流电机转动。同时,实时环境温度在LCD 上显示。LCD 第一行显示TEMPRATURE:第二行显示摄氏温度值。

    Proteus仿真电路图

    本次实验电路包含Arduino微控制器,LCD显示屏,L298直流电机驱动模块,LM35温度传感器。LM35可以将温度转化为电压输入,其关系为摄氏温度值 = (传感器值 /1024.0 )*500。L298直流电机驱动模块可以同时驱动两个电机转动,其引脚控制和功能见表。

    IN1/IN3 IN2 /IN4 ENA/ENB 电机1/电机2
    1 0 PWM 正转
    1 1 PWM 制动
    0 0 PWM 制动
    0 1 PWM 反转

    如果不需要对电机进行速度调控,则ENA和ENB不需要连接,否则需要接到Arduino uno带有PWM功能的数字引脚上。
    Pic.1

    Arduino IDE编写程序

    #include<LiquidCrystal.h>
    const int rs=12,en=11,d4=5,d5=4,d6=3,d7=2;
    LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
    int ena = 10;
    int input1 = 6,input2 = 7;
    void setup() {
      lcd.begin(16,2);
      lcd.print("TEMPERATURE");
      pinMode(input1,OUTPUT);
      pinMode(input2,OUTPUT);
    }
    
    void loop() {
      float temp;
      int tem;
      temp = analogRead(A0);
      temp = (temp/1024)*500;
      tem = int(temp+0.5);
      lcd.setCursor(0,1);
      lcd.print(tem);
      if(tem<25){
        digitalWrite(input1,LOW);
      }
      else{
        digitalWrite(input1,HIGH);
      }
    }
    

    结果验证

    找到Arduino IDE编译产生的hex文件,在Porteus中将此文件置入ATmega328P中,即可开始仿真。当温度高于或等于25°时,电机开始工作。
    请添加图片描述

    功能拓展

    Arduino uno和L298电机带有速度调控功能。现在,将本实验予以改进,电机开始工作时,转速将和温度成正相关,当温度为85°时,电机转速达到最高值。Arduino uno的PWM功能可以模拟一个0~5v变化的电压输出,以8为二进制表示。

    #include<LiquidCrystal.h>
    const int rs=12,en=11,d4=5,d5=4,d6=3,d7=2;
    LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
    int ena = 10;
    int input1 = 6,input2 = 7;
    void setup() {
      lcd.begin(16,2);
      lcd.print("TEMPERATURE");
      pinMode(input1,OUTPUT);
      pinMode(input2,OUTPUT);
    }
    
    void loop() {
      float temp;
      int tem;
      temp = analogRead(A0);
      temp = (temp/1024)*500;
      tem = int(temp+0.5);
      lcd.setCursor(0,1);
      lcd.print(tem);
      if(tem<25){
        digitalWrite(input1,LOW);
      }
      else{
        digitalWrite(input1,HIGH);
        if(tem*3<=255)
        analogWrite(ena,tem*3);
        else
        analogWrite(ena,255);
      }
    
    

    仿真结果如下:
    请添加图片描述
    请添加图片描述

    物联沃分享整理
    物联沃-IOTWORD物联网 » 基于Arduino Uno的温度检测控制仿真系统设计与实现

    发表评论