基于Arduino UNO设计一个温控制系统

目录

概述

1 硬件结构

1.1 整体硬件介绍

1.2 硬件连接结构

2 软件设计

2.1 软件功能介绍

2.2 关于Arduino的一些知识点

2.2.1 定时器 

2.2.2 PWM

2.3 代码实现

2.3.1 编译工具

2.3.2 详细代码

3 测试

3.1 温度数据监控

3.2 温控测试


概述

        本文介绍如何使用Arduino UNO作为主控制板,设计一个智能温控系统,其实现功能如下:当环境温度达到一定的门限值时,开始风扇,当环境温度低于该门限值则关闭风扇。系统使用DS18B20采集环境温度,L298N驱动电机,OLED显示当前环境温度。软件设计上使用Arduino自带的定时器中断功能,用于控制时间间隔。还使用了PWM技术,以控制电机的转速。

1 硬件结构

1.1 整体硬件介绍

1)Arduino UNO: 主控板卡

2)控制L298N:用于控制电机系统

3)控制OLED模块:用于显示当前温度数据

4)控制DS18B20:获取环境温度数据

5)直流电机:驱动扇叶

1.2 硬件连接结构

模块引脚与Arduino UNO主板之间关系:

Arduino UNO  IO应用模块IO注释
PIN-2DS18B20 DQ
PIN-5L298N in-1用于电机控制
PIN-6L298N in-2用于电机控制
SCLOLED-scl
SDAOLED-sda

2 软件设计

2.1 软件功能介绍

软件主要实现功能如下:

1) 控制DS18B20,读取该传感器采集到的温度值

2) 在OLED显示温度数据

3)通过串口打印调试信息

4)根据门限值,控制电机转速(PWM)

2.2 关于Arduino的一些知识点

2.2.1 定时器 

在Arduino中使用定时器,必须要包含该头文件 <MsTimer2.h>,然后调用如下函数启动定时器,并且还要实现一个中断回调函数。

void startTime()
{
   // 中断设置函数,每 500ms 进入一次中断
    MsTimer2::set(500, timer_irq);
    //开始计时
    MsTimer2::start(); 
}


//回调函数 
void timer_irq()
{

}

2.2.2 PWM

在Arduino UNO板卡中使用PWM功能,其能使用的引脚为pin( 3, 5, 6, 9, 10, 11),使用方法如下:

1) 配置端口为模拟引脚

2)使用analogWrite( pin, cycle )函数来配置占空比参数含义如下:

pin - 引脚号;

cycle - 占空比(范围: 0 ~ 255 )

一个使用案例:

//for motor port 
const int output1 = 5; 
const int output2 = 6; 

// 初始化IO

void setup()
{
   pinMode(output1, OUTPUT); 
   pinMode(output2, OUTPUT); 
}

// 配置占空比

void pwmCycle()
{
   analogWrite(output1, 150);  
   analogWrite(output2, 0);  
}

2.3 代码实现

2.3.1 编译工具

2.3.2 详细代码

/*
Copyright  2024-2029. All rights reserved.
文件名     : motorCtrl
作者       : tangmingfei2013@126.com
版本       : V1.0
描述       : 自动温控系统
其他       : 无
日志       : 初版V1.0 2024/2/15  
*/
#include <MsTimer2.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>


#define ONE_WIRE_BUS 2
              
// for ds18b20 port 
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

//for motor port 
const int output1 = 5; 
const int output2 = 6; 

// for SSD1306
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

unsigned int cnt = 0;
int pwmcycle = 0;

void timer_irq();

void setup() {
    Serial.begin(9600);


  // put your setup code here, to run once:
    pinMode(output1, OUTPUT); 
    pinMode(output2, OUTPUT); 

    analogWrite(output1, 0);  
    analogWrite(output2, 0);  


    // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)
    display.display();

    // Show the display buffer on the hardware.
    // NOTE: You _must_ call display after making any drawing commands
    // to make them visible on the display hardware!                                                                                                                                            
    display.clearDisplay();


    // 中断设置函数,每 500ms 进入一次中断
    MsTimer2::set(500, timer_irq);
    //开始计时
    MsTimer2::start(); 
}

