Está en la página 1de 15

UPIITA-IPN

INSTITUTO POLITECNICO NACIONAL


Unidad Profesional Interdisciplinaria en Ingeniera
y Tecnologas Avanzadas
Microcontroladores Avanzados
Proyecto Final
Alumnos:
1. Hernndez Galn Vctor
2. Hernndez Morales Francisco Javier
3. Martnez Gonzlez Luis Gerardo
Profesor:
Mauricio Mndez Martnez
Grupo:
4MM5
Ingeniera en Mecatrnica

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

ndice
1. Objetivos .................................................................................................................................. 2
1.1 Objetivo General. .............................................................................................................. 2
1.2 Objetivos Especficos. ...................................................................................................... 2
2. Material Empleado. ................................................................................................................. 2
3. Desarrollo. ............................................................................................................................... 3
3.1 Sensores ............................................................................................................................ 3
3.2 Procesamiento de informacin. ....................................................................................... 4
3.3 Actuacin. .......................................................................................................................... 6
3.5 Programacin. ................................................................................................................... 7
3.5.1 MrLCD.h...................................................................................................................... 7
3.5.2 MrLCD.c ...................................................................................................................... 7
3.5.3 Proyecto.c ................................................................................................................... 9
4. Resultados............................................................................................................................. 12
5. Conclusiones. ........................................................................................................................ 14

Prctica 3: Timer.

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

1. Objetivos
1.1 Objetivo General.
Disear un sistema que implemente todo lo visto en el curso de
microcontroladores avanzados.

1.2 Objetivos Especficos.


El proyecto debe de incluir los siguientes aspectos:
1. Incluir un indicador grfico, ya sea LCD o GLCD.
2. Manejar mnimo 2 sensores.
3. Debe de tener por lo menos uno de los siguientes temas de clase:
Interrupciones, Timers, PWM o ADC.
4. Debe de manejar EEPROM.
5. Usar cualquiera de los protocolos de comunicacin (USART, SPI, I2C).
6. Manejar un actuador.

2. Material Empleado.
- Microcontrolador ATMEGA32
- LCD 16x2
- Sensor de Humedad Analgico
- Sensor de Temperatura (LM35)
- Bomba de pecera
- Relevador
- Cable conversin USB-SERIAL
- Potencimetro
- Fuente de 5 volts
- Transistor Tip 120

Prctica 3: Timer.

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

3. Desarrollo.
Se realiz un sistema de medicin de humedad y temperatura ambiente para
poder mantener la tierra con un nivel de humedad de acuerdo a la necesidad del
usuario.
El proyecto comprende diversas reas funcionales que sern explicadas por fases
como se muestra en la Figura 1.

Fig. 1 Conformacin del proyecto.

3.1 Sensores

Fig. 2 Sensor de humedad analgico/digital.

El sensor base del proyecto es el sensor de humedad (Fig.2), el cual se entierra


en la superficie donde se desea obtener la informacin de cantidad de humedad.
En el caso de la lectura analgica que es la que se va a utilizar, el sensor regresa
un valor de resistencia que significa que a mayor resistencia, menor cantidad de
humedad y vice-versa.

Prctica 3: Timer.

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

Fig. 3 Sensor LM35.

Como informacin complementaria, se aadi un sensor de temperatura LM35


(Fig. 3) el cual detecta la cantidad de temperatura y lo devuelve con una variacin
de voltaje, la cual ser tratada para interpretarse como grados centgrados y
despus sea desplegada en la informacin ya tratada con el microcontrolador.

3.2 Procesamiento de informacin.

Fig. 4 ATMEGA32.

Los datos enviados por los sensores llegarn al microcontrolador ATMEGA32 (Fig.
4) en 2 de sus 8 entradas analgicas, con lo cual se habilitar la lectura de datos
con ADC que la hoja de datos del microcontrolador.
Con la informacin obtenida, se har una conversin a datos comunes como
porcentaje en el caso de la humedad y C en el de la temperatura, los cuales
Prctica 3: Timer.

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

sern desplegados en una LCD (Fig.5). Para el uso de la LCD, se dise un


archivo .h que se puede ajustar a cualquier display LCD para imprimir datos, hallar
su localizacin en el display y hacer operaciones con ellos.

Fig. 5 LCD 16x2.

Adems, para abarcar otro de los requerimientos del proyecto, se agreg una
comunicacin por puerto serial (Fig. 6), configurada a 9600 baudios, que enviar la
temperatura a la computadora.

Fig. 6 Cable USB/TTL.

Prctica 3: Timer.

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

