Vous êtes sur la page 1sur 10

“Universidad Católica de

Santa María”
Microcontroladores
& Microprocesadores

Docente: Ing. Christiam Guillermo Collado Oporto


Alumnos: Carpio Sosa, Luis Fernando
Flores Mamani, Christian Adolfo
Grupo: 03
3 de mayo del 2018

Arequipa – Perú
Informe 4
“Resolución de Problema
Planteado: Ascensor de 4 pisos
e Introducción al Uso de
Display LCD mediante
Arduino”

1. Objetivos
 Analizar procedimientos que se asocien al desarrollo de ejemplos prácticos cotidianos o
industriales.
 Aprender el correcto uso de la librería LiquidCrystal.h y las conexiones necesarias en el
Arduino para su funcionamiento.

2. Material y equipo
 Computador.
 Placa Arduino (Uno, Leonardo, Mega, Nano, etcétera).
 Placa de Entrenamiento.
 Software de simulación.

1
3. Procedimiento

3.1. Problema Planteado: Ascensor de 4 pisos

Enunciado:

Se propone elaborar el código de un ascensor que cuente con acceso a 4 diferentes plantas. El
ascensor inicialmente debe estar en el piso 1. Para realizar su llamado se hace uso de un
pulsador para cada piso. Una vez que el ascensor llega a su destino se abren las puertas (la
llegada se debe anunciar con una alarma sonora, típica en ascensores reales) y permanecen
abiertas por un determinado tiempo, suficiente para el ingreso de la persona. Pasado el tiempo
establecido, las puertas se cierran. Adicional a esto, mediante un display de siete segmentos se
debe mostrar el piso donde se encuentra el ascensor. Finalmente, también se debe tener en
consideración que el ascensor sube y baja por acción de un motor eléctrico.

Consideraciones:

 La apertura de la puerta se hará con un servomotor, pero para efectos prácticos se hará
uso de un led. A medida que el ángulo cambia, la intensidad luminosa del led también
varía haciendo notar su correcto funcionamiento. Cuando se abren las puertas, el led
ilumina poco; por el contrario, cuando se van cerrando, el led ilumina más.
 Tomando en cuenta lo anterior, cuando el ascensor se mueve entre pisos, la puerta
debe permanecer cerrada, por ende, el led permanecerá encendido y con máxima
iluminación.
 Para mostrar el piso en el que se ubica el ascensor, se hace uso de un display de siete
segmentos. Se hace uso de un BCD.
 El motor que se encarga de subir y bajar el ascensor idealmente para que el giro se
haga en una u otra dirección haría uso de un puente H. Para simular este efecto,
mientras baja se encenderá un led, y mientras sube se encenderá otro. Cuando el
ascensor esta sin movimiento, ninguno de los leds se enciende.
 La placa de entrenamiento solo poseía pulsadores normalmente cerrados, por ende el
código cambia pero el funcionamiento es el mismo.
Determinación de entradas y salidas:

 Entradas:
o 4 pulsadores: para 4 pisos distintos. Necesarios para llamar al ascensor al piso
donde uno se ubica.
 Salidas:
o Un motor eléctrico: Para simular su funcionamiento se usaron 2 leds. Un led para
la subida del ascensor (giro horario) y un led para la bajada del ascensor (giro
antihorario).
o Un servomotor: Para simular su funcionamiento se uso 1 led. Cuando se abre la
puerta (0 grados) el led pierde luminosidad. Cuando se cierra la puerta (360
grados) el led aumenta su luminosidad.
o Un display de siete segmentos: Para simular su funcionamiento se usaron 3 leds
(piso 1: led 1 encendido, piso 2: led 2 encendido, piso 3: led 1 y 2 encendidos,
piso 4: led 3 encendido). Al contar con un display y un BCD en la placa de
entrenamiento no es necesario simular el comportamiento sino simplemente usar
estos dispositivos.
o Un buzzer (piezoeléctrico): Al contar con un buzzer en la placa de entrenamiento
no es necesario simular el comportamiento sino simplemente usar este
dispositivo.

Código en Arduino:
#include <Servo.h>
Servo motor;

int i = 1; // i es el piso donde está el ascensor


int PulsadorPiso4 = 8;
int PulsadorPiso3 = 7;
int PulsadorPiso2 = 6;
int PulsadorPiso1 = 5;

int Piso1 = 0;
int Piso2 = 0;
int Piso3 = 0;
int Piso4 = 0;

