miércoles, 14 de noviembre de 2012

Avance - Pruebas de Proyecto

Valor de Entrada: 12 Puntos

Que tenemos de avance?

  • Material sobre estacionamiento 
  • BD
  • Código QR
  • Interfaces 

Avances

Para esta semana tenemos una muestra del avances a la interfaz, código para mover los motores y una muestra a la estructura del estacionamiento.

Interfaz 

Se desarrolló una pequeña aplicación con una interfaz para, junto con una aplicación de arduino y el hardware correspondiente, se controlen los movimientos de los motores.
El código fue echo en python, se hicieron los botones necesarios, pensando en que se podrán usar para hacer una demostración de los movimiento que realiza la estructura del elevador.

from Tkinter import *
import serial  

s=serial.Serial(2,115200)

def arriba():
 s.write('a')
 r=s.read()
 print r

def abajo():
 s.write('s')
 r=s.read()
 print r

def izquierda():
 s.write('d')
 r=s.read()
 print r

def derecha():
 s.write('z')
 r=s.read()
 print r

def stop():
 s.write('p')
 r=s.read()
 print r
  
ventana=Tk()
ventana.title('ElevatorControl')
ventana.configure(background='white')

img0=PhotoImage(file='0.gif')
img1=PhotoImage(file='1.gif')
img2=PhotoImage(file='2.gif')
img3=PhotoImage(file='3.gif')
img4=PhotoImage(file='4.gif')

botonar=Button(ventana, image=img2, command=arriba).grid(row=0,column=1)
botoab=Button(ventana, image=img4, command=abajo).grid(row=2,column=1)
botoniz=Button(ventana, image=img1, command=izquierda).grid(row=1,column=0)
botonde=Button(ventana, image=img3, command=derecha).grid(row=1,column=2)
botonst=Button(ventana, image=img0, command=stop).grid(row=1,column=1)

ventana.mainloop()


Simulando:

Código para Arduino

El código necesario para hacer girar los motores y que los movimientos se vean reflejados en la estrcutura de aluminio se muestra a continuación, se hicieron varias modificaciones en este aspecto tanto en el código como en el hardware, ya que la librería que habiamos provado antes no se pudo combinar con el hardware que habiamos mencionado (diodos y transistores) debido a que el manejo de los voltajes en los motores se volvió demasiado complicado.

void setup(){
  
Serial.begin(115200);  
 
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
}

void arriba(){
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
}

void abajo(){
  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
}

void izquierda(){
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
}