3.3 Actuacin.

Fig. 7 Bomba de pecera.

La salida del microcontrolador va a enviar adems de los datos desplegados,


operaciones para que de acuerdo a la cantidad de temperatura y humedad del
ambiente, permitan el trabajo de una bomba de pecera (Fig.7) que aumente la
cantidad de agua en la tierra. La bomba ser conectada a un relevador de 5 volts,
que ser activado con un 0 cuando se desee que opere.

Prctica 3: Timer.

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

3.5 Programacin.
A continuacin se colocar por partes el cdigo que el microcontrolador antes
mencionado manej para su programacin.
3.5.1 MrLCD.h
Este archivo incluye toda la programacin de las caractersticas de la LCD.
#ifndef MrLCD
#define MrLCD
#include <avr/io.h>
#include <stdlib.h>
#define
#define
#define
#define
#define
#define
#define

MRLCDsCRIB
DataDir_MRLCDsCRIB
MRLCDsCONTROL
DataDir_MRLCDControl
LightSwitch
ReadWrite
BiPolarMood

PORTB
DDRB
PORTD
DDRD
5
7
2

void Check_If_MrLCDisBusy(void);
void Peek_A_Boo(void);
void Send_A_Command(unsigned char command);
void Send_A_Character(unsigned char Character);
void Send_A_String(char *StringOfCharacters);
void Goto_MRLCDsLocation(uint8_t x, uint8_t y);
void InitializeMrLCD(void);
void Send_A_StringToMrLCDWithLocation(uint8_t x, uint8_t y, char
*StringOfCharacters);
void Send_An_IntegerToMrLCD(uint8_t x, uint8_t y, int IntegerToDisplay, char
NumberOfDigits);
#endif

3.5.2 MrLCD.c
Este archivo hace las operaciones propuestas en MrLCD.h.
#include "MrLCD.h"
void Check_If_MrLCDisBusy(void)
{
DataDir_MRLCDsCRIB = 0;
MRLCDsCONTROL |= (1 << ReadWrite);
MRLCDsCONTROL &= ~1 << BiPolarMood;
while(MRLCDsCRIB >= 0x80) // D7 PORTB Pin7 0b10000000 0x80, est ocupado
{
Peek_A_Boo();
}
DataDir_MRLCDsCRIB = 0xFF; // 0xFF 11111111

Prctica 3: Timer.

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

}
void Peek_A_Boo()
{
MRLCDsCONTROL |= (1 << LightSwitch);
asm volatile ("nop");
asm volatile ("nop");
MRLCDsCONTROL &= ~1 << LightSwitch;
}
void Send_A_Command(unsigned char Command)
{
Check_If_MrLCDisBusy();
MRLCDsCRIB = Command;
MRLCDsCONTROL &= ~ ((1 << ReadWrite) | (1 << BiPolarMood));
Peek_A_Boo();
MRLCDsCRIB = 0;
}
void Send_A_Character(unsigned char Character)
{
Check_If_MrLCDisBusy();
MRLCDsCRIB = Character;
MRLCDsCONTROL &= ~ (1 << ReadWrite);
MRLCDsCONTROL |= (1 << BiPolarMood);
Peek_A_Boo();
MRLCDsCRIB = 0;
}
void Send_A_String(char *StringOfCharacters)
{
while(*StringOfCharacters > 0)
{
Send_A_Character(*StringOfCharacters++);
}
}
char firstColumnPositionsForMrLCD[2] = {0,64};
void Goto_MRLCDsLocation(uint8_t x, uint8_t y)
{
Send_A_Command(0x80 + firstColumnPositionsForMrLCD[y] + x);
}
void Send_A_StringToMrLCDWithLocation(uint8_t x, uint8_t y, char
*StringOfCharacters)
{
Goto_MRLCDsLocation(x, y);
Send_A_String(StringOfCharacters);
}
void Send_An_IntegerToMrLCD(uint8_t x, uint8_t y, int IntegerToDisplay, char
NumberOfDigits)
{
char StringToDisplay[NumberOfDigits];
itoa(IntegerToDisplay, StringToDisplay, 10);
Send_A_StringToMrLCDWithLocation(x, y, StringToDisplay);
Send_A_String(" ");

Prctica 3: Timer.

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

}
void InitializeMrLCD()
{
DataDir_MRLCDControl |= (1 << LightSwitch) | (1 << ReadWrite) | (1 <<
BiPolarMood);
Send_A_Command(0x01);
Send_A_Command(0x38);
Send_A_Command(0b00001110);

// Limpia la Pantalla 0x01 = 00000001

3.5.3 Proyecto.c
El archivo principal del proyecto en donde se hacen todas las operaciones,
lecturas y salidas de datos.
#include <avr/io.h>
#include <avr/interrupt.h>
#include "MrLCD.h"
uint16_t
uint16_t
unsigned
unsigned

PorHum = 0;
Tempo = 0;
char var=0;
char var1=0;

//EEPROM
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
;
/* Set up address and data registers */
EEAR = uiAddress;
EEDR = ucData;
/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
}
// UART
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}
unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) )