void loop() {
    int tempPwmCycle = 0;
    // put your main code here, to run repeatedly:
    if( cnt%2 == 0 )
    {
      sensors.requestTemperatures(); // 发送命令获取温度
      if( cnt%3 == 0 )
      {
        display.clearDisplay();
        Serial.print("Temperature for the device 1 (index 0) is: ");
        Serial.println(sensors.getTempCByIndex(0)); 

        display.setTextSize(1);      
        display.setCursor(0,0);                  // Start at top-left corner
        display.println(F("Current temp: "));

        display.setTextSize(2);                 // Normal 1:1 pixel scale
        display.setTextColor(SSD1306_WHITE);    // Draw white text
        display.setCursor(25,15);                // Start at top-left corner
        display.println(sensors.getTempCByIndex(0));
        display.display();
      }
    }

    if( sensors.getTempCByIndex(0) >= 20  )
    {
          tempPwmCycle = 100;
    }
    else
    {
          tempPwmCycle = 0;
    }

    if( pwmcycle !=  tempPwmCycle )
    {
        pwmcycle = tempPwmCycle;
        analogWrite(output1, pwmcycle);  
        analogWrite(output2, 0);  
    }
}

void timer_irq()
{                       
  cnt++;
}

3 测试

3.1 温度数据监控

采集和打印温度数据信息:

3.2 温控测试

温度值 Value > 20 ℃ ,开启风扇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/394724.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习(16)--基于经典网络架构resnet训练图像分类模型

一.项目介绍 使用PyTorch工具包调用经典网络架构resnet训练图像分类模型&#xff0c;用于分辨不同类型的花 二.项目流程详解 2.1.引入所需的工具包 import os import matplotlib.pyplot as plt # %matplotlib inline import numpy as np import torch from torch import nn …

三防平板丨平板终端丨加固平板丨户外勘测应用

随着科技的不断发展&#xff0c;现代勘测业也在不断升级。相较于传统的勘测设备&#xff0c;三防平板在户外勘测中有着广泛的应用。那么&#xff0c;三防平板在户外勘测中究竟有哪些优势呢&#xff1f; 首先&#xff0c;三防平板具备极强的防水、防尘、防摔能力。在野外勘测中&…

android studio模拟器不能打开

Andriod:The selected AVD is currently running in the Emulator. Please exit the emulator instance… 1.点击 2.删除下面文件 3.重新打开即可 参考

【XR806开发板试用】 UART串口通信篇

目录&#xff1a; 一. 环境配置 二. 串口通信 三. oled显示 总结&#xff1a;源码中有头文件及例子等。 一.环境配置 在https://aijishu.com/a/1060000000286755中已经写好。 二.UART串口通信 2.1 简单介绍 通用异步收发传输器&#xff08;Universal Asynchronous Receiv…

[Angular 基础] - 视图封装 局部引用 父子组件中内容传递

[Angular 基础] - 视图封装 & 局部引用 & 父子组件中内容传递 之前的笔记&#xff1a; [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 以上为静态页面&#xff0c;即不涉及到跨组…

APP出海类型有哪些?流量主如何选择广告变现平台?

APP出海成了目前的新趋势&#xff0c;对开发者而言&#xff0c;广告策略和流量分配的方法上也面临着诸多挑战。 一、APP出海类型 01、游戏类应用 游戏类应用是移动应用出海中最受欢迎的类型之一。这类应用通常具有较高的娱乐性和互动性&#xff0c;能够吸引大量用户下载和使…

Eclipse - Expressions Add Watch Expression

Eclipse - Expressions & Add Watch Expression References Window -> Show View -> Other… Show View -> Debug -> Expressions -> Open Debug 模式下出现 Expressions 窗口 Debug 模式下&#xff0c;如果需要查看指定变量或者返回函数的值&#xff0c;直…

区块链技术和Hyperledger Fabric介绍

1 区块链介绍 1.1 区块链技术形成 1.1.1 起源 在比特币诞生之时&#xff0c;技术专家们开始研究比特币的底层技术&#xff0c;并抽象提取出来&#xff0c;形成区块链技术&#xff0c;或者称分布式账本技术。 1.1.2 定义 简称BT&#xff08;Blockchain technology&#xff…

跨境电商无货源如何实现自动化对接1688货源商品上架?1688商品采集API来帮你

