sábado, 26 de enero de 2013

Prueba de funciones carruino - video (Enero 20-23/2013)

Merecido "Descansooo"

De nuevo en mis tan anheladas vacaciones, aunque creo que no me ha rendido tanto, en parte porque estamos haciendo barriga mi esposa y yo, así que me da mucho sueño.

He estado estudiando, mejorando mi lego grúa, adicionando un boom y doble llanta en el eje trasero (me llegó el pedido de www.bricklink.com) adelantando el juego de borderlands con mi hermano +Daniel Maturana y retomando el ejercicio físico.

Proyecto Carruino:


Después de una semana de esperar el nuevo Arduino uno, por fin llegó desde Amazon junto con un kit de cables (jumpers) arme nuevamente el circuito del control, me queda pendiente realizar todo el montaje nuevamente en la caja; hice un para de cambios en la programación, incluyendo 2 velocidades de avance, y cuadré para que en retroceso vaya en la mínima.

En el chasis mejore la sujeción de la placa Arduino a la estructura (tornillos) e instale la antena.

incluyo el vídeo de prueba de las funciones, pendiente la prueba de campo.


jueves, 10 de enero de 2013

It is aliveeee! (Montaje Enero 04-05/13)

Dead line

Después de contar con casi 20 días de vacaciones, el día 03 de Enero me llamó el gerente del contrato, que requerían mis servicios debido a una emergencia presentada; debía estar el día 08 en la mina, así que me apresure a retomar el proyecto Arduino, no iba volver al trabajo sin ver mi carro RC andando!

Comencé probando el mando RF y un motor eléctrico, que me representaba el de avance del carro





ya que el tiempo apremiaba +Jair Navaja Galindo me sugirió montar el servo que me llegó de china, y pues me pareció lógico, aunque eso me generaba otro conflicto (que ya sabía de antemano), ya  que la librería usada para la comunicación vía RF link no se llevaba con la super librería servo de Arduino, debido a que utilizan el mismo timer.

Al final decidí cambiar un problema por otro y accedí a montar el servo en la dirección, cosa que quedo a cargo de Jir, ya que obviamente ahorraría tiempo, pues la realización del servo casero, se complicó por cierto problemas mecánicos con el servo, entre los cuales estaba el que se giró el potencio metro del feedback.





Realice pruebas manuales con el servo y un potenciometro para saber los ángulos de trabajo para la posición central y para los giros a izquierda o derecha, esto lo hice con el ejemplo de la servo library, modificado para que diera la lectura del ángulo por el puerto serial.


Ahora quedaba el chicharrón de la compatibilidad entre las librerías virtualwire y la de servo, en muchos foros recomendaban la servotimer2, y la encontré pero la última actualización era de mucho tiempo anterior a la salida del IDE 1.0 de Arduino así que ya no compilaba, trate de actualizar la librería con tips también sacados de la Web y no tuve éxito.

Al fin cuando ya desesperaba encontré este foro en adafruit donde daban un link para descarga con una librería que si compilaba para los actuales IDE http://forums.adafruit.com/viewtopic.php?f=31&t=25372&sid=56b4d3eb042810ef0939b63274b7f592&start=30; la descargue y compilo el ejemplo sin problemas; Así que realice las modificaciones correspondientes al sketch del receptor (el que controla el carro)

Esta librería tiene un detalle es el que la posición del servo no se especifica en ángulos como en la servo library, si no en milisegundos (PWM) encontré una conversión, pero estaba lejos de ser exacta...al final hice los ajustes manuales.

Nos dieron las 12:00 a.m. realizando las pruebas de campo en la sala de mi casa. todo estaba funcionando, solo restaba cambiar uno de los stick, que era de segunda, el cual se estaba pegando (el que controla el sentido: avanzar o retroceder)

Ley de Murphy


