Chat
Danh mục
Hệ thống giám sát Nhiệt độ độ ẩm DHT11 - Module Sim

Hệ thống giám sát Nhiệt độ độ ẩm DHT11 - Module Sim

Số lượng:
Thêm vào giỏ
Hệ thống giám sát Nhiệt độ độ ẩm DHT11 - Module Sim đã được thêm vào giỏ hàng



Chia sẻ với các bạn file Đồ án lập trình chip Atmega 8 sử dụng cảm biến nhiệt độ độ ẩm phổ thông DHT11 - Cảnh báo qua Module SIM do bạn CTV Dao Nguyen viết.

File gồm:
- Mô phỏng Protues 8.6
- Code C Codevison AVR
- Nguyên lý layout Orcad/ Altium các bạn cần vẽ nhanh liên hệ thông tin bên dưới nhé.

File Code C:

#include <mega8.h>
#include <delay.h>
#include <stdio.h>
#include <string.h>

#define LCD_RS  PORTC.2 
#define LCD_RW  PORTC.1 
#define LCD_EN  PORTC.0     
#define LCD_D4  PORTB.4 
#define LCD_D5  PORTB.3
#define LCD_D6  PORTB.2
#define LCD_D7  PORTB.1

#define DHT11_in PINB.0
#define DHT11_out PORTB.0
#define DHT11_define DDRB.0

#define up    PIND.5
#define down  PIND.6
#define mode  PIND.7

eeprom unsigned char max_nhietdo;
eeprom unsigned char max_doam;

//---------------------------------Chuong trinh giao tiep LCD--------------------------------//
// Ham cho phep hien thi len LCD
void LCD_Enable(void)
{
    LCD_EN = 1;
    delay_us(3);
    LCD_EN = 0;
    delay_us(50);
}
// Ham gui 4 bit
void LCD_Send4Bit(unsigned char Data)
{
    LCD_D4 = Data & 0x01;
    LCD_D5 = (Data>>1)&1;
    LCD_D6 = (Data>>2)&1;
    LCD_D7 = (Data>>3)&1;
}
// Ham gui 1 Byte du lieu
void LCD_Send1Byte(unsigned char byte)
{
    LCD_Send4Bit(byte >>4);/* Gui 4 bit cao */
    LCD_Enable();
    LCD_Send4Bit(byte); /* Gui 4 bit thap*/
    LCD_Enable();
}
// Ham di chuyen con tro: row=0-1; col=0-15 (2 hang + 16 cot)
void LCD_chonvitri(unsigned char row, unsigned char col)
{
    unsigned char address; 
    if (row == 0) address = (0x80 + col);     // row=0 - hang 1
    else address = (0xC0 + col);             // row=1 - hang 2
    delay_us(1000);
    LCD_Send1Byte(address);
    delay_us(50);
}
// Ham hien thi ra man hinh chuoi ki tu
void LCD_guichuoi(char *s)
{
    while (*s)
    {
        LCD_RS=1;
        LCD_Send1Byte(*s);
        LCD_RS=0;
        s++;
    }
}
void LCD_guikitu(int s)
{
        LCD_RS=1;
        LCD_Send1Byte(s);
        LCD_RS=0; 
 
}
// Ham xoa man hinh
void LCD_xoamanhinh()
{
    LCD_chonvitri(0,0);
    LCD_guichuoi("                ");
    LCD_chonvitri(1,0);
    LCD_guichuoi("                ");
    LCD_chonvitri(0,0);
}
// Ham khoi tao LCD
void LCD_khoitao()
{
    LCD_Send4Bit(0x00);
    delay_ms(20);
    LCD_RS = 0;
    LCD_Send4Bit(0x03);     //
    LCD_Enable();
    delay_ms(5);
    LCD_Enable();
    delay_ms(100);
    LCD_Enable();
    LCD_Send4Bit(0x02); // dua con tro ve dau man hinh
LCD_Enable();
LCD_Send1Byte(0x28);
LCD_Send1Byte(0x0C); // 0x0E Bat hien thi, bat con tro 0x0C neu muon tat con tro
LCD_Send1Byte(0x06);   
LCD_xoamanhinh();         
delay_ms(20);
}

