Archivo

Archive for the ‘Servos’ Category

Manejo del servo mediante un Potenciometro

14/02/2011 2 comentarios

Buenas, aqui os dejo un pequeño ejemplo del manejo de un servo mediante un potenciometro, con esto podemos simular una articulación a tiempo real, entro otras cosas.

Os dejo un pequeño video para que vean lo que hace:

Enlace

A continuación os deo el código:

——————————————————-

// Controla la posicion del servo mediante un potenciometro.
//   +—–+
//   |servo|——— PWM Servo control —> to pinguino pin 0.
//   |          |——— +5V
//   |    o    |——— GND
//   |          |
//   +—–+

#define PIC18F4550

uchar position=125;

void setup(void){
servo.attach(0);
pinMode(13,INPUT);
}

void loop(void){
position = analogRead(13)/4;
servo.write(0,position);
}

—————————–

UN SALUDO!

PD. Siento haber tardado tanto en volver a publicar, pero tras la semana de examenes necesitaba poner al día otras cuestiones, espero recuperar el ritmo de una actulización al dia.

PPD. devido a que ya se vendio el primer pinguino, os dejo AQUÍ la dirección del siguiente por si están interesados.

Más sobre motores.

Buenas, ya solucionado el problema de mi placa, que bien tontuco que era. Y debido a la falta de ganas de juerga de parte de mis amigos, he decido tontear un ratico con mi pinguino. Bien lo primero que hice fue un pequeño c0digo mu tonto y mu fasi, pa controlar el servo mediante botones:

————————————————————————————————————

#define PIC18F4550

uchar position=125;

void setup(void)
{
servo.attach(0);
pinMode(7,INPUT);
pinMode(6,INPUT);
}

void loop(void)
{
if(digitalRead(7) && position != 250)
{
position++;
}
if(digitalRead(6) && position != 1)
{
position–;
}
servo.write(0,position);
delay(5);
}

———————————————————————

Además también me puse a mirar los otros comandos de los servos, que resultan ser 4 y no 3 como comente.

Servo.read(pin) : Es una función que te devuelve un numero entre 1 y 250. Puede ser muy útil cuando se pierda la cuenta o el control de motor saber por donde vamos. Aunque claro está que si utilizamos una variable auxiliar para controlarlo también podríamos mirarlo directamente sobre la variable. Cuestión de saber que es lo que se quiere hacer. Por lo pronto ya es algo que tenemos ahí.

Servo.detach(pin): Sirve para deseleccionar un pin para su uso con un motor, a partir de entonces, ninguna de las funciones de servos será valida para el. Cuestión de probar si se puede volver a activar con Servo.attach(pin), que supongo que sí. Ya os lo confirmaré.

Servo.setMaximunPulse(pin): Pone el servo en su posición máxima

Servo.SetMinimunPulse(pin): Pone el servo en su posición mínima

Y con esto terminamos la librería de servos. Realmente no le veo gran utilidad a estos dos últimos ya que es lo mismo que poner servo.write(pin,1) por ejemplo. Aunque claro esto da un poco de  sentido a servo.read. En fin, cuestión de jugar un poquito con ellas, por que para algo están y es posible que algún día las echemos en falta.

Supongo que ya empezaré estos días a toquetear el tema de los sensores y demás. Tengo por hay sensores CNY70 a los que darle utilidad, también pedí sensores de temperatura a la gente de microchip, y por hay tengo leds y transistores infrarrojos. Así que pronto estaré dando el coñazo con la básica de electrónica. Aviso de que no pretendo que seais unos super maestros de la electrónica, sino que sepais por donde van los tiros, y si ya sabes de electrónica, pues te saltas la explicación :P.

Un saludo.

 

 

 

Jugueteando con los motores

Bueno poco a poco, esta va cojiendo forma, se ve que hoy tengo un buen día. Los chicos de A.R.D.E me dieron la solución al problema con el bootloader, sali bastante contento del examen de sed (casualmente me examine de pics xD). Y antes de acabar el dia estaba jugueteando con un servo. Bueno todavia mucho mucho mucho, pues no se, pero por lo menos es algo.

al parecer el pinguino puede manejar hasta 18 servos diferentes, para elegir el valor de los servos, basta con poner el comando: «servo.attach(pin)»; sin embargo solo se puede usar los pines de 0 a 17.

En cuanto al control lo único que llevo por ahora es lo de llevar el motor al punto que quiero. Se supone que el motor tiene unos topes de 180 grados. Lo cual puede llegar a ser interesante segun para que cosa. Luego si queremos poner el motor en una posicion especifica basta con dividir esto 180 grados entre 250 y  darle esa posicion, mientras que si lo que queremos es hacerlo oscilar, (plan pendulo) solo habría que incrementar o decrementar la posición. Para hacer esto usaremos el comando:  «servo.write(pin,posición);»

Bueno ya solo me queda investigar un poquitín sobre las tres otras instrucciones sobre servos, de las cuales me hago alguna idea de lo que hace, pero que prefiero probar antes de informar.

Espero que esto os ayude un poco, yo me voy a ir iendo a la cama, que este feliz día ha llegado a su fín mientras os escribia esto :P.

Un saludo.

PD. Pienso poner un minitutorial de electrónica básica, así este blog puede servir para que la gente aprenda a hacerse sus propios pinguinos y plaquitas externas. Y animar al personal a que se moje con cositas de estas, que yo estoy aprendiendo a usar un pinguino ahora. me hice uno desde cero y aquí estoy, exteriorizando todos mis conociemientos para que lo tengáis aún más mascaíto.