Foro de modelismo escala N

Versión completa: ayuda ¡¡¡ para saber que arduino instalar
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2 3
es decir ¡¡¡¡ creo que no memoriza la ultima posición

Jordi

Prueba a incluir esta línea en el setup quizá se solucione, sino, algún compañero con más conocimientos pueda ayudarte.
servo1.write(0);
gracias ¡¡¡¡ seguiré probando ¡¡¡ si doy con la configuración correcta lo pondré

Usuario No Registrado

Hola,

Dentro de la función de "setup" deberías inicializar la posición del servo tal y como sugería Jordi. Depende la librería que uses para manejar servos, la instrucción puede ser un poco diferente. Según el código que he visto en unos posts atrás, sería "servo1.write(20,10);" por ejemplo, pero dándole el ángulo y velocidad inicial que quieras.

Para conectar servos al Arduino yo utilizo normalmente el Sensor Shield v5. Tienes una versión para el Arduino UNO y otra para el Arduino MEGA (que son los que yo utilizaría). El Sensor Shield para el mega lo puedes comprar en ebay.com desde 8$ con portes incluidos:
http://www.ebay.com/itm/Geeetech-Mega-Se...XQtUxTdW7V

Y el el del UNO puedes encontrarlo desde 2.27$, portes también incluidos:
http://www.ebay.com/itm/Arduino-UNO-MEGA...xyrUZRzUBz

Además de permitir conectar los servos directamente en los pines, tiene un par de borneras para la alimentación externa de 5V.

Ten en cuenta que los cables de los servos no es nada aconsejable alargarlos porque son muy sensibles a interferencias. Puede provocar que el servo se mueva solo o no esté nunca quieto en la posición marcada. Así que puestos a elegir mejor poner un par de Arduino UNO cerca de los servos que un MEGA con todo el cableado centralizado.

Saludos,
Dani
muchas gracias ¡¡¡....
lo de los cables largos ya me di cuenta ¡¡¡ incluso como rocen con algo metálico hacen raros los servos ¡¡¡
En fin así lo haré pero primero quiero dar con el programa ¡¡¡
no consigo que guarde posición ¡¡¡¡
el EFFRON es una memoria del arduino ¡¡¡
pero me informado que es limitada y se gasta ¡¡¡¡

Jordi

Prueba a utilizar esta línea de código, depende de la librería que utilices.
servo.attach(pin, min, max)
También la línea que te facilité, en lugar de 0 puedes poner el valor intermedio del rango que utilizas, por si suena la flauta.
probaré ¡¡¡ voy a preguntar en el otro foro N ¡¡¡ ,,, me van a mandar cerca ¡¡¡¡ ya veras ¡¡¡
jajajajjaj
gracias saludos

Usuario No Registrado

(08-06-2016, 20:37)JoseBarrossoGarcia escribió: [ -> ]no consigo que guarde posición ¡¡¡¡
el EFFRON es una memoria del arduino ¡¡¡
pero me informado que es limitada y se gasta ¡¡¡¡

Hola,

Efectivamente la EEPROM es la memoria interna donde puedes guardar variables o valores que te interesen y no se borra al apagar el Arduino. Es verdad que se "gasta", pero necesitarias una vida entera para ello.... así que no te preocupes. Igualmente, no estarás guardando continuamente, verdad? Únicamente guardaras los grados a los que quieres mover cada uno de los servos y sólo cuando cambies estos valores.

También puedes fijar estos valores como constantes en el código. No es lo mas limpio, pero si de lo mas práctico. Si nos enseñas el programa que estás haciendo y nos explicas en concreto qué quieres hacer seguro que podemos ayudarte mas.
pues es para los desvios ¡¡¡ con un solo pulsor por servo ,,, este me va bien en angulo y velocidad pero cuando desconecto y conecto arduino ,,,el servo se posiciona muy lejos del ciclo ,,, y hasta que no pulso la primera vez ,,,no va hasta el ciclo ...


este el programa:

#include <Servo.h>

const int servoPin = 9;
const int buttonPin = 2;

int buttonState = 0;
int directionState = 0;

Servo myservo;

int pos = 0;


