Proyecto RC con modulos 433Mz,

Hola amigos, primeramente me presento:
Soy una persona bastante ambiciosa, y auque e decidico comprarme los Arduinos, despues de 2 años mirando por encima shields, y demás... Y repasar muchos Vídeos,y tutoriales... Aun tengo un montón de dudas que me encantaría poder comentarlas e ir compartiendolas con todos vosotr@s.

Mi primera duda es la siguiente:

Despues de revisar Códigos,sketch librerías Ect... La ya muy conocida biblioteca de Bill porter para poder usar el controlador de ps2 en nuestro arduino - PlayStation 2 Controller Arduino Library v1.0 « The Mind of Bill Porter

Intento destripar la librería de un zip, mas abajo os pongo el link del zip

LInk youtube: :https://www.youtube.com/watch?v=a4Acb5BFPko

No soy capaz de encontrar un código simple para hacer funcionar 1 servo, y un motor,destripando los códigos de ese zip.
No quiero ni usar el Lcd ni microcontroladores integrados ni nada por el estilo lo mas básico posible usando 1 arduino, en su defecto 2 Tx y Rx.

Mi segunda duda es:

Como ya e comentado antes aunque soy novato,le tomo mucho empeño a esto llego a pasar mas de 12h al dia frente al monitor desde que tengo arduino, a si que lo que mas me interesa es poder crear mi propio sketch,desde ps2 arduino con modulo 433mh, asta el receptor que en su defecto solo quiero que sea 1 motor y un servo,
En cuanto tenga todo mas claro ya podre complementar mas cosas al proyecto.

Resumiendo:

Si te bajas el zip mencionado antes hay como 40 archivos, la propia biblioteca del bill potter ya la tengo cargada en arduino a si que ese no es el problema.Básicamente al haber tanto fichero, como unos 20 emisor, y otra veintena o mas en su carpeta receptor.
Entonces no tengo ni idea de por donde meterle mano, ni que fichero pertenece a que, yo creo que todos se harán en 1 solo,pero claro en eso llevo ya varios días y muchísimas horas os lo aseguro.

Estaría estupendo poder realizar esto con todos ustedes, puesto que mi idea es publicar desde 0,este tutorial para que algo tan Básico, y que con no mucho nivel de informática y electrónica, puedan realizarlo, mas adelante complementando el tutorial básico de un rc con mando ps2,Estoy seguro que a mas de uno le sera mas que útil,repito, para gente que se esta iniciando en esto, mi idea es poder explicarles bajo mi propia explicación lo mas buenamente posible para que los Noobs como yo puedan entenderlo sin problemas.

Claro esta que mas adelante el tutorial se puede mejorar, cambiando módulos Xbee,por ejemplo sensores en el receptor, o incluso dejando todo el montaje eléctrico dentro del transmisor, en este caso un mando de playStation con cable.

Mis arduinos son, El uno V3 y el mega 2560,
el Motor Drive Shield L293d
Receptor de bajo coste 433Mz

Link del drtiver motor:http://www.ebay.es/itm/Motor-Drive-Shield-L293D-for-Arduino-Duemilanove-Mega-UNO-UK-SELLER-A-417-/221608736806?pt=UK_Computing_Other_Computing_Networking&hash=item3398e8f826

Link de los Transmisores/receptor: http://www.ebay.es/itm/Emisor-y-Receptor-RF-433Mhz-arduino-compatible-/161500006534?pt=LH_DefaultDomain_186&hash=item259a268886

Espero no haberos aburrido en exceso con este Tosco, y si sabesie buenos tutoriales o cualqueir cosa que me pueda facilital mi comprension con este proyecto, soy todo oidos y ojos.

Muchísimas gracias de antemano, un saludo amig@s.

--------->PUEDEN SEGUIR ESTE POST AQUI <------

motoreto:
Mi primera duda es la siguiente:

Despues de revisar Códigos,sketch librerías Ect... La ya muy conocida biblioteca de Bill porter para poder usar el controlador de ps2 en nuestro arduino - bill porter
Intento destripar la librería de este link, mas abajo os pongo el link del zip

LInk youtube :Youtube

No soy capaz de encontrar un código simple para hacer funcionar 1 servo, y un motor,destripando los códigos de ese zip.
No quiero ni usar el Lcd ni microcontroladores integrados ni nada por el estilo lo mas básico posible usando 1 arduino, en su defecto 2 Tx y Rx.