void derecha(){
  digitalWrite(11, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
}

void detener(){
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
}

void loop(){
  if (Serial.available() > 0) {
    int comando = Serial.read();
     
    switch (comando) {
     case 'a': 
       arriba();
       Serial.print("arriba");
       break;
     case 's':
       abajo();
       Serial.print("abajo");
       break;
     case 'd':    
       izquierda();
       Serial.print("izquierda");
       break;
     case 'z':    
       derecha();
       Serial.print("derecha");
       break;
     default:
       detener();
       Serial.print("stop");
      
    }
  }
 }


Se optó por dejar de lado la libreria de MotorDC y tambien los transistores, para cambiarlos por un integrado SN754410NE (para crear un puente H) que hace las funciones de inversión de polaridad más fáciles (girar los motores en ambos lados), puede operar con los dos motores, además de que es capaz de operar con voltajes más altos (hasta 36v), todo esto nos facilita el trabajo.
El voltaje se tomara del pin Vin del arduino, que entrega el voltaje total que ingresa al arduino por medio de la toma de corriente.

Aquí dejamos una imágen del esquema hecho con Fritzing.


Estructura

La estructura ya se tiene modificada y que sera utilizada para poder mover el auto de arriba hacia abajo, se utilizo una estructura de aluminio.
Una parte de la estructura se muestra a continuación, esta es la parte que se mueve en las direcciones de izquierda y derecha.
La otra parte aún esta pendiente por unos detalles que se agregaron (unos apoyadores para evitar que la estructura pierda el equilibrio).


Interfaz (usuario)

Esta interfaz sera para el usuario, es bastante simple pero se modificara y se le aplicara algo de usabilidad para el usuario, mejoras, etc.

Simulando:

Cuando el cliente de click a "Solicitar Boleto".

Cuando el cliente de click a  "Recoger Automóvil".

Cuando el cliente de click a "Ayuda".

Codigo:

#!/usr/bin/python
# -*- coding: iso-8859-15 -*-

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title,
                          pos=(150, 150), size=(650, 450))

        menuBar = wx.MenuBar()

        menu = wx.Menu()

        self.Bind(wx.EVT_MENU, self.OnTimeToClose, id=wx.ID_EXIT)

        self.CreateStatusBar()

        self.panel = wx.Panel(self)

        boton1 = wx.Button(self.panel, -1, "Solicitar Boleto")
        boton2 = wx.Button(self.panel, -1, "Recoger Automovil")
        boton3 = wx.Button(self.panel, -1, "Ayuda")

        self.panel.cajatexto = wx.TextCtrl(self.panel, -1, " ",size=(400,80))
        self.panel.cajatexto.SetFocus()

        self.Bind(wx.EVT_BUTTON, self.OnClickBoton1, boton1)
        self.Bind(wx.EVT_BUTTON, self.OnClickBoton2, boton2)
        self.Bind(wx.EVT_BUTTON, self.OnClickBoton3, boton3)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizerh1 = wx.BoxSizer(wx.HORIZONTAL)
        sizerh1.Add(boton1, 0, wx.ALL, 30)

        sizerh2 = wx.BoxSizer(wx.HORIZONTAL)
 sizerh2.Add(boton2, 0, wx.ALL, 30)
        
 sizerh3 = wx.BoxSizer(wx.HORIZONTAL)
 sizerh3.Add(boton3, 0, wx.ALL, 30)

 sizerh4 = wx.BoxSizer(wx.HORIZONTAL)
        sizerh4.Add(self.panel.cajatexto, 0, wx.ALL, 30)        
 
 sizer.Add(sizerh1, 0, wx.ALL, 0)        
 sizer.Add(sizerh2, 0, wx.ALL, 0)
 sizer.Add(sizerh3, 0, wx.ALL, 0)
        sizer.Add(sizerh4, 0, wx.ALL, 0)

        self.panel.SetSizer(sizer)
        self.panel.Layout()

    def OnTimeToClose(self, evt,):
        self.Close()

    def OnClickBoton1(self, evt,):
        print self.panel.cajatexto.GetValue()
        self.panel.cajatexto.AppendText(" Cliente Pide Boleto. ")
        print self.panel.cajatexto.GetValue()
        self.panel.cajatexto.SetFocus()

    def OnClickBoton2(self, evt,):
        print self.panel.cajatexto.GetValue()
        self.panel.cajatexto.AppendText(" Cliente Regresa Boleto y Se le Devuelve Automovil. ")
        print self.panel.cajatexto.GetValue()
        self.panel.cajatexto.SetFocus()

    def OnClickBoton3(self, evt,):
        print self.panel.cajatexto.GetValue()
        self.panel.cajatexto.AppendText(" Cliente Pide Ayuda. ")
        print self.panel.cajatexto.GetValue()
        self.panel.cajatexto.SetFocus()


class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, "Estacionamiento")
        self.SetTopWindow(frame)

        print "Simulacion"

        frame.Show(True)
        return True

app = MyApp(redirect=True)
app.MainLoop()


Proxima entrega:

**Se espera tener algun Demo del proyecto y funcionando.

jueves, 8 de noviembre de 2012

Avance - funcionamiento

¿Cómo funciona el sistema? && Union de la creación del qr con la base de datos

Valor de entrada: 10 

Para comenzar con esta entrada primero que nada daremos entrada a la definición del funcionamiento del proyecto realizado.

Aquí tenemos un diagrama de la secuencia del sistema que se ira explicando parte por parte:



Base de Datos


Python+qr

Lo que hace el siguiente código es primero que nada:

  • Realiza la conexión a mysql
  • Localiza el lugar donde se estacionara el carro
  • Ya localizado creara un numero de verificación para la seguridad
  • Crea el qr
  • Actualiza los datos en la bd

Código

En que se trabaja en:

* Material  ya listo
* Pruebas del material y armado

jueves, 1 de noviembre de 2012

Actividad

La primera parte de esta entrada consiste en exponer dos diseños de lo que vendria a ser la base giratoria de nuestro proyecto que es la que se encargará de dar la capacidad de girar a toda la estructura junto con los autos.

En esta base ira montada la estructra que levantara los coches y se manipulara por medio de otro motor, pero en este caso el motor sera de los conocidos como servomotores, que ya habiamos comentado anteriormente que usariamos. Estos motores se manipulan sus giros mediante ordenes con la cantidad de grados a girar, con lo que nos facilitaria un poco la manipulación de esta parte del estacionamiento.