void setup() {
myservo.attach(9);
pinMode(buttonPin, INPUT);
}

void loop(){

buttonState = digitalRead(buttonPin);

if (directionState == 0){

if (buttonState == HIGH) {
directionState = 1;


for(pos = 15; pos < 40; pos=pos+1)
{
myservo.write(pos);
delay(35);
}
}

} else if (directionState == 1) {

if (buttonState == HIGH) {
directionState = 0;


for(pos = 40; pos>=15; pos=pos-1)
{
myservo.write(pos);
delay(35);
}
}
}
}
Hola.

Entiendo que quieres desplazar el servo entre 15º y 45º y que cuando conectas la alimentación, este tiende a situarse en 90º.
Cuando recibe la señal de arduino (unos milisegundos después), se dirige a 45 o 15 según tengas el pulsador o interruptor.

Si lo que supongo es así, ¿no podrías mover el servo entre 75º y 105º?
Siguen siendo 30º y ahora al iniciar, está dentro del rango.
(utilizo casi el mismo programa y se mueven entre 85º y 95º sin problema aparente)

Saludos
voy a probar ¡¡¡ gracias ... no había pensado eso ¡¡¡

Jordi

Creo que la linea int pos no deberia estar a 0, un valor dentro de lo que tienes definido quizá sea correcto, si lo pruebas hazlo desconectado del desvio por si acaso.
es ese el problema ¡¡¡ pero sigue pasando ....no hay forma .. el ciclo entre grados queda muy lejos de esa posición inicial ¡¡
si ¡¡¡ le puesto a la linea int un valor medio y se situa ahí .... pero antes ,en cuanto conectas va una posición de unos 30 o 40 grados mas alejado ...
Creo que la solución está en alimentar los servos a parte con un transformador ¡¡¡ conectar primero el arduino y después la alimentación de los servos ¡¡¡¡.... así el arduino ya tiene la posición inicial preparada ¡¡¡

Jordi

Pero no lo alimentabas ya por separado?, daba por sentado que ya alimentabas independiente, Arduino no puede por si solo con mucho consumo, una cosa es un microservo en vacío para probar, otra cosa es con carga y de mayor tamaño.
De todas formas yo seguiría investigando por el placer de conseguirlo por programación.
¡¡¡¡Ah!!!! Recuerda, las masas han de estar unidas.
Lo que yo comentaba... Jordi, en la imagen daba la sensacion de que el servo estaba conectado directamente al Arduino, por eso mi mensaje anterior. Eso causa comportamientos totalmente impredecibles, por supuesto!

Jordi

Precisamente estos días atrás he estado liado con unos proyectos con servos y Arduinos Nano, alimentado directamente para probar funcionamiento, un micro servo.
Al colocar los que van a ir definitivos alimente por separado olvidando conectar las masas y el comportamiento totalmente errático.
Por eso es imperativo el hacerlo así, alimentación separada, masa juntas.
En la foto no lo aprecio bien, pero si parece esa conexión.
Si se puede utilizar la misma alimentación para los dos, suelo utilizar un cargador de móvil directo a servos y placa.

Usuario No Registrado

(09-06-2016, 17:06)JoseBarrossoGarcia escribió: [ -> ]pues es para los desvios ¡¡¡ con un solo pulsor por servo ,,, este me va bien en angulo y velocidad pero cuando desconecto y conecto arduino ,,,el servo se posiciona muy lejos del ciclo ,,, y hasta que no pulso la primera vez ,,,no va hasta el ciclo ...

Hola Jose,

En la función de inicialización veo que no estableces la posición inicial del servo, entonces el comportamiento que describes es normal. Añade la siguiente linea en negrita en la función de setup:

void setup() {
myservo.attach(9); 
myservo.write(15); 
pinMode(buttonPin, INPUT); 
}

Eso debería hacer que el servo se posicionara en la posición de 15 grados al arrancar. Lo que han dicho de juntar las masas es totalmente necesario. Por eso te recomendaba el Sensor Shield v5, alimentando por ahí los servos las masas ya estan juntas automáticamente y todo el cableado te queda super limpio.
Páginas: 1 2 3