Sunteți pe pagina 1din 22

Universitatea Politehnica din

Bucuresti
Facultatea de Transporturi
Specializarea TET

Proiect
Microcontrolere
Senzor de umiditate
Cuprins

1. Introducere

2. Proiectare
hardware : Schema
bloc
Schema electrica
Comunicarea rs-232
Cablajul imprimat

3. Proiectare
software : Codul
sursa
Diagrama logica

4. Bibliografie
1.Introducere:
In cadrul proiectului nostru dorim sa prezentam modul cum este
afisata temperatura pe un ecran LCD aplicat pe o placa de dezvolatare de
tipul AVR ATmega32 cu ajutorul unui senzor de temperatura. Pentru
calcularea temperaturii si totodata afisarea acesteia, placa de dezvoltare
trebuie programata cu un cod respectiv.
Componente folosite in cadrul proiectului (partea fizica ):

1. Placa de dezvoltare cu microcontroler ATmega32:

Placa de dezvoltare pe care o folosim, EasyAVR v7 este dotata


cu microcontroler ATmega32 pe 8 biti realizat de firma Atmel.
Caracteristicile principale ale acestuia sunt:
- 32KB de memorie Flash reinscriptibila pentru stocarea codului;
- 2KB de memorie RAM;
- 1KB de memorie EEPROM;
- doua temporizatoare de 8 biti;
- un temporizator de 16 biti;
- contine un convertor analog digital;
- contine un modul USART pentru comunicatie seriala;
- contine un comparator analogic;
- dispune de un oscilator intern;
- ofera 32 de linii de intrare/iesire organizate in patru porturi;

repartizarea porturilor microcontrolerului


2. Fire conductoare:

Folosim firele conductoare


pentru a conecta pinii senzorului in
cauza in pinii placii de dezvoltare.

3. Senzor de
temperatura LM50:

Senzorul de temperatura este o


componenta care sesizeaza nivelul temperaturii
din mediul ambiant.
Pinul de semnal (OUT) se conecteaza la
un pin analogic al Arduino.

schema electrica a
senzorului de temperatura
4. Ecran LCD:

LCD-ul respectiv
poate sa afiseze 16
caractere pe 2 randuri.

schema electrica a LCD-ului

5. Cablu usb folosit pentru conectarea cu PC-ul


(pentru programarea microcontrolerului ):

Pentru a programa microcontrolerul


sa execute codul impus avem nevoie de
un cablu usb astfel incat programul scris
pe PC sa se transfere la placa de
dezvoltare spre microcontroler.
2. Proiectare
Hardware :
Schema Bloc:
Schema electrica:
Cablajul imprimat:
3.Proiectare software:

Codul sursa
#include<avr/io.h>
/*Biblioteca registrilor de inrare/iesire definiti pentru
microcontrolere AVR*/
#define F_CPU 8000000
/*Biblioteca frecventei microcontrolerului*/
#include<util/delay.h>
/*Biblioteca care defineste doua functii, _delay_ms (millisecond
delay) si _delay_us (microsecond delay)*/
#include<stdlib.h>
#define D4 eS_PORTC4
#define D5 eS_PORTC5
#define D6 eS_PORTC6
#define D7 eS_PORTC7
#define RS eS_PORTA2
#define EN eS_PORTD6
/*Biblioteca care defineste porturile respective
utilizate de microcontroler*/

#include"lcd.h"
/*Biblioteca care defineste functiile alfanumerice a LCD-ului*/

#include"adc.h"
/*Biblioteca care defineste functiile pentru conversia analog
digitala*/ int main(void)
{
DDRA=0x04; DDRC=0xff;
/*Pinii LCD-ului sunt conectati*/

DDRD=0xff;
/*Pinii portului D sunt declarati ca iesire*/
int adc_output;
/*Initializarea iesirii pentru convertorul analog digital*/

int temperature;
/*Initializarea temperaturii*/

Lcd4_Init();
/*Initializarea LCD-ului*/

adc_init();
/*Initializarea convertorului analog digital*/

Lcd4_Set_Cursor(1,1);
/*Cursorul se muta pe prima coloana a LCD-ului*/

Lcd4_Write_String("Proiect Micro");
/*Afisarea pe prima coloana a LCD-ului*/

Lcd4_Set_Cursor(2,1);
/*Cursorul se muta pe a doua coloana a LCD-ului*/

Lcd4_Write_String("Senzor de temperatura");
/*Afisarea pe a doua coloana a LCD-ului*/

_delay_ms(500);
_delay_ms(500);
_delay_ms(500);
_delay_ms(500);
/*Display-ul sta timp de doua secunde*/

Lcd4_Clear();
/*Se goleste ecranul*/

Lcd4_Set_Cursor(1,1);
/*Se muta cursorul pe prima coloana a LCD-ului*/
Lcd4_Write_String("Temperatura:");
/*Afisarea pe prima coloana a LCD-ului*/

/*Inceperea codului ce utilizeaza senzorul de


temperatura*/ while(1)
{
adc_output=read_adc_channel(6);
/*Citirea valorii senzorului de temperatura*/

float voltage = adc_output * 19.5;

voltage -= 500;

float temperatureCelsius = voltage/10 ;

//temperature=adc_output/2;

//temperatureCelsius=adc_output;

//PORTC=temperatureCelsius;
/*Secventa de calcul a temperaturii in grade Celsius*/

char *number_string="00000";

itoa(temperatureCelsius,number_string,10);

Lcd4_Set_Cursor(2,1);

Lcd4_Write_String(number_string);

Lcd4_Write_String("Grade C");
/*Secventa de afisare a temperaturii in grade Celsius pe a doua coloana
a LCD-ului*/
}
}
Partea de afisare:
#include<avr/io.h>
/*Biblioteca registrilor de inrare/iesire definiti
pentru microcontrolere AVR*/
#define F_CPU 8000000
/*Biblioteca frecventei microcontrolerului*/
#include<util/delay.h>
/*Biblioteca care defineste doua functii, _delay_ms
(millisecond delay) si _delay_us (microsecond delay)*/
#include<stdlib.h>
#define D4 eS_PORTC4
#define D5 eS_PORTC5
#define D6 eS_PORTC6
#define D7 eS_PORTC7
#define RS eS_PORTA2
#define EN eS_PORTD6
/*Biblioteca care defineste porturile respective
utilizate de microcontroler*/
#include"lcd.h"
/*Biblioteca care defineste functiile alfanumerice a LCD-ului*/