Tomamos como referencia el mecanismo/diseño de rotación de los platos de algunos microondas para la construcción de esta pieza.

Los diseños a los que llegamos finalmente son dos (todavía esta en discución cual será el final), que difieren en la posición del motor que hara girar la pieza: 

El primero donde el motor se sitúa en el centro de la pieza:

vista desde la parte baja

vista lateral
 Las ruedas en ambos casos ayudan a mejorar el desplazamiento al reducir la fricción y a distribuir mejor la carga, por lo que se buscaría usar algunas ruedas contruidas con un material llamado "goma", que son conocidas por usarse en patines incluso en patinetas.

El segundo diseño:
El motor se situaría a un costado de la base, apoyandose de un engrane situado en la circunferencia de la base para transmitir los movimiento.

vista desde la parte baja

vista lateral


El material previsto para la creación de esta pieza es un tipo de triplay (madera), buscando un equilibrio entre lo ligero y lo resistente; mientras que el material para los brazos podría ser triplay un poco mas grueso o incluso una especie de plastico duro. Esto para buscar que el peso de la estructura completa sea lo mas ligero posible.

Otro aspecto que queremos exponer en esta entrada, son las pruebas que estamos realizando con las diferentes opciones que hay para manipular los motores, en este caso los de dc, que seran los encargados de realizar los movimientos del "ascensor".

En este caso realizamos pruebas con una librería "nueva" llamada MotorDC, "nueva" en el sentido que esta librería es una modificación de otra conocida como Stepper que se usa también para la manipulación de motores.
El motivo por el cual optamos por realizar pruebas con esta librería es porque nos facilita la inversión de la polaridad de los motores sin necesidad de uso de integrados externos, solo con el uso del arduino y que tambien nos permite realizar movimientos del motor por medio de pasos o vueltas.

Aquí dejamos un código de ejemplo del uso básico de esta librería:

#include MotorDC.h

#define motorSteps 96
#define motorPin1 8
#define motorPin2 9
#define ledPin 13

// initialize of the MotorDC library:
MotorDC myMotorDC1(motorSteps, motorPin1,motorPin2);
MotorDC myMotorDC2(motorSteps, motorPin2,motorPin1);
//crear dos inicializaciones, con los pines al reves para darle polaridad

void setup() {

myMotorDC1.setSpeed(5); //velocidad de operacion
myMotorDC2.setSpeed(5);

// Initialize the Serial port:
Serial.begin(9600);
}

void loop() {
// Step forward 100 steps:
Serial.println("Forward");

myMotorDC1.step(10);
//el motor va a girar de cuerdo a la cantidad de pasos

digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
//aqui detiene el motor
delay(1000);

Serial.println("Backward");

myMotorDC2.step(-10);
//el motor va a girar de cuerdo a la cantidad de pasos

digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
delay(1000);
//aqui detiene el motor
}



Y aquí una imagen ilustrativa de su conexión:




Otra opción muy viable para la manipulación de los motores con el arduino y que estamos considerando muy seriamente en implementarla, es una que nos puede ayudar con la manipulación de los voltajes, esto mediante un transistor 2n4401. Esto nos ayuda en el sentido de que el arduino en los voltajes de salida que ofrece son muy bajos y no es posible que con estos voltajes operen los motores con los que estamos trabajando (al parecer operan con 12v) y este transistor lo que ofrece es la posibilidad de usar un voltaje externo al del arduino para que los motores operen correctamente.

La función de este transistor es la de recibir las bajos voltajes del arduino y cada que esto sucede, el transistor manda las señales al motor pero con el voltaje externo.

Aquí una imagen de como se utiliza:







Otro punto a tratar (opcional) es el de la creación de la estructura del elevador, que se ha estado retrasando debido a que los materiales que se eligieron después de varias discuciones (entre integrantes del equipo y peronas con conocimientos de esto), fueron aluminio y acero inoxidable, debido a su resistencia, ligerés, manipulación, (y tal vez algo de estética), pero estos materiales no son tan fáciles de conseguir, en nuestra localidad son contados los proveedores de estos materiales, además de que la mayoría no expende en pequeñas cantidades, entre otras situaciones y es lo que nos ha estado retrasando para su creacion.

______________________________________________________________________________________
Útiles:
transistor 2n4401 datasheet

