41 基于单片机的小车行走加温湿度检测系统

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于51单片机,采样DHT11温湿度传感器检测温湿度,滑动变阻器连接数码转换器模拟电量采集传感器,
电机采样L298N驱动,各项参数通过LCD1602显示,如果电量低于阈值,电机停止转动,小车停止前进;
如果电流高于阈值,则电机转动,这个电机采样两个电机,一个负责纵向,一个负责横向,纵向横向来回
转换;
如果温度/湿度高于程序里设置好得阈值 湿度阈值70,则蜂鸣器发出警报;

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

编辑

编辑

三、程序编程

#include <REGX52.H>#include<intrins.h>#include<stdio.h>#include "Delay.h"#include "LCD1602.h"#define uchar unsigned char#define uint unsigned  int
	sbit CS=P1^0;                 //adc0832引脚sbit CLK=P1^1;
sbit DIO=P1^2;
sbit beep=P3^4;
sbit out1 = P3^6;
sbit out2 = P3^7;
sbit out3 = P3^0;
sbit out4 = P3^1;
sbit Temp\_data=P2^6;  //DHT11unsigned char rec\_dat\_lcd0\[6\];unsigned char rec\_dat\_lcd1\[6\];unsigned char rec\_dat\_lcd2\[6\];unsigned char rec\_dat\_lcd3\[6\];unsigned int rec\_dat\[4\];static double u,U;static uchar wd,sd;static int num,num1,flag,flag1=0;static int wdyz=40,sdyz=70,dlyz=30;void DHT11\_delay\_us(unsigned char n);void DHT11\_delay\_ms(unsigned int z);void DHT11\_start();unsigned char DHT11\_rec\_byte();void DHT11\_receive();void beep\_warning();void cshq();void xspxs();void motorzx();void motorhx();//延时msvoid DHT11\_delay_ms(unsigned int z){    unsigned int i,j;    for(i=z; i>0; i--)        for(j=110; j>0; j--);
}//延时us   --2*n+5usvoid DHT11\_delay\_us(unsigned char n){    while(--n);
}//DHT11起始信号void DHT11_start(){
    Temp\_data=1;    DHT11\_delay_us(10);

    Temp\_data=0;    DHT11\_delay_ms(50);//这个延时不能过短,18ms以上,实际在仿真当中要想读到数据延时要在延时参数要在40以上才能出数据

    Temp\_data=1;    DHT11\_delay\_us(30);//这个延时不能过短}//接收一个字节unsigned char DHT11\_rec_byte(){    unsigned char i,dat=0;    for(i=0; i<8; i++)
    {        while(!Temp\_data);        DHT11\_delay_us(8);
        dat <<=1;        if(Temp_data==1)
        {
            dat +=1;
        }        while(Temp_data);
    }    return dat;
}//接收温湿度数据void DHT11\_receive(){    unsigned int R\_H,R\_L,T\_H,T\_L;    unsigned char RH,RL,TH,TL,revise;    DHT11\_start();
    Temp\_data=1;    if(Temp\_data==0)
    {        while(Temp_data==0);   //等待拉高
        DHT11\_delay\_us(40);  //拉高后延时80us

        R\_H=DHT11\_rec_byte();    //接收湿度高八位
        R\_L=DHT11\_rec_byte();    //接收湿度低八位
        T\_H=DHT11\_rec_byte();    //接收温度高八位
        T\_L=DHT11\_rec_byte();    //接收温度低八位
        revise=DHT11\_rec\_byte(); //接收校正位

        DHT11\_delay\_us(25);    //结束

        if((R\_H+R\_L+T\_H+T\_L)==revise)      //校正
        {
            RH=R_H;
            RL=R_L;
            TH=T_H;
            TL=T_L;

        }        /*数据处理,方便显示*/
        rec_dat\[0\]=RH;
        rec_dat\[1\]=RL;
        rec_dat\[2\]=TH;
        rec_dat\[3\]=TL;

    }

}void dht11(){
	      TR1 = 0;//	      DHT11\_delay\_ms(150);
        DHT11\_receive();	      sprintf(rec\_dat\_lcd0,"%d",rec\_dat\[0\]);        sprintf(rec\_dat\_lcd1,"%d",rec\_dat\[1\]);        sprintf(rec\_dat\_lcd2,"%d",rec\_dat\[2\]);        sprintf(rec\_dat\_lcd3,"%d",rec\_dat\[3\]);        DHT11\_delay_ms(100);
	      wd = rec\_dat\[3\]*10 + rec\_dat\[2\];
				sd = rec\_dat\[1\]*10 + rec\_dat\[0\];
	      TR1 = 1;

}void Time1Init()	//定时器1{
	TMOD |= 0x10;
	TH1   = (65536-57567)/256;
	TL1   = (65536-57567)%256;
	EA    = 1;
	ET1   = 1;
	TR1   = 1;
}void Time1Start() interrupt 3	  //定时器1中断{
	TH1   = (65536-57567)/256;
	TL1   = (65536-57567)%256;
	num++;	if(num == 2)//达到1s
	{		dht11(); //温湿度获取
		cshq();  //参数获取
		xspxs();  //显示屏显示
		beep_warning(); //状态判断
		num = 0; 
	}
	num1++;	if(num1 == 2)
	{		if(flag1 == 0)
		{		motorzx();//纵向行走
		Delay(200); 
		motorhx();  //横向行走
		Delay(200); 
		}		else
		{
			out1=0;
			out2=0;
			out3=0;
			out4=0;
		}
		num1 = 0;
	}
}uchar get\_AD\_Res()            //ADC0832启动读取函数{
	uchar i, data1=0, data2=0;
	CS=0;
	
	CLK=0;DIO=1;\_nop\_();
	CLK=1;\_nop\_();
	
	CLK=0;DIO=1;\_nop\_(); 
	CLK=1;\_nop\_();
	
	CLK=0;DIO=0;\_nop\_();
	CLK=1;\_nop\_();
	
	CLK=0;DIO=1;\_nop\_(); 
	
	for(i=0; i<8; i++)
	{
		CLK=1;\_nop\_();
		CLK=0;\_nop\_();
		data1=(data1<<1)|(uchar)DIO; 
	}	
	for(i=0; i<8; i++)
	{
		data2=data2|(uchar)DIO<<i;
		CLK=1;\_nop\_();
		CLK=0;\_nop\_();
	}
	CS=1;	
	return(data1 == data2)?data1:0;
}void beep_warning()//蜂鸣器警报并且电机转动{	if(wd>wdyz || sd>sdyz || U < dlyz)
	{
		flag = 1;
	}	else
	{
		flag = 0;
	}	
	if(U<dlyz)
	{
		flag1 = 1;
	}	else
	{
		flag1 = 0;
	}	if(flag == 1)
	{
		beep = 1;
	}	else
	{
		beep = 0;
	}
}void main()					  //主函数{	
	LCD_Init();         //显示屏初始化	
	Time1Init();    //定时器
	beep = 0;	while(1)
	{	
	} 
}void motorzx()  //纵向{
	out1 = 1;
	out2 = 0;
	out3 = 0;
	out4 = 0;
}void motorhx()  //横向{
	out1 = 0;
	out2 = 0;
	out3 = 1;
	out4 = 0;
}void xspxs()  //显示屏显示{	  LCD_ShowString(1,1,"wd:");	
		LCD_ShowNum(1,4,wd,2); //温度
	
	  LCD_ShowString(1,6,"sd:");	
		LCD_ShowNum(1,9,sd,2); //湿度
	  
	  LCD_ShowString(1,11,"dl:");	
		LCD_ShowNum(1,14,U,2); //电量
	
	   LCD_ShowString(2,1,"wd:");	
		LCD_ShowNum(2,4,wdyz,2); //温度
	
	  LCD_ShowString(2,6,"sd:");	
		LCD_ShowNum(2,9,sdyz,2); //湿度
	  
	  LCD_ShowString(2,11,"dl:");	
		LCD_ShowNum(2,14,dlyz,2); //电量
	}void cshq()  //参数获取{
	  u=get\_AD\_Res();
		U=(u/255)*99;
}

