[Olpc-uruguay] Consulta Programacion USB

amviera en adinet.com.uy amviera en adinet.com.uy
Lun Sep 27 14:39:41 EDT 2010


Gracias Flavio.

Alguna vez pregunté acerca de eso y nadie me dio mucho corte.
Tampoco he podido acceder a información desde el proyecto BUTIA, aunque sé que ellos utilizan el puerto USB

Sólo hay que averiguar cómo escribir y leer datos (nivel alto o bajo) en los pines 2 y 3 del puerto. No debbe ser nada complicado.


Probé, pero no pude instalar pyusb.

Además, Adrián, entre los pines 1 y 4 alimentás el motor (si no consume mucho) y entre los pines 2 y 3, respecto a masa,  podés controlar puertas lógicas o relés (transistor por medio) para regular la marcha del motor, es decir, para controlar encendido y apagado, velocidad, e incluso sentido del giro. Y con un poco de ingenio, con engranajes o poleas lo podés convertir en un robot. 

Si te interesa te puedo ayudar con la parte electrónica, aunque yo necesito que alguien más ayude con la programación del puerto.

Saludos, Mauricio Viera.







----Mensaje original----

De: fdanesse en gmail.com

Fecha: 25/09/2010 00:25 

Para: "Comunidad ceibalJAM"

Asunto: Re: [Olpc-uruguay] Consulta Programacion USB



Hola.

Como primera respuesta, te digo que nunca he hecho nada con los usb pero ya quedo haciendo experimentos.
Click acá para bajarte pyusb que es el paquete que necesitas para hacer esto con python, se instala haciendo python setup.py install desde la terminal en el directorio descomprimido.


Esto no viene en la xo, y no lo vas a poder instalar, al menos yo no pude, tendrás que hacer algunos malabares para que funcione, pero vete acostumbrando porque sin root no hay más remedio.

Lo otro que habría que investigar es como acceden los de robótica a los usb, pregunta en "proyecto Butiá".


Acá te dejo un ejemplo de acceso a las impresoras utilizando pyusb:

import usbimport os
import sysimport timeimport types
 class Printer: 
    '''    Clase que maneja directamente el puerto USB, preguntando al hardware conectado
    los parametros indicativos del mismo.    ''' 
    def __init__(self, device, configuration, interface):         if PRINTER_CLASS != interface.interfaceClass:
            raise TypeError, "Tipo de interface non valido!" 
        self.__devhandle = device.open()        self.__devhandle.setConfiguration(configuration)
        self.__devhandle.claimInterface(interface)        self.__devhandle.setAltInterface(interface)
         self.__intf = interface.interfaceNumber        self.__alt    = interface.alternateSetting
         self.__conf = (type(configuration) == types.IntType \                        or type(configuration) == types.LongType) and \
                        configuration or \                        configuration.value
         self.__bulkout    = 1        self.__bulkin     = 0x82
     def __del__(self): 
        try:            self.__devhandle.releaseInterface(self.__intf)
            del self.__devhandle        except:            pass
     def getDeviceID(self, maxlen, timeout = 100): 
        return self.__devhandle.controlMsg(requestType = 0xa1,                                           request = 0,
                                           value = self.__conf - 1,                                           index = self.__alt + (self.__intf 
                                           buffer = maxlen,                                           timeout = timeout)
     def getPortStatus(self, timeout = 100): 
        return self.__devhandle.controlMsg(requestType = 0xa1,                                           request = 1,
                                           value = 0,                                           index = self.__intf,
                                           buffer = 1,                                           timeout = timeout)[0]
    def softReset(self, timeout = 100):         self.__devhandle.controlMsg(requestType = 0x21,
                                       request = 2,                                       value = 0,
                                       index = self.__intf,                                       buffer = 0)
      def write(self, buffer, timeout = 100):
         return self.__devhandle.bulkWrite(self.__bulkout,                                          buffer,
                                          timeout)     def read(self, numbytes, timeout = 100):
         return self.__devhandle.bulkRead(self.__bulkin,                                         numbytes,
                                         timeout) class usbDispositivo:
     '''    Modelo de datos de un dispositivo USB (tipo VO)
    '''     def __init__(self,dispositivo):
         self.archivo = ''        self.clase = ''
        self.subClase = ''        self.protocolo = ''
        self.idFabricante = ''        self.idProducto = ''
        self.version = ''        self.descripcion = ''
        self.archivo = dispositivo.filename        self.clase = dispositivo.deviceClass
        self.subClase = dispositivo.deviceSubClass        self.protocolo = dispositivo.deviceProtocol
        self.idFabricante = dispositivo.idVendor        self.idProducto = dispositivo.idProduct
        self.version = dispositivo.deviceVersion         try:
            self.descripcion = dispositivo.open().getString(1,30)        except:
            self.descripcion = ''     def getArchivo(self):
        return self.archivo     def getClase(self):
        return self.clase     def getSubClase(self):
        return self.subClase     def getProtocolo(self):
        return self.protocolo     def getIdFabricante(self):
        return self.idFabricante     def getIdProducto(self):
        return self.idProducto     def getVersion(self):
        return self.version     def getDescripcion(self):
        return self.descripcion




El 24 de septiembre de 2010 22:19, Adrian Silveira adance en gmail.com> escribió:

Hola a Todos,

           mi nombre es Adrián y participo del proyecto de extensión "Isaac, Nikola y Galileo van a la Escuela (INGE) y los estudiantes también" (INGE) de la Facultad de Ingeniería. Se trata de desarrollar actividades relacionadas con la física en escuelas de contexto crítico en Canelones y de esta forma mostrarles que hay otra profesión a la que pueden aspirar. Es una propuesta muy rica, interesante, alentadora, ambiciosa, esperamos que tenga un gran impacto en ellos.




    

    Como parte de nuestras actividades, queríamos mostrarles a escolares de cuarto año de escuela como controlar por software un ventilador enchufado a un puerto USB. Ellos lo armarían con los materiales que les damos (cable de datos usb, motor, cartulina) y luego enchufándolo a la ceibalita por el puerto usb se alimentaría de energía para funcionar. Lo que nos gustaría es poder desarrollar un programita bien sencillo, que haga de on/off de la corriente en el puerto usb para así enceder/apagar el ventilador.




    
Agradezco en base a su experiencia si me pueden orientar en si es factible desarrollar un programa que haga esto y todo lo que me puedan aportar para hacerlo se los agradezco.

    
Muchas Gracias

    Saludos
Adrián -- 
"Podría Estar Encerrado en una Cascara de Nuez y Sentirme Rey de un Espacio Infinito..."


_______________________________________________

Olpc-uruguay mailing list

Olpc-uruguay en lists.laptop.org

http://lists.laptop.org/listinfo/olpc-uruguay






------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://lists.laptop.org/pipermail/olpc-uruguay/attachments/20100927/d972f598/attachment-0001.htm 


More information about the Olpc-uruguay mailing list