jueves, 25 de octubre de 2012

Actividad

Que tenemos?                                                                                                 Valor de entrada: 5 pts.

Hasta ahora tenemos lo siguiente:
  • Una parte de la estructura que se utilizara para el proyecto.
  • El código que nos generara los códigos QR para identificar los boletos que se le entregaran a los usuarios.
  • Ademas de la base de datos en la que se almacenaran estos.



Avances...

En esta semana se trabajo sobre investigar que motor se utilizara y el código para moverlo, ya que hará que el elevador funcione y sera la parte principal.

**También trabajamos en lo que es el elevador, aunque en esta parte tenemos un contratiempo, ya que para hacerlo dinámico y de un material no muy pesado pero que soporte el peso del carro, estuvimos analizando varios tipos de materiales.


Motor a Mover?...

Para esta ocasión utilizaremos un motor CD, como el que se muestra a continuación:

Se moverá con Arduino, ya que el equipo tiene experiencia por haber trabajado anteriormente y es lo mas conveniente para trabajar rápido.

Este es el código base que usamos para mover el motor:

------------------------------------------------------------------------------------------------------------------------------------------------------

 

------------------------------------------------------------------------------------------------------------------------------------------------------

En que se trabaja con el motor? 

Estamos trabajando sobre calibrar el motor y tratar de que los movimientos sean mas exactos del elevador.


Próximos Avances... 

Seguiremos trabajando con la base de datos y los códigos que ya tenemos para poder lograr que cuando el usuario tome su Ticket, el programa busque un espacio libre para poder acomodar el auto.

Ademas de trabajar con la interfaz que el usuario podrá visualizar, y la conexión de esta con el Arduino.

jueves, 18 de octubre de 2012

Actividad - Diseño de Base de Datos

Para esta semana, se hizo un diseño la Base de Datos que sera usado en el estacionamiento.

Valor de entrada: 10 pts.

Para la conexión de la BD, consultar, etc, se uso MySQL y Python con su modulo correspondiente mysqldb.

Para empezar, la idea de la BD es la siguiente:

La idea es que se genere un numero random para el QR, ese mismo numero se guarde en la base de datos y se marca ocupado el espacio con un 1, para que cuando regresen con el boleto se busca ese numero random en la BD, se obtiene el espacio donde esta y se marca como desocupado con un 0 y se borra el campo del QR.

Imagen:

Trabajando con Python y MySQL

MySQL: Es un sistema de gestión de bases de datos relacionales, libre y que puede ser instalado en múltiples plataformas.

MySQLdb: Es una interfaz para trabajar con bases de datos MySQL desde Python.

Primero creamos la Base de Datos en MySQL.

Ahora, ya que se tiene instalado el modulo de Python para la conexión, usamos el siguiente código:

-------------------------------------------------------------------------------------------------------------------------------------------
# Modulo para trabajar con MySQL
import MySQLdb
 
# Conectar a la base de datos
db=MySQLdb.connect(host="localhost",user="root",passwd="123",db="estacionamiento")
 
# Se crea un objeto tipo cursor que sera el que nos permitira el acceso a la base de datos
cursor = db.cursor()
 
# Consultamos
sql = "select * from datos"
 
# Se Ejecuta la consulta
cursor.execute(sql)
 
# Le pedimos al objeto cursor que nos almacene en la variable "resultado" todos
# los registros que ha devuelto la consulta
resultado=cursor.fetchall()
 
# Mostramos linea a linea todos los resultados
for sala in resultado

-------------------------------------------------------------------------------------------------------------------------------------------

Ahora, ya tenemos la BD ya echa, seguiremos trabajando.


¿Qué datos seran guardados en el código Qr?





Trabajando en:

** Estructura de Aluminio o algo parecido para el Elevador


miércoles, 10 de octubre de 2012

Actividad - Avances

Para esta Actividad, se mostraran algunos avances del proyecto, los cuales serán:
  • Estructura de Estacionamiento
  • Diseño de Ascensor/Elevador 
  • Diseño de Interfaz
Estructura de Estacionamiento

La estructura del estacionamiento, se realizo en Acrílico y quedo de la siguiente forma:
Como se puede ver, consta de dos estructuras, derecha e izquierda, para colocar el automóvil  conformado de 3 pisos cada una, los cuales contiene cada uno una base de acrílico donde se colocara cada automóvil individualmente.

