Sie sind auf Seite 1von 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);
}
}

A0
A1
A2
A3
A4
A5

ANALOG IN
PD7/AIN1
PD4/T0/XCK
~ PD3/INT1
PD2/INT0
TX PD1/TXD
RX PD0/RXD

~ PD6/AIN0
PD5/T1
~

D2

LED-BLUE
LED-GREEN

+88.8

7
8
9

4
5
6

1
2
3

ON

0
=

DIGITAL (~PWM)
A

ARDUINO UNO R3

D1

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL

RESET

1121
ATMEGA328P-PU

AREF
PB5/SCK
PB4/MISO
~PB3/MOSI/OC2A
~ PB2/SS/OC1B
~ PB1/OC1A
PB0/ICP1/CLKO
4
5
6
7
8
9
10
11
12
13
14

7
6
5
4
3
2
1
0

1
2
3

13
12
11
10
9
8
D0
D1
D2
D3
D4
D5
D6
D7

RS
RW
E

VSS
VDD
VEE

else {
msgError();
}
reset();
}

void passChange(){
for(int i=0;i<=3;i++){
password[i]=passUser[i];
}

Diagrama y simulacin en proteus

LCD1

LM016L

ARD1

Das könnte Ihnen auch gefallen