Sunteți pe pagina 1din 24

Microcontrolere

Proiect

Profesor Indrumator

Student

S.I.dr.ing. Angel Ciprian Cormos

Nae Adrian

Microcontrolere

Page 2

Cuprins
1.Cuprins.....................................................................2
2.Prezentare generala.....................................................3
2.1 Descrierea comerciala.............................................3
2.2 Scurt istoric.........................................................4
3.Proiectare conceptuala..................................................5
3.1 Schema Bloc.........................................................5
3.2 Descrierea Blocurilor...............................................6
4.Prezentare placa de dezvoltarea Easy AVR...........................8
5.Proiectare Hardware....................................................10
5.1 Schema electrica placa emisie..................................10
5.2 Schema electrica placa receptie................................12
6. Cablaj imprimat.........................................................14
6.1 PCB placa emisie...................................................14
6.2 PCB placa receptie.................................................14
7.Proiectare Software......................................................15
7.1 Organigrama codului...............................................15
7.2 Codul sursa placa emisie..........................................16
7.3 Codul sursa placa receptie........................................19
8.Masuri de siguranta si mentenanta....................................22
9.Costuri productie.........................................................23
10.Biografie..................................................................24

Microcontrolere

Page 3

2.Prezentare generala
2.1.Descrierea comerciala
Stiati ca o valoare ridicata a umiditatii poate genera conditii favorabile inmultirii
agentilor patogeni, alergenilor sau aparitia mucegaiului?
Umiditatea este un factor important n meninerea
nivelurilor optime de confort i a unei caliti bune
a aerului n interior.
O valoarea a umiditatii prea scazuta provoaca o
senzatie de frig organismului si uscaciune in gat.
Totodata, favorizeaza aparitia acarienilor, virusilor
si bacteriilor care pot duce la infectii respratorii.
O valoare a umiditatii prea ridicata provoaca o senzatie
de fierbinte, iar organismul nu mai reuseste sa-si elimine
surplusul caloric prin transpiratie.
Un mediu prea umed reprezinta un mediu de
inmultire propice pentru bacterii si paraziti, ceea ce duce
implicit la aparitia mucegaiului si a igrasiei.
De aceea,umiditatea este un factor important n meninerea nivelurilor optime de
confort i a unei caliti bune a aerului interior, nivelul optim sanatatii fiind cuprins intre
40% - 60%.
Niciodat nu a fost mai simplu s controlai climatul interior i s aveti grija de
sanatate!
Umidometrul digital este un dispozitiv versatil folosit pentru determinarea nivelului de
apa din aer.
Cu o greutate redusa, usor de utilizat si un design
ergonomic, acesta permite determinarea rapida si precisa a
umiditatii aerului din dormitor, laborator sau chiar depozit.
Un ecran LCD cu functia de modificare a contrastului
permite vizualizarea permanenta a informatiilor despre
valoarea umiditatii relative din interior, gama de masurare a
acesteia fiind intre 10-95%.
Un toc rezistent pentru acoperirea senzorului, confera performan i via lung.
Beneficiind de o dimesiune redusa si o greutate de 143g, acest dispozitiv cu functii
multiple poate fi montat cu usurinta pe un perete sau pozitionat in picioare cu ajutorul
suportului integrat. Bateria de alimentare garanteaza o durata lunga de viata a acestui
umidometru de calitate excelenta si cu aspect deosebit.

Microcontrolere

Page 4

2.2 Scurt istoric


Umidometrul este un dispozitiv care masoara cantitatea de apa aflata
intr-un esantion de aer.
Cel mai cunoscut umidometru este
Psychometrul ud si uscat e compus din doua
termometre cu mercur, unul avand baza uscata
iar celalalt are la baza un recipient cu apa.
Apa din recipient se evapora absorbind caldura,
deci indicatia termometrului va scadea.
Umiditatea relativa se determina pe baza unui
tabel de calcul si a indicatiilor celor 2
termometre.

Un alt tip de hidrometru timpuriu este


