jueves, 22 de noviembre de 2012

laboratorio 7: Automatización

Para ésta entrada escogí el problema P 9.2, el cuál consiste en sacar los diagramas de nyquist y sus margenes.

Funciones:


Para realizar éste problema utilicé la las funciones que nos proporciona octave las cuales son la de nyquist que nos devuelve su diagrama y margin.

martes, 20 de noviembre de 2012

Reporte Proyecto Final: Control de velocidad de un motor de corriente directa

Proyecto:
"Control de velocidad de un motor de corriente directa"

Introducción:
Existen diversas situaciones donde el control de la velocidad de un motor es crítica, por ejemplo, cuando un robot es movido por 2 motores y se quiere avanzar en cierta dirección, controlar la velocidad de ambos es importante. La velocidad de rotación de un disco duro o un lector de CD/DVD es otro caso. Para ello es necesario adaptar el motor a diversas situaciones de funcionamiento que puedan suceder, por ejemplo, si un móvil va cuesta arriba o cuesta abajo, o cuando existe fricción entre las partes.

Funcionamiento General:
Principalmente el proyecto esta constituido por 3 partes:
  • Sensor: Que consta de un optointerruptor ITR8102 y un disco horadado como encoder.
  • Microcontrolador: El cual es un Arduino UNO que procesa la salida del sensor para adaptar la velocidad.
  • Planta: Será el motor eléctrico el cual será controlado.

lunes, 19 de noviembre de 2012

Reporte Final Redes Neuronales

Introducción
La idea del proyecto es realizar una red neuronal que pudiera hacer pronósticos basándose en un historial o una serie de datos proporcionados por el usuario, la idea es integrar éste proyecto junto a otro(plusreports) y éste sirve como historial para predecir sucesos.

Para la arquitectura de la red neuronal, se piden 6 valores, que estos pueden ser días, semanas meses o años y la red neuronal te regresara el séptimo valor.



Aportaciones:
Mis aportaciones principalmente fueron de la entrada y procesamiento de datos:

  • Neurona simple 
  • Interfaz
  • Lectura del archivo CSV
  • Escalamiento de éste
  • Gráficas
  • Interpretación de post-procesamiento

Aprendizaje:
Para el aprendizaje de la red neuronal, se utiliza el algoritmo de back-propagation junto con la función sigmoidal y el proceso feedforward con aprendizaje persistente.

Seuencia:
La secuencia que sigue el programa empieza en la interfaz, donde el usuario podrá subir un archivo csv (acomodado por fecha, valor), teniendo éste archivo el programa lo separa por fechas y valores acomodandolos en dos archivos uno que es valores.txt y fecha.txt, que esto servirá para su representación, una vez obtenido ésto, el programa lo normaliza en escala de 0 a 1 y corre un python donde será devuelto valores una vez que se haya terminado, se retroalimenta el csv y se muestran en la gráfica.

Código
El código que hace todo ésto se encuentra en la siguiente carpeta:
https://github.com/rafaellopezgtz/neurored/tree/master/entrada

Repositorio:El repositorio se encuentra en el siguiente link, donde mi usuario es jsp
https://github.com/rafaellopezgtz/neurored/commits/master

Demo:
http://neurored.rafaellopezgtz.com/pagina/

jueves, 15 de noviembre de 2012

Laboratorio 6 de Automatización

Para ésta entrada, me toco obtener la controlabilidad y observabiliad del sistema dado:


Respuesta:

Desarrollo:
Para obtener la observabilidad y controlabilidad del sistema se empleo octave usando la librería de control, con la función de ctrb, obsv y una vez tenidas éstas, emplear la función det, que te de su determinante.

Nota:
Otra de las formas para obtener ésto, es empleando la fórmula respectiva de cada una:



Donde la primera es la de controlabilidad y la segunda de observabilidad.

Cñódigo en Octave




Salidas:

Conclusiones
Donde podemos observar que la salida proporcionada de control y observabilidad da como salida 14 y 5, siendo el sistema completamente controlable ya que mensiona el teorema que este tiene un rango máximo y nuestra salida es dirente a cero, siendo ésto aceptable y el sistema es del todo observable ya que su salida es 5 y en el teorema mensiona que debe de ser diferente a cero.

