2011_P10

Centru meteorologic


Project Description

Proiectul consta in proiectarea unui circuit electric, ce va fi folosit in scopul achizitionarii de date din mediul in care va fi amplasat. Implementarea circuitul pe o placuta de test si testarea fizica a functionalitatii este, de asemeanea, parte componenta a proiectului.

Datele achizitionate din mediu sunt:

  • Temperatura
  • Umiditate

Aceste informatii despre starea curenta a mediul vor fi culese de 2 senzori, unul pentru temperatura, iar celalalt pentru umiditate. Dupa ce sunt prelucrate, valorile sunt trimise printr-o conexiune seriala catre placa EV/Z3, unde vor fi afisate.

 

Project Requirements

Vom folosi 2 senzori pentru a culege date: temperatura si umiditate. Folosind convertorul analog-digital al microcontroller-ului, vom face trecerea din continuu in discret. Informatiile discretizate sunt apoi prelucrate, serializate, si trimise catre interfata seriala a placutei EV/Z3. Proiectul in sine nu are elemente fizic active, cu exceptia butonului de RESET care reporneste microcontroller-ul. In schimb, trimite pasiv o data la 5 secunde informatiile despre temperatura si umiditate, fara a fi necesara activarea unui switch ,apasarea unui buton sau executarea unei comenzi.

 

User Flow

Pentru a pune in functiune proiectul este necesara si suficienta alimentarea de la o sursa de 5V curent continuu. Imediat dupa alimentare, datele de la senzori vor incepe sa fie trimise, trecand prin tot procesul de la culegerea acestora pana la afisarea pe ecranul placutei EV/Z3. Etapele sunt: citire, conversie, prelucrare, serializare, transmisie, afisare.

Proiectul este folosit in vederea achizitionarii de date despre mediul inconjurator (temperatura si umiditate). Poate fi folosit pentru a citi valorile acestor parametrii intr-o incapere de dimensiuni medii sau mici. O implementare mai sofisticata ar consta in integrarea circuitului intr-un sistem de reglare automata a temperaturii intr-o camera sau diverse incinte, placuta avand rolul de senzor si traductor.

Imagini relevante:

Layout placuta

Senzori

Microcontroller

Transceiver

Conectori

 

Required components

Lista de componente:

  • Microcontroller PIC16F870
  • Stabilizator de tensiune LM7805
  • Transceiver RS-232 MAX232
  • Senzor de temperatura LM35
  • Senzor de umiditate SYH-1S
  • Oscilator quart 4MHz
  • Conector DB-9 pentru comunicatie seriala
  • Conector DB-9 pentru programare microcontroller
  • Doua cabluri seriale
  • Condensatori si rezistente de diferite valori
  • Sursa de tensiune continua de 5V

Schema montajului in Proteus:

Schema Proteus

 

Software Design

Codul sursa folosit pentru programarea microcontroller-ului:

unsigned char t[12],ch1,ch2;//variabile in care stocam temperatura
void Newline()//trece la linie noua in afisare
{
UART1_Write(0x0D);//scrie feed forward pe seriala
UART1_Write(0x0A);//scrie carriage return
}
void text_to_usart(unsigned char *m)//functia ce trimite un sir de caractere
{
unsigned char i;
i = 0;
while(m[i]!=0)
{
UART1_Write(m[i]);
i++;
}
}
void Get_temp()//aici preluam datele de la senzorul de temp si le pune in formatul
//grade celsius
{
unsigned long Vin, Vdec, Vfrac;
unsigned char op[12],i,j;
Vin = Adc_Read(0);//citeste valoarea de la senzor
//*******************
//prelucram informatia pt a obtine grade celsius
Vin = 488*Vin;
Vin = Vin/10;
Vdec = Vin/100;
Vfrac = Vin%100;
//*******************
//transformam valoarea obtinuta in caractere pt a trimite pe seriala
LongToStr(Vdec,op);
j=0;
for(i=0;i<=11;i++)
{
if(op[i]!=' ')
{
t[j] = op[i];
j++;
}
}
t[j] = '.';
ch1 = Vfrac/10;
ch2 = Vfrac%10;
j++;
t[j] = 48+ch1;
j++;
t[j] = 48+ch2;
j++;
t[j] = 0x0D;
j++;
t[j] = 0x0A;
j++;
t[j] = '\0';
}
void main()
{
unsigned long Vin2;
unsigned char op2[12],u[5],j,i;
TRISC = 0;
TRISA = 0xFF;//initializare port A ca input
ADCON1 = 0x82;//configurare ADC
UART1_Init(9600);//configurare seriala

while(1)
{       //***************************
//citirea si scrierea valorii umiditatii
Vin2 = Adc_Read(1);
Vin2 = Vin2*5000/1024;
Vin2 = (Vin2/100)+37;
//***************************
//conversia in caractere
LongToStr(Vin2,op2);
j=0;
for(i=0;i<=11;i++)
{
if(op2[i]!=' ')
{
u[j] = op2[i];
j++;
}
}
//*************************
//trimiterea efectiva a valorilor obtinute pe seriala
UART1_Write_Text("t = ");
Get_temp();
for(i=0;i<=strlen(t)+2;i++)
UART1_Write(t[i]);
//text_to_usart(t);
Newline();
UART1_Write_Text("u = ");
text_to_usart(u);
Newline();
//*************************

Imagine cu IDE-ul:

IDE

 

Results

Imagine cu proiectul functional, trimitand datele cu privire la temperatura (t) si umiditate (u) prin conexiunea seriala a calculatorului, si afisandu-le in interfata HyperTerminal a Windows XP:

Functional

Download

Arhiva cu schema in Proteus si codul sursa folosit pentru programarea microcontroller-ului aici.

 

Status

4 Mai - Toate componentele conectate pe placuta

6 mai - Finalizare soft pentru placuta EV/Z3

10 mai - Programare microcontroller

12 mai - Proiect finalizat