Documente Academic
Documente Profesional
Documente Cultură
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 ):
3. Senzor de
temperatura LM50:
schema electrica a
senzorului de temperatura
4. Ecran LCD:
LCD-ul respectiv
poate sa afiseze 16
caractere pe 2 randuri.
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*/
voltage -= 500;
//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