Prctica 3: Timer.

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

;
/* Get and return received data from buffer */
return UDR;
}
int main(void)
{
InitializeMrLCD();
Send_A_StringToMrLCDWithLocation(0,0,"HHumedad:");
Send_A_StringToMrLCDWithLocation(0,1,"TTemp C:");
DDRC=0x03;
ADCSRA |= 1<<ADPS2;
ADMUX |= 1<<REFS0 | 1<<REFS1;
ADCSRA |= 1<<ADIE;
ADCSRA |= 1<<ADEN;
sei();
ADCSRA |= 1<<ADSC;
/////////////////////////////////////////////////////////////////////////////
/////////////////////////
//UBRRH
//configura a 9600
UBRRL =51;
//habilita RX y TX y parcialmente configura a 8 bits
UCSRB |= (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2);
//brinda acceso al registro
//modo asincrono
//sin paridad
//1 bit de paro
//configra a 8bits
UCSRC |= (1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) |
(1<<UCSZ0) | (1<<UCSZ1);
/////////////////////////////////////////////////////////////////////////////
/////////////////////////
while (1)
{
}
}
ISR(ADC_vect)
{
uint8_t theLow = ADCL;
uint16_t theTenBitResult = ADCH<<8 | theLow;
PorHum=theTenBitResult;
Tempo=theTenBitResult/40;
switch (ADMUX)
{
case 0xC0:
Send_An_IntegerToMrLCD(10, 0, PorHum+10000 , 5);
if (PorHum>500)
{

Prctica 3: Timer.

10

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

PORTC=0x01;
}
else
{
PORTC=0x00;
}
var1=PorHum;
EEPROM_write(0x00,var1);
ADMUX = 0xC1;
break;
case 0xC1:
Send_An_IntegerToMrLCD(10, 1, Tempo+10000, 5);
var=Tempo;
USART_Transmit(var);
ADMUX = 0xC0;
break;
default:
//Default code
break;
} ADCSRA |= 1<<ADSC;
}

Prctica 3: Timer.

11

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

4. Resultados.

Fig. 8 Proyecto Armado

El circuito de la Fig.8 se conect y se prob su comportamiento en el ambiente


comn de la ciudad de Mxico, donde nos entreg la temperatura de 23 C y una
humedad mnima, ya que regresaba la cantidad mayor de resistencia que dispone
el sensor.
La entrega de datos por medio del display funcion correctamente, ya que en el
display se observaban los datos y sus variaciones en el tiempo de manera
adecuada.

Prctica 3: Timer.

12

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

La actuacin del sensor se prob sumergiendo el sensor de humedad en una


botella con agua. Al sumergirse, el relevador de la bomba se accionaba y permita
la operacin para intentar hacer que la bomba trabajara con el agua que tena.

Fig. 9 Despliegue de temperatura en la computadora.

En el caso del protocolo de comunicacin, se conect por medio del circuito USB/TTL
antes propuesto a la computadora, en donde los RX y TX del microcontrolador eran
enviados y ledos a travs de la terminal que provee el software Mikro C en su plataforma
para AVR. Se configur a 9600 baudios y al conectarse se pudo ver la temperatura.
Prctica 3: Timer.

13

[MICROCONTROLADORES AVANZADOS]

UPIITA-IPN

5. Conclusiones.
Conforme el proyecto se iba trabajando, surgieron muchas dificultades para que
su funcionamiento fuera el adecuado, desde las variaciones de las lecturas de los
datos en la LCD, hasta las salidas irregulares de respuestas para la actuacin
correcta de la bomba. Pero finalmente se pudo ver mediante un proyecto simple,
la gran utilidad que tienen los microcontroladores en la ingeniera mecatrnica, ya
que nos sirven como intermediarios y cerebros del trabajo de nuestros
dispositivos. Se pudo apreciar la gran cantidad de aplicaciones y posibilidades que
un microcontrolador como el AVR ATMEGA32 poda darnos para resolver las
problemticas que nos aquejaban y con una eficacia bastante buena.

Prctica 3: Timer.

14