Aprovecho tu mensaje ay que dices que trabajas con la gente de butiá.<br>En el minijam artístico estuve hablando con gonchi porque me interesaría hacerme de un robot para experimentar tranquilo en mi casa y me dijo que mandara un mail al proyecto, que ellos me armaban el robot si yo pagaba los componentes.<br>
Les mandé el mail pero nunca me contestó nadie. A ver si tu puedes hacerme esta gestión te agradezco.<br><br><br><br><div class="gmail_quote">El 27 de septiembre de 2010 17:22, Andres Aguirre <span dir="ltr">&lt;<a href="mailto:aaguirre@fing.edu.uy">aaguirre@fing.edu.uy</a>&gt;</span> escribió:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Marcos, como estas?<br>
Yo estoy participando en el proyecto Butiá y estamos abiertos para<br>
evacuar cualquier tipo de dudas que tengas respecto a como controlamos<br>
periféricos desde la ceibalita mediante el USB.<br>
Creo que ya te contestamos a tí o a alguien de tu equipo una consulta<br>
sobre estos temas, pero estamos abiertos para juntarnos y charlar<br>
sobre los detalles técnicos si lo deseas.<br>
Nosotros usamos placas de E/S que utilizan microcontroladores para<br>
comandar los dispositivos electrónicos y estas se conectan al USB de<br>
la ceibalita. Todos los fuentes del proyecto están publicados en la<br>
web del mismo <a href="http://www.fing.edu.uy/inco/proyectos/butia/" target="_blank">http://www.fing.edu.uy/inco/proyectos/butia/</a> en<br>
particular hoy pensamos subir la versión 1.0 de los fuentes (tanto<br>
hardware como software y diseño mecánico).<br>
El tema es que el USB es un protocolo más complejo de lo que es el<br>
serial o el paralelo y uno termina perdiendo la flexibilidad que se<br>
tenia antes con los puertos paralelos  para manejar un pin digital<br>
directamente desde un programa, por eso es que nosotros usamos<br>
microcontroladores. No pensaron en usar alguna cosa sencilla que te<br>
convierta en USB en un paralelo? algún chip de ftdi como el<br>
<a href="http://www.ftdichip.com/Products/ICs/FT245R.htm" target="_blank">http://www.ftdichip.com/Products/ICs/FT245R.htm</a><br>
Sino &quot;hackear&quot; algún teclado USB roto para colgarse de las patas que<br>
se usan para el led de num lock, blocks o similares ya que esos son<br>
controlables por software en un linux estándar (no se si se tendrán<br>
permisos en la ceibalita) y se tiran a la basura muchos diariamente.<br>
un abrazo<br>
<br>
<br>
<br>
--<br>
/\ndrés<br>
<br>
 <a href="mailto:amviera@adinet.com.uy">amviera@adinet.com.uy</a> &lt;<a href="mailto:amviera@adinet.com.uy">amviera@adinet.com.uy</a>&gt;:<br>