//---------------------------Chuong trinh giao tiep UART--------------------------------//
void UART_guikitu(unsigned char _data)
{
  while(!(UCSRA & (1<<UDRE))); //kiem tra UDRE
  UDR=_data;
}
void UART_guichuoi(unsigned char *u)
{
  unsigned char n,i; 
  n=strlen(u); //Dem so ky tu
  for(i=0;i<n;i++) UART_guikitu(u[i]);//Gui het chuoi
}
//--------------------------------------------------------------------------------------//
unsigned char doc_nhietdo_doam(unsigned char *tem,unsigned char *humi)
{
 unsigned char data[5]={0},i,j,check;
 DHT11_define=1; //out
 DHT11_out=1;
 delay_us(60);
 DHT11_out=0;
 delay_ms(25);
 DHT11_out=0;
 DHT11_define=0; //in
 delay_us(60);
 if(DHT11_in)return 0; else while(!DHT11_in);
 delay_us(60);
 if(!DHT11_in)return 0; else while(DHT11_in);
 for(i=0;i<5;i++)
 {
  for(j=0;j<8;j++)
  {
   while(!DHT11_in);
   delay_us(50);
   if(DHT11_in)
   {
    data[i]|=(1<<(7-j)); 
    while(DHT11_in);
   }
  }
 }
 check=data[0]+data[1]+data[2]+data[3];
 if(check !=data[4])return 0;
 *tem=data[2];
 *humi=data[0];
 return 1;
}
void main(void)
{
unsigned char nhietdo,doam;
unsigned char kt1=1,kt2=1,SMS[99],a;

UCSRB=0x98;//Ngat RX, cho phep RX va TX
UCSRC=0x86;//8bit uart, 1bit stop, no parity
UBRRL=71;//baud 9600bps
PORTB=0xff;
DDRB=0xff;

PORTC=0xff;
DDRC=0xff;

PORTD=0xff;
DDRD=0x00;
LCD_RW=0;
LCD_khoitao();
LCD_guichuoi("-DANG KHOI DONG-");
delay_ms(3000);
LCD_xoamanhinh();
if(max_doam>99)max_doam=0;
if(max_nhietdo>99)max_nhietdo=0;
LCD_chonvitri(0,0);LCD_guichuoi("N.do:");
LCD_chonvitri(1,0);LCD_guichuoi("D.am:");
while (1)
      {       
          if(doc_nhietdo_doam(&nhietdo,&doam));     
          LCD_chonvitri(0,5);
          LCD_guikitu(nhietdo/10+48);LCD_guikitu(nhietdo%10+48);LCD_guikitu(0xDF);LCD_guikitu('C');
          LCD_guichuoi(" MAX=");LCD_guikitu(max_nhietdo/10+48);LCD_guikitu(max_nhietdo%10+48);
          LCD_chonvitri(1,5);
          LCD_guikitu(doam/10+48);LCD_guikitu(doam%10+48);LCD_guikitu(0x25);LCD_guikitu(' '); 
          LCD_guichuoi(" MAX=");LCD_guikitu(max_doam/10+48);LCD_guikitu(max_doam%10+48);     
          //-------Check phim----------------------------------------------------------//
          if(mode==0)
          {       
           delay_ms(20);while(mode==0);         
           LCD_chonvitri(1,0);
           LCD_guichuoi("                ");                     
           while(1)
           {
            LCD_chonvitri(0,14);
            LCD_guikitu(max_nhietdo/10+48); 
            LCD_guikitu(max_nhietdo%10+48);                     
            if(up==0){max_nhietdo++;if(max_nhietdo>99)max_nhietdo=0;delay_ms(300);}
            if(down==0){if(max_nhietdo>0)max_nhietdo--;else max_nhietdo=99;delay_ms(300);}       
            if(mode==0)
            {
             delay_ms(20);
             LCD_chonvitri(1,0);LCD_guichuoi("D.am:"); 
             LCD_guikitu(doam/10+48);LCD_guikitu(doam%10+48);LCD_guikitu(0x25);LCD_guikitu(' '); 
             LCD_guichuoi(" MAX=");LCD_guikitu(max_doam/10+48);LCD_guikitu(max_doam%10+48); 
             while(mode==0);
             LCD_chonvitri(0,0);
             LCD_guichuoi("                ");
             while(1)
             {
              LCD_chonvitri(1,14);
              LCD_guikitu(max_doam/10+48); 
              LCD_guikitu(max_doam%10+48);                     
              if(up==0){max_doam++;if(max_doam>99)max_doam=0;delay_ms(300);}
              if(down==0){if(max_doam>0)max_doam--;else max_doam=99;delay_ms(300);}
              if(mode==0)
              {
                delay_ms(20);
                LCD_chonvitri(0,0);LCD_guichuoi("N.do:");
                LCD_guikitu(nhietdo/10+48);LCD_guikitu(nhietdo%10+48);LCD_guikitu(0xDF);LCD_guikitu('C');
                LCD_guichuoi(" MAX=");LCD_guikitu(max_nhietdo/10+48);LCD_guikitu(max_nhietdo%10+48);
                while(mode==0);goto thoat;
              }
             }
            }                       
           }
           thoat:;
          } 
          //-------------------------------------------------------------------------------//
          //Kiem tra va SEND SMS canh bao
          if(nhietdo>max_nhietdo && kt1==1 &&max_nhietdo!=0)
          {
           kt1=0;
           UART_guichuoi("AT+CMGS=\"01694733311\"\r\n");UART_guikitu(0x0D);
           delay_ms(500);                   
           sprintf(SMS,"CANH BAO : nhiet do hien tai la %i, vuot qua nhiet do cho phep !\r\n",nhietdo);
           UART_guichuoi(SMS);delay_ms(500);
           UART_guikitu(0x1A);
           for(a=0;a<50;a++)SMS[a]='\0';
           LCD_xoamanhinh();LCD_guichuoi("---Dang gui SMS---");
           delay_ms(7000); // cho gui tin nhan             
           LCD_xoamanhinh();
                LCD_chonvitri(0,0);LCD_guichuoi("N.do:");
                LCD_guikitu(nhietdo/10+48);LCD_guikitu(nhietdo%10+48);LCD_guikitu(0xDF);LCD_guikitu('C');
                LCD_guichuoi(" MAX=");LCD_guikitu(max_nhietdo/10+48);LCD_guikitu(max_nhietdo%10+48);
                LCD_chonvitri(1,0);LCD_guichuoi("D.am:"); 
                LCD_guikitu(doam/10+48);LCD_guikitu(doam%10+48);LCD_guikitu(0x25);LCD_guikitu(' '); 
                LCD_guichuoi(" MAX=");LCD_guikitu(max_doam/10+48);LCD_guikitu(max_doam%10+48);   
          }                                 
          else if(nhietdo<max_nhietdo)kt1=1; 
          if(doam>max_doam && kt2==1 && max_doam!=0)
          {
           kt2=0;
           UART_guichuoi("AT+CMGS=\"01694733311\"\r\n");UART_guikitu(0x0D);
           delay_ms(500);                   
           sprintf(SMS,"CANH BAO : do am hien tai la %i, vuot qua do am cho phep !\r\n",doam);
           UART_guichuoi(SMS);delay_ms(500);
           UART_guikitu(0x1A);               
           for(a=0;a<50;a++)SMS[a]='\0';
           LCD_xoamanhinh();LCD_guichuoi("---Dang gui SMS---");
           delay_ms(7000); // cho gui tin nhan             
           LCD_xoamanhinh();
                LCD_chonvitri(0,0);LCD_guichuoi("N.do:");
                LCD_guikitu(nhietdo/10+48);LCD_guikitu(nhietdo%10+48);LCD_guikitu(0xDF);LCD_guikitu('C');
                LCD_guichuoi(" MAX=");LCD_guikitu(max_nhietdo/10+48);LCD_guikitu(max_nhietdo%10+48);
                LCD_chonvitri(1,0);LCD_guichuoi("D.am:"); 
                LCD_guikitu(doam/10+48);LCD_guikitu(doam%10+48);LCD_guikitu(0x25);LCD_guikitu(' '); 
                LCD_guichuoi(" MAX=");LCD_guikitu(max_doam/10+48);LCD_guikitu(max_doam%10+48);   
          }                                 
          else if(doam<max_doam)kt2=1; 
       
      }
}

DOWNLOAD FULL:

( Nguyên lý + Code chuẩn) Link Mediafire
Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút  hiện ra ở góc phải phía trên, nhấn vào để đến trang download
------------------------------------------------------------------------------------
DV1 - Nhận vẽ mạch thuê ONLINE Altium Designer/ Orcad 9.2/ Protues nhanh trong ngày



-----------------------------------------------------------------------------------

DV2 - Mua linh kiện về làm mạch nhanh - Miễn phí Ship





DV3 - Kênh youtube chia sẻ kiến thức điện tử thực hành ngay


DV4 - Kênh cộng đồng Facebook Điện Tử ChipKool




eChipKool - Chia sẻ kiến thức Kết Nối đam mê điện tử