claro que hay códigos simples
en el medio de la pagina estan estos

PlayStation 2 Controller Arduino Library v1.0
Posted in Arduino Libraries by Bill

Guitar Hero Example Arduino Code

Guitar Hero Example Processing Code (thanks Patrick)

Bueno ahi tienes por donde empezar.
Yo te felicito por como has presentado la idea.
Solo mejora lo siguiente, lee las normas.

Los enlaces deben incorporarse usando los tags correspondientes.
En este caso tag 11 (eslabon de cadena)

Agrego ya que te dio trabajo leer las normas
Este es el tag 11

No he leido por encima nada.
Siempre hago lo que hice contigo, tomo parte de los comentarios e intento responder.

Lo que si ocurrio que pretendi pegar 3 lineas y no me di cuenta que copie demasiado, voy a editarlo y lucirà diferente asi que vuelve a leer la respuesta anterior.

Ya lo he modificado, aca vuelvo a ponerte como se insertan enlaces
url=http://Este es el tag 11
[]tag 11 o Insert a Link

Normas del foro

Y tienes razòn, no soy moderador, pero mira mis respuestas? No leo por encima nada.
Y gasto mi tiempo en ayudar a la gente. Algunos no lo aprecian como es tu caso.
Suerte con tu proyecto!!.

Como voy poco a poco e hecho un sketch que muevo físicamente con 1 analógico suelto 2 serovs en ambas direcciones:

// include the library code:

#include <Servo.h>

const int servo1 = 3;       // Servo 1
const int servo2 = 10;       // Servo 2
const int joyH = 3;        // IZquierda / derecha
const int joyV = 4;        // Alante / atras

int servoVal;           // variable para leer el valor del pin analogico

Servo myservo1;  // 
Servo myservo2;  // Crea un objeto,en este caso un servo




void setup() {

 // Servo  
 myservo1.attach(servo1);  // 
 myservo2.attach(servo2);  // attaches the servo

}


void loop(){

   // Lee el valor izquierda y derecha ( valor de 0 asta 1023 )
   servoVal = analogRead(joyH);          
   servoVal = map(servoVal, 1023, 0, 180, 0);              // Escala entre el 0 y 180

   myservo2.write(servoVal);                              // Establece la posicion deacuerdo al valor   

   // Lee el valor de arriba y abajo ( valor de 0 asta 1023 )
   servoVal = analogRead(joyV);           
   servoVal = map(servoVal, 180, 180, 180, 1800);         // Escala entre ( 70 y 180 )

   myservo1.write(servoVal);                             // Establece la posicion deacuerdo al valor
   delay(15);                                           //  Tiempo de espera

}

como puedo incorporar la funcion de mover 1 motor? y el 3º paso la virtual wire :stuck_out_tongue:

TU respondiste un post de Nov 12, 2012, 12:01 am y YO mer referí a que se deben usar los tags para que se puedan ver los enlaces rapidamente.
Ademas respondes a un post de 2 años de antiguedad y todavia te ofendes.
Eso esta al menos observado en las Normas del FORO. Lo que significa que no se debería retomar un post viejo.

Luego lo demas ya te respondi... pero te lo vuelvo a explicar :
hablas en esa respuesta de que hay 40 archivos... y yo pretendí copiar y pegar los 2 ejemplos que figuran entre los videos de youtube, pero arrastré mas de la cuenta (aunque no me creas, igual me tiene sin cuidado).

Como decías estar atorado y no saber por donde comenzar te muestro por donde hacerlo, simplemente ejecutando alguno de esos dos ejemplos.

Y para terminar y como no has leído aun las normas te comento que: los códigos se deben ingresar usando el tag de codigo

Cuando ingresas a cualquiera FORO el sistema te PIDE que leas las normas del foro, pero seguramente le diste un tilde a la casilla y aceptaste las normas. Entonces desconocerlas es tu responsabilidad. Y que cualquiera te las recuerde no debe molestarte.

Esto es lo que buscas?

#include <PS2X_lib.h>  //for v1.6
#include <Servo.h>
PS2X ps2x; // create PS2 Controller Class
Servo RXservo;
Servo RYservo;
Servo LXservo;
int error = 0;
byte type = 0;
byte vibrate = 0;

