jueves, 15 de agosto de 2013

Arduino 1.0.5 y la libreria ServoTimer2.h

Con la placa arduino ya funcional, y esperando los esc y motores, solo me queda seguir con el cerebro de la bestia, asi que me he puesto a instalar la libreria ServoTimer2.h en arduino. Para sorpresa mia no es compatible con el nuevo entorno arduino 1.0 y he tenido que buscar una version modificada que si lo sea.

La libreria: ServoTimer2



Agradecimientos a codigo



miércoles, 14 de agosto de 2013

Arduino Stand-Alone II (usbtinyisp)

Podria sacar de la pcb Quadcopter_V0 el chip Atmega328 cada vez que quisiera modificar la programacion, pero seria mucho estres mecanico innecesario. Mi placa ni tiene ni tendra usb, asi que le he habilitado a la placa patillaje para ISP.

MISO   1------- 2 VCC          miso pin18,vcc pin7
SCK     3------- 4 MOSI        sck pin19, mosi pin17
RESET 5------- 6 GND          reset pin1, gnd pin8


martes, 13 de agosto de 2013

Arduino Stand-Alone

Como en cada proyecto, la idea de construir algo es, que en el camino pueda aprender todo lo posible. Por eso estoy diseñando una placa arduino especifica para Quadcoper_V0, seria mucho mas rapido y facil comprar algunos de los sistemas, pero prefiero orientar también este proyecto hacia el aprendizaje  .

El circuito en protoboard (el led rgb indicador de corriente es lo mas xD  )


De momento es solo una placa arduino con convertidor de voltaje a 5v, led indicador de alimentacion y led en pin13. Dejo la pcb y diagramas en Eagle, tambien un pdf para imprimir.




Agradecimientos a http://txapuzas.blogspot.mx/


miércoles, 7 de agosto de 2013

MMA7260 y Arduino

Tengo un acelerometro de 3 ejes MMA7260 y  estoy experimentando con el, pero creo que no es lo apropiado para estabilizar a Quadcopter V0. Estoy buscando un Wii motion plus a buen precio para quitarle los giroscopios y usar estos en el proyecto.

El codigo inicial  del acelerometro mma7260 fue sacado de aqui:

Y aqui la primera modificacion
#define DEBUGMODE
#define _360div2xPI     57.29577951
#define _5000div1023    4.887585533
#define MMA7260_RESOLUTION      800     //0.8 v/g -> resolucion de 1.5g -> 800mV/g
#define MMA7260_VOLTAGE         3300.0; //mv voltage al que está conectado el acelerómetro
const float ZOUT1G = 2450;   // mv Voltage en Zout a 1G
const float ZOUT0G = 1650;   // mv Voltage en Zout a 1G
#define MMA7260_ZOUT_1G 850   // mv Voltage en Zout a 1G
const float XOUT1G = 2450;   // mv Voltage en Zout a 1G
const float XOUT0G = 1650;   // mv Voltage en Zout a 1G
const float YOUT1G = 2450;   // mv Voltage en Zout a 1G
const float YOUT0G = 1650;   // mv Voltage en Zout a 1G
#define NADJ  50        // Número de lecturas para calcular el error
// Entradas analógicas donde van los sensores
#define XAXIS_PORT  0
#define YAXIS_PORT  1
#define ZAXIS_PORT  2
// Salida digital del led de la placa
#define LEDPIN_PORT  13
float XError,YError,ZError;
float z,x,y;
float AccelAdjust(int axis)
{
  float acc = 0;
  for (int j=0;j < NADJ;j++)
  {
    float lectura=analogRead(axis);
    acc = acc + (lectura*_5000div1023);
    delay(11); //número primo para evitar ciclos de lectura proporcionales
  }
  return acc/NADJ;
}
void setup()
{
  Serial.begin(9600); // 9600 bps
  pinMode(XAXIS_PORT,INPUT);
  pinMode(YAXIS_PORT,INPUT);
  pinMode(ZAXIS_PORT,INPUT);
  pinMode(LEDPIN_PORT, OUTPUT);
  digitalWrite(LEDPIN_PORT, HIGH);
  XError =  AccelAdjust(XAXIS_PORT);
  YError =  AccelAdjust(YAXIS_PORT);
  ZError =  AccelAdjust(ZAXIS_PORT);
  ZError = ZError - MMA7260_ZOUT_1G;
  digitalWrite(LEDPIN_PORT, LOW);
#ifdef DEBUGMODE
  Serial.println("Ajustado acelerometro eje X");
  Serial.print("Error de X= ");
  Serial.println(XError);
  Serial.println("Ajustado acelerometro eje Y");
  Serial.print("Error de Y= ");
  Serial.println(YError);
  Serial.println("Ajustado acelerometro eje Z");
  Serial.print("Error de Z= ");
  Serial.println(ZError);
#endif
}
void loop()
{
  x=analogRead(XAXIS_PORT);
  y=analogRead(YAXIS_PORT);
  z=analogRead(ZAXIS_PORT);
  unsigned long tt = micros();
  float aax = ((x*_5000div1023)-XError)/MMA7260_RESOLUTION;
  float aay = ((y*_5000div1023)-YError)/MMA7260_RESOLUTION;
  float aaz = ((z*_5000div1023)-ZError)/MMA7260_RESOLUTION;
  float rho = atan(aax/sqrt((aay*aay)+(aaz*aaz)))*_360div2xPI;
  float phi = atan(aay/sqrt((aax*aax)+(aaz*aaz)))*_360div2xPI;
  float theta = atan(sqrt((aay*aay)+(aax*aax))/aaz)*_360div2xPI;
  tt = micros()-tt;
#ifdef DEBUGMODE
  /* Serial.print(" x");
  Serial.print(aax);
  Serial.print(" y ");
  Serial.print(aay);
  Serial.print(" z");        
  Serial.print(aaz);
  Serial.println();
  Serial.println(); */
  Serial.print("X  ");
  Serial.print(rho);
  Serial.print("   Y  ");
  Serial.print(phi);
  Serial.print("   Z  ");
  Serial.print(theta);
  Serial.println();
// Serial.print("mS");
// Serial.print(tt);
#endif
  delay(1000);
}