Diseño de Ascensor/Elevador

Para colocar un automóvil en alguno de los 3 pisos, sera necesario el uso de un ascensor/elevador para movilizar el auto en una base, y mover de abajo hacia arriba o viceversa.

Para empezar con el armado, primero se hizo un diseño o prototipo para darnos una idea de su estructura.

Diseño de interfaz

Para un estacionamiento, es necesario una interfaz para entregar boleto, ticket, etc; y se realizo un prototipo para la interfaz.

Esta seria la pantalla principal en donde se solicita el boleto.

La pantalla que nos aparecería al solicitar el boleto que nos pide esperar y nos muestra el estado actual del estacionamiento

Después simplemente nos aparecería en que torre y lugar se almaceno nuestro automóvil y se recibiría el boleto.


Esta seria la interfaz para la maquina donde se recogerían los automóviles. Nos pediría insertar el boleto se validaría y obtendría la ubicación para posteriormente el elevador traer el auto.


jueves, 13 de septiembre de 2012

Actividad - Definición de herramientas y algo mas

Esta entrada sera una introducción mas para las herramientas que serán útiles, también se mostrara Código como avance.

Las herramientas que usaremos para el proyecto serán.

En cuanto al hardware mas importante:

  • Servomotor:  Para el movimiento de la rueda, se usará este tipo de motor en lugar de uno de corriente directa por el hecho de hacer mas precisos los movimientos de la rueda y con esoto tener mas controlados los movimientos (evitar accidentes desagradables). El motor que se eligió cuenta con una torque (fuerza de rotación) = 13kg/cm y una velocidad = 0.17s/por cada 60° operando a 4.8V,  que practicamente sería el voltaje que nosotros manejaríamos (5V).
       
  •  La rueda: La construcción de la rueda (el material) se encuentra todavía bajo discusión debido a las distintas posibilidades que nos puede brindar las dos opciones que tenemos contempladas (Legos y Erector).
  •  Detector de movimiento:
  •  Tecnología de códigos QR: Como ya se había comentado en entradas anteriores, teníamos contempladas varias opciones para el control y el manejo de la población del estacionamiento, donde terminamos eligiendo los códigos QR (sobre Código de Barras, Tarjetas Magnéticas y Chips RFID) en parte debido a los costos de su implementación ( para todas las demás opciones era necesario un lector especial y en algunos casos un emisor), pero mayormente debido a que es una tecnología "actual/nueva", donde principalmente tomamos muy en cuenta el hecho del deterioro/daño de los comprobantes expedidos (los codigos de barras no se pueden leer si falta una parte de el, tarjetas magneticas hay que cuidarlas del daño en las bandas y las quebraduras, y los RFID de igual manera hay cuidar su manejo, lo que practicamente quedaría a merced del usuario) y debido a que la tecnología QR cuenta con una especie de seguros, que permiten validar el código aún y cuando este deteriorado. Además de un mayor espacio para guardar información y su capacidad de ser leído desde diferentes posiciones, lo que hace acelera el proceso de lectura.
  • Miniprinter: Esta, como su nombre lo dice, es una impresora de tamaño más pequeño que una impresora normal o promedio, generalmente se usa en los centros comerciales para la emisión de tickets o comprobantes de pago. En nuestro proyecto cumplirá la función de imprimir los códigos QR generados, para así poder entregarlos fisicamente al usuario (el dueño del auto).

  • Camara Fotográfica (WebCam):  Su función a cumplir, la de otorgar la posibilidad al sistema de leer los códigod QR generados con anterioridad y con esto realizar la búsqueda del auto y poder entregarlo.
En el plano del software (librerías):

