viernes, 23 de noviembre de 2012

Encendido de un auto por reconocimiento de huella digital

Bueno pues esta es la ultima entrada de este proyecto, actualmente esta completo e instalado en un Maverick 1971.

Conocimientos necesarios.

  • Programación. Se requiere para programar el arduino, se usaron los lenguajes Processing y C++.
  • Electrónica. Necesario para realizar las conexiones de manera optima ya que de otra forma no va a funcionar y en el peor de los casos puedes quemar los componentes. 
  • Mecánica. Necesitas saber como enciende el auto y a donde debes mandar el pulso para no dañar la computadora del auto y evitar rebotes en los pulsos.

Diagrama de conexiones 



Parte del código.

Processing


Vídeo demostrativo


Posteriormente prepararemos un vídeo explicativo.

Dudas, preguntas, consejos o criticas constructivas son bien recibidas.
Gracias.

viernes, 2 de noviembre de 2012

Auto-ajuste de parámetros (Reporte 1)

Como se vio en clase, el auto ajuste de parametros es la modificacion automatica de un parametro de acuerdo al entorno.
Un parametro es una variable que influye en la ejecucion de un sistema.

A continuacion se muestra el codigo generado para la simulacion de el apagado/encendido de un ventilador de acuerdo al clima que se presenta en ese momento.

Cuales son los parametros?


Los parametros que se modificaran seran:
-El encendido/apagado
 
import time, thread, 

#Se crea el array de temperaturas
temperaturas = [16,17,20,21,23,24,27,28,31,33,36,34,30,26,25,23,20,16,16,13]
dias={1:"Lunes",2:"Martes",3:"Miercoles",4:"Jueves",5:"Viernes",6:"Sabado",7:"Domingo"}
#Claves para el ventilador
claves ={0:"Apagado",1:"Encendido velocidad baja",2:"Encendido velocidad media",3:"Encendido velocidad alta"}
Aqui se crearon dos metodos uno que se encargara de monitorear si es necesario o no que se encienda el ventilador y en que intensidad.

def Monitor(clave, temperatura):
        
        if clave == 0:
                print "La temperatura es:",temperatura
                print "El ventilador se encuentra:",claves[clave],"\n"
                
                return
        elif clave == 1:
                print "La temperatura es:",temperatura
                print "El ventilador se encuentra:",claves[clave],"\n"
                
                return
        elif clave == 2:
                print "La temperatura es:",temperatura
                print "El ventilador se encuentra:",claves[clave],"\n"
                
                return
        elif clave == 3:
                print "La temperatura es:",temperatura
                print "El ventilador se encuentra:",claves[clave],"\n"
                
                return
        time.sleep(2)
        
#Se recorre el array
def principal():
        contador=1

        while True:
                print"Dia ",dias[contador]
                for temperatura in temperaturas:
                        
        
                        if temperatura > 10 and temperatura <= 16:
                                llave=0
                                Monitor(llave,temperatura)

                        elif temperatura > 16 and temperatura <= 20:
                                llave=1
                                Monitor(llave,temperatura)

                        elif temperatura >20 and temperatura <= 28:
                                llave =2
                                Monitor(llave,temperatura)

                        elif temperatura >28 and temperatura <= 37:
                                llave = 3
                                Monitor(llave,temperatura)
                        time.sleep(1)
                contador=contador+1
                if contador==8 or contador>=9:
                
                 break
        thread.exit()


        thread.start_new_thread(principal, (llave,temperatura,))
                                
principal() 

 

Redes complejas

En el contexto de la teoría de redes una red compleja se refiere a una red (grafo) que posee cierta característica topológicas no triviales que no ocurren en redes simples.
La mayoría de redes sociales, biológicas, y tecnológicas pueden ser consideradas complejas en virtud de su topología estructural no trivial (por ejemplo, las redes sociales, de ordenadores, neurológicas y la epidemiología) Estas características no triviales incluyen: una cola pesada en la distribución de grado, un alto coeficiente de agrupamiento, una estructura comunitaria a muchas escalas, y evidencias de una estructura jerarquizada.

Se proporciono una red representada por una matriz de adyacencia
0 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 
1 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 
1 1 0 1 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 
1 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 
0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 
0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 1 0 1 0 1 1 0 0 0 0 0 1 1 1 0

Y se obtuvo la densidad de la red y la probabilidad de grado.





martes, 30 de octubre de 2012

Tercer Avance


Resumen del proyecto

Recordando un poco sobre lo que trata nuestro proyecto. Es sobre el encendido por medio del reconocimiento de huella dactilar de un automóvil. No hemos realizado ningún cambio con respecto a la entrega anterior.

Avance con respecto a la planeación.

Hasta el día de hoy hemos avanzado significativamente en nuestro proyecto, luego de 2 meses de espera por la llegada del fingerprinter.

Hemos estado realizando investigaciones sobre el uso de huellas dactilares en la seguridad y hemos encontrado datos importantes que sustentan nuestro proyecto, alguna de ellas son:

·                      * La Huella es única
·                      *Las características usadas para la identificación no varían con el tiempo

La técnica a utilizar es el reconocimiento de patrones.
Existen métodos manuales para la búsqueda de huellas dactilares en colecciones, también existen métodos automatizados de búsqueda precisa de una representación.

