Buscar

Elevador para 3 andares

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 9 páginas

Prévia do material em texto

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA 
CATARINENSE 
CÂMPUS LUZERNA 
 
 
Cursos: ​Engenharia de Controle e Automação 
Componente Curricular:​ Microcontroladores 
Acadêmicos: ​Jhonatan Rodrigo de Almeida, Ketlyn Munari de Mattos e Thalis 
Moritz Parize 
 
 
 
Relatório Microontroladores 
Exercício 3 ­ Elevador 
 
 
 
 
Luzerna, SC, Abril de 2016. 
 
 
 
DESCRIÇÃO 
 
Desenvolver um código como um simulador de funcionamento de um elevador                     
predial. O programa deveria contar com botões de chamada de elevador para cada                         
andar (o número de andares caberia a nós ecolher). Deveria simular os motores de                           
subida e descida através de LEDs, bem como para cada andar uma indicação                         
luminosa seria adicionada para apontar que o elevador estaria sendo esperado                     
pelos mesmos. Também contaria com um display de 7 segmentos que serviria como                         
mostrador de andar, indicando onde o elevador se encontraria em dado momento. 
 
Declaramos as bibliotecas que seriam utilizadas ao longo do código. Atribuímos                     
“apelidos” para os pinos, definimos as entradas e as saídas dos pinos nas portas do                             
microcontrolador, habilitamos o pull­up interno nos botões, definimos as funções que                     
seriam utilizadas (set_bit, clear_bit, test_bit).. 
Desenvolvemos o código a seguir, nosso elevador seria instalado em um prédio                       
de 3 andares, sendo eles, o térreo (andar0), o andar 1 e o andar 2, com a lógica de que o                                         
elevador seria chamadao em cada andar através de um sensor, simbolizado por uma                         
troca manual no nivel lógico de três pinos do microcontrolador (pinos que foram                         
dedicados a representar os andares). Quando o botão que indica que o elevador foi                           
chamado no térreo (andar 0) fosse pressionado, a indicação luminosa correspondente                     
seria ligada, manualmente seria feita a troca de andares, dependento da localização do                         
elevador, se este estivesse no andar 1, o motor indicando que estava a descer seria                             
acionado (isto é, o LED correspondene a descida ligaria), quando a troca manual de                           
andares fizesse com que o elevador chegasse ao andar onde havia sido solicitado, então                           
a indicação luminosa do andar se apagaria e o motor que estivesse acionado seria                           
desligado. Durante esta transição de localização o display mostraria o andar em que o                           
elevador se encontrasse em cada momento. 
Para que o display mostrasse o número correspondente ao andar em que o                         
elevador se localizava, foi utilizado a configuração de ligação do display com as portas                           
 
 
 
condizentes ao número binário correspondente. Cada localização foi associada com seu                     
binário correspondente para que o display pudesse mostrar corretamente o andar. 
 
Utilizamos a função de comparação test_bit para determinar se o pino se                       
encontrava em nível lógico alto ou baixo, isto é, se estava ativado ou não (com exceção                               
dos pinos em que o pull­up foi acionado em que esta situação seria o contrário). Com                               
isto, a ação seguinte foi determinada utilizando o set_bit que selecionou o pino correto                           
para acionar, isto é, ligando o motor ou a indicação luminosa desejada. Após concluído                           
o set_bit, utilizamos o clear_bit para evitar que os LEDs permanecessem ligados mesmo                         
quando a atividade desejada já houvesse sido realizada. 
 
 
 
 
 
 
PROGRAMA   
 
#include <avr/io.h> 
#define F_CPU 1000000UL 
#include <util/delay.h> 
 
#define test_bit(porta,bit) (porta&(1<<bit)) 
#define set_bit(porta,bit) (porta|=(1<<bit)) 
#define clear_bit(porta,bit) (porta&=~(1<<bit)) 
 
#define botao1 PC2 
#define botao2 PC3 
#define botao3 PC4 
 
#define sensor1 PB6 
#define sensor2 PB7 
#define sensor3 PB0 
 
#define motor_subir PC0 
#define motor_descer PC1 
 
#define andar0 PC5 
#define andar1 PB1 
#define andar2 PB2 
 