Al día siguiente cuando me preparo para los ajustes y la toma del vídeo  paso lo impensable el perfduino del control sacó la mano, el funcionamiento fue intermitente  probé el atmega en la placa del Uno R3 y funciona, se revisaron las conexiones, se rehicieron puentes y nada..se hizo nuevamente y tampoco. al fin desistí. Intuyo que el cristal paso a mejor vida (ya había tenido una falla similar  en el perfduino 1) además solicite un nuevo Arduino uno R3 para irme seguro.

Quedo debiendo el vídeo y los sketchs, tanto del Receptor como del emisor...escribo estás líneas desde la mina (aprovechando mi descanso).  apenas regrese a casa realizare los ajustes y montare un video de navegación y verificare el alcance de los RF links.

martes, 8 de enero de 2013

Lego Time (28 - 30 Dic 2012)

Terminando el año - Comenzando mis vacaciones (o eso creía):

Al llegar a casa lo segundo que hice después de besar a mis esposa e hijo, fue ver los paquetes que me habían llegado de Amazon e Ebay.


En cuanto a la velocidad, me sorprendió dado lo congestionado de las fechas de navidad, ambos envíos estuvieron el día 24 de Dic en mi casa, el de amazon lo realice el 17 de Dic y el de ebay el 08. Y bueno contento con mi tercer kit Lego technic (9395) y primero de gran tamaño.


El libro es una guía no oficial para armar MOCs (my own creations)  que son creaciones propias, varios tips que pienso usar en próximos proyectos.

Ya que decidí esperar a mi hija hasta el día 28 (estaba de vacaciones por fuera de la ciudad) para armar el set 9395, me puse a matar el tiempo y la ansiedad armando un modelo del kit educativo lego crazyaction contraptions (16 modelos diferentes para armar), que es para adolescentes y trata de armar ciertas maquinas simples, y que compre por tener el set de engranajes y piezas adicionales para complementar lo poco que tengo, y bueno acerté.

Unico modelo que me llamo la atención para armar, un carro a cuerda

Ensamble Grúa 9395:


 El set contiene 953 partes, y me pareció muy buena la relación Partes/Precio, en cuanto a dificultad, no tengo un margen de referencia ya que como dije es mi primer gran set, en fin no me pareció difícil pero siempre se llevó unas 7 horas en ensamblar.

Para agilizar el ensamble mi hija me clasifico las piezas por clase y colores.

fotos del proceso:

















En general me gustó este set, tiene un motor 4 en V cuyos pistones se mueven a la par del eje trasero, se le abren las puertas y el capot, trae winche y plataforma de izaje (la cual se sube o se baja del Platón) en eso es detallado,  trae stickers par decorar el modelo con el nombre de una empresa, los instrumentos de la camioneta y otros más(yo personalemente no se los he puesto aún)

Aparte trae mecanismos (manuales) para la dirección y el sistema de izaje de la plataforma y manejo del winch. Se puede poner totalmente a control remoto (sets de power fuctions adicionales)

No me gustó que no trae doble rueda en el eje trasero como es en los equipos reales, que a pesar que trae timón este no se mueve con la dirección.

El modelo b (alternativo) no es muy vistoso.



Comparación de tamaño, de izquierda a derecha: 9395 tow truck, 8045 mini telehandler y 8065 mini dump truck
 
Aunque es un modelo mini, este es mi favorito de los que tengo.



Queda incluir a mis proyectos la interacción LEGO - ARDUINO









martes, 25 de diciembre de 2012

Planeando mis vacaciones! - pidiendo tiempo

"Engineers like to solve problems. If they are not problems handly available, they will create their own problems"

Scott Adams


Es una triste realidad que al crecer y lograr cierta estabilidad laboral (profesional) nos podemos hacer a las cosas que siempre quisimos y que muchas veces nuestros padres no pudieron darnos, pero empezamos a carecer de tiempo para disfrutar, más cuando son hobbies.

En general mis padres  nos dieron a mis hermanos y a mí (somos tres hermanos) muchas cosas, siempre fui de los niños que más tenían juguetes (una buena parte era en conjunto con mis hermanos) hasta tuvimos super nintendo (no todos los juegos fueron originales) y ultra 64, que era un lujo en la sociedad Colombiana de estrato 3 (acá va de 1 a 5, sin contar los de extrema pobreza, 0) pero al crecer se nos enseño de prioridades, al ser tres e ingresar 2 casi al tiempo a la U, se hicieron recortes en el presupuesto de gustos, y así me perdí de nintendo game cube y del playstation one ....