cel cu par uman (blond).
Aceste dispozitive mecanice se bazeaza
pe principiul ca parul uman isi schimba
volumul ca raspuns al umiditatii relative.
Contractia si dilatarea parului
actioneaza un ac indicand astfel
umiditatea.
In 1783, fizicianul elvetian si geolog , Horace Benedict de Saussure a construit
primul higrometru cu fir de pr uman.
Leonardo da Vinci a construit primul higrometru brut n 1400 .
Francesco Folli a inventat un higrometru mai practic n 1664 .

Page 5

Microcontrolere

3.Proiectare conceptuala
3.1 Schema bloc

Emisie
Alimentare

Receptie
Afisaj LCD

Senzor
Umiditate

Convertor
Analog
Digital

Convertor
Numeric

Microcontroler
Atmega16

Codare

Microcontroler
Atmega16

Decodare

Convertor
Max232

Convertor
Max232

Mufa
RS232

Mufa
RS232

Microcontrolere

Page 6

3.2 Descrierea blocurilor


Blocul de alimentare : realizeaza conectarea circuitului la sursa
externa de tensiune.
Senzor de umiditate Hch 1000 : este un senzor capacitiv de polimer,
cu precizie relativ buna, proiectat pentru masurarea umiditatii in spatii
inchise. Un polimer special este folosit ca material detector de umiditate
datorita propietatilor acestuia dependenta redusa la temperatura si rezistentei
imbunatatite la contaminare.
Convertorul Analog Digital : accepta o mrime analogic (curent,
tensiune) la intrare, furniznd la iesire un numr care constituie o aproximare
a valorii analogice a semnalului de la intrare.Spre deosebire de o mrime
analogic ale crei valori se pot gsi n orice punct din domeniul su de
variaie, mrimea numeric (sau digital) posed numai o variaie n trepte.
Astfel, ntreg domeniul de variaie este divizat ntr-un numr finit de cuante
(trepte elementare) de mrime determinat de rezoluia sistemului, n acest
mod, diferena ntre cele mai apropiate valori numerice nu poate fi fcut mai
mic dect aceast treapt elementar.
Microcontrolerul AtMega16 : ATmega 16 este un microcontroler CMOS
de 8 bii de mic putere bazat pe arhitectura RISC AVR imbunataita.Dispune
de un set de 131 instruciuni i 32 de registre de uz general. Cele 32 de registre
sunt direct adresabile de Unitatea Logica Aritmetica (ALU), permitand
accesarea a doua registre independente intr-o singura instruciune. Se obtine
astfel o eficiena sporita in executie (de pana la zece ori mai rapide decat
microcontrorelerele conventionale CISC).ATmega16 este un microcontroler RISC
pe 8 biti realizat de firma Atmel.
Codarea : Codarea se va face automat de catre microcontrolerul
ATMega16 pentru modulul de comunicatie RS232 si va fi transmisa mai departe
spre placa de receptie.
Convertorul RS232 Max232 : este un circuit integrat care converteste
semnalele de la un port serial RS-232 la semnalele
adecvate pentru utilizare n circuite compatibile TTL
logice digitale. MAX232 este folosit atat la transmiterea
datelor cat si la receptie.
Mufa si mediul de transmisie RS232 : Legatura
intre cele doua microcontrolere este realizata cu interfata
seriala RS232.Aceasta realizeaza transferul de date punct
la punct. Este in mod frecvent utilizata in aplicatiile de

Microcontrolere

Page 7

stocare a datelor cat si pentru transferul acestora.

Decodarea : se va face din nou automat de catre microcontrolerul


ATMega16.
Convertor Numeric : converteste semnalul primit de la cel de al doilea
microcontroler in semnal numeric si il transmite spre afisajul LCD.
Afisajul LCD : este un afisaj electronic cu o gama larga de aplicatii. Un
ecran LCD 16x2 este un modul de baza foarte frecvent utilizat n diverse
dispozitive si circuite deoarece este economic, usor programabil, avand functii
afisare a caracterelor speciale, chiar si a celor personalizate, animatii, samd.