#include"adc.h"
/*Biblioteca care defineste functiile pentru conversia
analog digitala*/
int main(void)
{
DDRA=0x04; DDRC=0xff;
/*Pinii LCD-ului sunt conectati*/
DDRD=0xff;
/*Pinii portului D sunt declarati ca
iesire*/ int adc_output;
/*Initializarea iesirii pentru convertorul analog
digital*/ int temperature;
/*Initializarea temperaturii*/
Lcd4_Init();
/*Initializarea LCD-ului*/
adc_init();
/*Initializarea convertorului analog digital*/
Lcd4_Set_Cursor(1,1);
/*Cursorul se muta pe prima coloana a LCD-ului*/
Lcd4_Write_String("Proiect Micro");
/*Afisarea pe prima coloana a LCD-ului*/
Lcd4_Set_Cursor(2,1);
/*Cursorul se muta pe a doua coloana a LCD-ului*/
Lcd4_Write_String("Senzor de temperatura");
/*Afisarea pe a doua coloana a LCD-ului*/
_delay_ms(500);
_delay_ms(500);
_delay_ms(500);
_delay_ms(500);
/*Display-ul sta timp de doua secunde*/
Lcd4_Clear();
/*Se goleste ecranul*/
Lcd4_Set_Cursor(1,1);
/*Se muta cursorul pe prima coloana a LCD-ului*/
Lcd4_Write_String("Temperatura:");
/*Afisarea pe prima coloana a LCD-ului*/ }
Partea de calculare a temperaturii:
#include<avr/io.h>
/*Biblioteca registrilor de inrare/iesire definiti pentru
microcontrolere AVR*/
#define F_CPU 8000000
/*Biblioteca frecventei microcontrolerului*/
#include<util/delay.h>
/*Biblioteca care defineste doua functii, _delay_ms (millisecond
delay) si _delay_us (microsecond delay)*/
#include<stdlib.h>
#define D4 eS_PORTC4
#define D5 eS_PORTC5
#define D6 eS_PORTC6
#define D7 eS_PORTC7
#define RS eS_PORTA2
#define EN eS_PORTD6
/*Biblioteca care defineste porturile respective utilizate de
microcontroler*/
#include"lcd.h"
/*Biblioteca care defineste functiile alfanumerice a LCD-ului*/
#include"adc.h"
/*Biblioteca care defineste functiile pentru conversia analog
digitala*/
int main(void)
{
DDRA=0x04; DDRC=0xff;
/*Pinii LCD-ului sunt conectati*/
DDRD=0xff;
/*Pinii portului D sunt declarati ca
iesire*/ int adc_output;
/*Initializarea iesirii pentru convertorul analog
digital*/ int temperature;
/*Initializarea temperaturii*/
/*Inceperea codului ce utilizeaza senzorul de
temperatura*/ while(1)
{
adc_output=read_adc_channel(6);
/*Citirea valorii senzorului de temperatura*/
float voltage = adc_output * 19.5;
voltage -= 500;
float temperatureCelsius = voltage/10
; //temperature=adc_output/2;
//temperatureCelsius=adc_output;
//PORTC=temperatureCelsius;
/*Secventa de calcul a temperaturii in grade
Celsius*/ char *number_string="00000";
itoa(temperatureCelsius,number_string,10);
Lcd4_Set_Cursor(2,1);
Lcd4_Write_String(number_string);
Lcd4_Write_String("Grade C");
/*Secventa de afisare a temperaturii in grade Celsius pe a doua
coloana a LCD-ului*/ } }
Diagrama logica:

Start

Se afiseaza
temperatura
Setare registri

Setare porturi

Porneste
convertorul
analogic
digital

Se
activ
eaza
LCD-
ul si
uC
calcu
leaz
a
temp
eratu
ra
Nu se
afiseaza
temperatur
a

Sfarsit
Bibliografie:
http://tet.pub.ro/materiale-didactice.php

http://download.mikroe.com/documents/full-featured-
boards/easy/easyavr-v7/easyavr-v7-manual-v101.pdf

http://mavienginberk.blogspot.ro/2016/01/atmega32-ile-
sicaklik-olcer.html?m=1

https://www.robofun.ro/senzor-temperatura-brick

S-ar putea să vă placă și