void setup(){

 RXservo.attach(6);
 RYservo.attach(7);
 LXservo.attach(5);
 error = ps2x.config_gamepad(13,11,10,12, true, false);   //setup pins and settings:  GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error
 
 type = ps2x.readType();
 }

void loop(){
    
 if(error == 1) //skip loop if no controller found
  return;
  
  ps2x.read_gamepad();          //read controller
      
   RXservo.write(map(ps2x.Analog(PSS_RX), 0, 255, 60, 120));
  RYservo.write(map(ps2x.Analog(PSS_RY), 0, 255, 60, 120));
  LXservo.write(map(ps2x.Analog(PSS_LX), 0, 255, 60, 120)); ;
 delay(50);
    
}

Tengo un problema, cargo un sketch de prueba y cuando conecto el cable usb para darle corriente el motor hace un pitido constante y agudo,alguien sabe que puede ser? XD

enchufo el motor a un cargador de movil y funciona, a si que igual puede ser que no tenga suficiente voltaje para moverlo?

Yeshhhh . . . . (potencia, in fact)

Se ve claramente abajo que entre M+ y GND puedes alimentar con fuente externa.
Si debes unir GND del motor shield con tu Arduino.

Olvida lo que dije del GND porque mira que pasó por mi mente (tienes que comprender que respondo muchos post y no he trabajado con todos los shields obviamente).
Imagine que este shield lo tenias conectado a travez de los conectores azules, entonces claro debes compartir GND para que funcione todo.
Pero ahora veo que tiene los pines para empotrar en el arduino y ahora entiendo tu dilema.
Entonces : Alimenta el motor con los bornes del shield que dicen +M GND Ext POWER de modo que si tu motor requiere 12VDC no habra problema.

El limite de corriente esta establecido para tu placa y es de

4 canales H-puente: Chip L293D cada camino y puente para proporcionar .0.6 A (1.2A pico) actual y con una protección de energía térmica, 4.5V a 36V

Dices "no encontrar mucha información de este driver en castellano", que info buscas?

¿ Puedo soldarle por encima pines hembra, para volver a poder conectar mas por arriba?

¿ o por el contrario, si monto la shield en una proto, que pines son estrictamente necesarios para hacer funcionar el shield?

Comentado en la libreria que tu mismo publicaste dice :
// Uso Pin con el Motorshield
// ---------------------------------------
// Clavijas analógicas: no se utilizan para nada
// A0 ... A5 están todavía disponibles
// Todos ellos también se pueden utilizar como pines digitales.
// También I2C (A4 = SDA y SCL = A5) se puede utilizar.
// Estos pines tienen un área de tablero en el escudo.

// Pines digitales: utilizados: 3,4,5,6,7,8,9,10,11,12
// Pin 9 y 10 sólo se utilizan para los servomotores.
// Ya en uso: 0 (RX) y 1 (TX).

// No utilizados: 2,13
// Pin 2 tiene un agujero de soldar en la tarjeta,
// Fácil de conectar un cable.
// Pin 13 también está conectado a el LED del sistema.
// I2C es posible, pero SPI no es posible ya
// Se utilizan los pines.

PS2 - GAMEPAD
Estuve viendo el tema PS2 y ahora comprendo que gracias a que usas un MEGA aun dispones de pines sino estarías frito.
Me queda claro que quieres ver el tema motor asi que respeto eso

Esta instruccion define el uso de pines

error = ps2x.config_gamepad(13,11,10,12, true, false);   //setup pins and settings:

GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error

Pero lo dejamos para cuando retomes el tema.
Es tu proyecto y tu diriges.

No desesperes, tienes un MEGA y ese es el AS bajo la manga. tienes muchos pines disponibles.
Todo el conector lateral esta a tu disposicon con mas de 40 I/Os. Con PWM y lo que necesites.

Asi que como te dije, resolvamos el tema motor con lo que ya tienes
Por eso cuando uno va a comprar debe hacer una buena investigación pero yo tambien he metido la pata.

No hay nada perdido okay?

usa el Motor Shield L293D como esta. Lo que queda disponible se usa, pero aun tienes mucho por usar.
Asi que concentremos las cosas en los motores.

Dime como vas con eso?

Pues mira te comento tengo este sketch hecho de antes de postear aquí y es el siguiente:

// include the library code:

#include <Servo.h>

