You are on page 1of 19

Desarrollo Proyecto N°1:

El proyecto 1 se basa en un control de asistencia a clases mediante sensor biométrico de


huella digital, al momento de simularlo en Proteus, el sensor no estaba en el programa,
por lo que este se reemplazó por pulsadores binarios haciendo la función del sensor de
huella digital, asignando un código binario para cada persona como se logra visualizar en
la siguiente figura:

Figura x: Simulación en Proteus del proyecto 1

La programación del ATMEGA328P consiste en que al momento de presionar un


pulsador, la pantalla lcd arroja el nombre de un alumno asignado a un estado binario, en
la simulación usamos 3 pulsadores con 3 nombres distintos cada uno.

Adjunto programación de la simulación del proyecto 1:

#include <LiquidCrystal.h>

LiquidCrystal lcd(2,3,4,5,6,7); //
LiquidCrystal lcd(rs,E,D4,D5,D6,D7);

int k=0,tiempo=1,i=0;

void setup() {

lcd.begin(16,2);
lcd.print("Welcome to EIEE");

pinMode(11,INPUT);

pinMode(12,INPUT);

pinMode(13,INPUT);

void loop() {

// put your main code here, to run


repeatedly:

int SW1=digitalRead(11);

int SW2=digitalRead(12);

int SW3=digitalRead(13);

if (k!=0)

lcd.setCursor(0,1);

if(SW1==0&&SW2==0&&SW3!=0)
i=0;

if(SW1==0&&SW2!=0&&SW3==0)
i=0;

if(SW1!=0&&SW2==0&&SW3==0)
i=0;

if (i==0) lcd.print("REGISTRARSE
AQUI ");

if(i!=0) lcd.print("ERROR ");

}
if (SW1==0&&SW2==0&&SW3==0)

lcd.setCursor(0,1);

lcd.print("REGISTRARSE AQUI ");

k=0;

i=0;

tiempo=1;

if(SW1==0&&SW2==0&&SW3!=0&
&k==0)

lcd.setCursor(0,1);

lcd.print("PABLO CORTES ");

delay(50);

i=0;

tiempo=tiempo+1;

if(tiempo>20) k=1;

if(SW1==0&&SW2!=0&&SW3==0&
&k==0)

lcd.setCursor(0,1);

lcd.print("XADIER VARGAS ");

delay(50);

i=0;
if(SW1!=0&&SW2!=0&&SW3==0)

lcd.setCursor(0,1);

lcd.print("ERROR ");

i=1;

if(SW1!=0&&SW2!=0&&SW3!=0)

lcd.setCursor(0,1);

lcd.print("ERROR ");

i=1;

Montaje proyecto N°1:

Al momento de montar el proyecto 1, más específico el sensor AS606, tuvimos unos


problemas donde el sensor no guardaba las huellas, este no transformaba la huella en
una imagen y por lo tanto no pudimos continuar con este proyecto, por lo que tuvimos que
adaptarlo al proyecto N°2

Desarrollo Proyecto N°2:

Al no poder usar el sensor AS606 de huella dactilar, este fue reemplazado por un teclado
matricial 3x4, donde a cada alumno se le asignó una clave de 4 dígitos para que al
momento de ingresar esta clave, el nombre del alumno se visualice en la pantalla lcd y
posterior a esto se guardaba la asistencia del alumno en la memoria micro sd, se simulo
en proteus como se puede visualizar en la siguiente figura
Figura x: Simulación en Proteus Proyecto N°2

Adjunto programación del proyecto N°2:

#include <SD.h>

#include <SPI.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#include <Keypad.h>

File logFile;

#define Password_Length 6 //
ingrese la longitud de la contraseña

//si la contraseña tiene 7


caracteres, ingrese 8

//si la contraseña tiene 8


caracteres, ingrese 9, etc.

int signalPin = 2; // Pin en el que


está conectado el relé
char Data[Password_Length];

char Master1[Password_Length] =
"1111#"; //Modifica la password;

char Master2[Password_Length] =
"2222#"; //Modifica la password;

char Master3[Password_Length] =
"3333#"; //Modifica la password;

char Master4[Password_Length] =
"4444#"; //Modifica la password;

char Master5[Password_Length] =
"5555#"; //Modifica la password;

char Master6[Password_Length] =
"6666#"; //Modifica la password;

char Master7[Password_Length] =
"7777#"; //Modifica la password;

char Master8[Password_Length] =
"8888#"; //Modifica la password;

byte data_count = 0, master_count


= 0;

bool Pass_is_good;

char customKey;

const byte ROWS = 4;

const byte COLS = 3;

char hexaKeys[ROWS][COLS] = {
{'1', '2', '3'},

{'4', '5', '6'},

{'7', '8', '9'},

{'*', '0', '#'}

};

byte rowPins[ROWS] = {9, 8, 7, 6};

byte colPins[COLS] = {5, 4, 3};

Keypad customKeypad =
Keypad(makeKeymap(hexaKeys),
rowPins, colPins, ROWS, COLS);

// set the LCD address to "0x27"(or


"0x3f") for a 16 chars and 2 line
display

// set the LCD address to "0x3f"(or


"0x27") for a 16 chars and 2 line
display

LiquidCrystal_I2C lcd(0x3f, 16, 2);

