Por fin terminé la versión 2.1 de la librería de servo para las placas de 8 bits de Pinguino. A continuación os doy detalles de lo que ha cambiado…En primer lugar, las funciones setMaximuPulse y setMinimumPulse hacen lo que deberían de hacer, y no lo que hacían antes. Antes estas 2 funciones simplemente llevaban la posición del servo a su máximo o su mínimo respectivamente. Lo cual no era para lo que estaban pensadas. Lo que hacen ahora es lo debido, lo cual describo a continuación:
servo.setMaximumpulse (pin, pulsomaximo)
Donde pin, es el numero de pin donde tenemos conectado el servo.
y pulsomaximo, es el valor en microsegundos del ancho máximo del pulso que admite nuestro servo. Este valor no puede ser superior a 2500 microsegundos.
servo.setMinimumpulse (pin, pulsominimo)
Donde pin, es el numero de pin donde tenemos conectado el servo.
y pulsominimo, es el valor en microsegundos del ancho máximo del pulso que admite nuestro servo. Este valor no puede ser inferior a 500 microsegundos.
De este modo establecemos cuales serán las posiciones mas extremas de nuestro servo. Si vamos a la hoja del fabricante lo podemos ver, y programarlo de acuerdo a ello.
Así vamos a establecer la siguiente relación:
– El ancho del pulso máximo, para que el servo se posicione a 180 grados.
– El ancho del pulso mínimo, para que el servo se posicione a 0 grados.
Por poner un ejemplo, vamos a utilizar un servo en concreto. Miramos la hoja de datos de un servo (podéis utilizar esta recopilación de datos que tenemos en ARDE: http://wiki.webdearde.com/index.php?title=Actuadores_II#Servomotores), por ejemplo, vemos que el fabricante del TowerPro SG-5010 dice que el mínimo pulso que admite es de 700 microsegundos (posición de 0 grados) y que el máximo es de 2250 microsegundos (posición de 180 grados). De modo que ahora con estas funciones podemos introducir en nuestro programa para pinguino los valores adecuados para dichos extremos de posición del servo.
Imaginemos que queremos conectar nuestro servo al pin 1 de nuestra placa pinguino:
setup { servo.attach(1) servo.setMaximumpulse (1, 2250); servo.setMinimumpulse(1,700); }
Con eso ya tendríamos el servo correctamente definido para empezar a trabajar con él.
Además de la modificación de esas 2 nuevas funciones, he cambiado la función servo.write, y ahora lo que admite como parámetro de posición del servo son grados. De modo que en el cuerpo de nuestro programa principal podemos seguir con el ejemplo anterior del servo conectado al pin 1 y lo que tendríamos sería algo así:
loop { servo.write(1,0); // posicionamos el servo en 0 grados. delay(1000); // retardo de 1 segundo. servo.write(1,90); // movemos el servo a su posición central. delay(1000); // retardo de 1 segundo. servo.write(1,180); // movemos el servo a su posición central. delay(1000); // retardo de 1 segundo. } // fin del bucle principal.
Además de todo esto, tened en cuenta que podéis utilizar las siguientes Pinguino boards para trabajar con la librería de servos. De momento son todas de 8 bits. Ninguna de 32 bits aún:
- Pinguino generica con 18F2550 (posibilidad de controlar hasta 18 servos simultáneamente)
- Pinguino generica con 18F4550 (posibilidad de controlar hasta 29 servos simultáneamente). Para utilizar todos los pines disponibles tienes que añadir al principio de tu programa la directiva de compilación:
#define 18F4550
- Pinguino PIC UNO EQUO. (posibilidad de controlar hasta 14 servos simultáneamente). Para utilizar todos los pines disponibles tienes que añadir al principio de tu programa la directiva de compilación:
#define PICUNO_EQUO
Con esto creo que podréis sacar partido de las modificaciones de la librería.
¡ Observad que con una Pinguino genérica con 18f4550 disponéis de 29 pines para manejar servos simultáneamente ! Sinceramente estoy tentado de hacerme un hexápodo o un humanoide con esto, porque son muchos servos los que se pueden controlar de este modo. Os animo a que probéis. Si lo hacéis, no dudéis en escribirme.
Saludos!!
Si queréis más información sobre como está hecha la librería, os invito a que miréis directamente el código, que ya está en los repositorios de google code, la he subido a la release 322 del código:
http://code.google.com/p/pinguino32/source/browse/trunk/p8/include/pinguino/libraries/servos.c
Editado el 30 de Agosto del 2012:
Dado que los repositorios no tienen fácil acceso para todos, os lo pongo también en la página de descargas de este blog.
Hola a todos los que seguiais este artículo.
La nueva implementación de la librería está ya en su versión 4.2, y está subida al repositorio de svn : http://code.google.com/p/pinguino32/source/browse/ide/x.4 : Os pido que lo actualiceis y probeis con ella. Yo personalmente he probado con Pinguino 2550 y Pinguino 4550 y va de maravilla. Regis también me ayudó y la probó con PICUNO EQUO. Todo fue bien.
Espero vuestros comentarios de resultados en mi nuevo artículo del blog: https://linuxdroids.wordpress.com/2013/11/16/libreria-de-servos-version-4-2-para-pinguino/
Saludos.
Me gustaMe gusta
Hola, quisiera saber que tengo que hacer para usar la libreria en la version x.4 ya que ya copie la libreria y me marca este error error line 4 macro names must be identifiers
, gracias
Me gustaMe gusta
Hola Alejandro,
Hemos encontrado algunos bugs en x.4, en cuanto los resolvamos y probemos de nuevo todo el código te respondo por este canal.
Saludos, Sphinx.
Me gustaMe gusta
Muy buena la libraria tal cual la describes, pero en el IDE Pinguino X.4 me daerrores en todas las funciones de la libreria podria indicar de donde la bajo y don de la coloco
Me gustaMe gusta
Hola Bruno,
Tal y como escribía en respuesta a otra pregunta anterior, hemos encontrado algunos bugs en X.4 que hacen que esta librería falle. En cuanto los resolvamos os respondo a todos por este canal y actualizo el artículo del blog.
Saludos,
Sphinx.
Me gustaMe gusta
Hola de nuevo Bruno. Mira mi nuevo artículo . Acabo de terminar de reescribir la librería. Se trata de la versión 4.2 y es totalmente compatible con el IDE x.4. Está probada por mi mismo… comentame si la usas.
Me gustaMe gusta
Hola, estoy intentando controlar varios servos con una pic32 pinguino micro de Olimex, he hecho un apaño utilizando interrupciones, y funciona, pero no es un código muy fino y con muchos servos empieza a mandar pulsos un poco irregulares. Seguramente el problema es por los delays que la ejecución del propio código introduce al actualizar los pulsos de todos los servos.
¿Sabes si alguien tiene previsto portar tu librería a pinguino32? Si tú tienes pensado hacer algo en este sentido, y te sirve de algo el código que he hecho, aunque ya te aviso que es un poco chapuza, no dudes en escribirme y te lo mando.
Un saludo.
Me gustaMe gusta
Hola alop,
Disculpa la tardanza en responderte, pero por motivos de salud he estado bastante alejado de estas actividades.
Efectivamente mi idea original era la de portar mi librería de servos a todas las variantes de Pinguino, incluida la de 32bits. Actualmente desconozco si mi librería version 2.1 está ya integrada en el proyecto pinguino.
Intentaré ponerme al día y poder actualizar la librería a micros de 32.
Gracias por tu mensaje.
Un saludo.
Me gustaMe gusta
hola ya logre hahacer que me compile 🙂 usando #define PICUNO_EQUO sin embargo aunque compila cuando se lo cargo ami placa si uso el puerto de serie por ejemplo Serial.begin(9600); en setup mi servos no se mueven 😦
Me gustaMe gusta
hola disculpa cuando intento compilar usando en puerto de serie usando la board con 18f4550 me da error de compilacion pero cuando compilo para 2550 no me lo da la cuestion es que necesito usar muchos seros por eso quiero usar el 4550…este es el error que me marca
error: linker script has no definition that matches the type of section «udata_fsadd_1»
error while linking C:\Pinguino\examples\10.Libraries\Servo\singleservotest.o
Me gustaMe gusta
Hola mira; estoy probando las librerías y todo perfecto. El único inconveniente que me encuentro es al intentar pasar el codigo al pinguino. Es PIC18F4550 y bueno lo que me dice la consola es: Processing device 010 Unable to open device. Sabes porque se da ese problema? Gracias de antemano.
Me gustaMe gusta
Hola, no sé que versión de IDE de pinguino estás utilizando. Si me puedes decir cual, te podré ayudar. Lo digo porque algunas ultimas versiones del IDE tienen un menú para seleccionar el chip que utilizamos.
Saludos,
Sphinx.
Me gustaMe gusta
Hola
He buscado esta libreria pero no la encuentro en ningun lugar.
Ni en la X.3 ni en la X.4, podrias indicarme de donde bajarla?.
Un saludo
Fernan
Me gustaMe gusta
Hola Fernan,
He editado el articulo y he incluido el fichero en la pagina de descargas de este blog. Mira al final del articulo.
un saludo.
Me gustaMe gusta
Lo acabo de bajar, muchas gracias
Un saludo
Fernan
Me gustaMe gusta
Hola Sphinx
Estoy usando la ultima version de pinguino (r564), he cambiado el «servos.c» (version 1.0) por el que he bajado de esta pagina (version 2.1).
Al escribir el programa , el autocompletado funciona perfectamente con las nuevas instrucciones pero al compilar da un fallo.
/home/fernan/datos/electronica/x.4/source/define.h:4:9: error: macro names must be identifiers
/home/fernan/datos/electronica/x.4/source/user.c:12: syntax error: token -> ‘ServoMaximumPulse’ ; column 17
Lo intento compilar para una placa 18f4550 e incluyo al iniciar el programa «#include 18f4550».
Si sabes que me falta por hacer para que pueda compilar se agradecera toda la ayuda
Un saludo
Fernan
Me gustaMe gusta
Hola Fernan, perdona el tiempo sin contestar, llevo unos meses de baja y no he revisado el blog. Dime si pudiste encontrar la causa de ese problema, y lo podemos compartir aquí con nuestros lectores. Así de momento no se me ocurre cual puede ser la razón.
Un saludo, Sphinx.
Me gustaMe gusta
hola compañero…mira necesito que me pases, ya sea por email o subiendolo a pastebin o como fuera, la version 2.1 de servos.c que describes aqui en tu blog.
porque lamentablemente el link de arriba no funciona y no pude encontrar la libreria en la web.. gracias , te dejo mi email
axs.ibarra@gmail.com
Me gustaMe gusta
Hola axs,
Puedes encontrar el fichero en la página de descargas del blog. He editado el articulo y he puesto un enlace justo al final.
Un saludo.
Ya me decis que tal va la libreria para vosotros.
Saludos.
Me gustaMe gusta
Como se implementa la libreria? La sustituyo por la existente nada más?
Me gustaMe gusta
En pricipio solo es eso efectivamente. Si tienes problemas escribeme.
Saludos.
Me gustaMe gusta
Da errores con la declaración implícita de la función abs y con la definición de la estructura «servo» que no la encuentra. Podrías ayudarme?
Me gustaMe gusta
Hola, estuve una temporada desconectado. Disculpas
Dame más datos sobre el problema si aun lo tienes.
Saludos.
Me gustaMe gusta