domingo, 24 de noviembre de 2013


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. 1 arduino mega adk
  2. 1 Touch Shield V2.0
  3. 1 servomotor
LIBRERIAS

  1. SeeedTouchScreen.h  //libreria para el control del panel tactil
  2. TFTv2.h                     //libreria para el control de proyeccion en la pantalla
  3. 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);
}





No hay comentarios:

Publicar un comentario