void setup(){

lcd.init();

lcd.backlight();

pinMode(signalPin, OUTPUT);

digitalWrite(signalPin, HIGH);;

if (!SD.begin(1))
{

return;

SD.remove("datalog.txt");

// Funcion que simula la lectura de


un sensor

int readSensor()

return 0;

void loop(){

lcd.setCursor(0,0);

lcd.print(" Ingrese clave ");

customKey =
customKeypad.getKey();

if (customKey){

Data[data_count] = customKey;

lcd.setCursor(data_count,1);

lcd.print(Data[data_count]);

data_count++;

}
if(data_count ==
Password_Length-1){

lcd.clear();

if(!strcmp(Data, Master1)){

lcd.print(" Bienvenido ");

lcd.setCursor(0,1);

lcd.print("Pablo Cortes");

digitalWrite(signalPin, LOW);

delay(3000);

digitalWrite(signalPin, HIGH);

else if(!strcmp(Data, Master2)){

lcd.print(" Bienvenido ");

lcd.setCursor(0,1);

lcd.print("Xadier Vargas");

digitalWrite(signalPin, LOW);

delay(3000);

digitalWrite(signalPin, HIGH);

else if(!strcmp(Data, Master3)){

lcd.print(" Bienvenido ");

lcd.setCursor(0,1);

lcd.print("Diego Layana");
digitalWrite(signalPin, LOW);

delay(3000);

digitalWrite(signalPin, HIGH);

else if(!strcmp(Data, Master4)){

lcd.print(" Bienvenido ");

lcd.setCursor(0,1);

lcd.print("Ariel Munoz");

digitalWrite(signalPin, LOW);

delay(3000);

digitalWrite(signalPin, HIGH);

else if(!strcmp(Data, Master5)){

lcd.print(" Bienvenido ");

lcd.setCursor(0,1);

lcd.print("Franco Panti");

digitalWrite(signalPin, LOW);

delay(3000);

digitalWrite(signalPin, HIGH);

else if(!strcmp(Data, Master6)){

lcd.print(" Bienvenido ");

lcd.setCursor(0,1);

lcd.print("Richard Carvajal");

digitalWrite(signalPin, LOW);
delay(3000);

digitalWrite(signalPin, HIGH);

else if(!strcmp(Data, Master7)){

lcd.print(" Bienvenido ");

lcd.setCursor(0,1);

lcd.print("Paul Terraza");

digitalWrite(signalPin, LOW);

delay(3000);

digitalWrite(signalPin, HIGH);

else if(!strcmp(Data, Master8)){

lcd.print(" Bienvenido ");

lcd.setCursor(0,1);

lcd.print("Manuel Barraza");

digitalWrite(signalPin, LOW);

delay(3000);

digitalWrite(signalPin, HIGH);

else{

lcd.print("Clave Incorrecta");

delay(3000);

lcd.clear();

clearData();
}

void clearData(){

// Abrir archivo y escribir valor

logFile = SD.open("datalog.txt",
FILE_WRITE);

if (logFile) {

logFile.print("Nombre= ");

if(!strcmp(Data, Master1)){

logFile.print("Pablo Cortés
\r\n");

else if(!strcmp(Data, Master2)){

logFile.print("Xadier Vargas
\r\n");

else if(!strcmp(Data, Master3)){

logFile.print("Diego Layana
\r\n");

else if(!strcmp(Data,
Master4)){

logFile.print("Ariel Munoz
\r\n");
}

else if(!strcmp(Data,
Master5)){

logFile.print("Franco Panti
\r\n");

else if(!strcmp(Data,
Master6)){

logFile.print("Richard Carvajal
\r\n");

else if(!strcmp(Data,
Master7)){

logFile.print("Paul Terraza
\r\n");

else if(!strcmp(Data,
Master8)){

logFile.print("Manuel Barraza
\r\n");

logFile.close();
}

else {

Serial.println("Error al abrir el
archivo");

delay(500);

while(data_count !=0){

Data[data_count--] = 0;

return;

Proceso final del proyecto:

Finalmente cuando ya la simulación esta lista, se empezó el desarrollo del proyecto en la


placa, pero primero había que montar el proyecto en el protoboard, usando el arduino uno
ya que contiene el circuito integrado ATMEGA328P que es el que usaremos en nuestro
proyecto.

En la siguiente figura se puede observar la placa montada en proteus:

Figura x: Placa montada en proteus


Donde al momento de pasarlo a ARES quedo de la siguiente forma:

Figura x: Placa en ARES

Visualizando la placa en 3D es como debería resultar al momento de montarlo


fisicamente:
Figura x: Placa visualizada en 3D

Ahora adjunto foto del proyecto montado en protoboard

FOTO PROYECTO MONTADO EN PROTOBOARD

Posterior a esto se imprimió el circuito para plancharlo sobre la placa y nos resulto de la
siguiente forma:

FOTO PLACA IMPRESA

Ya con la placa lista se prosiguió a soldar los componentes para luego montar el circuito
final, en la siguiente figura se puede observar la placa final:

FOTO PLACA FINAL


Con la placa ya lista con los componentes soldados, se dio paso al armado final del
proyecto, que sería el resultado final para ser presentado, donde mediante la plataforma
Tinkercad pudimos diseñar en formato 3D el gabinete donde será presentado el proyecto,
en las siguientes figuras se puede observar el diseño en Tinkercad y su resultado impreso
físicamente

Figura x: Vista superior del gabinete en 3D

Figura x: Vista frontal del gabinete en 3D


Figura x: Gabinete impreso vista superior

Figura x: Gabinete impreso vista interior


Figura x: Gabinete impreso vista frontal

Luego de montar el circuito final con el teclado matricial, pantalla lcd, relé, modulo micro
sd en la placa, y puesto en el gabinete el resultado final de nuestro Proyecto control de
asistencia a clases mediante teclado matricial es el siguiente:

FOTO DEL CIRCUITO ARMADO FINAL

You might also like