Hoy llevando una vida más estable y casera, casado con 2 hijos, trabajando a 4 horas de mi hogar, + 12 horas diarias, por 10 diez días continuos, la verdad no es que salga mucho en mis 4 días de descanso en los cuales hay que dejar tiempo para diligencias, mercado y pago de facturas. así que el resto paso en casa..con mi esposa y los niños (un bebe y una adolescente) Pero aparte de eso, siempre tengo algún proyecto...desde lo más sencillo hasta lo más geek friki o tonto...como mi disfraz de Spartan! el cual cree con variadas tecnicas como el papel mache para el casco y uso de fibra de vidrio para el escudo



En general me gustan los hobbies de aventuras e invención, todos ellos costosos (el problema de vivir en un país tercermundista, donde la tecnología importada es carisma, no pregunten por el famoso TLC) y de mucho tiempo de inversión, como el snorkelling, que no hes que sea experto pero me gusta y solía hacerlo con mi hermano  +Daniel Maturana y +Jair Navaja Galindo, la mayoría en el P.N Tayrona o alrededores.

Hace unos 5 años retome mi afición a los video juegos con la adquisición del playstation 2 y un psp3000, más tarde me actualice al playstation 3! (si,ya abandone a nintendo, pero ese es otro tema, por cierto, soy de los que piensan que Zelda Ocarina of time, es mejor juego ever!)

Tambien me llama la atención el paintball, que es como hacer realidad la plomera de los juegos de niño (tuve cierta cantidad de juguetes belicos :S) de hecho me compre la careta..pero casi nunca consigo armar un combo de amigos para jugar :'(

Y bueno como ya saben, desde unos 6 meses estoy otra vez enganchado una vez más con la electrónica  más exactamente con el mundo de Arduino, y para completar el cuadro voy a entrar al mundo del lego technic!!!! algo que había estado en my wish list por lo menos 20 años!

ya hace unos meses me compre estos 2 mini sets, acá LEGO es carisimo! y ahora me encargue un set más grande entre otras cosas .. ^ . ^ ya saben navidad! + mi cumple ;)




Set 9395! Tow truck! 

Mi idea es manejar las invenciones con lego, por medio del Arduino... ya veremos como nos va!


Estas líneas las escribí hoy 25 de Diciembre desde mi oficina, día laboral para mí...un sacrificio que hago por mi Familia, y que de una u otra forma me permite cumplir mis propios sueños..

En fin de acá salgo a vacaciones y tengo mucha cosas que hacer...además de estudiar el máster online que estoy haciendo debo terminar un par de proyectos..

Feliz Navidad, muchas bendiciones, aprovechen el tiempo...


lunes, 24 de diciembre de 2012

+ Stand by (Diciembre 13 - 16)


Desde china...sin gastos de envío...

Sin mayor novedad en el trabajo...solo que por fin llegó lo último de lo pedido a china por ebay... en total pedí unos attiny85, un servo motor y este proto shield para mi Arduino 1

En general se gastaron entre 2 y 2 meses y 1/2 siendo lo ofertado 40 días hábiles + ó - mes y 1/2, me ahorre más el 50% si lo comprara en USA ó Colombia, lo único es el tiempo de entrega pero como no tenía prisa, ta bien...además llegó a tiempo para mis vacaciones!! que empiezan en un par de días!





En cuanto a la calidad, tiene muy buen acabado y presentación, de hecho es algo muy sencillo el circuito, tiene la posibilidad de dejar componentes permanentes y no usar la proto, la cual yo pegué. si me costó un poco hacerla coincidir, doble un poquito los pines para alinearlas con los header hembra del Arduino, creo q es normal en ese tipo de juntas.

Pienso comprar otra para customizarla, además de un moto shield, ya que me gustó el arreglo en sandwich.