Referencias:
http://es.wikipedia.org/wiki/Controlabilidad
http://es.wikipedia.org/wiki/Observabilidad

martes, 13 de noviembre de 2012

Reporte grupal Automatización

El reporte grupal de esta semana se encuentra en el blog de mi compañero Juan Carlos

El equipo esta conformado por:
Juan Carlos
Rafael

Lógica Temporal

Para ésta semana se seleccionó un ejercicio, el cuál me tocó realizar el siguiente:

14.1.9:
"If a professor is currently at the machine, there will be no student at the machine for at least the next three transitions."

Donde lo podemos traducir como:
"Si un profesor se encuentra actualmente en la máquina, no habrá ningún estudiante en la máquina durante al menos los próximos tres transiciones."
 (pam→(¬eam º tt))

pam = profesor esta en la máquina
eam = estudiante esta en la maquina
t t = tres transiciones

Referencias:
http://www.voronkov.com/lics_doc.cgi?what=chapter&n=14

martes, 6 de noviembre de 2012

Lectura Científica

Titulo:
"Optimal Estimation of Position and Heading for Mobile RobotsUsing Ultrasonic Beacons and Dead-reckoning".

Descripción:
Este tipo de control es utilizado para el posicionamiento y determinación en ángulo de un robot, cuando se encuentra que las ruedas del robot son imperfectas o se deslizan mucho, causando que se genere errores en la determinación de su posición.

Respuesta:
El artículo mensiona una solución al problema, usando guías ultrasónicos para saber su posición correcta, mejorando lo adaptativo del robot y sus actividades autónomas.


La estructura usada, para la resolución del problema fue usar 6 balizas(emisor de señal) ultrasónicos conectados a un control de transmisión, un receptor compuesto por 8 sensores ultrasónicos (receptores), tomando las señales de las balizas para sacar la estimación de posición  y orientación usando el filtro de Kalman, donde éste estima el estado de n dimensional de un sistema denotado por x, dado un conjunto de m dimensiones del vector y. El estado para localizarlo contiene la posición, orientación y velocidad del robot.
El filtro de Kalman ayuda a éste a encontrar el estado oculto de un sistema dinámico lineal, cuando se tiene diferentes valores de señal en tiempos diferentes (siendo éstos las emisiones y  recepciones de las balizas).

Donde aplica el control:
El control aplica, al momento de su retroalimentación, ya que las balizas mandan una señal y los receptores calculan los errores de posición, obteniendo así la retroalimentacón que será utilizada, ya sea para emitir su posición correcta actual, corregir su posición, o entre otras que éste destinada a ralizar

Ejemplos de posibles usos:
Principalmente en los carros  autónomos manejando ésto en zonas más grandes, como el prototipo del carro de google, carritos exploradores, etc.

Opinión:
Este tipo de control en lo personal me podría ayudar, ya que en proyectos anteriores buscaba controlar un carrito, pequeños robots o drones en una determinada zona, mejorando la transición que seguiria el robot, como pasar algunos obstáculos.

Desventajas:
Algunas de las  desventajas que encontré fue que no muchas veces se buscará una zona determinada, así que depende mucho de las balizas y que éstas al ponerlas en zonas mas grandes el tiempo de transmisión o recepción aumentaría, otra de ellas fue que hoy en día varios sistemas o robots móviles emplean sensores lasers para  su correcta calibración o como guía de posicionamiento, siendo esto más exacto y más rapido.

Referencia:
http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=220053

Expresión w-regular

Para ésta entrada se busco hacer hacer una expresión w-regular y una vez tenida sacar el NBA, mi ejemplo a expresar es cuando se intenta entrar a una casa con las llaves

La expresión es la siguiente:




Donde:

  • A es indicado (llave indicada)
  • B es cambiar (cambiamos llaves)
  • C es intento (intentamos con la llave actual)
Expresando que: si no es la indicada en cantidad finitas, cambiamos e intentamos infinitamente.