Microcontrolere

Page 8

4.Prezentare placa de dezvoltare Easy AVR4


Proiectul este realizat folosind doua microcontrolere ATMega 16 aflate
pe placile de dezvoltare EasyAvr4. Acestea sunt conectate folosind interfata
seriala de transmisie RS232.
Placa de dezvoltare EasyAvr4
EasyAVR4 este o placa de dezvoltare realizata de firma Mikroelectronika
si permite realizarea de aplicatii cu microcontrolere Atmel.
Placa dispune de urmtoarele resurse hardware :
programator cu interfaa USB;
bloc de alimentare a placii cu
posibilitatea de a utiliza o sursa
de tensiune externa sau
tensiunea furnizata de interfata
USB;
SW pushbuton conectate la
toate porturile
microcontrolerului;
LED-uri conectate la toate
porturile microcontrolerului;
rezistene externe de pull-up
sau pull-down pentru fiecare pin al fiecrui port;
referin extern precis de tensiune pentru utilizarea blocului de ADC cu
aceast facilitate;
generator de semnal de tact cu frecvena de 8MHz;
modul de afiare cu LED-uri tip 7 segmente;
interfa serial RS 232;
modul de afiare LCD 2x16 caractere.

Microcontrolere

Page 9

ATmega16 este un microcontroler RISC pe 8 bii realizat de firma Atmel.

Caracteristicile principale ale acestuia


sunt:
- 16KB de memorie Flash reinscriptibil
pentru stocarea codului
- 1KB de memorie RAM
- 512B de memorie EEPROM
- dou numrtoare/temporizatoare de 8
bii
- un numrtor/temporizator de 16 bii
- conine un convertor analog digital cu
intrri multiple
- conine un comparator analogic
- conine un modul USART pentru
comunicaie serial
- dispune de oscilator intern
- ofer 32 de linii I/O organizate n patru
porturi.

ATmega16 conine 32 de registre de uz general i 64 de registre speciale


pentru modulele I/O. Aceste registre sunt mapate la adrese din memoria RAM
cuprinse ntre 0000h i 005Fh.
Una din caracteristicile foarte importante pentru orice procesor si in
particular pentru microcontrolere este sistemul de intreruperi. O intrerupere
reprezinta un semnal generat de un modul extern unitatii centrale de
procesare (CPU) pentru a anunta aparitia unui eveniment care trebuie tratat.
Utilizarea unui astfel de sistem permite implementarea de module specializate
care sa execute operatii n paralel cu CPU si sa solicite interventia acestuia
numai la terminarea operatiilor sau in alte cazuri definite.
ATmega16 dispune de 21 surse de intrerupere. Atunci cand una dintre
ele devine activa se suspenda cursul normal de executie si se face salt automat
la o adresa prestabilita din memoria program.

Microcontrolere

Page 10

5.Proiectare Hardware
5.1 Schema electrica placa emisie

Componente folosite :
U1
U2
U3
C1,C3,C4,C5,C6
R1
J1
Jmp1
P1
Pushbuton Reset

Microcontroler ATMega16 pe 8 biti

Convertorul Max232
Senzorul de umiditate HCH - 1000
Condensatoare de 100nF/1uF/1uF/100nF/470uF
Rezistenta de 10k
Conector USB pentru alimentarea microcontrolerului
Jumper
Conector RS232

Microcontrolere

Circuitul Reset este realizat dintr-un Pushbuton,


o rezistenta de 10k si un condensator de 100nF.
Rezistenta confera condensatorului timp sa se incarce iar
condensatorul e folosit pentru stabilizarea circuitului, la
specificatiile producatorului.

Circuitul RS232 este realizat folosind:


Circuitul integrat MAX232 folosit pentru
convertirea semnalelor
Condensatoare de 1uF
Mufa COMPIM cu 9 pini specifica RS232

Circuitul este realizat astfel la specificatia


producatorului pentru a asigura buna functionare si
stabilitate.

Ansamblul de alimentare foloseste tensiunea de