Shield montada sobre mi Arduino 1 R3, le soldé un par de botones para funciones y  tiene  puesta en la proto mi  RF Receiver (sin conexiones)

miércoles, 19 de diciembre de 2012

Avance Noviembre 15 - 18 (Creación de PCB método Tóner)

Solucionando problemas de uno....en uno....


Este fincho seguí queriendo alistar cada elemento, aún tengo pendiente mejorar la dirección y montarla en el chasis, pero ya que había quemado un par de integrados en el intento (U$ 10 c/u) el paso siguiente era mejorar este eslabón de mi cadena y en esto llegue a otro punto: el querer pasar del breadboard a algo permanente, he estado utilizando perfboard, los circuitos han sido funcionales pero ha sido muy difícil la implementación de los esquemas por lo limitado de las opciones para conectar, lo que ha acarreado el uso de infinidad de puentes, haciendo del ejercicio un caos.

Seguí así hasta la necesidad de dejar terminado el nuevo circuito puente H, esta vez con el IC L298N que soporta más amperaje, después de revisar esquemas en google, me decidí por este (Este fue creado por mí directamente en Eagle, según los esquemas encontrados)





Fabricación

Hace casi unos diez años cuando me inicie en esto de la electrónica (no ha sido permanente) como hobby (en ese tiempo el curso de CEKIT) aprendí de un amigo a utilizar baquelita, trazando el circuito con marcador permanente y después a retirar el cobre con  Cloruro de Hierro (etching - en inglés). funcional pero muy lejos de la presentación profesional.

Hoy a retomar me encontré con la técnica de la impresión del toner láser, en donde se imprime el esquema realizado en algún software CAD especializado de electrónica, en una impresora o fotocopiadora de las que usan tóner, sobre algún papel fino de revistas o inclusive el envoltorio de las resmas de papel bond, para luego transferirlo por medio de una plancha a nuestra placa de baquelita, para al final hecharle ácido y retirar el material no cubierto con el polvo del tóner y dejando el trasado deseado. (no pienso hacer un tutorial de esto, ya que hay mucho en la red)

Software-Procedimiento


Fritzing me parece de fácil de uso, pero es muy limitado en cuanto a librerías de objetos. y crearlos resulta algo más complicado, por eso busque alternativas y encontré Eagle, de los más usados y cuenta con una gran cantidad de librerías con los elementos más utilizados, así como librerías especializadas como la de sparkfun; al principio me pareció un software no muy intuitivo, pero al no encontrar todos los elementos a usar en Fritzing, sobre todo el L298D, opte por el primero y bueno luego de algunas horas ya fui capaz de realizar mi primer circuito, sin utilizar un tutorial de guía, simplemente cacharreando.

En este caso quería que la placa fuera con conectores de tornillo para facilitar el armado, y no tener problemas por conexiones sueltas.


Al transferir la imagen impresa a la baquelita (con una plancha)

Después de someter la baquelita al ácido

Jair me ayudó con la soldadura, debo decir que el uso de un buen cautín y la práctica ha pulido su técnica...cosa que yo por dedicarme a lo conceptual he dejado rezagada.







Después de corregir un pequeño cruce de líneas (las patas dek IC están bastante pegadas cosa que dificulta un poco el proceso) realice prueba exitosa del circuito.

El acabado es grandioso, quede sorprendido por las letras, por que a pesar de que son bastante delgadas quedaron "nitidas".

Mejorare el diseño para el próximo circuito, evitare los empalmes en lo mínimo.


domingo, 11 de noviembre de 2012

Progreso 01 - 05 Nov ( Mejorando la dirección)


Poco pero rompe coco!


Un fin de semana con puente abordo, la verdad he disminuido el tiempo dedicado a este proyecto, por dedicarle más tiempo a mi familia, como he comentado anteriormente y gracias a que siento que logrado nivelarme en mi curva de aprendizaje, actualmente tengo todos los aspectos de este proyecto cubierto y solo me resta afinarlos antes de ensamblarlo... ya saben..."El todo es la suma de sus partes"


