viernes, 19 de octubre de 2012

Progreso 4 - 7 Oct (Arduino RF links y avance de Servo homemade) Parte 2-3

Cerebro nuevo para el perfduino:

Tocaba hacer una break en este proyecto, así que el 06 fue día de playa con la family ;)


De regreso me encontré con el atmega328-PU con bootloader, un nuevo puente H (L293D) y un kit de LEDs... pero con el cansancio del día, eso quedó para el día siguiente...

El 07 cambie el integrado al perfduino le conecté el cable FTDI, el cual es un Nokia DKU-50 al cual le soldé unos headers machos y , esto lo saque del blog http://txapuzas.blogspot.com/2010/07/cable-de-programacion-para-arduino-ftdi.html  con la diferencia que ese es con el cable DKU-5, que difiere en la cantidad de cables con el que yo use; revise la distribución de pines (pinout) y solo me queda faltando +VCC (5V) el cual no me afecta mucho (debo tenerlo alimentado con fuente externa)


Se deben descargar los drivers del CD que trae

Cargue un par de sketches con el cable, para comprobar el funcionamiento, todo bien..todo bien como el Pibe!

Perfduino conectado


Comunicación RF link entre Arduinos, prueba de librería virtualwire


Ya anteriormente había probado la funcionalidad de la pareja de Emisor/Receptor ahora tocaba ver si podía hacer que los 2 Arduinos se hablaran, con la la librería virtualwire esto es posible.

Acá descargan la libreria  www.open.com.au/mikem/arduino/ (la última es la 1.9, alguna anteriores ya no funcionan con el IDE actual de Arduino) la deben guardar en la carpeta del programa arduino (librerías)

En esta ocasión probé los ejemplos que trae (emisor y receptor) el cual básicamente uno le dice al otro "hello" y esto se puede ver en el PC ya que el receptor va conectado al puerto serial.


Conexión Receptor


Pin Rx por defecto 11, se puede cambiar con un comando de la librería.
 Conexión Transmisor
PinTx por defecto 12, se puede cambiar con un comando de la librería.

 Fotos de los 2 montajes.

Este es lo que se observa en el receptor conectado vía puerto serial al PC:


no se preocupen por que supuestamente iba a salir "hello" es que el código de recepción esta especificado para mostrar en pantalla los caracteres como código HEX (base 16) esto es:

h = 68, e = 65, l = 6C, l = 6C, o = 6F, si quieren que les salga texto cambian esta línea:

 Serial.print(buf[i], HEX);  


por esta:

  Serial.print((char)buf[i]); // ahora se muestra en la pantall (puerto serial) en ASCII   

Servo casero, avances

Ahora tocaba el turno de avanzar en la dirección, ya que no se cuando llega el servo motor nuevo (de china salió el 15 de Sep y pueden ser hasta 40 días hábiles) seguí experimentando con el moto reductor, después de instalarle el potenciometro y avanzar en el tema de controlarle la velocidad (ya que volví a quemar otro integrado) le puse que recorriera 1 seg, ya que estaba leyendo tarde el valor del potenciometro de retorno y se pasaba un poco los finales de carreras que les puse.


Moto reductor, con potenciometro (100K) acoplado al eje de salida



Esquema de montaje, creado en Fritzing



Código:

 //Programa para control de carro v.1.1, dirección  
 //Selwins Maturana Oct 2012  
 int pot1 = A4; //joystick avance  
 int pot2 = A5; //joystick dirección   
 int enable = 3; //Enable IC L293D - PWM control de velocidad  
 int forward = 6; // Señal para ir hacia adelante  
 int backward = 5; // Señal para ir hacia atrás  
 int rigth = 9; // Señal para ir hacia adelante  
 int left = 7; // Señal para ir hacia atrás  
 int LED = 13; //verificación  
 int dir; //valor pot2 (dirección)  
 int sign;// Señal potenciometro moto reductor  
 void setup(){  
      pinMode(enable, OUTPUT);  
     pinMode(forward, OUTPUT);  
      pinMode(backward, OUTPUT);  
     Serial.begin(9600);  
 }  
 void loop(){  
      dir = analogRead(pot2);  
     sign = analogRead(A3);  
     sign = map(sign, 0,1023, 0, 255);  
     Serial.println(sign);  
     delay(1000);   
     if(dir >= 344 && sign > 105) {  
         digitalWrite(rigth, LOW);  
         analogWrite(enable, 70);  
         digitalWrite(left, HIGH);  
         delay(1000);  
         digitalWrite(left, LOW);  
         delay(10);  
           }  
           else if (dir <= 334 && sign < 127){  
              digitalWrite(left, LOW);  
              analogWrite(enable, 80);  
              digitalWrite(rigth, HIGH);  
              delay(1000);  
              digitalWrite(rigth, LOW);  
              delay(10);  
           }  
             else  
             {                 
             digitalWrite(rigth,LOW);  
             digitalWrite(left, LOW);  
             analogWrite(enable, 0);  
             }  
  }  





Ya tengo claro como controlarlo, falta idear las líneas para que retorne al centro una vez se suelte el joystick y ver que puedo hacer para que sea continua la revisión de la señal de retorno.


4 comentarios:

  1. Hola, buenas tardes para usar este cable dku-50 de usb a serial con otras tarjetas de desarrollo es necesario instalar el driver del cable. S.O windows 7.
    Agradezco una respuesta.

    ResponderEliminar
    Respuestas
    1. Hola Cindy,la verdad no tengo experiencia con otras tarjetas de desarrollo, sin embargo yo te recomiendo que lo instales.

      Slds

      Eliminar
  2. hola buenas noches, este proyecto trata de mover el motor mediante un joystick? soy novato disculpa la pregunta, y si es asi que circuito integrado estas utilizando? gracias

    ResponderEliminar

  3. El proyecto es accionar los motores mediante un control remoto (con joysticks) usando para dirigir un carro a distancia, por medio del uso de módulos RF, igual realice algunas pruebas de otros conceptos.

    Slds

    ResponderEliminar