Está en la página 1de 8

Reporte de la Prctica 9

Nombre de la prctica: Convertidor de una seal Digital a Analgica

Carrera: Ingeniera en Sistemas Computacionales


Principios elect. Y apli.
Asignatura: Digitales Profesor: Dakar Fernando Villafaa Gamboa
Unidad Unidad 2 Subtema
Ak Gil Erick de Jess
Castillo Yrves Aarn Gabriel
Chan Nahuat Jos Luis
Nombre del alumno Cruz Pech Erika Evelyn Grupo 4SA
Realizada en forma: Ind grupal X Fecha: 4 noviembre del 2015

Objetivo: Diseo de un convertidor de seales digitales a Seales analgicas

Material y/o equipo utilizado:


1. Protoboard para armar el circuito.
2. Internet o libro de apoyo, revistas, etc. para obtener el circuito.
3. Pantalla LCD
4. Cables telefnicos para interconectar los componentes electrnicos.
5. Teclado Matricial
6. Arduino uno.

Enunciado del ejercicio/planteamiento del problema:


Crear un Circuito analgico por Medio de un Teclado Matricial que convierta las
seales analgicas en digitales y lo Muestre en una pantalla LCD (Simulacin de una
caja fuerte)
Procedimiento :
Buscamos la librera del teclado Matricial para Arduino. Luego Creamos el Cdigo en
forma de matriz para que el Arduino detecte las seales analgicas de los botones.
Luego insertamos la librera para la pantalla LCD en el programa de Arduino. Despus
declaramos los pines del Arduino de las salidas Digitales para que en la pantalla se
vea el resultado. Luego declaramos las condicionales if que hacen la funcin de que
por medio del teclado se introduzcan contraseas correctas e incorrectas y la
contrasea verdadera se declar anteriormente. Tambin introducimos la funcin de
cambiar la contrasea establecida con la Tecla C.
Resultado:
El CI Programable del Arduino tiene establecido las condiciones comparativas del
Teclado para saber si la contrasea establecida anteriormente es la correcta.

Investigacin adicional sobre el tema

Investigacin sobre la conexin del Teclado Matricial y la conexin de loa pantalla


LCD.

Discusin

Tuvimos problemas sobre la conexin de la pantalla LCD y del Teclado Matricial


porque la conexin de la fuente de alimentacin no era la indicada.

Conclusiones
En esta prctica aprendimos el funcionamiento de un circuito analgico como puede
convertir una seal analgica puede convertirse por medio de un CI programable a
una seal digital.

Bibliografa adicional consultada:

Internet
manual de electrnica
proteus

Cdigo fuente arduino:


//se incluyen las librerias
#include <Keypad.h> // Controla el teclado
#include <LiquidCrystal.h> //controla el LCD
#include <Servo.h> //Control del servomotor
#include <EEPROM.h> //COntrola E/S EEPROM
LiquidCrystal lcd(2 , 3, 4, 5, 6, 7); //display LCD
const byte filas = 4;
const byte columnas = 4;
byte pinsFilas[filas] = {9, 10, 11, 12};
byte pinsColumnas[columnas] = {14, 15, 16, 17};
char teclas[filas][columnas] = {
{'1', '2', '3', 'A'}, // Declaracin del teclado
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'},
};
Keypad teclado = Keypad(makeKeymap(teclas), pinsFilas, pinsColumnas, filas,
columnas);
char password[5]; //almacena la contrasea en eeprom
char ingreso; //ingreso del usuario
char passUser[4];
char confirmPass[4]; //confirmacion de la contrasea
int i=0;
int a; //aux
void setup() {
pinMode(19, OUTPUT); // LEDS QUE INDICAN ABIERTO(13) O CERRADO(19)
pinMode(13, OUTPUT);
digitalWrite(19, HIGH); //enciende el led de cerrado
lcd.begin(16, 2); //Configuracion lcd 16X2 (columnas,fila)
lcd.setCursor(0, 0);
lcd.print(" **PASSWORD** ");
lcd.setCursor(5, 1);
lcd.print("____");
//LEER CONTRASEA DE LA EEPROM

if(EEPROM.read(4)!='Z'){
EEPROM.write(0,'1');
EEPROM.write(1,'2');
EEPROM.write(2,'3');
EEPROM.write(3,'4');
EEPROM.write(4,'Z');
}
for (int i = 0; i <= 4; i++) {
password[i] = EEPROM.read(i);
}
}//fin del setup
void loop() {
leerIngreso(1);
}
//
void leerIngreso(int a) {
ingreso = teclado.getKey();
if (ingreso != NO_KEY)
switch (ingreso) {
case 'A': // es como el "enter" para introducir la password
if(evaluar(1)==1)
correcto();
else{
msgError();
}
reset();
break;

case 'B':
informacion(); //muestra en el lcd las opcionesde la caja fuerte
reset();
break;

case 'C':
cambioPass();
reset();
break;
case 'D':
lcd.setCursor(0, 0);
lcd.print("Presionaste D");
delay(600);
seguro.write(CERRAR);
reset();
break;
case '*':
lcd.setCursor(0, 0);
lcd.print("Presionaste *");
delay(600);
reset();
break;
case '#':
lcd.setCursor(0, 0);
lcd.print("Presionaste #");
delay(300);
reset();
break;
default: //si es un numero debe imprimirlo en el LCD y ademas guardarlo en
el arreglo passUser
if(a==1){
passUser[i] = ingreso;
printPass(passUser[i], 5 + i, 1);
}
if(a==2){
confirmPass[i] = ingreso;
printPass(confirmPass[i], 5 + i, 1);
}
i++;
if (i > 3)
i = 0;
}
}
void cleanlcd() {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
}