martes, 6 de agosto de 2013

Quadcopter con arduino

Estas ultimas semanas he estado recopilando información que me ayude en el diseño de un quadcoter, aqui ire compartiendo lo que considere interesante.

Links:



Salu2

jueves, 25 de agosto de 2011

Basubot VI

Buscando la forma de darle alguna forma de sensado de distancia a Basubot, me he encontrado con la forma de usar el A2610 de un ratón óptico que tenia en desuso, me he encontrado con esto . La libreria que se ofrece en el link anterior, permite obtener coordenadas x e y, asi como la velocidad. Enredando un poco he conseguido modificar la libreria para sacar algun valor de imagen, esto promete.




Como dije el motor es muy potente, asi que para controlar la traccion por software he añadido al montaje un sensor hall procedente de un ventilador de pc, de paso me sirve para medir velocidad, aceleracion y distancia recorrida. 


Y así va de momento, programando por no llorar ... que llegue ya el cargador !! xD
Lo que si llego fue el programador TinyUSB, monte un arduino casero como ya dije, y puse el arduino duelaminove sin micro como programador de sketch, alimentación y cable I/O con el pc.

lunes, 22 de agosto de 2011

Basubot V

Ya llego el motor 55A brushless pedido a china, y un par de baterías 3s 3000mah 35C, no me he podido resistir y se lo he montado a Basubot. Solo tengo por aquí un ESC 80A de avión, y ese le he montado mientras termino el hecho por mi.
Me he quedado muy pero que muy corto con el ratio de reducción de la transmisión, hay que tocar el mando de la emisora con mucho cuidado, solo los primeros mm dan una velocidad controlable, lo cual mas que un problema es una alegría, al ir todo esto controlado por arduino y un acelerometro, espero poder programarlo para que controle a velocidades que yo no puedo. Con el tiempo añadiré mas sensores, de momento mejor por partes.
Otro "pequeño percance" mas a la lista, como no tengo cargador lipo, la prueba la hice con una bateria li.ion 12v 1000 mah, fueron 5 minutos alucinantes, pero a sido demasiada demanda de corriente y como bien preví, se ha debido comunicar. En el patio en una cacerola la tengo calentita calentita ...

La idea final es hacer un modulo lo mas compacto posible, así que el arduino es casero. Atmega328p-pu  y acelerometro mma7260. De momento en bread board.


Es un vampiro de energía, pero también  un potentisimo motor. ( si, has visto bien, esta sujeto con epoxy xD )

Y asi va el pequeñin.

Siento no poder poner vídeo, cuando llegue el cargador lipo nuevo subiré.

domingo, 7 de agosto de 2011

Sustitución de celda en lipo 3s