la portul USB asigurand un voltaj de 5V.
Condensatoarele C5 si C6 sunt folosite la filtrarea
curentului ce intra pe USB, la specificatia
producatorului.

Senzor de umiditate Hch 1000 : este un


senzor capacitiv de polimer, cu precizie relativ
buna, proiectat pentru masurarea umiditatii in
spatii inchise.

Page 11

Microcontrolere

Page 12

5.2 Schema electrica placa receptie

Componente folosite :
U1
U2
Lcd1
Rv1
C1, C3, C4, C5, C6
J1
Jp1
R1
P1
Pushbuton pentru Reset

Microcontrolerul ATMega16 pe 8 biti


Convertorul Max232
Afisaj LCD 16x2
Rezistenta Reglabila
Condensatoare de 100nF/1uF/1uF/100nF/470nF
Conector USB pentru alimentarea microcontrolerului
Jumper
Rezistenta de 10k
Conector Rs232

Microcontrolere

Blocul de afisare LCD e format dintr-un


display 16x2. Rezistenta variabila RV1 este
conectata pentru a varia contrastul afisajului
pentru o mai buna claritate

Page 13

Microcontrolere

6.Cablaj imprimat
6.1 PCB placa emisie

6.2 PCB placa receptie

Page 14

Page 15

Microcontrolere

7.Proiectare software
7.1 Organigrama codului

START

Placa Emisie

Initializare

NU

Am primit
date de la
senzor?

DA

Convertire
valoare

Codare

Transmisie

START

Placa Receptie
Initializare

NU

S-au primit
date pe
magistrala ?

DA
Decodare

Conversie
numerica

Afisare
LCD

Microcontrolere

Page 16

7.2 Codul sursa placa emisie