四、实现现象

具体动态效果看B站演示视频:

B站演示视频

基于单片机的小车行走加温湿度检测系统

全部资料(源程序、仿真文件、安装包、原理图、演示视频):

百度网盘资料下载https://pan.baidu.com/s/1T3THUMoisAv-Bmc30W869g?pwd=rnzb

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

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

相关文章

在VMware虚拟机上安装Kali Linux的详细教程(保姆级教程)

在VMware虚拟机上安装Kali Linux的详细教程 引言 Kali Linux是一个基于Debian的Linux发行版&#xff0c;专为渗透测试和安全审计而设计。它内置了数百种安全工具&#xff0c;广泛应用于网络安全领域。通过在VMware虚拟机上安装Kali Linux&#xff0c;您可以在不影响主操作系统…

30分钟学会正则表达式

正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成一个“规则字符串”&#xff0c;这个“规则字符串”用来表达对字符串的一种过滤逻辑。 作用 匹配 查看一个字符串是否符合正则表达式的语法 搜索 正…

spring-boot-maven-plugin 标红

情况&#xff1a;创建好 Spring Boot 项目后&#xff0c;pom.xml 文件中 spring-boot-maven-plugin 标红。 解决方案&#xff1a;加上 Spring Boot 的版本即可解决。

关于IDE的相关知识之三【插件安装、配置及推荐的意义】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于ide插件安装、配置及推荐意义的相关内容…

