Mensajes: 44
Temas: 5
Registro en: Apr 2016
Reputación:
0
gracias ¡¡¡
void setup() {
myservo.attach(9);
myservo.write(15);
pinMode(buttonPin, INPUT);
}
esto funciona ¡¡¡¡ pero en una sola posición ,,, es decir cuando el angulo esta en 15 si lo guarda bien y al conectar se posiciona en 15 ,,, pero cuando esta en 45 no , se desplaza a unos 70 mas o menos ,, luego en unos segundos si se pone en 45...
Mensajes: 5
Temas: 1
Registro en: Dec 2014
Reputación:
0
Si te sirve, este código lo uso actualmente; no es mío, sino un copia y pega (algo modificado) de los foros de arduino.
Manejo el servo con un switch de dos posiciones. Servos tipo 9g.
Se mueven entre 86º y 94º. Pausa de 50.
Antes, con el servo en 90º (ini1=fin1=90) fijo el eje en la posición adecuada; después cambio el código y listo.
Con un arduino uno r3. Si alimentas por separado, une las masas.
Saludos.
============================================================
=== Inicio código===
/*
Probado con seis servos
En el switch(ACB), conector A a pinintX y a través de 10K ohm a +5v,
conector central C a masa 0v. y el otro conector B sin uso.
En el servo, la señal conectará también con pinservX.
(Sí. A pinsrvX llegan dos cables)
Si la alimentación de arduino y servos difiere, conectar ambas masas.
*/
#include <Servo.h> //Incluir la librería para el control de los Servos
int pausa = 50;
int ini1 =86;
int fin1 = 94;
Servo servo1; // Crea objeto servo
int pinint1 = 0; // Conector del switch, digital
int pinserv1 = 1; // Conector del servo, digital
int pressed1 = 0; // Estado inicial del switch antes de la lectura de pinint1
int ladoA1 = 0;
int ladoB1 = 0;
Servo servo2;
int pinint2 = 2;
int pinserv2 = 3;
int pressed2 = 0;
int ladoA2 = 0;
int ladoB2 = 0;
Servo servo3;
int pinint3 = 4;
int pinserv3 = 5;
int pressed3 = 0;
int ladoA3 = 0;
int ladoB3 = 0;
Servo servo4;
int pinint4 = 6;
int pinserv4 = 7;
int pressed4 = 0;
int ladoA4 = 0;
int ladoB4 = 0;
Servo servo5;
int pinint5 = 8;
int pinserv5 = 9;
int pressed5 = 0;
int ladoA5 = 0;
int ladoB5 = 0;
Servo servo6;
int pinint6 = 10;
int pinserv6 = 11;
int pressed6 = 0;
int ladoA6 = 0;
int ladoB6 = 0;
void setup()
{
servo1.attach(pinserv1);
pinMode(pinint1, INPUT);
servo2.attach(pinserv2);
pinMode(pinint2, INPUT);
servo3.attach(pinserv3);
pinMode(pinint3, INPUT);
servo4.attach(pinserv4);
pinMode(pinint4, INPUT);
servo5.attach(pinserv5);
pinMode(pinint5, INPUT);
servo6.attach(pinserv6);
pinMode(pinint6, INPUT);
}
void loop()
{
pressed1 = digitalRead(pinint1);
if(pressed1==HIGH)
{
ladoB1=0;
if(ladoA1==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo1.write(i);
delay(pausa);
}
ladoA1=1;
}
}
else
{
ladoA1=0;
if(ladoB1==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo1.write(i);
delay(pausa);
}
ladoB1=1;
}
}
pressed2 = digitalRead(pinint2);
if(pressed2==HIGH)
{
ladoB2=0;
if(ladoA2==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo2.write(i);
delay(pausa);
}
ladoA2=1;
}
}
else
{
ladoA2=0;
if(ladoB2==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo2.write(i);
delay(pausa);
}
ladoB2=1;
}
}
pressed3 = digitalRead(pinint3);
if(pressed3==HIGH)
{
ladoB3=0;
if(ladoA3==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo3.write(i);
delay(pausa);
}
ladoA3=1;
}
}
else
{
ladoA3=0;
if(ladoB3==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo3.write(i);
delay(pausa);
}
ladoB3=1;
}
}
pressed4 = digitalRead(pinint4);
if(pressed4==HIGH)
{
ladoB4=0;
if(ladoA4==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo4.write(i);
delay(pausa);
}
ladoA4=1;
}
}
else
{
ladoA4=0;
if(ladoB4==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo4.write(i);
delay(pausa);
}
ladoB4=1;
}
}
pressed5 = digitalRead(pinint5);
if(pressed5==HIGH)
{
ladoB5=0;
if(ladoA5==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo5.write(i);
delay(pausa);
}
ladoA5=1;
}
}
else
{
ladoA5=0;
if(ladoB5==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo5.write(i);
delay(pausa)
;
}
ladoB5=1;
}
}
pressed6 = digitalRead(pinint6);
if(pressed6==HIGH)
{
ladoB6=0;
if(ladoA6==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo6.write(i);
delay(pausa);
}
ladoA6=1;
}
}
else
{
ladoA6=0;
if(ladoB6==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo6.write(i);
delay(pausa);
}
ladoB6=1;
}
}
/* llave cierre loop */
}
===Fin código===
Mensajes: 44
Temas: 5
Registro en: Apr 2016
Reputación:
0
pero esto es para digital ??? No??
Mensajes: 5
Temas: 1
Registro en: Dec 2014
Reputación:
0
Hola.
No, este control de desvios no es digital. Al menos en el sentido de gobernado por una central digital.
Creo que es la misma idea que planteaste en el primer post. Pero el uso de pulsadores es más denso de programar que el de interruptores, por el efecto 'rebote' del contacto.
Además, al usar un interruptor DPDT (dos circuitos) se puede añadir fácilmente leds que indiquen la posición, tanto en maqueta como en pupitre.
Mis conocimientos sobre Arduino son menos que elementales, pero tras leer mucho y probar, tengo esto funcionado en una maqueta.
En el código indico como montar. Necesitas: servo, arduino, resist. 10K, interruptor, cables. Y luego un clip para mover el desvio.
Con todo en la mesa, lo montas en cinco minutos y lo puedes probar.
Con un arduino UNO r3 se pueden mover 6 servos con los pines 0 a 11. No se si 12 y 13 también con esta librería de servos.
Ojo con la alimentación.
Un saludo.
Mensajes: 44
Temas: 5
Registro en: Apr 2016
Reputación:
0
VALE COMPAÑEROS MUCHAS GRACIAS ¡¡¡¡ Ya lo tengo todo solucionado ... he optado por la solución de Jordi ,,, he instalado la librería esta y este código :
#include <VarSpeedServo.h>
int button1 = 2; //button pin, connect to ground to move servo
int press1 = 0;
VarSpeedServo servo1;
void setup()
{
pinMode(button1, INPUT);
servo1.attach(9);
servo1.write(0);
digitalWrite(4, HIGH); //enable pullups to make pin high
}
void loop()
{
press1 = digitalRead(button1);
if (press1 == LOW)
{
servo1.write(20,10); // AQUÍ MODIFICAS GRADOS DE GIRO Y VELOCIDAD, POR ESTE ORDEN
}
else {
servo1.write(0,10); // AQUÍ MODIFICAS GRADOS DE GIRO Y VELOCIDAD, POR ESTE ORDEN
}
}
...va perfecto
solo que cambiare los pulsadores por interruptores de 6 pines ¡¡¡ así puedo instalar los leds de forma analógica sin tener que hacer mas programación en el arduino .... AHORA intentaré incluir mas servos ...
LE PUESTO AL ARDUINO UN TRAFO DE 12 VOLTIOS Y 4 AMPERIOS ...SERVIRÁ ??
estoy buscando otro para los servos y a las leds ya les pongo sus resistencias correspondientes ¡¡¡
Perfecto que hayas solucionado el problema, los que no tenemos conocimientos de programación nos toca copia/pega de la red e investigar lo que a otros les sale durmiendo, menos mal que la red está llena de ejemplos.
Lo que no entiendo es que la librería original no incluya la opción de modificar la velocidad de un servo, aunque tengo entendido que usando la "stepper" si puede hacerse, al menos algo así pude deducir en una página.
Creo que está sobredimensionada la alimentación, Arduino por su arquitectura NO puede manejar potencia, para eso están los shield, aunque en este caso solo es por limpieza de cableado como dijo Dani, yo alimento los Arduinos con un cargador de móvil, más que suficiente, incluso para las pruebas con servos y pap a la vez, la misma alimentación para placa y mecanismo, por lo que esos 12V 4 Amp., si tienes uno de móvil, en los chinos lo puedes encontrar por 3€, puedes utilizarlo para los servos y sigue siendo excesivo.
También puedes utilizar esa fuente como hago yo, para alimentar las dos cosas a la vez sin problemas, los servos no van a 12V, con 5-6V es su valor nominal.
No es que tengas 100 servos, es el número de ellos funcionando a la vez lo que determina el consumo, piensa, ¿cuantos desvíos voy a mover a la vez?, en trazado, si no haces rutas, lo normal son 2 para pasar de uno a otro, si gestionas rutas, los que intervengan en dicha ruta, 3,5,6,8......, pues eso es lo que necesitas de potencia, el tamaño de los servos para desvíos es pequeño, al igual que su consumo, suponiendo 8 desvíos a la vez, seguro que con 1 Amp., sería suficiente, además el movimiento es muy breve y no llegaría a colapsar la fuente en caso de exceso de consumo.
Recuerda que un cable de servo largo en exceso puede provocar movimientos indeseados en los servos, en aeromodelismo se usan unas ferritas para evitar eso, de hecho yo tengo alguno de mis helis con ellas puestas, es un simple anillo en el cual se le dan 2 vueltas al cable y listo, es lo mismo que suelen llevar los alimentadores de portátil en el cable de alimentación.
En lugar de esto y por el coste que tienen puedes colocar el Arduino cerca de los servos y que sea largo el cableado de control, un Nano sale a 3€ y sirve para unos cuantos servos, como siempre, es tu elección.
Mensajes: 44
Temas: 5
Registro en: Apr 2016
Reputación:
0
ahh ¡¡ si se puede modificar la velocidad del servo ,,,pero con la librería VarSpeedServo.h es mejor ,,,, queda el programa mas sencillo y reducido ... no la incluía mi programa pero la descargue de donde dijiste y sin problema ... ya está todo controlado y en los soportes de los servos que van debajo del tablero de la maqueta voy hacerles unos topes mecánicos de seguridad ,,,sin que en su recorrido lleguen a tocar ¡¡¡ por si acaso hay alguna interferencia no se cargue el mecanismo ni me doble las varillas ,,,
las leds van analógicas pasando por el mismo interruptor conmutado de 6 pines ,,,, voy hacer unos semaforos artesanales con leds de 1,8 milimetros ,,, si me sale lo publicare y así explico cositas de moldeo ,,,,gracias SALUDOS
Me alegro, nunca está de más un tope por si las moscas, esperamos ver esos semáforos.
Mensajes: 45
Temas: 1
Registro en: Mar 2014
Reputación:
0
17-06-2016, 15:08
(Última modificación: 17-06-2016, 15:20 por jlaries52.)
Hola
Si te vas a poner a hacer semaforos en nuestra escala, por si no lo tienes, te adjunto un video que esta muy bien detallado, con un paso a paso y con esos leds minusculos que quieres usar.
https://youtube/CwmryGtV5w4
un saludo
Jose Luis
Genial, gracias por el aporte.
Mensajes: 44
Temas: 5
Registro en: Apr 2016
Reputación:
0
ohhhh¡¡¡¡.... que buen tutorial ¡¡¡ pero esas leds que vienen en una cinta ?
y que las pega con pegamento conductor eléctrico?
las que yo tengo llevan pines para soldar ,,,está bien pero yo quiero hacerles la escalera y el cesto ....
|