51 マイコン DHT11 温湿度制御システム シミュレーション設計 (プロテウス シミュレーション + プログラム + 回路図 + レポート + 説明ビデオ)


51 マイコン DHT11 温湿度制御システム シミュレーション設計 (プロテウス シミュレーション + プログラム + 回路図 + レポート + 説明ビデオ)

シミュレーション図proteus8.9及以上

プログラムコンパイラ:keil 4/keil 5

プログラミング言語:C言語

デザイン番号:S0044

1.主な機能:

学んだ知識を使用して、51 マイクロコントローラーに基づいた温度および湿度コントローラーのプロテウス シミュレーション設計を作成します。

1. ボタンで温度と湿度の上限と下限を調整すると、温度と湿度が上限と下限を超えたときに対応する回路が動作し、システムは冷却モジュール、加熱モジュール、除湿モジュール、加湿モジュールをシミュレートします。リレーを介して。温度と湿度の自動制御を実現します。

2. システムは DHT11 センサーを使用します。

3. LCD1602 を使用して、現在の温度、湿度、設定値を表示します。

4. デフォルトの温度の下限は 20°C、温度の上限は 30°C です。湿度の下限は30%、湿度の上限は80%である。

シミュレーションにおける 51 マイクロコントローラー チップはユニバーサルであることに注意してください。AT89C51 と AT89C52 は 51 マイクロコントローラーの特定のモデルであり、コアは互換性があります。原理图不变情况下、stcもatも同じ、端子機能もプログラムも同じなので、STC89C52/STC89C51/AT89C52/AT89C51など51個のマイコンチップに置き換えることが可能です。

この設計情報の表示図は次のとおりです。

2. シミュレーション

シミュレーションを開始する

シミュレーション プロジェクトを開き、proteus でマイクロコントローラーをダブルクリックし、16 進数ファイルのパスを選択して、シミュレーションを開始します。シミュレーションを開始すると、LCD1602 に温度と湿度が表示されます。

画像

シミュレーション中に、ボタンを押して表示値を変更し、DHT11 温湿度モジュールの値を調整します。

画像

画像上矢印と下矢印を使用して、温度/湿度の値を変更します。下矢印は値を減少させ、上矢印は値を増加させます。画像この矢印を使用して、調整値が温度か湿度かを変更します。

画像変更されたアイコンは湿度と温度の値を表示しており、1行目は湿度値、2行目は温度値です。

シミュレーションを開始した後、[設定/切り替え] ボタンを押して上限と下限のしきい値を調整します。デフォルトの下限温度は 20°C、上限温度は 30°C です。湿度の下限は30%、湿度の上限は80%である。

画像

シミュレーションを開始し、湿度が上限しきい値の 80% を超えるように湿度を調整すると、除湿モジュールが動作を開始し、湿度が上限を超えると赤色のインジケーター ライトが点灯します。

画像

シミュレーションを開始し、下限湿度しきい値より 30% 低くなるように湿度を調整すると、加湿モジュールが動作を開始し、赤色のインジケーター ライトが点灯します。

画像

シミュレーションの開始後、調整された温度が上限温度しきい値を 30°C 超えると、冷却モジュールが動作を開始し、赤色のインジケーター ライトが点灯します。

画像

シミュレーションを開始し、温度を下限温度しきい値より 20°C 低く調整すると、モジュールが動作を開始し、赤色のインジケータ ライトが点灯します。

画像

3. プログラムコード

keil4 または keil5 を使用してコンパイルすると、コードにはコメントが付いており、レポートと合わせてコードの意味を理解できます。

画像
メインプログラムコード

#include "reg51.h"
#include "lcd1602.h"
#include "DHT11.h"
#define uchar unsigned char
#define uint unsigned int
sbit k1=P1^0;//按钮
sbit k2=P1^1;
sbit k3=P1^2;
sbit out1=P1^3;//输出控制
sbit out2=P1^4;
sbit out3=P1^5;
sbit out4=P1^6;

uchar time=0,mode=0;//系统变量
uchar disp1[]="00 ";
uchar lim1=20,lim2=30,lim3=30,lim4=80;//阀值