#include <avr/io.h>
#include <string.h>
#define F_CPU 8000000 // 8 MHz
#include <util/delay.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
void initalize_USART( unsigned int ubrr){
UBRRH = (unsigned char)(ubrr>>8);
//seteaza rata de transfer bit h
UBRRL = (unsigned char)ubrr;
// seteaza rata de transfer bit h
UCSRB = (1<<RXEN)|(1<<TXEN);
// activeaza transmisia si
receptia
UCSRC = (1<<URSEL)|(0<<USBS)|(3<<UCSZ0);
// Format : 8 biti, 1 bit
de stop
void send_byte(unsigned char byt){
// transmite un singur caracter
interfetei seriale
while (!(UCSRA & (1<<UDRE)));
// Asteapta daca nu e pregatit
transferul
UDR = byt;
// trimite bit
}
void send_string(char * str) {
// trimite un sir interfetei seriale
folosind un pointer
while(*str) {
// cat timp nu am ajuns la sfarsitul
pointerului
send_byte(*str++);
// continua trimiterea bitilor din sir
}
}
unsigned char read_byte(void) {
while(!(UCSRA & (1<<RXC)));
date de citit
return UDR;
}

// functie pentru citirea bitilor


// cat timp inca nu avem

Microcontrolere

Page 17

void initalize_ADC( void ){


// seteaza CAN
ADMUX=(1<<REFS0);
// Aref = AVcc;
ADCSRA=(1<<ADEN)|(7<<ADPS0);
// activeaza CAN
}
int read_ADC(char ch){
// citeste CAN
int n, av=64;
// media can
unsigned int average_adc = 0;
// variabila pt stocare suma
ADMUX |= (ch & 0x07);
//seteaza canalul CAN
for(n=0; n<av; n++){
// de cate ori citeste
ADCSRA |= (1<<ADSC);
//Start conversie unica
while( !(ADCSRA & (1<<ADIF)) );
//asteapta sa se termine
conversia
ADCSRA |= (1<<ADIF);
//reseteaza ADIF : ADIF=1
average_adc += ADC;
//suma tutror adc citite
}
average_adc /= av;
// calcularea mediei adc
return (int) average_adc;
// converteste la o valoare cu semn
}
void zero_counter( void ){
// seteaza numaratorul de 16 biti la 0
unsigned char sreg;
sreg = SREG;
// salveaza intreruperile globale
cli();
TCNT1 = 0;
// seteaza registrul de numarare la 0
SREG = sreg;
sei();
}
unsigned int read_counter( void ){
// citeste numaratorul de 16 biti
unsigned char sreg;
unsigned int count;
sreg = SREG;
cli();
count = TCNT1;
// citeste registrul
SREG = sreg;
sei();
return count;
}

Microcontrolere

Page 18

int read_humidity( void ){


unsigned int counter_value;
int humidity_value;
float m = 0.147929;
float a = 427.515;

// slope
// offset

zero_counter();
// numaratorul de 16 biti se
seteaza la 0
PORTB &= ~(1<<PB1);
TCCR1B |= ((0<<CS12)|(1<<CS11)|(0<<CS10));
// seteaza
timerul 1
while((!(PINB & 1)) & (TCNT1<65000));
// asteptam ca iesirea
senzorului sa fie in 1 logic
TCCR1B &= ~((1<<CS12)|(1<<CS11)|(1<<CS10)); // opreste timerul 1
PORTB |= (1<<PB1);
counter_value = read_counter();
// citeste
numaratorul
humidity_value = (m * counter_value) - a;
// converteste valoarea
in umiditate relativa
return humidity_value;
// returneaza valoarea
}
void delay_minutes( int delay ){
int t;
for (t = 0; t < (delay * 60); t++){
_delay_ms(1000);
}
}

int main( void ){


char humidity_str[8];
int humidity;
initalize_USART( MYUBRR );
comunicatia seriala
DDRB |= (1<<DDB1);
PORTB |= (1<<PB1);
while( 1 ){

// initializeaza USART pentru

// reseteaza oscilatorul de umiditate


// bucla infinita

Page 19

Microcontrolere
humidity = read_humidity();
itoa(humidity,humidity_str,10);
umiditatea in sir ascii

send_string(humidity_str);

//citeste umiditatea
// converteste

// trimite date portului

serial
send_string(" %RH");
_delay_ms(1000);
}
return 0;
}

7.2 Codul sursa placa receptie

#define F_CPU 8000000


#define USART_BAUDRATE 9600 // rata de transfer
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
#include<avr/io.h>
#include<util/delay.h>
#define LCD_DATA PORTA
//portul de date al LCD
#define ctrl PORTB
#define en PB2
// activeaza semnalul
#define rw PB1
// citeste/ scrie
#define rs PB0
// rs= pb0
void
void
void
void

LCD_cmd(unsigned char cmd);


init_LCD(void);
LCD_write(unsigned char data);
LCD_clear();

void usart_init();
void usart_putch(unsigned char send);
unsigned int usart_getch();
int main()
{
unsigned char value;

Microcontrolere

Page 20

DDRA=0xff;
// portul a e setat ca port de iesire
DDRB=0x07;
// semnalul de iesire al LDC
init_LCD();
_delay_ms(50);
// intarziere 50ms
usart_init();
// initializare USART
while(1)
{
value=usart_getch();
// functie pentru a primi date
din usart
LCD_cmd(0xC0);
// a doua linie, la inceput a LCD
LCD_write(value); // scrie
}
return 0;
}
void init_LCD(void)
{
LCD_cmd(0x38);
_delay_ms(1);

// initializare LCD 16x2

LCD_cmd(0x01);
_delay_ms(1);

// clear LCD

LCD_cmd(0x0E);
_delay_ms(1);

// cursor ON

LCD_cmd(0x80);
_delay_ms(1);
return;

// Prima linie la inceput

}
void LCD_cmd(unsigned char cmd)
{
LCD_DATA=cmd;
ctrl =(0<<rs)|(0<<rw)|(1<<en);
_delay_ms(1);
ctrl =(0<<rs)|(0<<rw)|(0<<en);
_delay_ms(50);
return;
}
void LCD_write(unsigned char data)
{
LCD_DATA= data;
ctrl = (1<<rs)|(0<<rw)|(1<<en);
_delay_ms(1);

Page 21

Microcontrolere
ctrl = (1<<rs)|(0<<rw)|(0<<en);
_delay_ms(50);
return ;
}

void usart_init()
{
UCSRB |= (1 << RXEN) | (1 << TXEN); // activeaza circuiteul de
transmitere si receptie
UCSRC |= (1 << URSEL) | (1<<USBS) | (1 << UCSZ0) | (1 << UCSZ1);
// foloseste caractere de 8 biti
UBRRL = BAUD_PRESCALE;
// incarca bitul inferior rata de transfer
UBRRH = (BAUD_PRESCALE >> 8); // incarca bitul superior
}
unsigned int usart_getch()
{
while ((UCSRA & (1 << RXC)) == 0);
// nu face nimic pana cand nu s-au primit date la UDR si
sunt gata de afisat
return(UDR); // returnteaz bit
}

Microcontrolere

Page 22

8.Masuri de siguranta si mentenanta


Daca aparatul nu porneste, verificati conexiunea dispozitivului la
alimentare.
Daca intampinati probleme in functionarea dispozitivului apasati butonul
RESET pentru reinitializare.
Daca afisajul LCD prezinta este dificil de citit verificati contrastul
acestuia. Pentru o vizualizare buna a mesajului afisat, modificati
valoarea potentiometrului pana la nivelul dorit.
Daca intampinati probleme legate de software, contactati producatorul
pentru reprogramarea microcontrolerelor.
Daca aparatul functioneaza necorespunzator si nu puteti remedia
problema consultati unul dintre atelierele noastre pentru garantia
aparatului.
Aparatul nu este o jucrie, prin urmare, nu se va lsa la ndemna
copiilor.
Aparatul nu trebuie supus ocului mecanic puternic.
Aparatul nu trebuie expus la temperaturi extreme, raze solare directe,
vibraii intense.
Dac exist dubii cu privire la buna functionare al aparatului, atunci apa
ratul trebuie imediat scos din functiune i asigurat mpotriva repornirii
neintentionate.
Functionarea n siguranta nu mai este posibil dac aparatul:
- prezint semne vizibile de deteriorare;
- a fost depozitat in conditii nefavorabile
- a fost supus socului mecanic puternic in timpul transportului
Evitati temperaturile extreme, vibratiile i ocurile, pentru c acestea pot
afecta unitatile si pot conduce la prognoze si date eronate.
Nu scufundati aparatul n apa!
Nu incercati sa reparati singur unitatea!
Pentru orice alte intrebari/sugestii/reclamatii va stam la dispozitie:
pubrel@dupelectronic.ro

Page 23

Microcontrolere

9.Costuri de productie
Microcontroler Atmega16 20 RON x 2 buc

- 40 RON;

Circuit integrat Max232

25RON x 2buc

- 50 RON;
- 4 RON;

Potentometru 10k

4RON x 1buc

Rezistenta 10k

0.6RON x 2buc

- 1.2RON;

Senzor umiditate HCH -1000 30RON x 1buc

- 30RON;

Condensator 100nF

0.4RON x 4buc

-2.4RON;

Con. electrolitic 470nF -

2RON x 2buc

- 4RON;

Con. electrilitic 1nF

1.5RON x 4buc

- 6RON;

Display LCD 16x2

25 RON x 1buc

25RON;

Cablaj imprimat

7.5RON x 2buc

- 15RON;

Total

177.6RON

Microcontrolere

10.Bibliografie

http://www.tet.pub.ro
http://www.atmel.com
http://www.mikroe.com
http://www.avrbeginners.net/
http://www.engineersgarage.com/
http://www.adelaida.ro/
http://www.avrfreaks.net/
http://cs.curs.pub.ro
http://www.datasheetcatalog.com
http://www.datasheets360.com
http://www.conexelectronic.ro
http://www.e-piese.ro
http://www.youtube.com
http://office.microsoft.com/ro-ro/templates/

Page 24