"Halloween" 31/10/2012

Fuerte Sn Felipe de barajas - Cartagena de Indias 03/11/12

Ya que suele gustarme ir por el camino difícil  y más cuando consiste en torturar mis neuronas, me puse a investigar como hacer funcionar la transmisión con aquel servo motor rudimentario, me imagine como hacerlo funcionar, pero no tenía del todo claro como implementarlo en el código... buscando y búscando encontré un par vídeos en youtube de servo casero, y era como me habia imaginado, pero no mostraba el trasfondo (como retroalimentar constantemente la lectura del potenciometro para que no pasarme de los limites) los dejo a continuación (mi meta es llegar a este nivel de precisión..ya es algo personal)





Como soy egocéntrico no  puedo aceptar que algo me quede grande, decidí averiguar la base de esto, después de googlear un montón, encontré el método PID, metodología de control de sistemas de Ingeniería  la cual se aplica a variados sistemas y es básicamente  modular constantemente una variable para para obtener el resultado deseado, de acuerdo a la desviación presentada (error), un ejemplo práctico es cuando estas conduciendo un auto, y quieres mantener una velocidad estable, estas viendo el velocímetro (tu feedback) y de acuerdo a si estas por encima o por debajo, aprietas o sueltas el acelerador, que tanto lo sueltas o aprietas, dependerá de que tan alejado o pasado estés de la velocidad deseada.

PID viene de proporcional, derivativo e integral, son las tres funciones matemáticas aplicadas al error de tu sistema, en términos sencillos:

y(salida) =  error*Kp + ( §error)*Ki + (error - error anterior)*kd

donde:

 error = (valor deseado - valor obtenido)

y Kp, Ki, Kd, son constantes del sistema, estas se pueden obtener definiendo el algoritmo de tu sistema, en donde se relacionan matemáticamente tu entrada con tu salida. este modelado se puede realizar con herramientas informáticas como Labview o Matlab/simulink..lastimosamente no cuento con estas herramientas por el momento, y como no requiero tanta exactitud por el momento trate de hacerlo manualmente, para esto hay unas técnicas de tunning (PID tunning) basadas en el ensayo y error.


Para nuestro caso:


El potenciometro es nuestro feedback (valor de salida del sistema y de entrada para nuestra función), vamos a saber donde esta (ángulo del motor) pero como haces efectivo tu posicionamiento?...pues con el PID aplicado a la velocidad (salida de la función y entrada de nuestro sistema) variaremos la velocidad usando PWM( modulación del ancho del pulso).

Espero haber sido claro en este punto, hay mucha literatura del tema, no siempre tan clara, la mejor esta en ingles.

Después de un par de horas de prueba y error logre unos valores, escribí el sketch y lo probé  me parece que voy por el buen camino, estoy más que complacido con lo logrado, para la aplicación la precisión es suficiente (pero lo mejorare en la próxima sesión de trabajo)

Este es el esquema de conexionado:

utilice un par de botones para indicar el sentido de giro:





El sketch


 int D = 6 ;  
 int I = 5 ;  
 int LED = 13 ;  
 boolean state1 = 0;  
 boolean state2 = 0;  
 int currenPosition;  
 int der = 7;//cable amarillo  
 int izq = 9;//cable negro  
 int enable = 3;  
 float Kp = 0.2;  
 float Ki = 0.05;  
 float Kd = 1.75;  
 int setpointDer = 70;   
 int setpointIzq = 170;  
 int setpointCenter = 120;  
 float speedVal = 70;  
 float error = 0;  
 float lastError = 0;  
 float sumError = 0;  
 void setup(){  
  pinMode(D, INPUT);  
  pinMode(I, INPUT);  
  pinMode(LED, OUTPUT);  
  Serial.begin(9600);  
  Serial.println ("Setup");  
 }  
 void loop(){  
  currenPosition = analogRead(A5);  
  currenPosition = map(currenPosition,0,1023,0,255);  
  state1 = digitalRead(I);  
  state2 = digitalRead(D);  
  //Serial.print ("currenpos ");  
  //Serial.println(currenPosition);  
  if(state1 == HIGH){  
   if (currenPosition > 100){  
     error = currenPosition - setpointDer;  
     speedSetup();  
     analogWrite(enable, speedVal);  
     digitalWrite(izq,HIGH);  
     digitalWrite(der,LOW);  
               }  
    else { analogWrite(enable, 0);}  
   Serial.print("IZQUIERDA");  
   Serial.print ("currenpos ");  
   Serial.print(currenPosition);  
   Serial.print ("speed ");  
   Serial.print(speedVal);  
   Serial.print ("error ");  
   Serial.println(error);  
    }  
  if(state2 == HIGH){  
     if (currenPosition < 230){  
     error = setpointIzq - currenPosition;  
     speedSetup();  
     analogWrite(enable, speedVal);  
     digitalWrite(der,HIGH);  
     digitalWrite(izq,LOW);  
               }  
    else { analogWrite(enable, 0);}  
   Serial.print("DERECHA");  
   Serial.print ("currenpos ");  
   Serial.print(currenPosition);  
   Serial.print ("speed ");  
   Serial.print(speedVal);  
   Serial.print ("error ");  
   Serial.println(error);  
  }  
  if (state1 == 0 && state2 == 0) {  
   if ( currenPosition < setpointCenter ){  
     error = setpointCenter - currenPosition;  
     speedSetup();  
     analogWrite(enable, speedVal);  
     digitalWrite(der,HIGH);  
     digitalWrite(izq,LOW);  
     }  
   else if ( currenPosition > setpointCenter){  
     error = currenPosition - setpointCenter;  
     speedSetup();  
     analogWrite(enable, speedVal);  
     digitalWrite(izq,HIGH);  
     digitalWrite(der,LOW); }  
   digitalWrite(LED, HIGH);  
   Serial.print("DERECHA");  
   Serial.print ("currenpos ");  
   Serial.print(currenPosition);  
   Serial.print ("speed ");  
   Serial.print(speedVal);  
   Serial.print ("error ");  
   Serial.println(error);  
   delay(200);  
  }  
  else   
  {digitalWrite(LED, LOW);}  
  }  
 void speedSetup(){  
  float lastError = 0;  
  float sumError = 0;  
  speedVal = Kp*error;  
  speedVal += Kd*(error - lastError);  
  speedVal += Ki*sumError ;  
  lastError = error ;  
  sumError += error ;  
   if (speedVal > 255){  
    speedVal = 255; }  
   else if(speedVal < 40){  
    speedVal = 0;}   
 }  

Video del funcionamiento:





conclusiones y acciones correctivas:


  • El método PID es una excelente herramienta, algo complicada de realizar de manera manual, pero los resultados son asombrosos, utilizado ampliamente en diferentes proyectos de robotica como los quadcopters (para lograr equidad entre las velocidades de los rotores) péndulo invertido y robots auto-balanceantes. seguiré trabajando hasta mejorar la implementación.
  • una vez probado el funcionamiento del sistema, al querer aplicar el sistema inalámbrico y modificar el sketch, por algún error el motor siguió andando más allá del límite establecido quedando trabado al final del giro del potenciometro, quedando trabado y trayendo como consecuencia aumento del amperaje del motor y daño del integrado L293D. ya que no es la primera vez y me parecen muy susceptibles estos integrados, utilizare el L298n que soporte con 2A (hasta 3A en picos) por canal (4en total, 2 puentes H, osea 2 motores)
  • Me llama la atención el uso de Matlab para sacar las constantes, aunque ví el programa durante el curso de sistemas de control en la U, no fue el fuerte de nuestra institución y debo repasar su uso.  Ya tengo el ubicado el software, falta aprender a conectar el Arduino y estudiar el uso de simulink.
  • El Sketch que realice sigue mejorando ya es capaz de regresar a la posición cero de mi dirección quiero aumentar la precisión u sospecho de un pequeño error en el algoritmo.