void main()//主函数
{
    
    
	init_1602();
	TMOD|=0X01;
	TH0=0X3C;
	TL0=0XB0;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	while(1)
	{
    
    
		if(!k1)//设置
		{
    
    
			if(mode<4)
				mode++;
			else
				mode=0;
			write_com(1);
			while(!k1);
		} 
		if(!k2)//加
		{
    
    
			switch(mode)
			{
    
    
				case 1:
					if(lim1<lim2)
						lim1++;
					break;
				case 2:
					if(lim2<99)
						lim2++;
					break;
				case 3:
					if(lim3<lim4)
						lim3++;
					break;
				case 4:
					if(lim4<99)
						lim4++;
			}
			while(!k2);
		}
		if(!k3)//减
		{
    
    
			switch(mode)
			{
    
    
				case 1:
					if(lim1>0)
						lim1--;
					break;
				case 2:
					if(lim2>lim1)
						lim2--;
					break;
				case 3:
					if(lim3>0)
						lim3--;
					break;
				case 4:
					if(lim4>lim3)
						lim4--;
			}
			while(!k3);
		}
	}
}
//定时器中断
void Timer0() interrupt 1
{
    
    
	if(time<10)//0.5s
		time++;
	else
	{
    
    
		time=0;
		dht11_recive();//测量温湿度
		if(dht11_dat[2]<lim1)//加热
			out2=0;
		else
			out2=1;
	   	if(dht11_dat[2]>lim2)//散热
			out1=0;
		else
			out1=1;
		if(dht11_dat[0]<lim3)//加湿
			out4=0;
		else
			out4=1;
	   	if(dht11_dat[0]>lim4)//除湿
			out3=0;
		else
			out3=1;
		//显示
		write_com(0x0c);
		if(mode==0)//正常模式
		{
    
    
			disp1[0]=dht11_dat[2]/10+0x30;
			disp1[1]=dht11_dat[2]%10+0x30;
			disp1[2]='C';
			write_string(1,0,"Temp:");
			write_string(1,5,disp1);
			disp1[0]=dht11_dat[0]/10+0x30;
			disp1[1]=dht11_dat[0]%10+0x30;
			disp1[2]='%';
			write_string(2,0,"Humi:");
			write_string(2,5,disp1);
		}
		else	//设置模式
		{
    
    
			disp1[0]=lim1/10+0x30;
			disp1[1]=lim1%10+0x30;
			disp1[2]='C';
			write_string(1,0,"TL:");
			write_string(1,3,disp1);
			disp1[0]=lim2/10+0x30;
			disp1[1]=lim2%10+0x30;
			disp1[2]='C';
			write_string(1,8,"TH:");
			write_string(1,11,disp1);

			disp1[0]=lim3/10+0x30;
			disp1[1]=lim3%10+0x30;
			disp1[2]='%';
			write_string(2,0,"HL:");
			write_string(2,3,disp1);
			disp1[0]=lim4/10+0x30;
			disp1[1]=lim4%10+0x30;
			disp1[2]='%';
			write_string(2,8,"HH:");
			write_string(2,11,disp1);
			//设置光标
			switch(mode)
			{
    
    
				case 1:write_sfm(1,4);break;
				case 2:write_sfm(1,12);break;
				case 3:write_sfm(2,4);break;
				case 4:write_sfm(2,12);
			}
			write_com(0x0e);
		}
	}
	TH0=0X3C;
	TL0=0XB0;
}

4. 概略図

模式図はADを使用して描画されており、物理オブジェクトとリンクするための参考として使用できます。シミュレーションは物理オブジェクトとは異なります。経験の浅い場合は、物理オブジェクトを安易に作成しないでください。初心者は物理的なオブジェクトを作成するときに多くの愚かな間違いを犯し、多くの時間を費やしますが、この設計は物理的なオブジェクトに関する質問に対する答えを提供しません。

Proteus シミュレーションと物理的な作業の違い:

1. 実行環境: Proteus シミュレーションはコンピュータ上で実行されますが、実物はハードウェア回路基板上で実行されます。

2. デバッグ方法: Proteus シミュレーションでは、シングルステップ デバッグを簡単に実行して変数値の変化を観察できますが、実際のオブジェクトでは、デバッガーまたはシリアル ポート出力を通じてデバッグする必要があります。

回路接続方法: Proteus シミュレーションでは、回路接続はソフトウェア設定を通じて変更できますが、実際にはハードウェア回路基板と接続ワイヤを通じて変更する必要があります。

3. 実行速度: Proteus シミュレーションはコンピュータ操作に基づいているため、通常、実物よりも高速に実行されますが、実物は回路基板の物理的制限やデバイスの応答時間などの要素を考慮する必要があります。

4. 機能の実現: Proteus シミュレーションでは、ソフトウェアの設定によってさまざまな機能を実現できますが、実際のオブジェクトでは、回路設計とデバイスの性能に応じて実現する必要があります。

ここに画像の説明を挿入します

パーツリスト

コンポーネントモデルの数 マイクロコントローラ
AT89C51 1
コンデンサ 10uf 1
コンデンサ 30pf 2
水晶発振器 12MHZ 1
抵抗 10k 1
ボタン 4
温湿度センサー DHT11 1
ポテンショメータ 1k 2
LED 赤 4
抵抗 100 オーム 4
抵抗 1k 4
トランジスタ PNP 4
リレー 5V 4
ディスプレイ LCD1602 1行
抵抗 10k 1

安定化電源部
ピンヘッダー 2P 1
コンデンサ 0.1uf 2
コンデンサ 100uf 2
ボルテージレギュレータ 7805 1

5. 設計レポート

7386 ワードの設計レポート。設計ブロック図、概要、ハードウェア設計の概要、ソフトウェア設計の概要、シミュレーション デバッグ、概要、参考資料が含まれます。

画像

6. 設計情報コンテンツ一覧とダウンロードリンク

マテリアルデザイン資料には、シミュレーション、プログラムコード、解説ビデオ、機能要件、設計レポート、ソフトウェアおよびハードウェアの設計ブロック図などが含まれます。

0. 使用上の一般的な問題と解決策 - 必読!

1. シミュレーション図

2. プログラムのソースコード

3. 提案報告書

4. 概略図

5. 機能要件

6. コンポーネントリスト

7. 設計レポート

8. ソフトウェアおよびハードウェアのフローチャート

9. 解説動画

Altium Designer ソフトウェア情報

KEIL ソフトウェア情報

プロテウス ソフトウェア情報

マイコン学習教材

防御スキル

設計レポートの共通説明

マウスをダブルクリックして開くと、詳細が表示されます。 51 STM32 マイクロコントローラー コース卒業プロジェクト.url

画像

データのダウンロード リンク (クリック可能):

おすすめ

転載: blog.csdn.net/weixin_52733843/article/details/132672318