阿里巴巴集团旗下的B2B电子商务网站&#xff0c;提供海量优质商品&#xff0c;为采购商和供应商提供交流、合作、采购等服务&#xff0c;是很多没有货源优势的电商卖家首选的货源途径&#xff0c;也是国内最大、货源种类最齐全的货源网站。 不少做跨境电商无货源的朋友都想要直…

UE5 C++ UObject实例化

一.创建UObject C类 在MyObject中声明结构体FMyDataTableStruct 在MyPawn里面&#xff0c;先将头文件里包含 MyObject.h 在MyPawn中声明一个UMyObject类型的指针 TSubclassOf 是提供 UClass 类型安全性的模板类。例如您在创建一个投射物类&#xff0c;允许设计者指定伤害类型…

SSH密钥认证登陆流程(Vscode连接到远程)

目录 前言连接远程步骤1. 下载工具包wsCli到本地机器2. 本地机器上生成ssh密钥3. 在服务器上安装公钥4. vscode连接到远程 参考资料 前言 SSH&#xff08;Secure Shell&#xff09;是一种用于远程登录和安全传输数据的网络协议。它提供了两种主要的远程连接方式&#xff1a; 密…

迁移公众号必须公证吗?

公众号迁移的好处有哪些&#xff1f;迁移后原公众号还能用吗&#xff1f;公众号迁移的好处有很多哦&#xff01;比如可以获得更多权限功能、公司变更或注销时可以保证账号的正常使用、收购账号后可以改变归属权或使用权等等。不过要注意的是&#xff0c;迁移后原公众号就不能再…

用户权限管理系统需求分析(附文档下载)

整体目录 引言 1.1 项目简介 本文档对通用用户权限管理系统的总体设计、接口设计、界面总体设计、数据结构设计、系统出错处理设计以及系统安全数据进行了说明。 1.2 编写说明 1&#xff0e;3参考资料 《通用权限管理系统需求规格说明书》 《通用权限管理系统数据库设计说…

mysql 2-18

加密与解密函数 其他函数 聚合函数 三者效率 GROUP BY HAVING WHERE和HAVING的区别 子查询 单行子查询和多行子查询 单行比较操作符 多行比较操作符 把平均工资生成的结果当成一个新表 相关子查询 EXISTS 一条数据的存储过程 标识符命名规则 创建数据库 MYSQL的数据类型 创建表…

【RT-DETR有效改进】注意力与卷积的高效融合 | ACmix自注意力与卷积混合模型

一、本文介绍 本文给大家带来的改进机制是ACmix自注意力机制的改进版本&#xff0c;它的核心思想是&#xff0c;传统卷积操作和自注意力模块的大部分计算都可以通过1x1的卷积来实现。ACmix首先使用1x1卷积对输入特征图进行投影&#xff0c;生成一组中间特征&#xff0c;然后根…

DS:八大排序之归并排序、计数排序

创作不易&#xff0c;感谢三连支持&#xff01;&#xff01; 一、归并排序 1.1 思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子…

微服务OAuth 2.1认证授权Demo方案(Spring Security 6)

文章目录 一、介绍二、auth微服务代码1. SecurityConfig2. UserDetailsService3. 总结 三、gateway微服务代码1. 统一处理CORS问题 四、content微服务代码1. controller2. SecurityConfig3. 解析JWT Utils4. 总结 五、一些坑 书接上文 微服务OAuth 2.1认证授权可行性方案(Sprin…

【软考高级信息系统项目管理师--第十五章:项目风险管理】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;软考高级–信息系统项目管理师 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 第十五章&#xff1a;项目风险管理 风险的属性风险的分类风险管理过程规划风险管理…

Linux——开发工具的使用

目录 Linux软件包管理器 yum rzsz Linux编辑器——vim vim的使用 vim的基本操作 命令模式的常见命令 底行模式的常见命令 vim是需要配置的 Linux编译器——gcc/g 预处理 编译 汇编 链接 函数库 Linux项目自动化构建工具 make/makefile make原理 项目清理 Linux调试器g…

Home Assistant 接入小米空气净化器

一、在HACS中安装Xiaomi Miot Auto 二、Xiaomi Miot Auto配置基础信息(需要用米家APP加入该设备) 1、选择局域网集成 2、配置小米空气净化器设备基础信息 ip为小米空气净化器设备IP&#xff08;可在米家app中设备详情中查看也可在Get.token中查看&#xff09; Token可以使用Get…
最新文章