Ellenguaje que usaremos principalmente para el desarrollo será Python, por lo que la moyaría de las herramientas en este apartado son librerías usadas (su respectiva implementación) para este lenguaje.
  • MySQL y Python: Para la conexion de la base de datos, sera necesario el uso de la herramienta de MySQL y el uso de la libreria: MySQLdb 
  •  //Ejemplo de esto
  • PySerial: Esta librería sirve para establecer una conexión serial entre diferentes dispositvos, en este caso se usará para entablar la comunicación entre el Arduino y la computadora. 
    Un ejemplo del uso de esta librería. En este programal, la librería se usa para comunicarse con el Arduino y así controlar un carro de R/C mediante los botones que se ubican en la interfaz lanzada.
    from Tkinter import *
    
    import serial  
    
    s=serial.Serial(2,115200)
    
    def fl():
     s.write('a')
     r=s.read()
     print r
    
    def f():
     s.write('s')
     r=s.read()
     print r
    
    def fr():
     s.write('d')
     r=s.read()
     print r
    
    def rl():
     s.write('z')
     r=s.read()
     print r
    
    def r():
     s.write('x')
     r=s.read()
     print r
     
    def rr():
     s.write('c')
     r=s.read()
     print r
    
    def stop():
     s.write('p')
     r=s.read()
     print r
    
    
    ventana=Tk()
    ventana.title('RController')
    ventana.configure(background='white')
    
    img0=PhotoImage(file='0.gif')
    img1=PhotoImage(file='1.gif')
    img2=PhotoImage(file='2.gif')
    img3=PhotoImage(file='3.gif')
    img4=PhotoImage(file='4.gif')
    img5=PhotoImage(file='5.gif')
    img6=PhotoImage(file='6.gif')
    
    botonfl=Button(ventana, image=img1, command=fl).grid(row=2,column=2)
    botonf=Button(ventana, image=img2, command=f).grid(row=2,column=4)
    botonfr=Button(ventana, image=img3, command=fr).grid(row=2,column=6)
    botonst=Button(ventana, image=img0, command=stop).grid(row=3,column=4)
    botonrl=Button(ventana, image=img4, command=rl).grid(row=4,column=2)
    botonr=Button(ventana, image=img5, command=r).grid(row=4,column=4)
    botonrr=Button(ventana, image=img6, command=rr).grid(row=4,column=6)
    
    ventana.mainloop()
    
     
  • PyQREncode: Librería para python, que será la encargada de generar los códigos QR que pueden ser guardados directamente como una imagen para su posterior impresión, esta librería  además de crear, permite la lectura de códigos QR ya sea desde una imágen de archivo o una imágen tomada directamente desde la webcam.
           //ejemplo de esto  y la imagen del QR generado







#!/usr/bin/env python                                                           
# -*- coding: utf-8 -*-                                                         

import qrencode
texto=raw_input('Texto: ')
imagens = qrencode.encode_scaled(texto, 300, version=3, level=3, hint=3, case_s\
ensitive=False)[2]
print imagensa
a='./'+texto+'2'+'.png'
imagens.save(a)



Las imagenes que nos crea son las siguientes:






























Como vemos los qr que se crean son diferentes =D

jueves, 30 de agosto de 2012

Actividad - Definición de funcionalidades

Nuestro proyecto consta de un estacionamiento rotacional, así que tendrá muchas funcionalidades y se mostraran a continuación:

  • Un motor principal: el cual sera el encargado de mover todo el estacionamiento para bajar o subir. Se podra usar un servomotor, minimotor, etc. para realizar el movimiento principal de la estructura.
  • Sensor de movimiento: para recibir una señal de cuando llega un conductor nuevo y necesita su auto o viceversa, cuando el conductor deje su auto. Esta funcionalidad sera con un sensor de luz, infrarrojo, etc.
  • Lector de Tarjeta magnética: esta función sera importante para el conductor, cuando llege por su auto y necesite un recoger su auto y solo deslizara la tarjeta para avisar al sistema del estacionamiento.
  • Lector de Código de Barras, una alternativa al uso de la tarjeta magnética.
  • Códigos QR y cámara para leerlos, como otra alternativa al uso de la tarjeta magnética y al lector de código de barras.
  • Base de datos: tener en cuenta cuantos espacios hay disponibles y cuales están ocupados, y asi el conductor pueda estacionar su auto. 
La comunicación entre los dispositivos se aplicará mediante processing con python y la librería pySerial (comunicación serial con python), etc...

Para las funcionalidades del motor principal, el sensor y el lector, sera necesario del Arduino.

La rueda:

La rueda(al menos en el prototipo) se construirá utilizando un tipo de estructura basada en un juego de piezas (sacadas de un juguete) llamadas Erector, que trataremos de imitar su forma ya que resulta muy fácil construir fuertes estructuras con ellas y que lo único que tenemos que analizar es el tipo de material del que se construirán estas piezas, ya que de eso depende la fortaleza y el peso de la rueda; otro punto muy importante es que el esfuerzo para hacer girar y parar la rueda depende directamente del peso de esta y por lo tanto también afecta en la elección del tamaño del motor principal.