int SubirAscensor = 2;
int BajarAscensor = 3;

const int PIEZO = 4;

// Pines de salida del BCD 7 segmentos. Muestra el piso actual


const int EntBCD1 = 10;
const int EntBCD2 = 11;
const int EntBCD4 = 12;
const int EntBCD8 = 13;

void setup() {

pinMode(SubirAscensor, OUTPUT);
pinMode(BajarAscensor, OUTPUT);
pinMode(PIEZO, OUTPUT);

Serial.begin(9600);

pinMode(PulsadorPiso4, INPUT);
pinMode(PulsadorPiso2, INPUT);
pinMode(PulsadorPiso3, INPUT);
pinMode(PulsadorPiso1, INPUT);
motor.attach(9);

// Configuración de los pines digitales como salida. BCD 7 Segmentos


pinMode(EntBCD8, OUTPUT);
pinMode(EntBCD4, OUTPUT);
pinMode(EntBCD2, OUTPUT);
pinMode(EntBCD1, OUTPUT);

void loop() {

Piso1 = digitalRead(PulsadorPiso1);
Piso2 = digitalRead(PulsadorPiso2);
Piso3 = digitalRead(PulsadorPiso3);
Piso4 = digitalRead(PulsadorPiso4);
numeroPlanta(i);

// Código piso 4
if (Piso4 == LOW) {
while (i < 4) {
i++;
ArribaUp();
numeroPlanta(i);
}
i = 4;
Puerta();
}

// Código piso 3
if (Piso3 == LOW) {

if (i > 3) {
while (i > 3) {
i--;
AbajoDown();
numeroPlanta(i);
}
}

if (i < 3) { // persona en piso 1 o 2, llamada de ascensor


while (i < 3) {
i++;
ArribaUp();
numeroPlanta(i);
}
}
i = 3;
Puerta();
}

// Código piso 2
if (Piso2 == LOW) {
if (i > 2) {
while (i > 2)
{
i--;
AbajoDown();
numeroPlanta(i);
}
i = 2;
}

if (i < 2) {
while (i < 2) {
i++;
ArribaUp();
numeroPlanta(i);
}
i = 2;
}
Puerta();
}

// Código piso 1
if (Piso1 == LOW) {
if (i > 1) {
while (i > 1)
{
i--;
AbajoDown();
numeroPlanta(i);
}
}
i = 1;
Puerta();
}

//SUBPROGRAMAS (Funciones creadas)

//Programa para subir ascensor


void ArribaUp() {

for (int b = 0; b < 800; b++) {


digitalWrite(BajarAscensor, LOW);
digitalWrite(SubirAscensor, HIGH);
delay(3);
}
digitalWrite(BajarAscensor, LOW);
digitalWrite(SubirAscensor, LOW);
}

//Programa para bajar ascensor


void AbajoDown() {
for (int a = 0; a < 800; a++) {
digitalWrite(BajarAscensor, HIGH);
digitalWrite(SubirAscensor, LOW);
delay(3);
}
digitalWrite(BajarAscensor, LOW);
digitalWrite(SubirAscensor, LOW);
}

//Programa para abrir cerrar puerta


void Puerta()
{
motor.write(0);
piezo();
delay(5000);
motor.write(90);
delay(5000);
}

//Programa para indicar número de piso con Display


void numeroPlanta(int num){
// Convierte un número decimal a binario
digitalWrite(EntBCD8, HIGH && (num & B00001000));
digitalWrite(EntBCD4, HIGH && (num & B00000100));
digitalWrite(EntBCD2, HIGH && (num & B00000010));
digitalWrite(EntBCD1, HIGH && (num & B00000001));
}

//Programa para indicar apertura de puerta mediante sonido


void piezo(){
tone(PIEZO, 500, 1000);
delay(800);
tone(PIEZO, 420, 1000);
}
Simulación y cableado: TinkerCAD de AutoDesk
3.2. Display LCD

Código en Arduino para 1 línea:


#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;


LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
lcd.begin(16, 2);
lcd.print("Christian");
}

void loop() {
lcd.setCursor(0, 1);
}

Simulación y cableado: TinkerCAD de AutoDesk


Código en Arduino para 2 líneas:
#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;


LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
lcd.begin(16, 2);
lcd.print("Christian Flores");
}

void loop() {
lcd.setCursor(0, 1);
lcd.print("Luis Carpio");
}

Simulación y cableado: TinkerCAD de AutoDesk

Vous aimerez peut-être aussi