<div><div></div><div class="h5">&gt; Gracias Flavio.<br>
&gt;<br>
&gt; Alguna vez pregunté acerca de eso y nadie me dio mucho corte.<br>
&gt; Tampoco he podido acceder a información desde el proyecto BUTIA, aunque sé<br>
&gt; que ellos utilizan el puerto USB<br>
&gt;<br>
&gt; Sólo hay que averiguar cómo escribir y leer datos (nivel alto o bajo) en los<br>
&gt; pines 2 y 3 del puerto. No debbe ser nada complicado.<br>
&gt;<br>
&gt;<br>
&gt; Probé, pero no pude instalar pyusb.<br>
&gt;<br>
&gt; Además, Adrián, entre los pines 1 y 4 alimentás el motor (si no consume<br>
&gt; mucho) y entre los pines 2 y 3, respecto a masa, podés controlar puertas<br>
&gt; lógicas o relés (transistor por medio) para regular la marcha del motor, es<br>
&gt; decir, para controlar encendido y apagado, velocidad, e incluso sentido del<br>
&gt; giro. Y con un poco de ingenio, con engranajes o poleas lo podés convertir<br>
&gt; en un robot.<br>
&gt;<br>
&gt; Si te interesa te puedo ayudar con la parte electrónica, aunque yo necesito<br>
&gt; que alguien más ayude con la programación del puerto.<br>
&gt;<br>
&gt; Saludos, Mauricio Viera.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ----Mensaje original----<br>
&gt;<br>
&gt; De: <a href="mailto:fdanesse@gmail.com">fdanesse@gmail.com</a><br>
&gt;<br>
&gt; Fecha: 25/09/2010 00:25<br>
&gt;<br>
&gt; Para: &quot;Comunidad ceibalJAM&quot;<br>
&gt;<br>
&gt; Asunto: Re: [Olpc-uruguay] Consulta Programacion USB<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Hola.<br>
&gt;<br>
&gt; Como primera respuesta, te digo que nunca he hecho nada con los usb pero ya<br>
&gt; quedo haciendo experimentos.<br>
&gt; Click acá para bajarte pyusb que es el paquete que necesitas para hacer esto<br>
&gt; con python, se instala haciendo python setup.py install desde la terminal en<br>
&gt; el directorio descomprimido.<br>
&gt;<br>
&gt;<br>
&gt; Esto no viene en la xo, y no lo vas a poder instalar, al menos yo no pude,<br>
&gt; tendrás que hacer algunos malabares para que funcione, pero vete<br>
&gt; acostumbrando porque sin root no hay más remedio.<br>
&gt;<br>
&gt; Lo otro que habría que investigar es como acceden los de robótica a los usb,<br>
&gt; pregunta en &quot;proyecto Butiá&quot;.<br>
&gt;<br>
&gt;<br>
&gt; Acá te dejo un ejemplo de acceso a las impresoras utilizando pyusb:<br>
&gt;<br>
&gt; import usb<br>
&gt; import os<br>
&gt;<br>
&gt; import sys<br>
&gt; import time<br>
&gt; import types<br>
&gt;<br>
&gt;<br>
&gt; class Printer:<br>
&gt;<br>
&gt;<br>
&gt;     &#39;&#39;&#39;<br>
&gt;     Clase que maneja directamente el puerto USB, preguntando al hardware<br>
&gt; conectado<br>
&gt;<br>
&gt;     los parametros indicativos del mismo.<br>
&gt;     &#39;&#39;&#39;<br>
&gt;<br>
&gt;<br>
&gt;     def __init__(self, device, configuration, interface):<br>
&gt;<br>
&gt;         if PRINTER_CLASS != interface.interfaceClass:<br>
&gt;<br>
&gt;             raise TypeError, &quot;Tipo de interface non valido!&quot;<br>
&gt;<br>
&gt;<br>
&gt;         self.__devhandle = device.open()<br>
&gt;         self.__devhandle.setConfiguration(configuration)<br>
&gt;<br>
&gt;         self.__devhandle.claimInterface(interface)<br>
&gt;         self.__devhandle.setAltInterface(interface)<br>
&gt;<br>
&gt;<br>
&gt;         self.__intf = interface.interfaceNumber<br>
&gt;         self.__alt    = interface.alternateSetting<br>
&gt;<br>
&gt;<br>
&gt;         self.__conf = (type(configuration) == types.IntType \<br>
&gt;                         or type(configuration) == types.LongType) and \<br>
&gt;<br>
&gt;                         configuration or \<br>
&gt;                         configuration.value<br>
&gt;<br>
&gt;<br>
&gt;         self.__bulkout    = 1<br>
&gt;         self.__bulkin     = 0x82<br>
&gt;<br>
&gt;<br>
&gt;     def __del__(self):<br>
&gt;<br>
&gt;<br>
&gt;         try:<br>
&gt;             self.__devhandle.releaseInterface(self.__intf)<br>
&gt;<br>
&gt;             del self.__devhandle<br>
&gt;         except:<br>
&gt;             pass<br>
&gt;<br>
&gt;<br>
&gt;     def getDeviceID(self, maxlen, timeout = 100):<br>
&gt;<br>
&gt;<br>
&gt;         return self.__devhandle.controlMsg(requestType = 0xa1,<br>
&gt;                                            request = 0,<br>
&gt;<br>
&gt;                                            value = self.__conf - 1,<br>
&gt;                                            index = self.__alt + (self.__intf<br>
&gt; &lt;&lt; 8),<br>
&gt;<br>
&gt;                                            buffer = maxlen,<br>
&gt;                                            timeout = timeout)<br>
&gt;<br>
&gt;<br>
&gt;     def getPortStatus(self, timeout = 100):<br>
&gt;<br>
&gt;<br>
&gt;         return self.__devhandle.controlMsg(requestType = 0xa1,<br>
&gt;                                            request = 1,<br>
&gt;<br>
&gt;                                            value = 0,<br>
&gt;                                            index = self.__intf,<br>
&gt;<br>
&gt;                                            buffer = 1,<br>
&gt;                                            timeout = timeout)[0]<br>
&gt;<br>
&gt;     def softReset(self, timeout = 100):<br>
&gt;<br>
&gt;         self.__devhandle.controlMsg(requestType = 0x21,<br>
&gt;<br>
&gt;                                        request = 2,<br>
&gt;                                        value = 0,<br>
&gt;<br>
&gt;                                        index = self.__intf,<br>
&gt;                                        buffer = 0)<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;     def write(self, buffer, timeout = 100):<br>
&gt;<br>
&gt;<br>
&gt;         return self.__devhandle.bulkWrite(self.__bulkout,<br>
&gt;                                           buffer,<br>
&gt;<br>
&gt;                                           timeout)<br>
&gt;<br>
&gt;     def read(self, numbytes, timeout = 100):<br>
&gt;<br>
&gt;<br>
&gt;         return self.__devhandle.bulkRead(self.__bulkin,<br>
&gt;                                          numbytes,<br>
&gt;<br>
&gt;                                          timeout)<br>
&gt;<br>
&gt; class usbDispositivo:<br>
&gt;<br>
&gt;<br>
&gt;     &#39;&#39;&#39;<br>
&gt;     Modelo de datos de un dispositivo USB (tipo VO)<br>
&gt;<br>
&gt;     &#39;&#39;&#39;<br>
&gt;<br>
&gt;     def __init__(self,dispositivo):<br>
&gt;<br>
&gt;<br>
&gt;         self.archivo = &#39;&#39;<br>
&gt;         self.clase = &#39;&#39;<br>
&gt;<br>
&gt;         self.subClase = &#39;&#39;<br>
&gt;         self.protocolo = &#39;&#39;<br>
&gt;<br>
&gt;         self.idFabricante = &#39;&#39;<br>
&gt;         self.idProducto = &#39;&#39;<br>
&gt;<br>
&gt;         self.version = &#39;&#39;<br>
&gt;         self.descripcion = &#39;&#39;<br>
&gt;<br>
&gt;         self.archivo = dispositivo.filename<br>
&gt;         self.clase = dispositivo.deviceClass<br>
&gt;<br>
&gt;         self.subClase = dispositivo.deviceSubClass<br>
&gt;         self.protocolo = dispositivo.deviceProtocol<br>
&gt;<br>
&gt;         self.idFabricante = dispositivo.idVendor<br>
&gt;         self.idProducto = dispositivo.idProduct<br>
&gt;<br>
&gt;         self.version = dispositivo.deviceVersion<br>
&gt;<br>
&gt;         try:<br>
&gt;<br>
&gt;             self.descripcion = dispositivo.open().getString(1,30)<br>
&gt;         except:<br>
&gt;<br>
&gt;             self.descripcion = &#39;&#39;<br>
&gt;<br>
&gt;     def getArchivo(self):<br>
&gt;<br>
&gt;         return self.archivo<br>
&gt;<br>
&gt;     def getClase(self):<br>
&gt;<br>
&gt;         return self.clase<br>
&gt;<br>
&gt;     def getSubClase(self):<br>
&gt;<br>
&gt;         return self.subClase<br>
&gt;<br>
&gt;     def getProtocolo(self):<br>
&gt;<br>
&gt;         return self.protocolo<br>
&gt;<br>
&gt;     def getIdFabricante(self):<br>
&gt;<br>
&gt;         return self.idFabricante<br>
&gt;<br>
&gt;     def getIdProducto(self):<br>
&gt;<br>
&gt;         return self.idProducto<br>
&gt;<br>
&gt;     def getVersion(self):<br>
&gt;<br>
&gt;         return self.version<br>
&gt;<br>
&gt;     def getDescripcion(self):<br>
&gt;<br>
&gt;         return self.descripcion<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; El 24 de septiembre de 2010 22:19, Adrian Silveira &lt;<a href="mailto:adance@gmail.com">adance@gmail.com</a>&gt;<br>
&gt; escribió:<br>
&gt;<br>
&gt;&gt; Hola a Todos,<br>
&gt;&gt;<br>
&gt;&gt;        mi nombre es Adrián y participo del proyecto de extensión &quot;Isaac,<br>
&gt;&gt; Nikola y Galileo van a la Escuela (INGE) y los estudiantes también&quot; (INGE)<br>
&gt;&gt; de la Facultad de Ingeniería. Se trata de desarrollar actividades<br>
&gt;&gt; relacionadas con la física en escuelas de contexto crítico en Canelones y de<br>
&gt;&gt; esta forma mostrarles que hay otra profesión a la que pueden aspirar. Es una<br>
&gt;&gt; propuesta muy rica, interesante, alentadora, ambiciosa, esperamos que tenga<br>
&gt;&gt; un gran impacto en ellos.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Como parte de nuestras actividades, queríamos mostrarles a escolares<br>
&gt;&gt; de cuarto año de escuela como controlar por software un ventilador enchufado<br>
&gt;&gt; a un puerto USB. Ellos lo armarían con los materiales que les damos (cable<br>
&gt;&gt; de datos usb, motor, cartulina) y luego enchufándolo a la ceibalita por el<br>
&gt;&gt; puerto usb se alimentaría de energía para funcionar. Lo que nos gustaría es<br>
&gt;&gt; poder desarrollar un programita bien sencillo, que haga de on/off de la<br>
&gt;&gt; corriente en el puerto usb para así enceder/apagar el ventilador.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Agradezco en base a su experiencia si me pueden orientar en si es factible<br>
&gt;&gt; desarrollar un programa que haga esto y todo lo que me puedan aportar para<br>
&gt;&gt; hacerlo se los agradezco.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Muchas Gracias<br>
&gt;&gt;<br>
&gt;&gt; Saludos<br>
&gt;&gt; Adrián<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; &quot;Podría Estar Encerrado en una Cascara de Nuez y Sentirme Rey de un<br>
&gt;&gt; Espacio Infinito...&quot;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt;<br>
&gt;&gt; Olpc-uruguay mailing list<br>
&gt;&gt;<br>
&gt;&gt; <a href="mailto:Olpc-uruguay@lists.laptop.org">Olpc-uruguay@lists.laptop.org</a><br>
&gt;&gt;<br>
&gt;&gt; <a href="http://lists.laptop.org/listinfo/olpc-uruguay" target="_blank">http://lists.laptop.org/listinfo/olpc-uruguay</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Olpc-uruguay mailing list<br>
&gt; <a href="mailto:Olpc-uruguay@lists.laptop.org">Olpc-uruguay@lists.laptop.org</a><br>
&gt; <a href="http://lists.laptop.org/listinfo/olpc-uruguay" target="_blank">http://lists.laptop.org/listinfo/olpc-uruguay</a><br>
&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div></div><font color="#888888">--<br>
/\ndrés<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
Olpc-uruguay mailing list<br>
<a href="mailto:Olpc-uruguay@lists.laptop.org">Olpc-uruguay@lists.laptop.org</a><br>
<a href="http://lists.laptop.org/listinfo/olpc-uruguay" target="_blank">http://lists.laptop.org/listinfo/olpc-uruguay</a><br>
</div></div></blockquote></div><br>