Hay características primarias para el reconocimiento que son las crestas y los valles.
También hemos encontrado que existen 6 diferentes tipos de huella como vemos a continuación.




Para compararlas se crea una imagen o se toma una fotografía de la huella y se comparan ciertos puntos antes mencionados que hacen característica a esa huella.

Nos hemos encontrado con algunos problemas como lo ha sido la alimentación de el arduino ya dentro del vehículo  para ello la solución que tenemos al día de hoy es utilizar una pila de 9V con la desventaja que se tendría que estar cambiando cada vez que se le agote la pila.

Lo que nos falta al día de hoy es empezar a realizar pruebas e instalar el sistema en el vehículo.

Las herramientas utilizadas siguen siendo las mismas que ya se han mencionado en la entrega anterior, de igual manera las mencionamos nuevamente a continuación:

·                      * Fingerprinter
·                      *Arduino UNO
·                      * Librerías Fingerprinter
·                      *Arduino IDE
·                     *  Lenguaje de programación Processing y C++
            * Información respecto a reconocimiento de patrones.

El código esta casi listo, aun tiene algunos muchos bugs que necesitan reparase pero la función esta prácticamente terminada, el código esta extraño porque esta construido en base a la librería de arduino y la librería del fingerpinter, colocaremos algunos pedazos del mismo por cuestiones educativas.

Metodos en C++

//Obtiene la imagen del fingerprinter

uint8_t Adafruit_Fingerprint::getImage(void) {
  uint8_t packet[] = {FINGERPRINT_GETIMAGE};
  writePacket(theAddress, FINGERPRINT_COMMANDPACKET, 3, packet);
  uint8_t len = getReply(packet);

  if ((len != 1) && (packet[0] != FINGERPRINT_ACKPACKET))
   return -1;
  return packet[1];
}
//Hace la búsqueda rápida


uint8_t Adafruit_Fingerprint::fingerFastSearch(void) {
  fingerID = 0xFFFF;
  confidence = 0xFFFF;
  // high speed search of slot #1 starting at page 0x0000 and page #0x00A3
  uint8_t packet[] = {FINGERPRINT_HISPEEDSEARCH, 0x01, 0x00, 0x00, 0x00, 0xA3};
  writePacket(theAddress, FINGERPRINT_COMMANDPACKET, sizeof(packet)+2, packet);
  uint8_t len = getReply(packet);

  if ((len != 1) && (packet[0] != FINGERPRINT_ACKPACKET))
   return -1;

  fingerID = packet[2];
  fingerID <<= 8;
  fingerID |= packet[3];

  confidence = packet[4];
  confidence <<= 8;
  confidence |= packet[5];

  return packet[1];
}


viernes, 19 de octubre de 2012

Perceptron AND

El Perceptrón es un tipo de red neuronal artificial desarrollado por Frank Rosenblatt, también puede entenderse como perceptrón la neurona artificial y unidad básica de inferencia en forma de discriminador lineal, que constituye este modelo de red neuronal artificial, esto debido a que el perceptrón puede usarse como neurona dentro de un perceptrón más grande u otro tipo de red neuronal artificial.

Código de entrenamiento en Java


Y como aquí no andamos con cosas de linux vs windows/opensource vs proprietary software les traemos los códigos para todos!


jueves, 20 de septiembre de 2012

Segundo Avance

Resumen


  • En esta entrada presentamos el segundo avance del proyecto de programación de sistemas adaptativos, que como lo mencionabamos en la entrada anterior se trata de el encendido de un automóvil por medio de reconocimiento de huella digital.



  • Por lo pronto no hemos realizado ningún cambio a la idea del proyecto, sigue siendo la       misma a pesar de las complicaciones que hemos tenido con el envió del detector de huellas digitales.

Avance

  • A pesar de la complicación antes mencionada, seguimos trabajando con el diseño del programa, así como también organizando y comprobando los tiempos antes dispuestos en la siguiente tabla:

  • Lo que hemos realizado hasta el día de hoy ha sido básicamente realizar diagramas y formularnos una idea de como se va a resolver este problema. 
  • Lo que nos ha detenido es la llegada del detector de huellas digitales, ya que es la parte mas importante de este proyecto y asi poder comenzar a realizar las pruebas del codigo, que basicamente se trata de reconocer la huella digital y si existe en la memoria enviar un impulso para encender el vehiculo.
 
Diagrama Proyecto

Recursos

Los recursos no han cambiado, seguimos utilizando:
  • Ubuntu OS
  • Arduino IDE
  • Lenguaje C++
  • Hardware Arduino UNO y Lector de huellas


miércoles, 22 de agosto de 2012

Idea:Encendido de un auto por huella digital (Avance 1)

Tema escogido:
Nuestro proyecto consta en desarrollar un sistema para realizar el encendido de un automóvil mediante el reconocimiento de huellas digitales, esto brindaría seguridad y confianza.

Solución:
Programar un arduino en C++ con reconocimiento de patrones.
Un lector recibe una imagen de la huella digital, el arduino, previamente entrenado, verifica que esa imagen exista en la memoria, si es así envía una señal para el encendido del auto.

Roles y aparentes fechas:

Recursos:
Sistema Operativo: Ubuntu
Lenguaje: C++
Hardware: Arduino UNO y un lector de huellas digitales
Software: Librerías de Arduino