CERRADURA ELECTRONICA CON TOUCHSCREEN
(LABORATORIO FINAL)
En este proyecto se trabajara en un sistema de seguridad desarrollado en arduino mega el cual usara una pantalla tatil tipo tft para visualizar el teclado digitaly por su gran cantidad de puertos nos permitira hacer un uso extra de puertos para el servomotor, en primera instancia el sistema se basa en un sistema electronico simple que consta de el embebido arduino, un servo motor y un cargador de 5v. el sistema tiene una contraseña gravada en la memoria interna del microprocesador, lo que haremos es ingresar una serie de numeros, el programa compara estos numeros con la contraseña interna si son iguales, el arduino procedera a enviarle una señal al servomotor el cual se activara dando como resultado la apertura del sistema.
ARDUINO MEGA
PANTALLA TACTIL
SERVOMOTOR
CERRADURA TOUCHSCREEN
para lograr hacer uso del sevomotor hubo que descargar una libreria en la playground de arduino la cual nos permite controlar el servomotor con mayor facilidad, y asi ahorrar varias lineas de codigo, ademas tambien se utilizaron las librerias touchscreen, para tomar los puntos de presion en la pantalla tactil y por medio de una serie de comando se establece un are para cada numero, y de esta forma se haga una lectura de cada numero.
despues de haberse hecho la lectura de un numero se procedera a convertirlo en un string para poder hacer una suma de estos mismos y asi hacer una concatenacion de los numeros, los cuales ya concatenados, haran un dato el cual e comparara con el password que tambien es otro string compuesto por numero del 1 al 4.
MATERIALES
- 1 arduino mega adk
- 1 Touch Shield V2.0
- 1 servomotor
LIBRERIAS
- SeeedTouchScreen.h //libreria para el control del panel tactil
- TFTv2.h //libreria para el control de proyeccion en la pantalla
- Servo.h //libreria para el control del servomotor
DIAGRAMAS
DIAGRAMA DE MONTAJE EN PROTOBOARD
DIAGRAMA ESQUEMÁTICO
DIAGRAMA PARA MONTAJE EN TARJETA PERFORADA
FOTOS
foto 1
foto 2
foto 3
foto 4
foto 5
foto 6
CÓDIGO ARDUINO
#include <stdint.h>
#include <TFTv2.h>
#include <SPI.h>
#include <stdint.h>
#include <SeeedTouchScreen.h>
#include <Servo.h>
#define YP A2 // must be an analog pin, use "An" notation!
#define XM A1 // must be an analog pin, use "An" notation!
#define YM 54 // can be a digital pin, this is A0
#define XP 57 // can be a digital pin, this is A3
#define X 0
#define Y 1
#define R 30
TouchScreen ts = TouchScreen(XP, YP, XM, YM);
Servo myservo;
const int MAX = 8;
const int pulsoMin=650;
const int pulsoMax=2550;
String result;
int digito = 0;
String password;
int puntos[][2] = {
{
120,280 }
,
{
40, 70 }
,
{
120, 70 }
,
{
200, 70 }
,
{
40,140 }
,
{
120,140 }
,
{
200,140 }
,
{
40,210 }
,
{
120,210 }
,
{
200,210 }
};
void setup(){
Serial.begin(9600);
TFT_BL_ON; // turn on the background light
Tft.TFTinit(); // init TFT library
Tft.drawString("BIENVENIDO" ,0,180, 4,RED);
delay(1500);
Tft.drawString("keypad" ,65,230, 3,RED);
delay(800);
Tft.drawString("touchscreen" , 20,270, 3,RED);
delay(800);
Tft.fillScreen();
for (int i=0; i <= 9; i++)
{
Tft.fillCircle(puntos[i][X], puntos[i][Y], 30, GREEN);
Tft.drawNumber(i, puntos[i][X]-20, puntos[i][Y]-20, 6, WHITE);
}
result = "";
password= "1234";
}
void loop()
{
Point p = ts.getPoint();
p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240);
p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320);
if (p.z > __PRESURE) {
for (int dig=0; dig<=9; dig++)
{
if ((p.x > puntos[dig][X]-R && p.x < puntos[dig][X]+R) && (p.y > puntos[dig][Y]-R && p.y < puntos[dig][Y]+R)) {
result += String(dig);
tap(dig, puntos[dig][X], puntos[dig][Y]);
}
}
}
delay(100);
Serial.println(result);
if (password==result)
{ Tft.fillScreen();
Tft.drawString("ACCESO" ,40,130, 4,GREEN);
Tft.drawString("CONCEDIDO" ,10,170, 4,GREEN);
delay(1000);
myservo.attach(22);
int pos = 0;
for(pos = 0; pos > 180; pos -= 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
}
void tap(int n, int x, int y)
{
delay(10); //time between fills so you can see it happen
Tft.fillCircle(x, y, R, RED);
Tft.drawNumber(n, x-20, y-20, 6, GREEN);
delay(100);
Tft.fillCircle(x, y, R, GREEN);
Tft.drawNumber(n, x-20, y-20, 6, WHITE);
Serial.println(n);
}