《通俗易懂 · JSqlParser 解析和构造SQL》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; 希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数&#xff0c;欢迎多多交流…

MySQL底层概述—7.优化原则及慢查询

大纲 1.Explain概述 2.Explain详解 3.索引优化数据准备 4.索引优化原则详解 5.慢查询设置与测试 6.慢查询SQL优化思路 1.Explain概述 使用Explain关键字可以模拟查询优化器来执行SQL查询语句&#xff0c;从而知道MySQL是如何处理SQL语句的&#xff0c;从而分析出查询语句…

从扩散模型开始的生成模型范式演变--SDE

SDE是在分数生成模型的基础上&#xff0c;将加噪过程扩展时连续、无限状态&#xff0c;使得扩散模型的正向、逆向过程通过SDE表示。在前文讲解DDPM后&#xff0c;本文主要讲解SDE扩散模型原理。本文内容主要来自B站Up主deep_thoughts分享视频Score Diffusion Model分数扩散模型…

NeuIPS 2024 | YOCO的高效解码器-解码器架构

该研究提出了一种新的大模型架构&#xff0c;名为YOCO&#xff08;You Only Cache Once&#xff09;&#xff0c;其目的是解决长序列语言模型推理中的内存瓶颈。YOCO通过解码器-解码器结构的创新设计&#xff0c;显著减少推理时的显存占用并提升了长序列的处理效率。 现有大模…

Android 设备使用 Wireshark 工具进行网络抓包

背景 电脑和手机连接同一网络&#xff0c;想使用wireshark抓包工具抓取Android手机网络日志&#xff0c;有以下两种连接方法&#xff1a; Wi-Fi 网络抓包。USB 网络共享抓包。需要USB 数据线将手机连接到电脑&#xff0c;并在开发者模式中启用 USB 网络共享。 查看设备连接信…

腾讯云 AI 代码助手:单元测试应用实践

引言 在软件开发这一充满创造性的领域中&#xff0c;开发人员不仅要构建功能强大的软件&#xff0c;还要确保这些软件的稳定性和可靠性。然而&#xff0c;开发过程中并非所有任务都能激发创造力&#xff0c;有些甚至是重复且乏味的。其中&#xff0c;编写单元测试无疑是最令人…