int main(void) 
{ 
int display[3] = {0b00111111,0b00000110,0b01011011}; 
DDRD = 0b01111111; // display que mostra em qual andar o elevador está 
PORTC = 0b00011100; // habilita pull­up nos 3 botões 
DDRC = 0b00100011; // 2 LEDs, subindo ou descendo MOTORES e entrada 
indicação luminosa 1, siginifica que está no andar 0 
PORTB = 0b11000001; // entrada dos sensores, PB0 PB6 E PB7 
DDRB = 0b00000110; // entrada indicação luminosa 2 e 3, significa que está 
no andar 1 e no andar 2, respectivamente 
 
 
while(1) 
{ // ANDAR 0 
if(test_bit(PINC,botao1)==0) // Se o botão 1 estiver ligado 
{ 
set_bit(PORTC,andar0); // Liga indicação andar 0 
} 
if((test_bit(PINC,andar0)!=0)&(((test_bit(PINB,sensor2)==0)|(test_bit(PINB,sensor3)==0))&(test_bi
t(PINB,sensor1)!=0)&(test_bit(PINC,motor_subir)==0))) 
{    // Se indicação andar 0 estiver ligado,  e sensor 2 ou sensor 3 estiver ligado, e 
sensor1 estiver desligado, e motor subir está desligado 
set_bit(PORTC,motor_descer); // Liga motor descer 
} 
if((test_bit(PINC,andar0)!=0)&(test_bit(PINB,sensor1)==0))  //Se indicação andar 
0 estiver ligado, e sensor1 estiver ligado 
{ 
clear_bit(PORTC,motor_descer); // Desliga motor descer 
} 
if(test_bit(PINB,sensor1)==0)         // Se sensor1 estiver ligado 
{ 
PORTD=display[0]; // Mostra 0 no display 
 
 
 
}  
if(test_bit(PINB,sensor1)==0) // Se sensor1 estiver ligado 
{ 
clear_bit(PORTC,andar0); // desliga a indicação andar 0 
} // ANDAR 1 
 
if(test_bit(PINC,botao2)==0) // Se botão 2 estiver ligado 
{ 
set_bit(PORTB,andar1); //Liga a indicação andar 1 
} 
if((test_bit(PINB,andar1)!=0)&(test_bit(PINB,sensor3)==0)&(test_bit(PINB,sensor2)!=0)&(test_bit(
PINB,sensor1)!=0)&(test_bit(PINC,motor_subir)==0)) 
{ //Se indicação andar 1 estiver ligado, e o sensor3 estiver ligado e sensor2 e 
sensor1 estiver desligado, e motor não estiver subindo 
set_bit(PORTC,motor_descer); // Liga motor descendo 
} 
if((test_bit(PINB,andar1)!=0)&(test_bit(PINB,sensor2)==0)) // Se indicação andar 
1 estiver ligado, e sensor 2 estiver ligado 
{ 
clear_bit(PORTC,motor_descer); // Desliga motor descendo 
} 
if((test_bit(PINB,andar1)!=0)&(test_bit(PINB,sensor1)==0)&(test_bit(PINB,sensor2)!=0)&(test_bit(
PINB,sensor3)!=0)&(test_bit(PINC,motor_descer)==0)) 
{ // Se indicação andar 1 estiver ligado, e sensor1 estiver ligado, e sensor2 
estiver desligado, e motor não estiver descendo 
set_bit(PORTC,motor_subir); // Liga motor subir 
} 
if((test_bit(PINB,andar1)!=0)&(test_bit(PINB,sensor2)==0)) // Se indicação andar 
1 estiver ligado, e sensor2 estiver ligado 
{ 
clear_bit(PORTC,motor_subir); // Desliga motor subir 
} 
if(test_bit(PINB,sensor2)==0) // Se sensor2 estiver ligado 
{ 
PORTD=display[1]; // Mostra 1 no display 
}  
if(test_bit(PINB,sensor2)==0) // Se sensor2 estiver ligado 
{ 
clear_bit(PORTB,andar1); // Desliga indicação andar 1 
}  //ANDAR 2 
 
if(test_bit(PINC,botao3)==0) // Se botão3 estiver ligado 
{ 
set_bit(PORTB,andar2); // Liga indicação andar2 
} 
if((test_bit(PINB,andar2)!=0)&((test_bit(PINB,sensor1)==0)|(test_bit(PINB,sensor2)==0))&(test_bit(
PINB,sensor3)!=0)&(test_bit(PINC,motor_descer)==0)) 
{ // Se indicação andar 2 estiver ligado, e sensor1 ou sensor2 estiver ligado e 
sensor3 estiver desligado, e motornão estiver descendo 
set_bit(PORTC,motor_subir); // Liga motor subir 
} 
if((test_bit(PINB,andar2)!=0)&(test_bit(PINB,sensor3)==0)) // Se indicação andar 
2 estiver ligado e sensor3 estiver ligado 
{ 
clear_bit(PORTC,motor_subir); // Desligar motor subir 
} 
 
 
 
if(test_bit(PINB,sensor3)==0) //Se sensor3 estiver ligado 
{ 
PORTD=display[2]; // Mostra 2 no display 
} 
if(test_bit(PINB,sensor3)==0) // Se sensor3 estiver ligado 
{ 
clear_bit(PORTB,andar2); // Desliga indicação andar 2 
} 
} 
 
} 
 
 
 
 
 
 
 
FOTOS DO CIRCUITO 
 
Imagem 01: O elevador está no térreo 
 
 
 
Imagem 02: Foi chamado no andar 1: LED de subida e o LED do andar 1  ascenderam. 
 
 
 
 
 
 
 
 
 
Imagem 03: Elevador chegou no andar 1, os LED’s apagaram. 
 
Imagem 04: Foi chamado no andar 2:​ ​LED de subida e o LED do andar 2  ascenderam. 
 
 
 
 
 
 
 
Imagem 05: Elevador chegou no andar 2, os LED’s apagaram.

Continue navegando