El NBA es el siguiente:





Referencias:
http://goo.gl/izfGR
http://goo.gl/BS4IJ
http://goo.gl/5m2Tz
http://goo.gl/Yf8dL

jueves, 1 de noviembre de 2012

Tarea 5: Dibujar el diagrama de Bode

Para ésta entrada, me tocó realizar el diagrama de bode de la siguiente función:

Desarrollo:

Así que lo buscado será primero simplificar, para hacerlo más fácil.




 Una vez tenido el polinonio es multiplicado por 30.3215


Ahora tenemos el num. y den.


Una vez que se obtiene ésto es mas fácil graficarlo con octave ya que tiene una función propia

Código:

num = [30.3215 39.41795 12.81083];
den = [0 1 0];
s1 = tf(den, num)
bode(s1)

Salida:


Result Steganography

The images that have information are:

code


letter 


url


The content of each one are: a letter, an url and the code of my program.


code:
from sys import argv
from PIL import Image

def openFile(fileName):
    f = open(fileName, 'r')
    mensaje = list()
    for line in f:
        mensaje.append(line)
    f.close()
    return "".join(mensaje)

def setMsn(mensaje):
    m2 = list()
    mensaje = list(mensaje)
    
    for i in mensaje:
        u = bin(ord(i))[2:].zfill(8)
        for j in u:
            m2.append(j)
    return m2

def getMsn(mensaje):
    m2 = list()
    a = 1
    b = ''
    for i in mensaje:
        b = b+i
        if(a%8 == 0):
            m2.append(chr(int(b,2)))
            b = ''
                       
        a = a + 1
    return "".join(m2)

def pixelF(m2, v, count):
    if(v[7:8] != m2[count]):
        v = v[:7]+m2[count]
    else:
        v = v
    return int(v, 2)
            
def openImage(fileName, m2):
    im = Image.open(fileName)
    rgb = im.convert('RGB')
    c = 0

    while c != len(m2)-1:
        for i in range(0, im.size[0], 3):
            for j in range(im.size[1]):
                b = rgb.getpixel((i, j))[2]
                v = bin(b)[2:].zfill(8)

                w = pixelF(m2, v, c)

                r = rgb.getpixel((i, j))[0]
                g = rgb.getpixel((i, j))[1]

                d = tuple([r,g,w])
                im.putpixel((i,j),d)
                if(c == len(m2)-1): break
                c = c+1
    im.save(str(2)+fileName, "PNG")

def decodeM(fileName):
    im = Image.open(fileName)
    rgb = im.convert('RGB')
    arrayRGB = list()

    for i in range(0, im.size[0], 3):
        for j in range(im.size[1]):
            b = rgb.getpixel((i, j))[2]
            v = bin(b)[2:].zfill(8)
            arrayRGB.append(v[7:8])
    return arrayRGB

def main():

    mensaje = openFile(argv[1])
    mensaje = setMsn(mensaje)
   
    imagen = argv[2]
    print imagen
    w = openImage(imagen, mensaje)

    m2 = decodeM(str(2)+imagen)
    print getMsn(m2)
    
main()


The code take 2 parameters, the name of the file that contains the information and the name of the image to save.
> criptoImage.py fileInformation.txt image.png > dInformation.txt

To decrypt we can use the next code:
 
from sys import argv
from PIL import Image

def getMsn(mensaje):
    m2 = list()
    a = 1
    b = ''
    for i in mensaje:
        b = b+i
        if(a%8 == 0):
            m2.append(chr(int(b,2)))
            b = ''
                       
        a = a + 1
    return "".join(m2)

def decodeM(fileName):
    im = Image.open(fileName)
    rgb = im.convert('RGB')
    arrayRGB = list()

    for i in range(0, im.size[0], 3):
        for j in range(im.size[1]):
            b = rgb.getpixel((i, j))[2]
            v = bin(b)[2:].zfill(8)
            arrayRGB.append(v[7:8])
    return arrayRGB

def main():

    m2 = decodeM(str(1)+imagen)
    print getMsn(m2)
    
main()

This code only takes the name of the image