void printPass(char a, int columna, int fila ) {


lcd.setCursor(columna, fila);
lcd.print(a);
delay(100);
lcd.setCursor(columna, fila);
lcd.print("*");
}

int evaluar(int a) {
int j = 0;
if (a==1){
for (int i = 0; i <= 3; i++) {
if (password[i] == passUser[i]) {
j++;
}
}
}
if(a==2){
for (int i = 0; i <= 3; i++) {
if (passUser[i] == confirmPass[i]) {
j++;
}
}
}
if (j == 4) {
return j=1;
}
else {
return j=0;
}
}

void reset() {
lcd.setCursor(0, 0);
lcd.print(" **PASSWORD** ");
lcd.setCursor(5, 1);
lcd.print("____");
for(int i =0;i<=3;i++){
passUser[i]=NO_KEY;
confirmPass[i]=NO_KEY;
}
i=0;
}
void msgError(){

lcd.setCursor(0, 0);
lcd.print(" ERROR ");
delay(500);

void correcto(){

lcd.setCursor(0, 0);
lcd.print(" CORRECTO ");
//Abrir servomotor
seguro.write(ABRIR);
delay(500);
}

void informacion() {
lcd.setCursor(0, 0);
lcd.print("'A' para introdu");
delay(400);
lcd.setCursor(0, 0);
lcd.print("cir la pass ");
delay(400);
lcd.setCursor(0, 0);
lcd.print("'C' para cambiar");
delay(400);
lcd.setCursor(0, 0);
lcd.print(" la pass ");
delay(400);
}

void cambioPass() {
lcd.setCursor(0, 0);
lcd.print("Cambio de pass ");
delay(400);
lcd.setCursor(0, 0);
lcd.print("Introduce pass ");
delay(400);
lcd.setCursor(0, 0);
lcd.print("anterior ");
delay(400);
reset();
while(passUser[3]==NO_KEY){
leerIngreso(1);}
if (evaluar(1) == 1) {
lcd.setCursor(0, 0);
lcd.print("Introduce ");
delay(400);
lcd.setCursor(0, 0);
lcd.print("la pass nueva ");
delay(400);
reset();
while(passUser[3]==NO_KEY){
leerIngreso(1);
}
lcd.setCursor(0, 0);
lcd.print("Vuelve a intro ");
delay(400);
lcd.setCursor(0, 0);
lcd.print("cirla ");
delay(400);
lcd.setCursor(0, 0);
lcd.print(" **PASSWORD** ");
lcd.setCursor(5, 1);
lcd.print("____");
lcd.setCursor(0, 0);
i=0;
while(confirmPass[3]==NO_KEY){
leerIngreso(2);
}
if(evaluar(2)==1){
// funcion de EEPROM
for (int i = 0; i <= 3; i++) {
EEPROM.write(i, passUser[i]);
}
for (int i = 0; i <= 3; i++) {
password[i] = EEPROM.read(i);
}
lcd.setCursor(0, 0);
lcd.print("Contrasea cam ");
delay(400);
lcd.setCursor(0, 0);
lcd.print("biada ");
delay(400);
}
else{
lcd.setCursor(0, 0);
lcd.print("Error las pass ");
delay(400);
lcd.setCursor(0, 0);
lcd.print("no coinciden ");
delay(400);
}

}
}
}

}
AREF

}
1
VSS
13 2
PB5/SCK VDD
12 3
PB4/MISO VEE
RESET 11
~PB3/MOSI/OC2A
10 4
RS
else {

~ PB2/SS/OC1B
9 5
~ PB1/OC1A RW
reset();
8 6
PB0/ICP1/CLKO E

1121
7 7
PD7/AIN1 D0
6 8
A0 ~ PD6/AIN0 D1
PC0/ADC0 5 9
A1 ~ PD5/T1 D2
msgError();

ATMEGA328P-PU
PC1/ADC1 4 10
A2 PD4/T0/XCK D3
PC2/ADC2 3 11
A3 ~ PD3/INT1 D4

ANALOG IN
PC3/ADC3 2 12
A4 PD2/INT0 D5
PC4/ADC4/SDA 1 13

DIGITAL (~PWM)
A5 TX PD1/TXD D6
PC5/ADC5/SCL 0 14
RX PD0/RXD D7
void passChange(){
for(int i=0;i<=3;i++){

ARD1
LM016L
LCD1

D1
password[i]=passUser[i];

ARDUINO UNO R3

LED-BLUE
D2
LED-GREEN
Diagrama y simulacin en proteus

+88.8
B
A

D
C

ON
1

1
4
7

C
2

0
2
5
8
3

3
6
9

=
4

También podría gustarte