const int servo1 = 3;       // Servo 1
const int servo2 = 10;       // Servo 2
const int joyH = 3;        // IZquierda / derecha
const int joyV = 4;        // Alante / atras

int servoVal;           // variable para leer el valor del pin analogico

Servo myservo1;  // 
Servo myservo2;  // Crea un objeto,en este caso un servo




void setup() {

  // Servo  
  myservo1.attach(servo1);  // 
  myservo2.attach(servo2);  // attaches the servo

}


void loop(){

    // Lee el valor izquierda y derecha ( valor de 0 asta 1023 )
    servoVal = analogRead(joyH);          
    servoVal = map(servoVal, 1023, 0, 180, 0);              // Escala entre el 0 y 180

    myservo2.write(servoVal);                              // Establece la posicion deacuerdo al valor   

    // Lee el valor de arriba y abajo ( valor de 0 asta 1023 )
    servoVal = analogRead(joyV);           
    servoVal = map(servoVal, 180, 180, 180, 1800);         // Escala entre ( 70 y 180 )

    myservo1.write(servoVal);                             // Establece la posicion deacuerdo al valor
    delay(15);                                           //  Tiempo de espera
 
}

Muevo 2 servos en ambos sentidos con solo 1 yolstick,

Y claro despyues de encontrar la ibreria del shield y tal, Me quedé un rato pensando en la forma de unir los 2.

Estaba viendo, con el skech de prueba de la libreria AF_
pues haber si pongo el motor de pruebas.

Con este codigo de prueba de la AF_ :

#include <AFMotor.h>
 
AF_DCMotor motor(2, MOTOR12_1KHZ); // create motor #2, 1KHz pwm
 
void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Motor test!");
  
  motor.setSpeed(255);     // set the speed to 200/255
}
 
void loop() {
  Serial.print(" <-- ");
  
  motor.run(FORWARD);      // turn it on going forward
  delay(12000);
 
  Serial.print(" --> ");
  motor.run(BACKWARD);     // the other way
  delay(1000);
  
  Serial.print(" Stop ");
  motor.run(RELEASE);      // stopped
  delay(1000);
}

Claro como soy un txapuzas de momento estaba pegando de el otro scrip,a este y probando,despues de un buen rato desistí y me encontré con el panorama de los pines, jajajajaja a si que estoy en ello.
Adjunto foto de los juguetes:

Las ileras estas de pines que se ven de colores son de cables de ordenador,e unidos todos por debajo asi me facilita mucho almenos GND y VCC.
Los demás jolsticks, los utilizaré mas adelante para futuros proyectos.
De momento Solo utilizo 1. impreso en la "chapuboard" :money_mouth_face:

Motoreto... estas muy perdido y desilucionado.
Tomate un momento y respira...
Porque digo esto porque si lees tus posts veras que vas y vienes entres servos y motores y vuelves y vas, y cambias conesto y con lo otro.

No habiamos identificado tu shield y la libreria que le coresponde?
Hay que hacer funcionar todo...programa y electrónica.

Este ejemplo tiene que funcionar.

#include <AFMotor.h>
 
AF_DCMotor motor(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
 
void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Motor test!");
  
  motor.setSpeed(200);     // set the speed to 200/255
}
 
void loop() {
  Serial.print("tick");
  
  motor.run(FORWARD);      // turn it on going forward
  delay(1000);
 
  Serial.print("tock");
  motor.run(BACKWARD);     // the other way
  delay(1000);
  
  Serial.print("tack");
  motor.run(RELEASE);      // stopped
  delay(1000);
}

Motoreto, que haces? tiras códigos diferentes a cada momento...

que has logrado con los anteriores?
Debes ir contando que ocurre para poder colaborar.

Como es que el ejemplo de Adufruit_Motor no funciona?
Lo has probado?

Ahh bueno entonces los motores ya funcionan? No te habia entendido.
Ok. Luego me dices que código funcionó, pero solo un link no copies otra vez el código. Link al ejemplo y no a una pagina general.

Entonces ahora a ver que ocurre con el joystick PS2.
Lo has probado? Como ya te consultaron. Funciona el joystick con la consola? es un pregunta muy tonta pero como siempre debemos tener un buen punto de partida.

Luego si funciona, que conexionado estas usando? responde con un enlace por favor o imagen de algun sitio

Bien pero dime que cuando mueves el joystick recbes números distintos?

Este es el programa?