修改Docker 默认存储目录( Docker Root Dir: /var/lib/docker)

Docker 默认将所有的数据&#xff08;包括镜像、容器、卷等&#xff09;存储在 /var/lib/docker 目录下。这个目录默认被配置在系统的根分区或者较小的分区上。随着容器化应用的增加&#xff0c;或者 Docker 容器和镜像的数量增加&#xff0c;默认存储位置可能会迅速填满&#…

芯片测试-射频中的单位

射频中的单位 &#x1f4a2;dB&#xff0c;dBc&#x1f4a2;&#x1f4a2;dB&#x1f4a2;&#x1f4a2;dBc&#x1f4a2;&#x1f4a2;3dB和0dB&#x1f4a2; &#x1f4a2;dBm和dBw&#x1f4a2;&#x1f4a2;dBuV&#xff0c;dBmV和dBV&#x1f4a2;&#x1f4a2;dBuV&#…

hls视频流学习

hls格式播放的依赖安装&#xff1a; <!-- 新增hls播放库 -->npm install hls.js 组件封装&#xff1a; <template><div class"hls-player-cls"><video ref" video" controls style"width: 100%; max-width: 800px;">…

SAP Native SQL 的简单说明

Open SQL访问数据字典中声明的数据库表&#xff0c;不区分数据库类型&#xff0c;执行时会自动转换为对应的语句&#xff0c;且可以使用本地缓存。Native SQL使用特定于数据库的SQL语句,但是可以访问比Open SQL 更多的表&#xff0c;更多的操作&#xff0c;缺点也很明显&#x…

Python学习笔记之IP监控及告警

一、需求说明 作为一名运维工程师&#xff0c;监控系统必不可少。不过我们的监控系统往往都是部署在内网的&#xff0c;如果互联网出口故障&#xff0c;监控系统即使发现了问题&#xff0c;也会告警不出来&#xff0c;这个时候我们就需要补充监控措施&#xff0c;增加从外到内的…

QT去除窗口边框(无边框)

ch21_TencentMeetingLogin::ch21_TencentMeetingLogin(QWidget *parent): QDialog(parent) {ui.setupUi(this);this->setWindowFlags(Qt::FramelessWindowHint);//去除窗口边框 } 但此时窗口不能拖动且点击任务栏程序图标不能最小化&#xff01; this->setWindowFlags(Q…

vue实现弹窗输入验证码

实现思路&#xff1a;前端输入完账号和密码&#xff0c;点击登录按钮的时候&#xff0c;弹出一个输入验证码的窗口&#xff0c;后端把验证码图片通过base64的字符传给前端&#xff0c;前端把字符当成图片展示出来。输入完验证码&#xff0c;点击确认进行登录&#xff0c;把验证…

1.Shell变量

1.shell变量介绍 Linux Shell中的变量分为&#xff1a; 系统变量 和 用户自定义变量系统变量&#xff1a;$HOME、$PWD、$SHELL、$USER等等, 比如 echo $HOME显示当前shell所有变量 :set 2.自定义变量 2.1 语法规则 # 基本语法 1. 定义变量: 变量名值 2. 撤销变量: unset变量…

多线程篇-4--重点概念1(volatile,Synchronized,内存屏障,MESI协议)

一、volatile &#xff08;1&#xff09;、简述 volatile是java提供的一个关键字&#xff0c;英文意思为不稳定的。 可以保障被声明对象的可见性和一定程度上的有序性&#xff0c;但不能保证操作的原子性。 当一个变量被声明为volatile时&#xff0c;意味着该变量的值会直接从…

使用Yarn标签能力实现任务资源隔离

我们在工作或自己研究的时候&#xff0c;一般不关注yarn的lable能力&#xff0c;这主要因为业内大部分用的是公有云&#xff0c;即使有私有云或者是独占集群&#xff0c;集群的运维通常也是抛给厂商了&#xff0c;所以这就导致Label的能力被忽视了&#xff0c;并且这个能力默认…