Dos baterías lipo compradas en ebay a un vendedor cuyo mail ya no existe, las dos rotas a la primera carga. No se si el cargador Imax B3 comprado al mismo vendedor rompio las baterias, o las baterias rompieron el cargador, pero el recuento de perdidas es considerable, dos lipo 3s a la basura y un cargador roto. 
También esta el riesgo de incendio si no hubiera estado en casa vigilando como cargan, ya que me parecio asombroso lo rapido que se gastaron, llegando a 3.2v por celda en un par de minutos con una carga de maximo 4A, y las vigile. Y justo, la primera comienza a incharse, la saco al patio en un cubo metalico por si sale ardiendo ( ahi sigue ) y pongo a cargar la otra, el cargador hace chispas ... mido con voltimetro la segunda batería comprada al mismo vendedor y tambien tiene una celda rota. 
Después de intentar mandarle un mail al vendedor pidiendo el reembolso me he puesto a hacer una bateria 3s de las 4 celdas que quedan sanas y a salido esto:





Primero quitar la envoltura de plástico con cuidado de no perforar las celdas.

Con cuidado de no hacer demasiada fuerza mecánica, separamos la celda dañada ( la hinchada en este caso, la celda rota de la otra batería aunque da un voltaje de 1.7v no muestra síntoma visible de deterioro).


La celda mas dañada, separada del conjunto con el soldador y un poco de flux para fundir antes el estaño, de cara a no calentar de mas, y por que no decirlo, con cierto acongoje durante la operación. Si haces esto cuando la desmontes llévala a un centro de recogida de pilas lo antes posible y no la dejes sin supervision en tu casa, y si la dejas sola mejor en una caja ignífuga de metal, si la celda esta hinchada es una tanto % elevado de que salga ardiendo, y esta reacción en particular de las baterías de polímero de litio es muy bestia, si no he leído mal arden a 800ºc.

Una celda en buen estado procedente de la otra batería para sustituir la estropeada.

Comprobamos que la celda no este por debajo de 3v así como su polaridad.

Es muy importante no cambiar los polos, aburrete de mirar con el voltimetro, si te cuelas al unir las celdas chispazo enorme y riesgo de explosión de estas, rotura asegurada de la batería bla bla. Ten cuidado de no hacer corto con los pinchos del voltimetro también.

Soldamos la "nueva" celda al pack 3s procurando calentarlo lo menos posible, mejor con flux.

Medicion correcta del conjunto 3s (después de agotar la batería li-ion de 10 celdas 1200mA la batería  reparada da 12.23v, todo esto moviendo a basubot)

Un pelin de cinta kapton en la zona de soldado.

Y ahora tenemos una batería de la que no me fió por la basura de calidad que tiene de fabrica, por vieja o por lo que sea. Ahora la estoy usando como alimentación del arduino, receptor y servo de basubot. Si alguien tiene una buena batería con una celda rota por un exceso este texto le puede servir, no tiene mucha complicación, pero vemos antes de abrir como es una batería de 3 celdas de polímero de litio sin el embalaje y como están unidas sus celdas. 
No recomiendo usar lipo  de baja calidad como esta para nada, y si se hace no cargar sin supervision, estar muy atento a que no se infle ninguna celda, no provocar cortos, no descargar por debajo de 3.2v y usar cargadores de calidad de bajo C de carga con balanceador de voltaje en celdas, también mejor no descargar a demasiada velocidad. Yo he terminado usándola como alimentación del arduino, receptor y servo, dada la poca descarga demandada  para esto no creo me de mas problemas después de la reparación, siempre se rompe el miembro mas débil de un conjunto, y en mi caso ya se rompieron esas celdas, lo mismo mi lógica hasta funciona xD.

viernes, 5 de agosto de 2011

Basubot IV - parte II xD

Ya se acerca el día de estrellar el robot contra un bordillo por cualquier motivo lógico, pero solo una vez sucedido eso si ...
Haciendo honor a su nombre, la transmisión de Basubot es parte del coche de nitro metano (eje y corona dentada) pero sin el sistema de frenado ni los rodamientos ni demás del motor de combustión. Y de rodamientos he usado un par de alta velocidad montados sobre la parte con imán de un motor de disco duro, de momento solo con algo de epoxy, en la imagen se ve mejor.

jueves, 4 de agosto de 2011

Basubot IV

Ya va tomando forma. Lleno de mugre mires donde mires, pero ya no desmotiva al mirarlo ... dirección funcionando y control de velocidad funcionando. He tenido algún problema con la resistencia de sensado y de momento tengo los pines SENSE del L298 conectados a GND. Como se ve he terminado pegando la protoboad al disipador de basubot.


Uno de los motores 12v reciclados. Como se ve en el video este no esta conectado a transmisión, y aunque pequeña, me tocara ponerle una reductora. De momento para pruebas un trozo de cinta aislante y a mirar solo de reojo por si sale volando xD






Como prefiero reducir la cantidad de PCBs a usar de momento todo va en protoboard, este proyecto realmente es mi forma de aprender sobre motores CC, formas de control, etc. y así aunque algo lió seguir las pistas, es mucho mas rápido que una placa nueva cada metida de pata, y mas económico...