Esta es la ídea que tenemos hasta el momento de como será la rueda, con unas cuantas 
modificaciones. 


Entre algunas de las modificaciones pensadas están:
  • Agrandar los espacios donde se guardaran los autos.
  • Implementar una especie de candados para que los autos no caigan al momento de girar la rueda.
  • Cambiar el tamaño de las vigas que sostienen los espacios para los autos, esto para rosen o se ubiquen al ras del suelo al momento de estacionar un nuevo auto.
  • Entre otros que surjan en el transcurso del desarrollo.

Alcance de proyecto: Mover la rueda por medio del motor.

Referencias:

jueves, 16 de agosto de 2012

Proyecto Integrador - Metodología

Proyecto - Estacionamiento

Descripción de Proyecto, metodología, calendarizacion, etc...

Descripción:
Estacionamiento giratorio, se utilizara la plataforma de Hardware libre como Arduino, que sera útil para realizar las funciones principales de movimiento, etc.
Sera necesario de programar las funciones con el lenguaje de programación Processing.

Aqui un ejemplo de la idea:


El video anterior da una idea mas clara del proyecto que se depende realizar.

Metodología Scrum

Escogimos esta metodología ya que nos daremos cuenta de los avances que realizo cada uno de los integrantes y dar un seguimiento firme a nuestro proyecto.
Scrum, más que una metodología de desarrollo software, es una forma de auto-gestión de los equipos de programadores. Un grupo de programadores deciden cómo hacer sus tareas y cuánto van a tardar en ello. Scrum ayuda a que trabajen todos juntos, en la misma dirección, con un objetivo claro.
Le permitira al jefe de proyecto ver los progresos dia a dia de los avances y tareas a realizar.

Product Owner(Blanca): 
 Jefe de Proyecto, encargado de mantener el trabajo en equipo.
Scrum Master(Rene):  
Se asegura de guiar la colaboración intraequipo, quita los impedimentos que se presentan a través del tiempo y protege y aisla al equipo de interrupciones.

Equipo de desarrollo(Blanka, Vannesa, Adriana, Rene, Rodolfo, Cristhian, David): 
Equipo encargado de entragar el trabajo que cuentan con las habilidades necesarias para llevarlo acabo ( (análisis, diseño, desarrollo, pruebas, documentación, etc).

Roles:
Lo primero que se hara sera agrupar por parejas o de 3 personas, segun lo que vayan a realizar para el proyecto, y al final juntar el material o trabajo realizado para tener un proyecto terminado.
Todo el equipo se apoyara por si se llega a tener un problema o retraso en la realización del proyecto.

  • Rene -  Base de Datos
  • Blanca -Integración del Funcionamiento()
  • Rodolfo - Desarrollo de Pruebas
  • Adriana - Documentación
  • Vanessa - Desarrollo de Interfaz, diseño
  • David - Automatización
  • Cristian - Automatización

Reunión diaria de sincronización del equipo (Scrum daily meeting)

Nos facilitara la transferencia de información y la colaboración entre los miembros del equipo y asi poder aumentar la productividad y poder en manifiesto puntos en que se puedan ayudar unos a otros.

Cada miembro del equipo debe responder las siguientes preguntas en un timebox de cómo máximo 15 minutos:
  • ¿Qué he hecho desde la última reunión de sincronización? ¿Pude hacer todo lo que tenía planeado? ¿Cuál fue el problema?
  • ¿Qué voy a hacer a partir de este momento?
  • ¿Qué impedimentos tengo o voy a tener para cumplir mis compromisos en esta iteración y en el proyecto?

Milestones

Actividad                                                      Puntos                Fecha

Presentación inicial                                       10              16-Agosto-12
Definición de funcionalidades                        10              30-Agosto-12
Definición de herramientas y algo mas               5                13-Sept-12
Diseño del modelo                                            5              20-Sep-12 
Avances                                                          10                11-Oct-12
Diseño de Base de Datos                                    10               18-Oct-12
Programación del funcionamiento del sistema    5               25-Oct-12
Prototipo del modelo                                         10                1-Nov-12
Integración Python y prototipo del modelo()         10              8-Nov-12
Pruebas del proyecto                                             12             15-Nov-12
Demo de lo obtenido hasta el momento                                            13               22-Nov-12


Bitácora


La Bitácora se llenara semanalmente en el cual se reportaran los avances que se realizan en el proyecto asi como quien la realizo, las actividades que se realizaron asi como los cambios que se han realizado