#include <AFMotor.h>  // imported AFMotor library

    AF_DCMotor motor(3);   

   
    int SPEED = 0;
    int val = 0;

    void setup() {
       Serial.begin(9600);
   

      motor.run(RELEASE);
      delay(50);

       
      }
    void moveForward() {
      motor.run(FORWARD);
        motor.setSpeed(SPEED);
        Serial.print(" ");
        Serial.print( SPEED);
    }

    void moveBackward() {
      motor.run(BACKWARD);
        motor.setSpeed(SPEED);
        Serial.print(" ");
        Serial.print( SPEED);

    }

    void loop() {
      int val = analogRead(1);
        if (val > 540) {
        // move faster the higher the value from the potentiometer
        SPEED = 2048 - 1024 * val / 512 + 1;
        moveForward();
       
      } else if (val < 480) {
        // move faster the lower the value from the potentiometer
        SPEED = 1024 * val / 512 + 1;
        moveBackward();
       
      } else {
        motor.run(RELEASE);
      }

Bien, te das cuenta que no hay que poner toda la carne al asador.
Primero era probar los motores si quieres.
Luego probar el joystick
Luego unir joystick y motores. Tu estas aca.

Ahora dices que funciona pero que tan bien lo hace?
Yo aislaría el motor y haria un codigo solo para ver los movimientos del joystick.
Y que sean parejos y nada de sensibles...

Tienes que mover y tener un desplazamiento mas o menos de un valor a otro pero con un rango que te permita trabajar con comodidad.

Asi que vamos por ahi te parece.
Copia el código que tienes, elimina todo lo de motores y solo te quedas con el joystick
Y veamos si logramos algo mejorado.

Grande motoreto!!! Te dije empezamos como perro y gato y terminaremos como buenos amigos, asi es esto. Pero ahora me entiendes. Soy un poco el policia del foro, pero bueno es algo que tiene que ver con uno mismo.

Fui profesor y me da gusto actuar ordenadamente. Pero en electronica y microcontroladores se debe ir paso a paso.
Solucionando algo y pasando a lo siguiente. Cuando pones todo junto pasa lo que te ocurre a ti, que no funciona o hay mucho por resolver.

Entonces, vamos con el joystick que es simple..

Como dije, copia el código que hace mover los motores, le cambias el nombre a Joystick y borras o comentas las referencias a motor.

Y solo probaremos y mejoraremos el joystick. Tienes que lograr mover a un lado y otro y tener respuestas del tipo 0-255 o 0-1023 ya sea pase por map o no.

    int SPEED = 0;
    int val = 0;

    void setup() {
       Serial.begin(9600);
    }
    
    void loop() {
      int val = analogRead(1);
      Serial.print(val)    

      }

Como es que solo usas un AD? No es que tienes X,Y y no se si algo mas?

Bueno lo que dejé es un código re básico, mueve a un lado, toma nota, mueve al otro toma nota tambien y en la posición de reposo tambien toma nota.

Postea los valores y vemos como va la cosa.

Ok. Por eso uno de los primeros códigos que te encontré y NO SE si funciona, tenia la lectura de todo.
Podriamos probarl a ver no te parece?
Es uno que decia PS2X y usaba una librería, creo que en la pagina 1, ahi cuando andabamos tirandonos de los pelos jajaja
Este era
La libreria esta justamente en tu página de Bill Porter

#include <PS2X_lib.h>  //for v1.6
#include <Servo.h>
PS2X ps2x; // create PS2 Controller Class
Servo RXservo;
Servo RYservo;
Servo LXservo;
int error = 0;
byte type = 0;
byte vibrate = 0;

void setup(){

 RXservo.attach(6);
 RYservo.attach(7);
 LXservo.attach(5);
 error = ps2x.config_gamepad(13,11,10,12, true, false);   //setup pins and settings:  GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error
 
 type = ps2x.readType();
 }

void loop(){
    
 if(error == 1) //skip loop if no controller found
  return;
  
  ps2x.read_gamepad();          //read controller
      
   RXservo.write(map(ps2x.Analog(PSS_RX), 0, 255, 60, 120));
  RYservo.write(map(ps2x.Analog(PSS_RY), 0, 255, 60, 120));
  LXservo.write(map(ps2x.Analog(PSS_LX), 0, 255, 60, 120)); ;
 delay(50);
    
}